def __init__(self, model, path_label="Path", help_link=""): HelpedWidget.__init__(self, path_label, help_link) self.__editing = True self.path_line = QLineEdit() self.addWidget(self.path_line) dialog_button = QToolButton(self) dialog_button.setIcon(resourceIcon("folder")) dialog_button.setIconSize(QSize(16, 16)) self.connect(dialog_button, SIGNAL('clicked()'), self.selectDirectory) self.addWidget(dialog_button) self.valid_color = self.path_line.palette().color( self.path_line.backgroundRole()) self.path_line.setText(os.getcwd()) self.__editing = False assert isinstance(model, PathModelMixin) self.model = model model.observable().attach(PathModelMixin.PATH_CHANGED_EVENT, self.getPathFromModel) self.getPathFromModel() self.connect(self.path_line, SIGNAL('editingFinished()'), self.validatePath) self.connect(self.path_line, SIGNAL('editingFinished()'), self.contentsChanged) self.connect(self.path_line, SIGNAL('textChanged(QString)'), self.validatePath)
def __init__(self, model, label="Checkbox", help_link="", show_label=True, alt_label=None, default_check_state=True): """Construct a checkbox widget for booleans""" HelpedWidget.__init__(self, label, help_link) if show_label: if alt_label is not None: self.check = QCheckBox(alt_label, self) else: self.check = QCheckBox(label,self) else: self.check = QCheckBox(self) self.check.setTristate(False) self.check.setChecked(default_check_state) self.connect(self.check, QtCore.SIGNAL('stateChanged(int)'), self.contentsChanged) if not show_label: layout = QHBoxLayout() layout.addWidget(self.check) layout.setAlignment(Qt.AlignCenter) layout.setContentsMargins(0, 0, 0, 0) self.addLayout(layout) else: self.addWidget(self.check) assert isinstance(model, BooleanModelMixin) self.model = model self.model.observable().attach(BooleanModelMixin.BOOLEAN_VALUE_CHANGED_EVENT, self.modelChanged) self.modelChanged()
def __init__(self, possible_items, label="ListEdit", help_link=""): HelpedWidget.__init__(self, label, help_link) self.__editing = True self.__valid = True self.__possible_items = possible_items self.list_edit_line = AutoCompleteLineEdit(possible_items, self) self.list_edit_line.setMinimumWidth(350) self.addWidget(self.list_edit_line) dialog_button = QToolButton(self) dialog_button.setIcon(resourceIcon("ide/small/add")) dialog_button.setIconSize(QSize(16, 16)) self.connect(dialog_button, SIGNAL('clicked()'), self.addChoice) self.addWidget(dialog_button) self.valid_color = self.list_edit_line.palette().color(self.list_edit_line.backgroundRole()) self.list_edit_line.setText("") self.__editing = False self.connect(self.list_edit_line, SIGNAL('editingFinished()'), self.validateList) self.connect(self.list_edit_line, SIGNAL('textChanged(QString)'), self.validateList) self.validateList()
def __init__(self, model, path_label="Path", help_link=""): HelpedWidget.__init__(self, path_label, help_link) self.__editing = True self.path_line = QLineEdit() self.addWidget(self.path_line) dialog_button = QToolButton(self) dialog_button.setIcon(resourceIcon("folder")) dialog_button.setIconSize(QSize(16, 16)) self.connect(dialog_button, SIGNAL('clicked()'), self.selectDirectory) self.addWidget(dialog_button) self.valid_color = self.path_line.palette().color(self.path_line.backgroundRole()) self.path_line.setText(os.getcwd()) self.__editing = False assert isinstance(model, PathModelMixin) self.model = model model.observable().attach(PathModelMixin.PATH_CHANGED_EVENT, self.getPathFromModel) self.getPathFromModel() self.connect(self.path_line, SIGNAL('editingFinished()'), self.validatePath) self.connect(self.path_line, SIGNAL('editingFinished()'), self.contentsChanged) self.connect(self.path_line, SIGNAL('textChanged(QString)'), self.validatePath)
def __init__(self, possible_items, label="ListEdit", help_link=""): HelpedWidget.__init__(self, label, help_link) self.__editing = True self.__valid = True self.__possible_items = possible_items self.list_edit_line = AutoCompleteLineEdit(possible_items, self) self.list_edit_line.setMinimumWidth(350) self.addWidget(self.list_edit_line) dialog_button = QToolButton(self) dialog_button.setIcon(resourceIcon("ide/small/add")) dialog_button.setIconSize(QSize(16, 16)) self.connect(dialog_button, SIGNAL('clicked()'), self.addChoice) self.addWidget(dialog_button) self.valid_color = self.list_edit_line.palette().color( self.list_edit_line.backgroundRole()) self.list_edit_line.setText("") self.__editing = False self.connect(self.list_edit_line, SIGNAL('editingFinished()'), self.validateList) self.connect(self.list_edit_line, SIGNAL('textChanged(QString)'), self.validateList) self.validateList()
def addShowCaseInfo(self): self.addTab("Case Info") case_widget = HelpedWidget("Select case", "init/select_case_for_info") model = AllCasesModel() self.combo = QComboBox() self.combo.setSizeAdjustPolicy(QComboBox.AdjustToMinimumContentsLength) self.combo.setMinimumContentsLength(20) self.combo.setModel(model) self.combo.currentIndexChanged.connect(self.showInfoForCase) case_widget.addWidget(self.combo) case_widget.addStretch() self.addRow(case_widget) area_widget = HelpedWidget("Case info", "init/selected_case_info") self.text_area = QTextEdit() self.text_area.setReadOnly(True) self.text_area.setMinimumHeight(300) area_widget.addWidget(self.text_area) area_widget.addStretch() self.addRow(area_widget) choice = CaseSelectorModel().getCurrentChoice() self.combo.setCurrentIndex(model.indexOf(choice))
def __init__(self, model, combo_label="Choice", help_link=""): HelpedWidget.__init__(self, combo_label, help_link) assert model is not None and isinstance(model, ChoiceModelMixin) self.model = model model.observable().attach( ChoiceModelMixin.CURRENT_CHOICE_CHANGED_EVENT, self.getCurrentFromModel) model.observable().attach(ChoiceModelMixin.CHOICE_LIST_CHANGED_EVENT, self.updateChoicesFromModel) self.combo = QComboBox() self.combo.setSizeAdjustPolicy(QComboBox.AdjustToContents) self.combo.addItem("Fail!") self.addWidget(self.combo) self.addStretch() self.choice_list = None """ @type: list """ self.connect(self.combo, SIGNAL('currentIndexChanged(int)'), self.selectionChanged) self.updateChoicesFromModel() self.getCurrentFromModel()
def __init__(self, model, spinner_label="Integer Number", help_link=""): HelpedWidget.__init__(self, spinner_label, help_link) assert isinstance(model, SpinnerModelMixin) self.model = model model.observable().attach( SpinnerModelMixin.SPINNER_VALUE_CHANGED_EVENT, self.getValueFromModel) model.observable().attach(SpinnerModelMixin.RANGE_VALUE_CHANGED_EVENT, self.getRangeFromModel) self.spinner = QSpinBox(self) self.addWidget(self.spinner) self.info_label = QLabel() self.info_label.setHidden(True) self.addWidget(self.info_label) self.addStretch() # self.connect(self.spinner, SIGNAL('editingFinished()'), self.updateModel) self.__initialized = False self.connect(self.spinner, SIGNAL('valueChanged(int)'), self.updateModel) self.getRangeFromModel() self.getValueFromModel()
def __init__(self, model, combo_label="Choice", help_link=""): HelpedWidget.__init__(self, combo_label, help_link) assert model is not None and isinstance(model, ChoiceModelMixin) self.model = model model.observable().attach(ChoiceModelMixin.CURRENT_CHOICE_CHANGED_EVENT, self.getCurrentFromModel) model.observable().attach(ChoiceModelMixin.CHOICE_LIST_CHANGED_EVENT, self.updateChoicesFromModel) self.combo = QComboBox() self.combo.setSizeAdjustPolicy(QComboBox.AdjustToContents) self.combo.addItem("Fail!") self.addWidget(self.combo) self.addStretch() self.choice_list = None """ @type: list """ self.connect(self.combo, SIGNAL('currentIndexChanged(int)'), self.selectionChanged) self.updateChoicesFromModel() self.getCurrentFromModel()
def __init__(self, path_label="Option", help_link=""): HelpedWidget.__init__(self, path_label, help_link) self.tab_widget = QtGui.QTabWidget() self.tab_widget.currentChanged.connect(self.validateTabs) self.addWidget(self.tab_widget) self.__widgets = {} """ :type: dict of (int, HelpedWidget) """
def __init__(self, model, label="", help_link=""): HelpedWidget.__init__(self, "", help_link) layout = QVBoxLayout() widget = QWidget() widget.setLayout(layout) self.checkAllButton = QToolButton() self.checkAllButton.setIcon(resourceIcon("checked")) self.checkAllButton.setIconSize(QSize(16, 16)) self.checkAllButton.setToolButtonStyle(Qt.ToolButtonIconOnly) self.checkAllButton.setAutoRaise(True) self.checkAllButton.setToolTip("Select all") self.uncheckAllButton = QToolButton() self.uncheckAllButton.setIcon(resourceIcon("notchecked")) self.uncheckAllButton.setIconSize(QSize(16, 16)) self.uncheckAllButton.setToolButtonStyle(Qt.ToolButtonIconOnly) self.uncheckAllButton.setAutoRaise(True) self.uncheckAllButton.setToolTip("Unselect all") self.list = QListWidget() self.list.setContextMenuPolicy(Qt.CustomContextMenu) self.list.setSelectionMode(QAbstractItemView.ExtendedSelection) self.search_box = SearchBox() check_button_layout = QHBoxLayout() check_button_layout.setMargin(0) check_button_layout.setSpacing(0) check_button_layout.addWidget(QLabel(label)) check_button_layout.addStretch(1) check_button_layout.addWidget(self.checkAllButton) check_button_layout.addWidget(self.uncheckAllButton) layout.addLayout(check_button_layout) layout.addWidget(self.list) layout.addWidget(self.search_box) self.addWidget(widget) self.connect(self.checkAllButton, SIGNAL('clicked()'), self.checkAll) self.connect(self.uncheckAllButton, SIGNAL('clicked()'), self.uncheckAll) self.connect(self.list, SIGNAL('itemChanged(QListWidgetItem*)'), self.itemChanged) self.search_box.filterChanged.connect(self.filterList) # self.connect(self.search_box, SIGNAL('filterChanged(str)'), self.filterList) self.connect(self.list, SIGNAL('customContextMenuRequested(QPoint)'), self.showContextMenu) assert isinstance(model, (SelectableModelMixin, ListModelMixin)) self.model = model self.model.observable().attach(SelectableModelMixin.SELECTION_CHANGED_EVENT, self.modelChanged) self.model.observable().attach(ListModelMixin.LIST_CHANGED_EVENT, self.modelChanged) self.modelChanged()
def __init__(self, label="", help_link=""): HelpedWidget.__init__(self, label, help_link) widget = QWidget() self.layout = QHBoxLayout() self.layout.setMargin(0) widget.setLayout(self.layout) HelpedWidget.addWidget(self, widget)
def __init__(self, model, label="", help_link=""): HelpedWidget.__init__(self, label, help_link) self.models = {} assert isinstance(model, ButtonModelMixin) self.button = QToolButton() self.button.setMinimumWidth(75) self.button.setDefaultAction(self.createAction(model)) self.addWidget(self.button)
def __init__(self, label="", help_link=""): HelpedWidget.__init__(self, label, help_link) self.warning_widget = QLabel("") self.warning_widget.setWordWrap(True) self.warning_widget.setScaledContents(True) self.warning_widget.setAlignment(Qt.AlignHCenter) self.warning_widget.setTextFormat(Qt.RichText) self.warning_widget.setVisible(False) self.addWidget(self.warning_widget) self.warnings = {}
def __init__(self, model, path_label="String", help_link="", defaultString=""): HelpedWidget.__init__(self, path_label, help_link) self.box_string = QtGui.QLineEdit() self.connect(self.box_string, QtCore.SIGNAL('editingFinished()'), self.validateString) self.connect(self.box_string, QtCore.SIGNAL('editingFinished()'), self.stringBoxChanged) self.connect(self.box_string, QtCore.SIGNAL('textChanged(QString)'), self.validateString) self.addWidget(self.box_string) self.box_string.setText(defaultString) assert isinstance(model, BasicModelMixin) self.model = model self.model.observable().attach(BasicModelMixin.VALUE_CHANGED_EVENT, self.modelChanged) self.modelChanged()
def __init__(self, model, label="", help_link=""): HelpedWidget.__init__(self, label, help_link) assert isinstance(model, BasicModelMixin) self.model = model self.model.observable().attach(BasicModelMixin.VALUE_CHANGED_EVENT, self.modelChanged) self.active_label = QLabel() self.addWidget(self.active_label) font = self.active_label.font() font.setWeight(QFont.Bold) self.active_label.setFont(font) self.modelChanged()
def __init__(self, model, label="", help_link="", default_string=""): HelpedWidget.__init__(self, label, help_link) assert isinstance(model, TextModelMixin) self.model = model self.model.observable().attach(TextModelMixin.INITIALIZED_EVENT, self.modelChanged) self.model.observable().attach(TextModelMixin.TEXT_VALUE_CHANGED_EVENT, self.modelChanged) self.active_label = QLabel() self.addWidget(self.active_label) font = self.active_label.font() font.setWeight(QFont.Bold) self.active_label.setFont(font) self.active_label.setText(default_string)
def __init__(self): QWidget.__init__(self) layout = QVBoxLayout() simulation_mode_layout = QHBoxLayout() simulation_mode_layout.addSpacing(10) simulation_mode_model = SimulationModeModel() simulation_mode_model.observable().attach( SimulationModeModel.CURRENT_CHOICE_CHANGED_EVENT, self.toggleSimulationMode ) simulation_mode_combo = ComboChoice(simulation_mode_model, "Simulation mode", "run/simulation_mode") simulation_mode_layout.addWidget(QLabel(simulation_mode_combo.getLabel()), 0, Qt.AlignVCenter) simulation_mode_layout.addWidget(simulation_mode_combo, 0, Qt.AlignVCenter) # simulation_mode_layout.addStretch() simulation_mode_layout.addSpacing(20) self.run_button = QToolButton() self.run_button.setIconSize(QSize(32, 32)) self.run_button.setText("Start Simulation") self.run_button.setIcon(util.resourceIcon("ide/gear_in_play")) self.run_button.clicked.connect(self.runSimulation) self.run_button.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) HelpedWidget.addHelpToWidget(self.run_button, "run/start_simulation") simulation_mode_layout.addWidget(self.run_button) simulation_mode_layout.addStretch(1) layout.addSpacing(5) layout.addLayout(simulation_mode_layout) layout.addSpacing(10) self.simulation_stack = QStackedWidget() self.simulation_stack.setLineWidth(1) self.simulation_stack.setFrameStyle(QFrame.StyledPanel) layout.addWidget(self.simulation_stack) self.simulation_widgets = {} self.addSimulationConfigPanel(EnsembleExperimentPanel()) self.addSimulationConfigPanel(SensitivityStudyPanel()) self.addSimulationConfigPanel(EnsembleSmootherPanel()) self.addSimulationConfigPanel(IteratedEnsembleSmootherPanel()) self.setLayout(layout)
def __init__(self, parent=None, spinnerLabel="Double Number", help="", min=0.0, max=1.0, decimals=2): """Construct a spinner widget for doubles""" HelpedWidget.__init__(self, parent, spinnerLabel, help) self.spinner = QtGui.QDoubleSpinBox(self) self.spinner.setMinimum(min) self.spinner.setMaximum(max) self.spinner.setDecimals(decimals) self.spinner.setSingleStep(0.01) self.addWidget(self.spinner) self.addStretch() self.addHelpButton() #self.connect(self.spinner, QtCore.SIGNAL('valueChanged(int)'), self.updateContent) self.connect(self.spinner, QtCore.SIGNAL('editingFinished()'), self.contentsChanged)
def __init__(self, model, path_label="String", help_link="", defaultString=""): HelpedWidget.__init__(self, path_label, help_link) self.box_string = QtGui.QLineEdit() self.connect(self.box_string, QtCore.SIGNAL('editingFinished()'), self.validateString) self.connect(self.box_string, QtCore.SIGNAL('editingFinished()'), self.stringBoxChanged) self.connect(self.box_string, QtCore.SIGNAL('textChanged(QString)'), self.validateString) self.addWidget(self.box_string) self.valid_color = self.box_string.palette().color(self.box_string.backgroundRole()) self.box_string.setText(defaultString) self.__validator = None assert isinstance(model, BasicModelMixin) self.model = model self.model.observable().attach(BasicModelMixin.VALUE_CHANGED_EVENT, self.modelChanged) self.modelChanged()
def __init__(self): QWidget.__init__(self) layout = QVBoxLayout() simulation_mode_layout = QHBoxLayout() simulation_mode_layout.addSpacing(10) simulation_mode_model = SimulationModeModel() simulation_mode_model.observable().attach(SimulationModeModel.CURRENT_CHOICE_CHANGED_EVENT, self.toggleSimulationMode) simulation_mode_combo = ComboChoice(simulation_mode_model, "Simulation mode", "run/simulation_mode") simulation_mode_layout.addWidget(QLabel(simulation_mode_combo.getLabel()), 0, Qt.AlignVCenter) simulation_mode_layout.addWidget(simulation_mode_combo, 0, Qt.AlignVCenter) # simulation_mode_layout.addStretch() simulation_mode_layout.addSpacing(20) self.run_button = QToolButton() self.run_button.setIconSize(QSize(32, 32)) self.run_button.setText("Start Simulation") self.run_button.setIcon(util.resourceIcon("ide/gear_in_play")) self.run_button.clicked.connect(self.runSimulation) self.run_button.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) HelpedWidget.addHelpToWidget(self.run_button, "run/start_simulation") simulation_mode_layout.addWidget(self.run_button) simulation_mode_layout.addStretch(1) layout.addSpacing(5) layout.addLayout(simulation_mode_layout) layout.addSpacing(10) self.simulation_stack = QStackedWidget() self.simulation_stack.setLineWidth(1) self.simulation_stack.setFrameStyle(QFrame.StyledPanel) layout.addWidget(self.simulation_stack) self.simulation_widgets = {} self.addSimulationConfigPanel(EnsembleExperimentPanel()) self.addSimulationConfigPanel(EnsembleSmootherPanel()) self.addSimulationConfigPanel(MultipleDataAssimilationPanel()) self.addSimulationConfigPanel(IteratedEnsembleSmootherPanel()) self.setLayout(layout)
def __init__(self, model, path_label="Path", help_link=""): HelpedWidget.__init__(self, path_label, help_link) self.path_line = QLineEdit() #self.pathLine.setMinimumWidth(250) self.addWidget(self.path_line) self.validColor = self.path_line.palette().color(self.path_line.backgroundRole()) self.path_line.setText("Not initialized!") self.editing = False self.connect(self.path_line, SIGNAL('editingFinished()'), self.validatePathFormat) self.connect(self.path_line, SIGNAL('editingFinished()'), self.contentsChanged) self.connect(self.path_line, SIGNAL('textChanged(QString)'), self.validatePathFormat) assert isinstance(model, BasicModelMixin) self.model = model self.getPathFromModel() model.observable().attach(BasicModelMixin.VALUE_CHANGED_EVENT, self.getPathFromModel)
def __init__(self, model, path_label="String", help_link="", defaultString="", continuous_update=False): HelpedWidget.__init__(self, path_label, help_link) self.box_string = QtGui.QLineEdit() self.connect(self.box_string, QtCore.SIGNAL("editingFinished()"), self.stringBoxChanged) self.connect(self.box_string, QtCore.SIGNAL("editingFinished()"), self.validateString) if continuous_update: self.connect(self.box_string, QtCore.SIGNAL("textChanged(QString)"), self.stringBoxChanged) self.connect(self.box_string, QtCore.SIGNAL("textChanged(QString)"), self.validateString) self.addWidget(self.box_string) self.valid_color = self.box_string.palette().color(self.box_string.backgroundRole()) self.box_string.setText(defaultString) self.__validator = None assert isinstance(model, BasicModelMixin) self.model = model self.model.observable().attach(BasicModelMixin.VALUE_CHANGED_EVENT, self.modelChanged) self.modelChanged()
def __init__(self, model, spinner_label="Integer Number", help_link=""): HelpedWidget.__init__(self, spinner_label, help_link) assert isinstance(model, SpinnerModelMixin) self.model = model model.observable().attach(SpinnerModelMixin.SPINNER_VALUE_CHANGED_EVENT, self.getValueFromModel) model.observable().attach(SpinnerModelMixin.RANGE_VALUE_CHANGED_EVENT, self.getRangeFromModel) self.spinner = QSpinBox(self) self.addWidget(self.spinner) self.info_label = QLabel() self.info_label.setHidden(True) self.addWidget(self.info_label) self.addStretch() # self.connect(self.spinner, SIGNAL('editingFinished()'), self.updateModel) self.__initialized = False self.connect(self.spinner, SIGNAL("valueChanged(int)"), self.updateModel) self.getRangeFromModel() self.getValueFromModel()
def __init__(self, model, check_label="Do this", help_link="", show_label=True, alt_label=None, default_check_state=True): """Construct a checkbox widget for booleans""" HelpedWidget.__init__(self, check_label, help_link) if show_label: if alt_label != None: self.check = QCheckBox(alt_label, self) else: self.check = QCheckBox(check_label, self) else: self.check = QCheckBox(self) self.check.setTristate(False) self.check.setChecked(default_check_state) self.connect(self.check, QtCore.SIGNAL('stateChanged(int)'), self.contentsChanged) if not show_label: layout = QHBoxLayout() layout.addWidget(self.check) layout.setAlignment(Qt.AlignCenter) layout.setContentsMargins(0, 0, 0, 0) self.addLayout(layout) else: self.addWidget(self.check) assert isinstance(model, BooleanModelMixin) self.model = model self.model.observable().attach( BooleanModelMixin.BOOLEAN_VALUE_CHANGED_EVENT, self.modelChanged) self.modelChanged()
def __init__(self, model, list_label="", help_link=""): HelpedWidget.__init__(self, list_label, help_link) assert isinstance(model, ListModelMixin) self.model = model self.keyword_list = [] self.list = QListWidget(self) self.list.setMinimumHeight(100) self.list.setMaximumHeight(150) self.default_selection_mode = self.list.selectionMode() self.addWidget(self.list) self.addRemoveWidget = AddRemoveWidget(self.addItem, self.removeItem) self.addWidget(self.addRemoveWidget) self.title = "New keyword" self.description = "Enter name of keyword:" self.model.observable().attach(ListModelMixin.LIST_CHANGED_EVENT, self.modelChanged) self.modelChanged()
def __init__(self, model, table_label="", help_link=""): HelpedWidget.__init__(self, table_label, help_link) self.table = QTableWidget(self) self.table.setColumnCount(2) self.setColumnHeaders() self.table.verticalHeader().setHidden(True) self.table.setColumnWidth(0, 150) self.table.horizontalHeader().setStretchLastSection(True) self.table.setMinimumHeight(110) self.table.setSelectionMode(QAbstractItemView.SingleSelection) self.table.setSelectionBehavior(QAbstractItemView.SelectRows) self.addWidget(self.table) self.addWidget(AddRemoveWidget(self.addItem, self.removeItem)) self.connect(self.table, SIGNAL('cellChanged(int,int)'), self.tableChanged) assert isinstance(model, DictionaryModelMixin) self.model = model model.observable().attach(DictionaryModelMixin.DICTIONARY_CHANGED_EVENT, self.modelChanged) self.modelChanged()
def __init__(self, model, path_label="Path", help_link=""): HelpedWidget.__init__(self, path_label, help_link) self.path_line = QLineEdit() #self.pathLine.setMinimumWidth(250) self.addWidget(self.path_line) self.validColor = self.path_line.palette().color( self.path_line.backgroundRole()) self.path_line.setText("Not initialized!") self.editing = False self.connect(self.path_line, SIGNAL('editingFinished()'), self.validatePathFormat) self.connect(self.path_line, SIGNAL('editingFinished()'), self.contentsChanged) self.connect(self.path_line, SIGNAL('textChanged(QString)'), self.validatePathFormat) assert isinstance(model, BasicModelMixin) self.model = model self.getPathFromModel() model.observable().attach(BasicModelMixin.VALUE_CHANGED_EVENT, self.getPathFromModel)
def __init__(self, model, label="", help_link=""): HelpedWidget.__init__(self, "", help_link) layout = QVBoxLayout() widget = QWidget() widget.setLayout(layout) self.checkAllButton = QToolButton() self.checkAllButton.setIcon(resourceIcon("checked")) self.checkAllButton.setIconSize(QSize(16, 16)) self.checkAllButton.setToolButtonStyle(Qt.ToolButtonIconOnly) self.checkAllButton.setAutoRaise(True) self.checkAllButton.setToolTip("Select all") self.uncheckAllButton = QToolButton() self.uncheckAllButton.setIcon(resourceIcon("notchecked")) self.uncheckAllButton.setIconSize(QSize(16, 16)) self.uncheckAllButton.setToolButtonStyle(Qt.ToolButtonIconOnly) self.uncheckAllButton.setAutoRaise(True) self.uncheckAllButton.setToolTip("Unselect all") self.list = QListWidget() self.list.setContextMenuPolicy(Qt.CustomContextMenu) self.list.setSelectionMode(QAbstractItemView.ExtendedSelection) self.search_box = SearchBox() check_button_layout = QHBoxLayout() check_button_layout.setMargin(0) check_button_layout.setSpacing(0) check_button_layout.addWidget(QLabel(label)) check_button_layout.addStretch(1) check_button_layout.addWidget(self.checkAllButton) check_button_layout.addWidget(self.uncheckAllButton) layout.addLayout(check_button_layout) layout.addWidget(self.list) layout.addWidget(self.search_box) self.addWidget(widget) self.connect(self.checkAllButton, SIGNAL('clicked()'), self.checkAll) self.connect(self.uncheckAllButton, SIGNAL('clicked()'), self.uncheckAll) self.connect(self.list, SIGNAL('itemChanged(QListWidgetItem*)'), self.itemChanged) self.search_box.filterChanged.connect(self.filterList) # self.connect(self.search_box, SIGNAL('filterChanged(str)'), self.filterList) self.connect(self.list, SIGNAL('customContextMenuRequested(QPoint)'), self.showContextMenu) assert isinstance(model, (SelectableModelMixin, ListModelMixin)) self.model = model self.model.observable().attach( SelectableModelMixin.SELECTION_CHANGED_EVENT, self.modelChanged) self.model.observable().attach(ListModelMixin.LIST_CHANGED_EVENT, self.modelChanged) self.modelChanged()