def exec_(self, projector, edit=False): """ Override initial method so we can build the tabs. :param projector: Projector instance to build source list from """ self.projector = projector self.layout = QFormLayout() if self.edit else QVBoxLayout() self.layout.setObjectName('source_select_tabs_layout') self.layout.setSpacing(10) self.setLayout(self.layout) self.setMinimumWidth(350) self.button_group = [] if self.edit else QButtonGroup() self.source_text = self.projectordb.get_source_list(projector=projector) keys = list(self.source_text.keys()) keys.sort() key_count = len(keys) button_list = [] if self.edit: for key in keys: item = QLineEdit() item.setObjectName('source_key_%s' % key) source_item = self.projectordb.get_source_by_code(code=key, projector_id=self.projector.db_item.id) if source_item is None: item.setText(PJLINK_DEFAULT_CODES[key]) else: item.old_text = item.text() item.setText(source_item.text) self.layout.addRow(PJLINK_DEFAULT_CODES[key], item) self.button_group.append(item) self.button_box = QDialogButtonBox(QtGui.QDialogButtonBox.Reset | QtGui.QDialogButtonBox.Discard | QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) else: for key in keys: source_text = self.projectordb.get_source_by_code(code=key, projector_id=self.projector.db_item.id) text = self.source_text[key] if source_text is None else source_text.text button = QtGui.QRadioButton(text) button.setChecked(True if key == projector.source else False) self.layout.addWidget(button) self.button_group.addButton(button, int(key)) button_list.append(key) self.button_box = QDialogButtonBox(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) self.button_box.clicked.connect(self.button_clicked) self.layout.addWidget(self.button_box) self.setMinimumHeight(key_count*25) set_button_tooltip(self.button_box) selected = super(SourceSelectSingle, self).exec_() return selected