# ============================================================================
#
# Copyright (C) 2007-2011 Conceptive Engineering bvba. All rights reserved.
# www.conceptive.be / project-camelot@conceptive.be
#
# This file is part of the Camelot Library.
#
# This file may be used under the terms of the GNU General Public
# License version 2.0 as published by the Free Software Foundation
# and appearing in the file license.txt included in the packaging of
# this file. Please review this information to ensure GNU
# General Public Licensing requirements will be met.
#
# If you are unsure which license is appropriate for your use, please
# visit www.python-camelot.com or contact project-camelot@conceptive.be
#
# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
# For use of this library in commercial applications, please contact
# project-camelot@conceptive.be
#
# ============================================================================
import logging
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import QDialog
from PyQt4.QtGui import QBoxLayout
from PyQt4.QtGui import QVBoxLayout
from PyQt4.QtGui import QPushButton
logger = logging.getLogger('camelot.view.controls.combobox_input_dialog')
[docs]class ComboBoxInputDialog(QDialog):
def __init__(self, autoaccept=False, parent=None):
"""
:param autoaccept: if True, the value of the ComboBox is immediately
accepted after selecting it.
"""
super(ComboBoxInputDialog, self).__init__(parent)
self._autoaccept = autoaccept
layout = QVBoxLayout()
label = QtGui.QLabel()
label.setObjectName( 'label' )
combobox = QtGui.QComboBox()
combobox.setObjectName( 'combobox' )
combobox.activated.connect( self._combobox_activated )
ok_button = QPushButton('OK')
ok_button.setObjectName( 'ok' )
cancel_button = QPushButton('Cancel')
cancel_button.setObjectName( 'cancel' )
ok_button.pressed.connect(self.accept)
cancel_button.pressed.connect(self.reject)
button_layout = QBoxLayout(QBoxLayout.RightToLeft)
button_layout.addWidget(cancel_button)
button_layout.addWidget(ok_button)
layout.addWidget( label )
layout.addWidget( combobox )
layout.addLayout( button_layout )
self.setLayout( layout )
@QtCore.pyqtSlot(int)
def _combobox_activated(self, index):
if self._autoaccept:
self.accept()
print index
[docs] def set_label_text(self, text):
label = self.findChild( QtGui.QWidget, 'label' )
if label != None:
label.setText( text )
[docs] def set_items(self, items):
combobox = self.findChild( QtGui.QWidget, 'combobox' )
if combobox != None:
combobox.addItems(items)
[docs] def count(self):
combobox = self.findChild( QtGui.QWidget, 'combobox' )
if combobox != None:
return combobox.count()
return 0
[docs] def set_data(self, index, data, role):
combobox = self.findChild( QtGui.QWidget, 'combobox' )
if combobox != None:
combobox_model = combobox.model()
model_index = combobox_model.index(index, 0)
combobox_model.setData(model_index, data, role)
[docs] def get_text(self):
combobox = self.findChild( QtGui.QWidget, 'combobox' )
if combobox != None:
return combobox.currentText()
[docs] def set_ok_button_default(self):
ok = self.findChild( QtGui.QWidget, 'ok' )
if ok != None:
ok.setFocus()
[docs] def set_cancel_button_default(self):
cancel = self.findChild( QtGui.QWidget, 'cancel' )
if cancel != None:
cancel.setFocus()
[docs] def set_ok_button_text(self, text):
ok = self.findChild( QtGui.QWidget, 'ok' )
if ok != None:
ok.setText(text)
[docs] def set_cancel_button_text(self, text):
cancel = self.findChild( QtGui.QWidget, 'cancel' )
if cancel != None:
cancel.setText(text)
[docs] def set_choice_by_text(self, text):
combobox = self.findChild( QtGui.QWidget, 'combobox' )
if combobox != None:
index = combobox.findText(text)
self.set_choice_by_index(index)
[docs] def set_choice_by_index(self, index):
combobox = self.findChild( QtGui.QWidget, 'combobox' )
if combobox != None:
combobox.setCurrentIndex(index)
else:
raise Exception('No combobox to set the choice')