def create_widget(self): """ Create the QComboBox widget. """ box = QComboBox(self.parent_widget()) box.setInsertPolicy(QComboBox.NoInsert) self.widget = box
class DocPropsView(BaseView): def _setup(self): self._setupUi() self.currencyComboBox = ComboboxModel(model=self.model.currency_list, view=self.currencyComboBoxView) self.firstWeekdayComboBox = ComboboxModel(model=self.model.first_weekday_list, view=self.firstWeekdayComboBoxView) self.aheadMonthsComboBox = ComboboxModel(model=self.model.ahead_months_list, view=self.aheadMonthsComboBoxView) self.yearStartComboBox = ComboboxModel(model=self.model.year_start_month_list, view=self.yearStartComboBoxView) def _setupUi(self): self.mainLayout = QFormLayout(self) sizePolicy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed) self.currencyComboBoxView = QComboBox() self.currencyComboBoxView.setEditable(True) self.currencyComboBoxView.setInsertPolicy(QComboBox.NoInsert) self.currencyComboBoxView.setSizePolicy(sizePolicy) self.mainLayout.addRow(tr("Native Currency:"), self.currencyComboBoxView) self.firstWeekdayComboBoxView = QComboBox(self) self.firstWeekdayComboBoxView.setSizePolicy(sizePolicy) self.mainLayout.addRow(tr("First day of the week:"), self.firstWeekdayComboBoxView) self.aheadMonthsComboBoxView = QComboBox(self) self.aheadMonthsComboBoxView.setSizePolicy(sizePolicy) self.mainLayout.addRow(tr("Ahead months in Running Year:"), self.aheadMonthsComboBoxView) self.yearStartComboBoxView = QComboBox(self) self.yearStartComboBoxView.setSizePolicy(sizePolicy) self.mainLayout.addRow(tr("Year starts in:"), self.yearStartComboBoxView)
def createEditor(self, parent, option, index): combo = QComboBox(parent) keys = Q.Op.keys() keys = map(lambda x: projex.text.joinWords(x, ' ').lower(), keys) combo.addItems(sorted(keys)) combo.setEditable(True) combo.setInsertPolicy(QComboBox.NoInsert) return combo
def createEditor( self, parent, option, index ): combo = QComboBox(parent) keys = Q.Op.keys() keys = map(lambda x: projex.text.joinWords(x, ' ').lower(), keys) combo.addItems(sorted(keys)) combo.setEditable(True) combo.setInsertPolicy(QComboBox.NoInsert) return combo
def createEditor(self, parent, option, index): schema = self.parent().schema() if (not schema): return None colNames = map(lambda x: x.displayName(), schema.columns()) combo = QComboBox(parent) combo.setEditable(True) combo.setInsertPolicy(QComboBox.NoInsert) combo.addItems(colNames) return combo
def createEditor( self, parent, option, index ): schema = self.parent().schema() if ( not schema ): return None colNames = map(lambda x: x.displayName(), schema.columns()) combo = QComboBox(parent) combo.setEditable(True) combo.setInsertPolicy(QComboBox.NoInsert) combo.addItems(colNames) return combo
def createEditor( self, parent, option, index ): tree = self.parent() querywidget = tree.parent() item = tree.itemFromIndex(index) if ( isinstance(item, XQueryItem) and not item.childCount() ): ttype = querywidget.tableType() options = querywidget.factory().columnOptions(ttype) elif ( isinstance(item, XJoinItem) ): options = ['and', 'or'] combo = QComboBox(parent) combo.setEditable(True) combo.setInsertPolicy(QComboBox.NoInsert) combo.addItems(sorted(options)) return combo
def createEditor( self, parent, option, index ): combo = QComboBox(parent) item = self.parent().itemFromIndex(index) columnType = item.columnType() operators = Q.ColumnOps.get(columnType, Q.ColumnOps[None]) # create the keys based on the column type keys = [] for operator in operators: op_name = Q.Op[operator] keys.append(projex.text.joinWords(op_name, ' ').lower()) combo.addItems(sorted(keys)) combo.setEditable(True) combo.setInsertPolicy(QComboBox.NoInsert) return combo
class QuickWatch(QToolBar): def __init__(self, parent, distributedObjects): QToolBar.__init__(self, "QuickWatch") self.config = QuickWatchConfig() distributedObjects.configStore.registerConfigSet(self.config) self.setObjectName("QuickWatch") parent.addToolBar(self) self.watchedit = QComboBox() self.watchedit.setFixedHeight(28) self.watchedit.setInsertPolicy(QComboBox.NoInsert) self.watchedit.setEditable(True) self.watchedit.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self.addWidget(self.watchedit) self.distributedObjects = distributedObjects self.addAction(Icons.watch, "Add to Watch", self.addToWatch) self.addAction(Icons.datagraph, "Add to Data Graph", self.addToDG) self.watchedit.lineEdit().returnPressed.connect(self.returnPressed) def __addCurrentText(self): text = self.watchedit.lineEdit().text() idx = self.watchedit.findText(text) if idx == -1: self.watchedit.addItem(text) self.watchedit.setEditText("") def returnPressed(self): if self.config.addTo.value == "Watch View": self.addToWatch() elif self.config.addTo.value == "Data Graph View": self.addToDG() def addToWatch(self): self.distributedObjects.watchModel.addVar( self.watchedit.lineEdit().text()) self.__addCurrentText() def addToDG(self): self.distributedObjects.datagraphController.addWatch( self.watchedit.lineEdit().text()) self.__addCurrentText()
class QuickWatch(QToolBar): def __init__(self, parent, distributedObjects): QToolBar.__init__(self, "QuickWatch") self.config = QuickWatchConfig() distributedObjects.configStore.registerConfigSet(self.config) self.setObjectName("QuickWatch") parent.addToolBar(self) self.watchedit = QComboBox() self.watchedit.setFixedHeight(28) self.watchedit.setInsertPolicy(QComboBox.NoInsert) self.watchedit.setEditable(True) self.watchedit.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self.addWidget(self.watchedit) self.distributedObjects = distributedObjects self.addAction(Icons.watch, "Add to Watch", self.addToWatch) self.addAction(Icons.datagraph, "Add to Data Graph", self.addToDG) self.watchedit.lineEdit().returnPressed.connect(self.returnPressed) def __addCurrentText(self): text = self.watchedit.lineEdit().text() idx = self.watchedit.findText(text) if idx == -1: self.watchedit.addItem(text) self.watchedit.setEditText("") def returnPressed(self): if self.config.addTo.value == "Watch View": self.addToWatch() elif self.config.addTo.value == "Data Graph View": self.addToDG() def addToWatch(self): self.distributedObjects.watchModel.addVar(self.watchedit.lineEdit().text()) self.__addCurrentText() def addToDG(self): self.distributedObjects.datagraphController.addWatch(self.watchedit.lineEdit().text()) self.__addCurrentText()
def addWidgets(self): layout = QVBoxLayout() self.setLayout(layout) grid = QGridLayout() layout.addLayout(grid) grid.setColumnMinimumWidth(1, 20) grid.setColumnStretch(2, 100) grid.setRowStretch(6, 100) label = QLabel('Group', self) grid.addWidget(label, 0, 0) combobox = QComboBox(self) combobox.setEditable(True) combobox.setInsertPolicy(QComboBox.InsertAtTop) grid.addWidget(combobox, 0, 2) self.combobox = combobox self.fields['group'] = (combobox.currentText, None) label = QLabel('Name', self) grid.addWidget(label, 1, 0) nameedt = QLineEdit(self) nameedt.textChanged.connect(self.fieldUpdated) grid.addWidget(nameedt, 1, 2) self.nameedt = nameedt self.fields['name'] = (nameedt.text, nameedt.setText) label = QLabel('Username', self) grid.addWidget(label, 2, 0) editor = QLineEdit(self) grid.addWidget(editor, 2, 2) self.fields['username'] = (editor.text, editor.setText) label = QLabel('Password', self) grid.addWidget(label, 3, 0) passwdedt = QLineEdit(self) passwdedt.setEchoMode(QLineEdit.Password) passwdedt.textChanged.connect(self.fieldUpdated) grid.addWidget(passwdedt, 3, 2) self.fields['password'] = (passwdedt.text, passwdedt.setText) self.passwdedt = passwdedt config = RandomPasswordConfiguration() icon = QIcon(QPixmap(asset('png', 'eye.png'))) showbtn = QPushButton(icon, '', self) showbtn.setCheckable(True) showbtn.toggled.connect(self.setShowPassword) showbtn.setFixedHeight(passwdedt.sizeHint().height()) grid.addWidget(showbtn, 3, 3) self.showbtn = showbtn passwdbtn = GeneratePasswordButton('Generate', config, self) passwdbtn.setFixedWidth(passwdbtn.sizeHint().width()) grid.addWidget(passwdbtn, 3, 4) passwdbtn.passwordGenerated.connect(passwdedt.setText) label = QLabel('Website') grid.addWidget(label, 5, 0) editor = QLineEdit(self) grid.addWidget(editor, 5, 2, 1, 3) self.fields['url'] = (editor.text, editor.setText) label = QLabel('Comment') grid.addWidget(label, 6, 0) editor = QTextEdit(self) editor.setAcceptRichText(False) grid.addWidget(editor, 6, 2, 1, 3) self.fields['comment'] = (editor.toPlainText, editor.setPlainText) layout.addStretch(100) hbox = QHBoxLayout() layout.addLayout(hbox) cancelbtn = QPushButton('Cancel') cancelbtn.clicked.connect(self.hide) hbox.addWidget(cancelbtn) savebtn = QPushButton('Save') savebtn.setDefault(True) savebtn.setEnabled(False) savebtn.clicked.connect(self.savePassword) hbox.addWidget(savebtn) self.savebtn = savebtn hbox.addStretch(100)
class XTimeDeltaEdit(QFrame): def __init__(self, parent=None): super(XTimeDeltaEdit, self).__init__(parent) # define custom properties self.setStyleSheet(COMBO_STYLE) self._numberSpinner = QSpinBox(self) self._numberSpinner.setRange(0, 100000) self._numberSpinner.setFrame(False) self._numberSpinner.setButtonSymbols(QSpinBox.NoButtons) self._numberSpinner.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self._unitCombo = QComboBox(self) self._unitCombo.setEditable(True) self._unitCombo.setInsertPolicy(QComboBox.NoInsert) self._unitCombo.setFrame(False) self._unitCombo.addItems(['year(s)', 'month(s)', 'week(s)', 'day(s)', 'hour(s)', 'minute(s)', 'second(s)']) self._unitCombo.setCurrentIndex(3) self._unitCombo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self._directionCombo = QComboBox(self) self._directionCombo.addItems(['ago', 'from now']) self._directionCombo.setEditable(True) self._directionCombo.setInsertPolicy(QComboBox.NoInsert) self._directionCombo.setFrame(False) self._directionCombo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) # setup ui self.setFrameShape(QFrame.StyledPanel) self.setFrameShadow(QFrame.Sunken) self.setBackgroundRole(QPalette.Base) self.setAutoFillBackground(True) layout = QHBoxLayout() layout.setContentsMargins(2, 2, 2, 2) layout.setSpacing(0) layout.addWidget(self._numberSpinner) layout.addWidget(self._unitCombo) layout.addWidget(self._directionCombo) self.setLayout(layout) def delta(self): """ Returns a delta based on this widget's information. :return <datetime.timedelta> """ number = self._numberSpinner.value() unit = self._unitCombo.currentText() direction = self._directionCombo.currentText() # use past tense if direction == 'ago': number = -number if unit == 'year(s)': return datetime.timedelta(number * 365) elif unit == 'month(s)': return datetime.timedelta(number * 30) elif unit == 'week(s)': return datetime.timedelta(number * 7) elif unit == 'day(s)': return datetime.timedelta(number) elif unit == 'hour(s)': return datetime.timedelta(0, number * 3600) elif unit == 'minute(s)': return datetime.timedelta(0, number * 60) else: return datetime.timedelta(0, number) def setDelta(self, delta): """ Sets the time delta for this widget to the inputed delta. :param delta | <datetime.timedelta> """ days = int(delta.days) secs = int(delta.total_seconds()) direction = 'from now' if secs < 0: direction = 'ago' if days and days % 365 == 0: number = days / 365 unit = 'year(s)' elif days and days % 30 == 0: number = days / 30 unit = 'month(s)' elif days and days % 7 == 0: number = days / 7 unit = 'week(s)' elif days: number = days unit = 'day(s)' elif secs % 3600 == 0: number = secs / 3600 unit = 'hour(s)' elif secs % 60 == 0: number = secs / 60 unit = 'minute(s)' else: number = secs unit = 'second(s)' self._numberSpinner.setValue(abs(int(number))) self._unitCombo.setCurrentIndex(self._unitCombo.findText(unit)) index = self._directionCombo.findText(direction) self._directionCombo.setCurrentIndex(index)
class QtObjectCombo(QtControl, ProxyObjectCombo): """ A Qt implementation of an Enaml ProxyObjectCombo. """ #: A reference to the widget created by the proxy. widget = Typed(QComboBox) #: A single shot refresh timer for queing combo refreshes. refresh_timer = Typed(ComboRefreshTimer) #: Cyclic notification guard. This a bitfield of multiple guards. _guard = Int(0) #-------------------------------------------------------------------------- # Default Value Handlers #-------------------------------------------------------------------------- def _default_refresh_timer(self): """ Get a refresh timer for the object combo box. """ return ComboRefreshTimer(self) #-------------------------------------------------------------------------- # Initialization API #-------------------------------------------------------------------------- def create_widget(self): """ Create the QComboBox widget. """ self.widget = QComboBox(self.parent_widget()) self.widget.setInsertPolicy(QComboBox.NoInsert) def init_widget(self): """ Create and initialize the underlying widget. """ super(QtObjectCombo, self).init_widget() self.refresh_items() self.widget.currentIndexChanged.connect(self.on_index_changed) #-------------------------------------------------------------------------- # Signal Handlers #-------------------------------------------------------------------------- def on_index_changed(self, index): """ The signal handler for the index changed signal. """ if not self._guard & SELECTED_GUARD: self._guard |= SELECTED_GUARD try: item = self.declaration.items[index] self.declaration.selected = item finally: self._guard &= ~SELECTED_GUARD #-------------------------------------------------------------------------- # Public API #-------------------------------------------------------------------------- def refresh_items(self): """ Refresh the items in the combo box. """ d = self.declaration selected = d.selected to_string = d.to_string to_icon = d.to_icon widget = self.widget self._guard |= SELECTED_GUARD try: widget.clear() target_index = -1 for index, item in enumerate(d.items): text = to_string(item) icon = to_icon(item) if icon is None: qicon = None else: qicon = get_cached_qicon(icon) if qicon is None: widget.addItem(text) else: widget.addItem(qicon, text) if item is selected: target_index = index widget.setCurrentIndex(target_index) finally: self._guard &= ~SELECTED_GUARD #-------------------------------------------------------------------------- # ProxyObjectCombo API #-------------------------------------------------------------------------- def set_selected(self, selected): """ Set the selected object in the combo box. """ if not self._guard & SELECTED_GUARD: self._guard |= SELECTED_GUARD try: d = self.declaration try: index = d.items.index(selected) except ValueError: index = -1 self.widget.setCurrentIndex(index) finally: self._guard &= ~SELECTED_GUARD def set_editable(self, editable): """ Set whether the combo box is editable. """ # The update is needed to avoid artificats (at least on Windows) widget = self.widget widget.setEditable(editable) widget.update() def request_items_refresh(self): """ Request a refresh of the combo box items. """ self.refresh_timer.start()
class XTimeDeltaEdit(QFrame): def __init__(self, parent=None): super(XTimeDeltaEdit, self).__init__(parent) # define custom properties self.setStyleSheet(COMBO_STYLE) self._numberSpinner = QSpinBox(self) self._numberSpinner.setRange(0, 100000) self._numberSpinner.setFrame(False) self._numberSpinner.setButtonSymbols(QSpinBox.NoButtons) self._numberSpinner.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self._unitCombo = QComboBox(self) self._unitCombo.setEditable(True) self._unitCombo.setInsertPolicy(QComboBox.NoInsert) self._unitCombo.setFrame(False) self._unitCombo.addItems([ 'year(s)', 'month(s)', 'week(s)', 'day(s)', 'hour(s)', 'minute(s)', 'second(s)' ]) self._unitCombo.setCurrentIndex(3) self._unitCombo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self._directionCombo = QComboBox(self) self._directionCombo.addItems(['ago', 'from now']) self._directionCombo.setEditable(True) self._directionCombo.setInsertPolicy(QComboBox.NoInsert) self._directionCombo.setFrame(False) self._directionCombo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) # setup ui self.setFrameShape(QFrame.StyledPanel) self.setFrameShadow(QFrame.Sunken) self.setBackgroundRole(QPalette.Base) self.setAutoFillBackground(True) layout = QHBoxLayout() layout.setContentsMargins(2, 2, 2, 2) layout.setSpacing(0) layout.addWidget(self._numberSpinner) layout.addWidget(self._unitCombo) layout.addWidget(self._directionCombo) self.setLayout(layout) def delta(self): """ Returns a delta based on this widget's information. :return <datetime.timedelta> """ number = self._numberSpinner.value() unit = self._unitCombo.currentText() direction = self._directionCombo.currentText() # use past tense if direction == 'ago': number = -number if unit == 'year(s)': return datetime.timedelta(number * 365) elif unit == 'month(s)': return datetime.timedelta(number * 30) elif unit == 'week(s)': return datetime.timedelta(number * 7) elif unit == 'day(s)': return datetime.timedelta(number) elif unit == 'hour(s)': return datetime.timedelta(0, number * 3600) elif unit == 'minute(s)': return datetime.timedelta(0, number * 60) else: return datetime.timedelta(0, number) def setDelta(self, delta): """ Sets the time delta for this widget to the inputed delta. :param delta | <datetime.timedelta> """ days = int(delta.days) secs = int(delta.total_seconds()) direction = 'from now' if secs < 0: direction = 'ago' if days and days % 365 == 0: number = days / 365 unit = 'year(s)' elif days and days % 30 == 0: number = days / 30 unit = 'month(s)' elif days and days % 7 == 0: number = days / 7 unit = 'week(s)' elif days: number = days unit = 'day(s)' elif secs % 3600 == 0: number = secs / 3600 unit = 'hour(s)' elif secs % 60 == 0: number = secs / 60 unit = 'minute(s)' else: number = secs unit = 'second(s)' self._numberSpinner.setValue(abs(int(number))) self._unitCombo.setCurrentIndex(self._unitCombo.findText(unit)) index = self._directionCombo.findText(direction) self._directionCombo.setCurrentIndex(index)
class AccountPanel(Panel): FIELDS = [ ('nameEdit', 'name'), ('accountNumberEdit', 'account_number'), ('notesEdit', 'notes'), ] def __init__(self, mainwindow): Panel.__init__(self, mainwindow) self._setupUi() self.model = mainwindow.model.account_panel self.model.view = self self.typeComboBox = ComboboxModel(model=self.model.type_list, view=self.typeComboBoxView) self.currencyComboBox = ComboboxModel(model=self.model.currency_list, view=self.currencyComboBoxView) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) def _setupUi(self): self.setWindowTitle(tr("Account Info")) self.resize(274, 121) self.setModal(True) self.verticalLayout = QVBoxLayout(self) self.formLayout = QFormLayout() self.formLayout.setFieldGrowthPolicy(QFormLayout.ExpandingFieldsGrow) self.label = QLabel(tr("Name")) self.formLayout.setWidget(0, QFormLayout.LabelRole, self.label) self.nameEdit = QLineEdit() self.formLayout.setWidget(0, QFormLayout.FieldRole, self.nameEdit) self.label_2 = QLabel(tr("Type")) self.formLayout.setWidget(1, QFormLayout.LabelRole, self.label_2) self.typeComboBoxView = QComboBox() self.formLayout.setWidget(1, QFormLayout.FieldRole, self.typeComboBoxView) self.label_3 = QLabel(tr("Currency")) self.formLayout.setWidget(2, QFormLayout.LabelRole, self.label_3) self.currencyComboBoxView = QComboBox() sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.currencyComboBoxView.sizePolicy().hasHeightForWidth()) self.currencyComboBoxView.setSizePolicy(sizePolicy) self.currencyComboBoxView.setEditable(True) self.currencyComboBoxView.setInsertPolicy(QComboBox.NoInsert) self.formLayout.setWidget(2, QFormLayout.FieldRole, self.currencyComboBoxView) self.accountNumberLabel = QLabel(tr("Account #")) self.formLayout.setWidget(3, QFormLayout.LabelRole, self.accountNumberLabel) self.accountNumberEdit = QLineEdit() self.accountNumberEdit.setMaximumSize(QSize(80, 16777215)) self.formLayout.setWidget(3, QFormLayout.FieldRole, self.accountNumberEdit) self.notesEdit = QPlainTextEdit() self.formLayout.setWidget(4, QFormLayout.FieldRole, self.notesEdit) self.label1 = QLabel(tr("Notes:")) self.formLayout.setWidget(4, QFormLayout.LabelRole, self.label1) self.verticalLayout.addLayout(self.formLayout) self.buttonBox = QDialogButtonBox() self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Save) self.verticalLayout.addWidget(self.buttonBox) self.label.setBuddy(self.nameEdit) self.label_2.setBuddy(self.typeComboBoxView) self.label_3.setBuddy(self.currencyComboBoxView) def _loadFields(self): Panel._loadFields(self) self.currencyComboBoxView.setEnabled(self.model.can_change_currency)
class GotoLineWidget( QWidget ): " goto bar widget " maxHistory = 12 def __init__( self, editorsManager, parent = None ): QWidget.__init__( self, parent ) self.editorsManager = editorsManager self.__gotoHistory = [] # Common graphics items closeButton = QToolButton( self ) closeButton.setToolTip( "Click to close the dialog (ESC)" ) closeButton.setIcon( PixmapCache().getIcon( "close.png" ) ) closeButton.clicked.connect( self.hide ) lineLabel = QLabel( self ) lineLabel.setText( "Goto line:" ) self.linenumberEdit = QComboBox( self ) self.linenumberEdit.setEditable( True ) self.linenumberEdit.setInsertPolicy( QComboBox.InsertAtTop ) self.linenumberEdit.setAutoCompletion( False ) self.linenumberEdit.setDuplicatesEnabled( False ) sizePolicy = QSizePolicy( QSizePolicy.Expanding, QSizePolicy.Fixed ) sizePolicy.setHorizontalStretch( 0 ) sizePolicy.setVerticalStretch( 0 ) sizePolicy.setHeightForWidth( self.linenumberEdit.sizePolicy().hasHeightForWidth() ) self.linenumberEdit.setSizePolicy( sizePolicy ) self.validator = QIntValidator( 1, 100000, self ) self.linenumberEdit.setValidator( self.validator ) self.linenumberEdit.editTextChanged.connect( self.__onEditTextChanged ) self.linenumberEdit.lineEdit().returnPressed.connect( self.__onEnter ) self.goButton = QToolButton( self ) self.goButton.setToolTip( "Click to jump to the line (ENTER)" ) self.goButton.setIcon( PixmapCache().getIcon( "gotoline.png" ) ) self.goButton.setFocusPolicy( Qt.NoFocus ) self.goButton.setEnabled( False ) self.goButton.clicked.connect( self.__onGo ) spacer = QWidget() spacer.setFixedWidth( 1 ) horizontalLayout = QHBoxLayout( self ) horizontalLayout.setMargin( 0 ) horizontalLayout.addWidget( closeButton ) horizontalLayout.addWidget( lineLabel ) horizontalLayout.addWidget( self.linenumberEdit ) horizontalLayout.addWidget( self.goButton ) horizontalLayout.addWidget( spacer ) return def keyPressEvent( self, event ): """ Handles the key press events """ if event.key() == Qt.Key_Escape: activeWindow = self.editorsManager.currentWidget() if activeWindow: activeWindow.setFocus() event.accept() self.hide() return def __updateHistory( self, txt ): " Updates the combo history " while txt in self.__gotoHistory: self.__gotoHistory.remove( txt ) self.__gotoHistory = [ txt ] + self.__gotoHistory self.__gotoHistory = self.__gotoHistory[ : GotoLineWidget.maxHistory ] self.linenumberEdit.clear() self.linenumberEdit.addItems( self.__gotoHistory ) return def show( self ): " Overriden show() method " self.linenumberEdit.lineEdit().selectAll() QWidget.show( self ) self.activateWindow() return def setFocus( self ): " Overridded setFocus " self.linenumberEdit.setFocus() return def updateStatus( self ): " Triggered when the current tab is changed " currentWidget = self.editorsManager.currentWidget() status = currentWidget.getType() in \ [ MainWindowTabWidgetBase.PlainTextEditor, MainWindowTabWidgetBase.VCSAnnotateViewer ] self.linenumberEdit.setEnabled( status ) self.goButton.setEnabled( status and self.linenumberEdit.currentText() != "" ) return def __onGo( self ): " Triggered when the 'Go!' button is clicked " if self.linenumberEdit.currentText() == "": return currentWidget = self.editorsManager.currentWidget() if not currentWidget.getType() in \ [ MainWindowTabWidgetBase.PlainTextEditor, MainWindowTabWidgetBase.VCSAnnotateViewer ]: return txt = self.linenumberEdit.currentText() self.__updateHistory( txt ) editor = currentWidget.getEditor() line = min( int( txt ), editor.lines() ) - 1 editor.setCursorPosition( line, 0 ) editor.ensureLineVisible( line ) currentWidget.setFocus() return def __onEditTextChanged( self, text ): " Triggered when the text has been changed " self.goButton.setEnabled( text != "" ) return def __onEnter( self ): " Triggered when 'Enter' or 'Return' is clicked " self.__onGo() return def selectAll( self ): " Selects the line edit content " self.linenumberEdit.lineEdit().selectAll() return
class GUI(QWidget): def __init__(self, parent=None): global f f = open(filename, "a") f.write("Widget init.\n") f.close() QWidget.__init__(self, parent, Qt.WindowStaysOnTopHint) self.__setup_gui__(self) self._flag = False self._change = False f = open(filename, "a") f.write("End of widget init.\n") f.close() def closeEvent(self, event): reply = QMessageBox.question(self, "Confirm", "Are you sure You want to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: event.accept() else: event.ignore() def __setup_gui__(self, Dialog): global f f = open(filename, "a") f.write("Setup of gui.\n") f.close() Dialog.setObjectName("Dialog") Dialog.resize(270, 145) self.setWindowTitle("Map Layer") screen = QDesktopWidget().screenGeometry() size = self.geometry() self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2) self.Render = QPushButton("Render", Dialog) self.Render.setGeometry(QRect(85, 90, 100, 25)) self.Render.setObjectName("Render") self.comboBox = QComboBox(Dialog) self.comboBox.setGeometry(QRect(100, 34, 115, 18)) self.comboBox.setEditable(False) self.comboBox.setMaxVisibleItems(11) self.comboBox.setInsertPolicy(QComboBox.InsertAtBottom) self.comboBox.setObjectName("comboBox") self.comboBox.addItems([ "Google Roadmap", "Google Terrain", "Google Satellite", "Google Hybrid", "Yahoo Roadmap", "Yahoo Satellite", "Yahoo Hybrid", "Bing Roadmap", "Bing Satellite", "Bing Hybrid", "Open Street Maps" ]) self.comboBox.setCurrentIndex(10) self.label1 = QLabel("Source:", Dialog) self.label1.setGeometry(QRect(55, 35, 35, 16)) self.label1.setObjectName("label1") self.slider = QSlider(Dialog) self.slider.setOrientation(Qt.Horizontal) self.slider.setMinimum(1) self.slider.setMaximum(12) self.slider.setValue(4) self.slider.setGeometry(QRect(110, 61, 114, 16)) self.label2 = QLabel("Quality: " + str(self.slider.value()), Dialog) self.label2.setGeometry(QRect(47, 61, 54, 16)) self.label2.setObjectName("label2") self.doubleSpinBox = QDoubleSpinBox(Dialog) self.doubleSpinBox.setGeometry(QRect(160, 5, 40, 20)) self.doubleSpinBox.setDecimals(0) self.doubleSpinBox.setObjectName("doubleSpinBox") self.doubleSpinBox.setMinimum(10.0) self.doubleSpinBox.setValue(20.0) self.doubleSpinBox.setEnabled(False) self.checkBox = QCheckBox("Auto refresh", Dialog) self.checkBox.setGeometry(QRect(50, 6, 100, 20)) self.checkBox.setLayoutDirection(Qt.RightToLeft) self.checkBox.setObjectName("checkBox") self.progressBar = QProgressBar(Dialog) self.progressBar.setGeometry(QRect(5, 130, 260, 10)) self.progressBar.setProperty("value", 0) self.progressBar.setTextVisible(False) self.progressBar.setObjectName("progressBar") self.progressBar.setVisible(False) QObject.connect(self.Render, SIGNAL("clicked()"), Dialog.__repaint__) QMetaObject.connectSlotsByName(Dialog) QObject.connect(self.slider, SIGNAL("valueChanged(int)"), self.__update_slider_label__) QObject.connect(self.comboBox, SIGNAL("activated(int)"), self.__combobox_changed__) self.timerRepaint = QTimer() QObject.connect(self.checkBox, SIGNAL("clicked()"), self.__activate_timer__) QObject.connect(self.timerRepaint, SIGNAL("timeout()"), self.__on_timer__) f = open(filename, "a") f.write("End of setup of gui.\n") f.close() def __combobox_changed__(self): self._change = True def __activate_timer__(self): self.doubleSpinBox.setEnabled(self.checkBox.isChecked()) if self.checkBox.isChecked(): self.timerRepaint.start(self.doubleSpinBox.value() * 1000) self.Render.setEnabled(False) if _progress == 0: self.__repaint__() else: self.timerRepaint.stop() self.Render.setEnabled(True) def __get_net_size__(self): global f f = open(filename, "a") f.write("Geting net size...\n") f.close() if not os.path.exists(Paths["Screenshot"]): Visum.Graphic.Screenshot(Paths["Screenshot"]) size = Image.open(Paths["Screenshot"]).size f = open(filename, "a") f.write("Read net size:" + str(size) + ".\n") f.close() return size def __on_timer__(self): global _paramGlobal self._flag = False Visum.Graphic.MaximizeNetWindow() param = _paramGlobal _paramGlobal = Visum.Graphic.GetWindow() shift = abs((param[0] - _paramGlobal[0]) / (param[2] - param[0])) zoom = abs((param[2] - param[0]) / (_paramGlobal[2] - _paramGlobal[0]) - 1) print _windowSizeGlobal if _windowSizeGlobal[2:4] != Visum.Graphic.GetMainWindowPos()[2:4]: self.__get_net_size__() self._flag = True elif shift > 0.4 or zoom > 0.2: self._flag = True if self._flag or self._change and _progress == 0: self.__repaint__() self._change = False def __update_slider_label__(self, value): self.label2.setText("Quality: " + str(value)) self._change = True def __update_progress_bar__(self): if _progress != 0: self.progressBar.setVisible(True) self.progressBar.setValue(_progress) else: self.progressBar.setVisible(False) def __rebuild_paths__(self): global Paths Paths["Images"] = [] list = os.listdir(Paths["ScriptFolder"]) imageList = [] for i in range(len(list)): if list[i][-3:] == "png": imageList.append(list[i]) for i in range(len(imageList)): try: Visum.Graphic.Backgrounds.ItemByKey(imageList[i]) Paths["Images"].append(Paths["ScriptFolder"] + "\\" + imageList[i]) except: pass def __repaint__(self): global _progress, f if len(Visum.Graphic.Backgrounds.GetAll) != len(Paths["Images"]): self.__rebuild_paths__() if _progress == 0: f = open(filename, "a") f.write("Doing repaint...\n") f.close() QWebSettings.clearMemoryCaches() timer = QTimer() timer.start(100) QObject.connect(timer, SIGNAL("timeout()"), self.__update_progress_bar__) Main(self.comboBox.currentIndex(), Visum.Graphic.GetWindow(), self.slider.value() / 4.0, self.__get_net_size__()) Visum.Graphic.Draw() self.__update_progress_bar__() _progress = 0 QTimer().singleShot(1500, self.__update_progress_bar__) f = open(filename, "a") f.write("End of doing repaint.\n") f.close()
def generate_gui(self): self.theme_boxes = [] self.themes = set(['']) dp = self.layer.dataProvider() fields = list(dp.fields()) numeric_fields = [field for field in fields if field.typeName() in NUMERIC_FIELD_TYPES] themes_list = [] indicators_list = {} if self.project_definition: themes = self.project_definition['children'][1]['children'] for theme in themes: themes_list.append(theme['name']) for indicator in theme['children']: indicators_list[indicator['field']] = (theme['name'], indicator['name']) # remove duplicates themes_list = list(set(themes_list)) themes_list.sort() themes_list.insert(0, '') attribute_label = QLabel('Attribute') theme_label = QLabel('Theme') name_label = QLabel('Name') sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(5) theme_label.setSizePolicy(sizePolicy) name_label.setSizePolicy(sizePolicy) self.ui.grid_layout.addWidget(attribute_label, 0, 0) self.ui.grid_layout.addWidget(theme_label, 0, 1) self.ui.grid_layout.addWidget(name_label, 0, 2) for i, field in enumerate(numeric_fields, start=1): theme_name = '' indicator_name = '' if field.name() in indicators_list: theme_name = indicators_list[field.name()][0] indicator_name = indicators_list[field.name()][1] attribute_label = QLabel(field.name()) attribute_label.setTextInteractionFlags(Qt.TextSelectableByMouse) theme = QComboBox() theme.setEditable(True) theme.setDuplicatesEnabled(False) theme.setInsertPolicy(QComboBox.InsertAlphabetically) theme.addItems(themes_list) current_index = theme.findText(theme_name) current_index = current_index if current_index != -1 else 0 theme.setCurrentIndex(current_index) theme.currentIndexChanged.connect(self.check_status) theme.lineEdit().editingFinished.connect(self.update_themes) self.theme_boxes.append(theme) name = QLineEdit(indicator_name) name.textChanged.connect(self.check_status) self.ui.grid_layout.addWidget(attribute_label, i, 0) self.ui.grid_layout.addWidget(theme, i, 1) self.ui.grid_layout.addWidget(name, i, 2) self.check_status()