def __init__(self, parent, grp, records=None, nextLevels=None): super(XOrbGroupItem, self).__init__(parent) # define custom properties self._loaded = False self._recordSet = None self._nextLevels = nextLevels # set local properties self.setFixedHeight(22) self.setText(0, nativestring(grp)) self.setFirstColumnSpanned(True) self.setChildIndicatorPolicy(self.ShowIndicator) # setup the icons icon = QIcon(resources.find('img/treeview/folder.png')) expanded_icon = QIcon(resources.find('img/treeview/folder_open.png')) self.setIcon(0, icon) self.setExpandedIcon(0, expanded_icon) # load the records for this group if isinstance(records, RecordSet): self.setRecordSet(records) elif type(records) in (dict, list, tuple): self.loadRecords(records)
def __init__(self, *args): super(XTabWidget, self).__init__(*args) # create the tab bar self.setTabBar(XTabBar(self)) # create custom properties self._showAddButton = True self._showOptionsButton = True # create the add button self._addButton = QPushButton(self) self._addButton.setIcon(QIcon(resources.find('img/tab/add.png'))) self._addButton.setFixedSize(18, 18) self._addButton.setIconSize(QSize(10, 10)) # create the option button self._optionsButton = QPushButton(self) self._optionsButton.setFixedSize(22, 18) self._optionsButton.setIcon(QIcon(resources.find('img/tab/gear.png'))) self._optionsButton.setIconSize(QSize(10, 10)) # create connection self.connect(self.tabBar(), SIGNAL('currentChanged(int)'), self.adjustButtons) self.connect(self.tabBar(), SIGNAL('resized()'), self.adjustButtons) self.connect(self._optionsButton, SIGNAL('clicked()'), self.emitOptionsRequested) self.connect(self._addButton, SIGNAL('clicked()'), self.emitAddRequested)
def __init__(self, *args): super(XSwitchButton, self).__init__(*args) # create the pixmaps self._onPixmap = QtGui.QPixmap(resources.find('img/switch/switch_on.png')) self._offPixmap = QtGui.QPixmap(resources.find('img/switch/switch_off.png')) # set the check state for this button self.setCheckable(True) self.setChecked(True) self.resize(self.sizeHint())
def __init__( self, parent = None ): super(XRatingSlider, self).__init__( parent ) # define custom properties self._emptyPixmap = QPixmap(resources.find('img/star_gray.png')) self._fullPixmap = QPixmap(resources.find('img/star.png')) self._alignment = Qt.AlignCenter self._pixmapSize = QSize(16, 16) # set default properties self.setOrientation(Qt.Horizontal) self.setMinimum(0) self.setMaximum(10) self.setPixmapSize(QSize(16, 16))
def updateUi(self): if self.uiRecordBTN.isChecked(): ico = resources.find('img/debug/break.png') clr = QtGui.QColor('red') self.uiRecordBTN.blink(True) else: ico = resources.find('img/debug/continue.png') clr = QtGui.QColor('blue') self.uiRecordBTN.blink(False) self.uiRecordBTN.setIcon(QtGui.QIcon(ico)) palette = self.uiRecordBTN.palette() palette.setColor(palette.Shadow, clr) self.uiRecordBTN.setPalette(palette)
def __init__(self, parent=None): super(XRatingSlider, self).__init__(parent) # define custom properties self._emptyPixmap = QPixmap(resources.find('img/star_gray.png')) self._fullPixmap = QPixmap(resources.find('img/star.png')) self._alignment = Qt.AlignCenter self._pixmapSize = QSize(16, 16) # set default properties self.setOrientation(Qt.Horizontal) self.setMinimum(0) self.setMaximum(10) self.setPixmapSize(QSize(16, 16))
def initGroupStyle(self, useIcons=True, columnCount=None): """ Initialzes this item with a grouping style option. """ flags = self.flags() if flags & QtCore.Qt.ItemIsSelectable: flags ^= QtCore.Qt.ItemIsSelectable self.setFlags(flags) if useIcons: ico = QtGui.QIcon(resources.find('img/treeview/triangle_right.png')) expand_ico = QtGui.QIcon(resources.find('img/treeview/triangle_down.png')) self.setIcon(0, ico) self.setExpandedIcon(0, expand_ico) palette = QtGui.QApplication.palette() line_clr = palette.color(palette.Mid) base_clr = palette.color(palette.Button) text_clr = palette.color(palette.ButtonText) gradient = QtGui.QLinearGradient() gradient.setColorAt(0.00, line_clr) gradient.setColorAt(0.03, line_clr) gradient.setColorAt(0.04, base_clr.lighter(105)) gradient.setColorAt(0.25, base_clr) gradient.setColorAt(0.96, base_clr.darker(105)) gradient.setColorAt(0.97, line_clr) gradient.setColorAt(1.00, line_clr) h = self._fixedHeight if not h: h = self.sizeHint(0).height() if not h: h = 18 gradient.setStart(0.0, 0.0) gradient.setFinalStop(0.0, h) brush = QtGui.QBrush(gradient) tree = self.treeWidget() columnCount = columnCount or (tree.columnCount() if tree else self.columnCount()) for i in range(columnCount): self.setForeground(i, text_clr) self.setBackground(i, brush)
def __init__(self, parent): super(XListGroupItem, self).__init__(parent) # define the text property self._text = '' self._expanded = True self._children = set() # define the widget for this item lwidget = self.listWidget() btn = QtGui.QToolButton(lwidget) btn.setAutoRaise(True) btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) btn.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) ico = 'img/treeview/triangle_down.png' btn.setIcon(QtGui.QIcon(resources.find(ico))) font = btn.font() font.setBold(True) btn.setFont(font) lwidget.setItemWidget(self, btn) # create connections btn.clicked.connect(self.toggle)
def __init__( self, parent ): super(XLocationWidget, self).__init__(parent) # define the interface self._locationEdit = XLineEdit(self) self._locationButton = QToolButton(self) self._urlTemplate = 'http://maps.google.com/maps?%(params)s' self._urlQueryKey = 'q' self._locationButton.setAutoRaise(True) self._locationButton.setIcon(QIcon(resources.find('img/map.png'))) self._locationEdit.setHint('no location set') layout = QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) layout.addWidget(self._locationEdit) layout.addWidget(self._locationButton) self.setLayout(layout) # create connections self._locationEdit.textChanged.connect(self.locationChanged) self._locationEdit.textEdited.connect(self.locationEdited) self._locationButton.clicked.connect(self.browseMaps)
def __init__(self, parent): super(XUrlWidget, self).__init__(parent) # define the interface self._urlEdit = XLineEdit(self) self._urlButton = QToolButton(self) self._urlButton.setAutoRaise(True) self._urlButton.setIcon(QIcon(resources.find('img/web.png'))) self._urlButton.setToolTip('Browse Link') self._urlButton.setFocusPolicy(Qt.NoFocus) self._urlEdit.setHint('http://') layout = QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) layout.addWidget(self._urlEdit) layout.addWidget(self._urlButton) self.setLayout(layout) self.setFocusPolicy(Qt.StrongFocus) # create connections self._urlEdit.textChanged.connect(self.urlChanged) self._urlEdit.textEdited.connect(self.urlEdited) self._urlButton.clicked.connect(self.browse)
def __init__(self, parent=None): super(XOverlayWidget, self).__init__(parent) # define custom properties self._centralWidget = None self._result = None self._closable = True self._closeAlignment = QtCore.Qt.AlignTop | QtCore.Qt.AlignRight self._closeButton = XToolButton(self) self._closeButton.setShadowed(True) self._closeButton.setIcon(QtGui.QIcon(resources.find('img/overlay/close.png'))) self._closeButton.setIconSize(QtCore.QSize(24, 24)) self._closeButton.setToolTip('Close') # create the coloring for the overlay palette = self.palette() clr = QtGui.QColor('#222222') clr.setAlpha(210) palette.setColor(palette.Window, clr) self.setPalette(palette) self.setAutoFillBackground(True) # listen to the parents event filter parent.installEventFilter(self) # initialize the widget self.hide() self.move(0, 0) self.resize(parent.size()) self._closeButton.clicked.connect(self.reject)
def __init__(self, parent=None): super(XViewProfileManager, self).__init__(parent) # define custom properties self._profiles = [] self._optionsMenuPolicy = Qt.DefaultContextMenu self._viewWidget = None # define the interface self._profileCombo = QComboBox(self) self._optionsButton = QToolButton(self) self._optionsButton.setAutoRaise(True) self._optionsButton.setToolTip('Advanced Options') self._optionsButton.setIcon(QIcon(resources.find('img/advanced.png'))) layout = QHBoxLayout() layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self._profileCombo) layout.addWidget(self._optionsButton) self.setLayout(layout) # create connections self._profileCombo.currentIndexChanged.connect( self.handleProfileChange) self._optionsButton.clicked.connect(self.showOptionsMenu)
def __init__(self, parent=None): super(XOverlayWidget, self).__init__(parent) # define custom properties self._centralWidget = None self._result = None self._closable = True self._closeAlignment = QtCore.Qt.AlignTop | QtCore.Qt.AlignRight self._closeButton = XToolButton(self) self._closeButton.setShadowed(True) self._closeButton.setIcon( QtGui.QIcon(resources.find('img/overlay/close.png'))) self._closeButton.setIconSize(QtCore.QSize(24, 24)) self._closeButton.setToolTip('Close') # create the coloring for the overlay palette = self.palette() clr = QtGui.QColor('#222222') clr.setAlpha(210) palette.setColor(palette.Window, clr) self.setPalette(palette) self.setAutoFillBackground(True) # listen to the parents event filter parent.installEventFilter(self) # initialize the widget self.hide() self.move(0, 0) self.resize(parent.size()) self._closeButton.clicked.connect(self.reject)
def __init__(self, parent): super(XLocationWidget, self).__init__(parent) # define the interface self._locationEdit = XLineEdit(self) self._locationButton = QToolButton(self) self._urlTemplate = 'http://maps.google.com/maps?%(params)s' self._urlQueryKey = 'q' self._locationButton.setAutoRaise(True) self._locationButton.setIcon(QIcon(resources.find('img/map.png'))) self._locationEdit.setHint('no location set') layout = QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) layout.addWidget(self._locationEdit) layout.addWidget(self._locationButton) self.setLayout(layout) # create connections self._locationEdit.textChanged.connect(self.locationChanged) self._locationEdit.textEdited.connect(self.locationEdited) self._locationButton.clicked.connect(self.browseMaps)
def __init__( self, parent ): super(XUrlWidget, self).__init__(parent) # define the interface self._urlEdit = XLineEdit(self) self._urlButton = QToolButton(self) self._urlButton.setAutoRaise(True) self._urlButton.setIcon(QIcon(resources.find('img/web.png'))) self._urlButton.setToolTip('Browse Link') self._urlButton.setFocusPolicy(Qt.NoFocus) self._urlEdit.setHint('http://') layout = QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) layout.addWidget(self._urlEdit) layout.addWidget(self._urlButton) self.setLayout(layout) self.setFocusPolicy(Qt.StrongFocus) # create connections self._urlEdit.textChanged.connect(self.urlChanged) self._urlEdit.textEdited.connect(self.urlEdited) self._urlButton.clicked.connect(self.browse)
def __init__(self, parent=None): super(XViewProfileManager, self).__init__(parent) # define custom properties self._profiles = [] self._optionsMenuPolicy = Qt.DefaultContextMenu self._viewWidget = None # define the interface self._profileCombo = QComboBox(self) self._optionsButton = QToolButton(self) self._optionsButton.setAutoRaise(True) self._optionsButton.setToolTip('Advanced Options') self._optionsButton.setIcon(QIcon(resources.find('img/advanced.png'))) layout = QHBoxLayout() layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self._profileCombo) layout.addWidget(self._optionsButton) self.setLayout(layout) # create connections self._profileCombo.currentIndexChanged.connect(self.handleProfileChange) self._optionsButton.clicked.connect(self.showOptionsMenu)
def __init__(self, parent): super(XTreeWidgetDelegate, self).__init__(parent) # set custom properties self._gridPen = QtGui.QPen() self._showGrid = True self._showGridColumns = True self._showGridRows = True self._extendsTree = True self._showRichText = False self._displayMappers = {} self._foreground = {} self._background = {} self._headerIndex = 0 self._currentOverlay = None self._currentDisplay = None self._showHighlights = True self._disabledEditingColumns = set() self._datetimeFormat = '%m/%d/%y @ %I:%M%p' self._timeFormat = '%I:%M%p' self._dateFormat = '%m/%d/%y' self._hoverBackground = None self._hoverForeground = None self._hoverIcon = None self._expandIcon = None self._useCheckMaps = True self._checkOnMap = resources.find('img/check_on.png') self._checkPartialMap = resources.find('img/check_part.png') self._checkOffMap = resources.find('img/check_off.png') # setup defaults palette = parent.palette() base_clr = palette.color(palette.Base) avg = (base_clr.red() + base_clr.green() + base_clr.blue()) / 3.0 if avg < 80: grid_clr = base_clr.lighter(200) elif avg < 140: grid_clr = base_clr.lighter(140) else: grid_clr = base_clr.darker(140) self.setGridPen(grid_clr)
def __init__(self, parent): super(XTreeWidgetDelegate, self).__init__(parent) # set custom properties self._gridPen = QtGui.QPen() self._showGrid = True self._showGridColumns = True self._showGridRows = True self._extendsTree = True self._showRichText = False self._displayMappers = {} self._foreground = {} self._background = {} self._headerIndex = 0 self._currentOverlay = None self._currentDisplay = None self._showHighlights = True self._disabledEditingColumns = set() self._datetimeFormat = '%m/%d/%y @ %I:%M%p' self._timeFormat = '%I:%M%p' self._dateFormat = '%m/%d/%y' self._hoverBackground = None self._hoverForeground = None self._hoverIcon = None self._expandIcon = None self._useCheckMaps = True self._checkOnMap = resources.find('img/check_on.png') self._checkPartialMap = resources.find('img/check_part.png') self._checkOffMap = resources.find('img/check_off.png') # setup defaults palette = parent.palette() base_clr = palette.color(palette.Base) avg = (base_clr.red() + base_clr.green() + base_clr.blue())/3.0 if avg < 80: grid_clr = base_clr.lighter(200) elif avg < 140: grid_clr = base_clr.lighter(140) else: grid_clr = base_clr.darker(140) self.setGridPen(grid_clr)
def __init__(self, manager): super(XViewProfileManagerMenu, self).__init__(manager) # create actions act = self.addAction('Save Profile') act.setIcon(QIcon(resources.find('img/save.png'))) act.setEnabled(manager.currentProfile() is not None) act.triggered.connect(self.saveProfile) act = self.addAction('Save Profile as...') act.setIcon(QIcon(resources.find('img/save_as.png'))) act.setEnabled(manager.viewWidget() is not None) act.triggered.connect(self.saveProfileAs) self.addSeparator() act = self.addAction('Remove Profile') act.setIcon(QIcon(resources.find('img/remove.png'))) act.setEnabled(manager.currentProfile() is not None) act.triggered.connect(self.removeProfile)
def __init__( self, manager ): super(XViewProfileManagerMenu, self).__init__(manager) # create actions act = self.addAction('Save Profile') act.setIcon(QIcon(resources.find('img/save.png'))) act.setEnabled(manager.currentProfile() is not None) act.triggered.connect( self.saveProfile ) act = self.addAction('Save Profile as...') act.setIcon(QIcon(resources.find('img/save_as.png'))) act.setEnabled(manager.viewWidget() is not None) act.triggered.connect( self.saveProfileAs ) self.addSeparator() act = self.addAction('Remove Profile') act.setIcon(QIcon(resources.find('img/remove.png'))) act.setEnabled(manager.currentProfile() is not None) act.triggered.connect( self.removeProfile )
def __init__(self, parent=None): super(XSearchEdit, self).__init__(parent) # setup default properties self.setHint('enter search') self.setIcon(QtGui.QIcon(resources.find('img/search.png'))) self.setCornerRadius(8) # setup custom properties self._cancelButton = XToolButton(self) self._cancelButton.setIcon(QtGui.QIcon(resources.find('img/remove_dark.png'))) self._cancelButton.setToolTip('Clear Search Text') self._cancelButton.setShadowed(True) self._cancelButton.hide() self.addButton(self._cancelButton, QtCore.Qt.AlignRight) # create connections self._cancelButton.clicked.connect(self.clear) self.textChanged.connect(self.toggleCancelButton)
def __init__(self, parent=None): super(XCommentEdit, self).__init__(parent) # define custom properties self._attachments = {} self._showAttachments = True # create toolbar self._toolbar = QToolBar(self) self._toolbar.setMovable(False) self._toolbar.setFixedHeight(30) self._toolbar.setAutoFillBackground(True) self._toolbar.setFocusProxy(self) self._toolbar.hide() # create toolbar buttons self._attachButton = QToolButton(self) self._attachButton.setIcon(QIcon(resources.find('img/attach.png'))) self._attachButton.setToolTip('Add Attachment') self._attachButton.setAutoRaise(True) self._attachButton.setIconSize(QSize(24, 24)) self._attachButton.setFixedSize(26, 26) self._submitButton = QPushButton(self) self._submitButton.setText('Submit') self._submitButton.setFocusProxy(self) # create attachments widget self._attachmentsEdit = XMultiTagEdit(self) self._attachmentsEdit.setAutoResizeToContents(True) self._attachmentsEdit.setFrameShape(XMultiTagEdit.NoFrame) self._attachmentsEdit.setViewMode(XMultiTagEdit.ListMode) self._attachmentsEdit.setEditable(False) self._attachmentsEdit.setFocusProxy(self) self._attachmentsEdit.hide() # define toolbar layout spacer = QWidget(self) spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) self._attachAction = self._toolbar.addWidget(self._attachButton) self._toolbar.addWidget(spacer) self._toolbar.addWidget(self._submitButton) # set standard properties self.setAutoResizeToContents(True) self.setHint('add comment') self.setFocusPolicy(Qt.StrongFocus) self.setRequireShiftForNewLine(True) # create connections self._attachButton.clicked.connect(self.attachmentRequested) self._submitButton.clicked.connect(self.acceptText) self._attachmentsEdit.tagRemoved.connect(self.removeAttachment) self.focusChanged.connect(self.setToolbarVisible)
def __init__(self, parent=None): super(XSearchEdit, self).__init__(parent) # setup default properties self.setHint('enter search') self.setIcon(QtGui.QIcon(resources.find('img/search.png'))) self.setCornerRadius(8) # setup custom properties self._cancelButton = XToolButton(self) self._cancelButton.setIcon( QtGui.QIcon(resources.find('img/remove_dark.png'))) self._cancelButton.setToolTip('Clear Search Text') self._cancelButton.setShadowed(True) self._cancelButton.hide() self.addButton(self._cancelButton, QtCore.Qt.AlignRight) # create connections self._cancelButton.clicked.connect(self.clear) self.textChanged.connect(self.toggleCancelButton)
def __init__(self, parent=None): super(XLockButton, self).__init__(parent) # define custom properties self._lockIcon = None self._unlockIcon = None # set properties palette = self.palette() palette.setColor(palette.Shadow, QtGui.QColor('orange')) self.setPalette(palette) self.setLockIcon(resources.find('img/ui/lock.png')) self.setUnlockIcon(resources.find('img/ui/unlock.png')) self.setCheckable(True) self.setChecked(False) self.setShadowed(True) # update the icon based on the lock state self.toggled.connect(self.updateState)
def setProfile( self, profile ): """ Sets the profile instance for this dialog to the inputed profile. :param profile | <projexui.widgets.xviewwidget.XViewProfile> """ self._profile = profile if ( not profile ): self.uiNameTXT.setText('') self.uiDescriptionTXT.setText('') self.uiIconBTN.setFilepath(resources.find('img/profile_48.png')) else: self.uiNameTXT.setText(profile.name()) self.uiDescriptionTXT.setText(profile.description()) filepath = profile.icon() if ( not filepath ): filepath = resources.find('img/profile_48.png') self.uiIconBTN.setFilepath(filepath)
def setProfile(self, profile): """ Sets the profile instance for this dialog to the inputed profile. :param profile | <projexui.widgets.xviewwidget.XViewProfile> """ self._profile = profile if (not profile): self.uiNameTXT.setText('') self.uiDescriptionTXT.setText('') self.uiIconBTN.setFilepath(resources.find('img/profile_48.png')) else: self.uiNameTXT.setText(profile.name()) self.uiDescriptionTXT.setText(profile.description()) filepath = profile.icon() if (not filepath): filepath = resources.find('img/profile_48.png') self.uiIconBTN.setFilepath(filepath)
def __init__(self, parent=None): super(XSearchEdit, self).__init__(parent) # setup custom properties self._cancelButton = QToolButton(self) self._cancelButton.setIcon(QIcon( resources.find('img/remove_dark.png'))) self._cancelButton.setAutoRaise(True) self._cancelButton.setToolTip('Clear Search Text') self._cancelButton.hide() self.addButton(self._cancelButton) # setup default properties self.setHint('enter search') self.setIcon(QIcon(resources.find('img/search.png'))) self.setCornerRadius(8) self.adjustStyleSheet() self.adjustTextMargins() # create connections self._cancelButton.clicked.connect(self.clear) self.textChanged.connect(self.toggleCancelButton)
def __init__(self, configGroup='User Interface', title='Shortcuts', dataSet=None, uifile='', iconfile=''): if (not iconfile): iconfile = resources.find('img/shortcuts.png') super(XShortcutConfig, self).__init__(configGroup, title, dataSet, uifile, iconfile) self.setWidgetClass(XShortcutWidget)
def __init__(self, parent, column): super(XOrbColumnItem, self).__init__(parent) # set custom options self._column = column self._loaded = False if column.isReference(): self.setChildIndicatorPolicy(self.ShowIndicator) # set default options typ = column.columnTypeText(baseOnly=True) ico = 'img/orb/coltypes/%s.png' % typ.lower() self.setText(0, column.name().strip('_')) self.setIcon(0, QIcon(resources.find(ico))) self.setFixedHeight(20)
def addEntry(self, key='', value=''): """ Creates a new entry item for this widget. :param key | <str> value | <variant> """ img = resources.find('img/close.png') new_item = XTreeWidgetItem() new_item.setText(1, nativestring(key)) new_item.setText(2, nativestring(value)) new_item.setIcon(0, QtGui.QIcon(img)) new_item.setFixedHeight(22) self.insertTopLevelItem(self.topLevelItemCount() - 1, new_item) return new_item
def __init__( self, configGroup = 'User Interface', title = 'Shortcuts', dataSet = None, uifile = '', iconfile = '' ): if ( not iconfile ): iconfile = resources.find('img/shortcuts.png') super(XShortcutConfig, self).__init__( configGroup, title, dataSet, uifile, iconfile) self.setWidgetClass(XShortcutWidget)
def __init__(self, parent, action): super(XSearchActionWidget, self).__init__(parent) # define custom properties self._initialized = False self._triggerText = '' # define the interface self._searchEdit = XLineEdit(self) self._searchEdit.setIcon(QIcon(resources.find('img/search.png'))) self._searchEdit.setHint('enter search') self._searchEdit.setFixedHeight(24) # define the completer self._completer = XTreeWidget(self) self._completer.setHint('No actions were found.') self._completer.setWindowFlags(Qt.Popup) self._completer.setRootIsDecorated(False) self._completer.header().hide() self._completer.setSortingEnabled(True) self._completer.sortByColumn(0, Qt.AscendingOrder) self._completer.installEventFilter(self) self._completer.setFocusProxy(self._searchEdit) self._completer.setShowGrid(False) self._completer.setFrameShape(XTreeWidget.Box) self._completer.setFrameShadow(XTreeWidget.Plain) # match the look for the completer to the menu palette = self._completer.palette() palette.setColor(palette.Base, palette.color(palette.Window)) palette.setColor(palette.Text, palette.color(palette.WindowText)) palette.setColor(palette.WindowText, palette.color(palette.Mid)) self._completer.setPalette(palette) # create the layout layout = QHBoxLayout() layout.setContentsMargins(4, 4, 4, 4) layout.addWidget(self._searchEdit) self.setLayout(layout) # create connections self._searchEdit.textChanged.connect(self.filterOptions) self._completer.itemClicked.connect(self.triggerItem) parent.aboutToShow.connect(self.aboutToShow)
def setupActions(self): viewWidget = self.viewWidget() self.setTitle('Add View') # collect the views and groups sorter = lambda x: x.viewGroup() + '/' + x.viewName() views = sorted(viewWidget.viewTypes(), key=sorter) grps = set([view.viewGroup() for view in views]) # for a non-hierarchical view setup, just add the views to this menu if len(grps) <= 1: for view in views: act = self.addAction(view.viewName()) act.setIcon(QIcon(view.viewIcon())) # otherwise, add the views to a submenu system else: self.addSearchAction() self.addSeparator() menus = {} for view in views: # separate the grouping levels for grp in view.viewGroup().split(';'): parts = grp.split('/') menu = self for i, part in enumerate(parts): key = ('/'.join(parts[:i]) + '/' + part).strip('/') menu = menus.get(key) if not menu: ico = QIcon(resources.find('img/folder.png')) parent_key = '/'.join(parts[:i]).strip('/') parent = menus.get(parent_key, self) menu = parent.addMenu(part) menu.setIcon(ico) menus[key] = menu # add to the last item act = menu.addAction(view.viewName()) act.setIcon(QIcon(view.viewIcon())) self.triggered.connect(self.addView) self.addSeparator()
def __init__(self, configGroup='User Interface', title='Scheme', dataSet=None, uifile='', iconfile=''): if (not dataSet): dataSet = XScheme() if (not iconfile): iconfile = resources.find('img/scheme.png') super(XSchemeConfig, self).__init__(configGroup, title, dataSet, uifile, iconfile) self.setWidgetClass(XSchemeConfigWidget) self.saveFinished.connect(self.apply) self.restoreFinished.connect(self.apply)
def fromXml( parent, xml, actions = None ): """ Generates an XMenu from the inputed xml data and returns the resulting \ menu. If no action dictionary is supplied, it will be generated based \ on the parents actions. :param parent | <QWidget> xml | <xml.etree.ElementTree.Element> actions | {<str> name: <QAction>, } || None :return <XMenu> || None """ # generate the actions off the parent if ( actions is None ): actions = {} for action in parent.actions(): key = nativestring(action.objectName()) if not key: key = nativestring(action.text()) if not key: continue actions[key] = action # create a new menu menu = XMenu(parent) menu.setIcon(QIcon(resources.find('img/folder.png'))) menu.setTitle(xml.get('title', '')) for xaction in xml: if xaction.tag == 'separator': menu.addSeparator() elif xaction.tag == 'menu': menu.addMenu(XMenu.fromXml(menu, xaction, actions)) else: action = actions.get(xaction.get('name', '')) if action: menu.addAction(action) return menu
def fromXml( parent, xml, actions = None ): """ Generates an XMenu from the inputed xml data and returns the resulting \ menu. If no action dictionary is supplied, it will be generated based \ on the parents actions. :param parent | <QWidget> xml | <xml.etree.ElementTree.Element> actions | {<str> name: <QAction>, } || None :return <XMenu> || None """ # generate the actions off the parent if ( actions is None ): actions = {} for action in parent.actions(): key = str(action.objectName()) if ( not key ): key = str(action.text()) if ( not key ): continue actions[key] = action # create a new menu menu = XMenu(parent) menu.setIcon(QIcon(resources.find('img/folder.png'))) menu.setTitle(xml.get('title', '')) for xaction in xml: if ( xaction.tag == 'separator' ): menu.addSeparator() elif ( xaction.tag == 'menu' ): menu.addMenu(XMenu.fromXml(menu, xaction, actions)) else: action = actions.get(xaction.get('name', '')) if ( action ): menu.addAction(action) return menu
def rebuildButtons( self ): """ Rebuilds the buttons for the advanced actions. """ for btn in self.findChildren(QToolButton): btn.close() btn.setParent(None) btn.deleteLater() for standard, advanced in self._advancedMap.items(): rect = self.actionGeometry(standard) btn = QToolButton(self) btn.setFixedWidth(22) btn.setFixedHeight(rect.height()) btn.setDefaultAction(advanced) btn.setAutoRaise(True) btn.move(rect.right() + 1, rect.top()) if btn.icon().isNull(): btn.setIcon(QIcon(resources.find('img/advanced.png'))) btn.clicked.connect(self.acceptAdvanced)
def paintEvent(self, event): """ Paints this combobox based on whether or not it is visible. :param event | <QPaintEvent> """ if not self.autoRaise() or (self._hovered and self.isEnabled()): super(XComboBox, self).paintEvent(event) text = QComboBox.currentText(self) if not text and self._hint and not self.lineEdit(): text = self._hint palette = self.palette() with XPainter(self) as painter: painter.setPen( palette.color(palette.Disabled, palette.Text)) painter.drawText(5, 0, self.width(), self.height(), Qt.AlignLeft | Qt.AlignVCenter, self.currentText()) else: palette = self.palette() with XPainter(self) as painter: text = QComboBox.currentText(self) if not text: text = self.hint() painter.setPen( palette.color(palette.Disabled, palette.WindowText)) painter.drawText(5, 0, self.width(), self.height(), Qt.AlignLeft | Qt.AlignVCenter, text) x = self.width() - 15 y = 4 pixmap = QPixmap( resources.find('img/treeview/triangle_down.png')) painter.drawPixmap(x, y, pixmap)
def setExpanded(self, state): """ Expands this group item to the inputed state. :param state | <bool> """ if state == self._expanded: return self._expanded = state # update the button btn = self.widget() if btn: if state: ico = 'img/treeview/triangle_down.png' else: ico = 'img/treeview/triangle_right.png' btn.setIcon(QtGui.QIcon(resources.find(ico))) # update the children for child in self.children(): child.setHidden(not state)
def __init__( self, configGroup = 'User Interface', title = 'Scheme', dataSet = None, uifile = '', iconfile = '' ): if ( not dataSet ): dataSet = XScheme() if ( not iconfile ): iconfile = resources.find('img/scheme.png') super(XSchemeConfig, self).__init__( configGroup, title, dataSet, uifile, iconfile) self.setWidgetClass(XSchemeConfigWidget) self.saveFinished.connect(self.apply) self.restoreFinished.connect(self.apply)
def paintEvent(self, event): """ Paints this combobox based on whether or not it is visible. :param event | <QPaintEvent> """ if not self.autoRaise() or (self._hovered and self.isEnabled()): super(XComboBox, self).paintEvent(event) text = QComboBox.currentText(self) if not text and self._hint and not self.lineEdit(): text = self._hint palette = self.palette() with XPainter(self) as painter: painter.setPen(palette.color(palette.Disabled, palette.Text)) painter.drawText(5, 0, self.width(), self.height(), Qt.AlignLeft | Qt.AlignVCenter, self.currentText()) else: palette = self.palette() with XPainter(self) as painter: text = QComboBox.currentText(self) if not text: text = self.hint() painter.setPen(palette.color(palette.Disabled, palette.WindowText)) painter.drawText(5, 0, self.width(), self.height(), Qt.AlignLeft | Qt.AlignVCenter, text) x = self.width() - 15 y = 4 pixmap = QPixmap(resources.find('img/treeview/triangle_down.png')) painter.drawPixmap(x, y, pixmap)
def __init__( self, parent = None ): super(XFindWidget, self).__init__( parent ) # define custom properties self._textEdit = None self._webView = None self._lastCursor = QTextCursor() self._lastText = '' self._closeButton = QToolButton(self) self._closeButton.setIcon(QIcon(resources.find('img/close.png'))) self._closeButton.setAutoRaise(True) self._closeButton.setToolTip('Hide the Find Field.') self._searchEdit = XLineEdit(self) self._searchEdit.setHint('search for...') self._previousButton = QToolButton(self) self._previousButton.setIcon(QIcon(resources.find('img/back.png'))) self._previousButton.setAutoRaise(True) self._previousButton.setToolTip('Find Previous') self._nextButton = QToolButton(self) self._nextButton.setIcon(QIcon(resources.find('img/forward.png'))) self._nextButton.setAutoRaise(True) self._nextButton.setToolTip('Find Next') self._caseSensitiveCheckbox = QCheckBox(self) self._caseSensitiveCheckbox.setText('Case Sensitive') self._wholeWordsCheckbox = QCheckBox(self) self._wholeWordsCheckbox.setText('Whole Words Only') self._regexCheckbox = QCheckBox(self) self._regexCheckbox.setText('Use Regex') self._findAction = QAction(self) self._findAction.setText('Find...') self._findAction.setIcon(QIcon(resources.find('img/search.png'))) self._findAction.setToolTip('Find in Text') self._findAction.setShortcut(QKeySequence('Ctrl+F')) self._findAction.setShortcutContext(Qt.WidgetWithChildrenShortcut) # layout the widgets layout = QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) layout.addWidget( self._closeButton ) layout.addWidget( self._searchEdit ) layout.addWidget( self._previousButton ) layout.addWidget( self._nextButton ) layout.addWidget( self._caseSensitiveCheckbox ) layout.addWidget( self._wholeWordsCheckbox ) layout.addWidget( self._regexCheckbox ) self.setLayout(layout) # create connections self._findAction.triggered.connect( self.show ) self._searchEdit.textChanged.connect( self.findNext ) self._closeButton.clicked.connect( self.hide ) self._previousButton.clicked.connect( self.findPrev ) self._nextButton.clicked.connect( self.findNext ) self._caseSensitiveCheckbox.clicked.connect( self.findNext ) self._wholeWordsCheckbox.clicked.connect( self.findNext ) self._searchEdit.returnPressed.connect( self.findNext ) self._regexCheckbox.clicked.connect( self.findNext )
def __init__(self, parent=None): super(XFindWidget, self).__init__(parent) # define custom properties self._textEdit = None self._webView = None self._lastCursor = QTextCursor() self._lastText = '' self._closeButton = QToolButton(self) self._closeButton.setIcon(QIcon(resources.find('img/close.png'))) self._closeButton.setAutoRaise(True) self._closeButton.setToolTip('Hide the Find Field.') self._searchEdit = XLineEdit(self) self._searchEdit.setHint('search for...') self._previousButton = QToolButton(self) self._previousButton.setIcon(QIcon(resources.find('img/back.png'))) self._previousButton.setAutoRaise(True) self._previousButton.setToolTip('Find Previous') self._nextButton = QToolButton(self) self._nextButton.setIcon(QIcon(resources.find('img/forward.png'))) self._nextButton.setAutoRaise(True) self._nextButton.setToolTip('Find Next') self._caseSensitiveCheckbox = QCheckBox(self) self._caseSensitiveCheckbox.setText('Case Sensitive') self._wholeWordsCheckbox = QCheckBox(self) self._wholeWordsCheckbox.setText('Whole Words Only') self._regexCheckbox = QCheckBox(self) self._regexCheckbox.setText('Use Regex') self._findAction = QAction(self) self._findAction.setText('Find...') self._findAction.setIcon(QIcon(resources.find('img/search.png'))) self._findAction.setToolTip('Find in Text') self._findAction.setShortcut(QKeySequence('Ctrl+F')) self._findAction.setShortcutContext(Qt.WidgetWithChildrenShortcut) # layout the widgets layout = QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self._closeButton) layout.addWidget(self._searchEdit) layout.addWidget(self._previousButton) layout.addWidget(self._nextButton) layout.addWidget(self._caseSensitiveCheckbox) layout.addWidget(self._wholeWordsCheckbox) layout.addWidget(self._regexCheckbox) self.setLayout(layout) # create connections self._findAction.triggered.connect(self.show) self._searchEdit.textChanged.connect(self.findNext) self._closeButton.clicked.connect(self.hide) self._previousButton.clicked.connect(self.findPrev) self._nextButton.clicked.connect(self.findNext) self._caseSensitiveCheckbox.clicked.connect(self.findNext) self._wholeWordsCheckbox.clicked.connect(self.findNext) self._searchEdit.returnPressed.connect(self.findNext) self._regexCheckbox.clicked.connect(self.findNext)
class XFindWidget(QWidget): """ """ __designer_icon__ = resources.find('img/search.png') def __init__(self, parent=None): super(XFindWidget, self).__init__(parent) # define custom properties self._textEdit = None self._webView = None self._lastCursor = QTextCursor() self._lastText = '' self._closeButton = QToolButton(self) self._closeButton.setIcon(QIcon(resources.find('img/close.png'))) self._closeButton.setAutoRaise(True) self._closeButton.setToolTip('Hide the Find Field.') self._searchEdit = XLineEdit(self) self._searchEdit.setHint('search for...') self._previousButton = QToolButton(self) self._previousButton.setIcon(QIcon(resources.find('img/back.png'))) self._previousButton.setAutoRaise(True) self._previousButton.setToolTip('Find Previous') self._nextButton = QToolButton(self) self._nextButton.setIcon(QIcon(resources.find('img/forward.png'))) self._nextButton.setAutoRaise(True) self._nextButton.setToolTip('Find Next') self._caseSensitiveCheckbox = QCheckBox(self) self._caseSensitiveCheckbox.setText('Case Sensitive') self._wholeWordsCheckbox = QCheckBox(self) self._wholeWordsCheckbox.setText('Whole Words Only') self._regexCheckbox = QCheckBox(self) self._regexCheckbox.setText('Use Regex') self._findAction = QAction(self) self._findAction.setText('Find...') self._findAction.setIcon(QIcon(resources.find('img/search.png'))) self._findAction.setToolTip('Find in Text') self._findAction.setShortcut(QKeySequence('Ctrl+F')) self._findAction.setShortcutContext(Qt.WidgetWithChildrenShortcut) # layout the widgets layout = QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self._closeButton) layout.addWidget(self._searchEdit) layout.addWidget(self._previousButton) layout.addWidget(self._nextButton) layout.addWidget(self._caseSensitiveCheckbox) layout.addWidget(self._wholeWordsCheckbox) layout.addWidget(self._regexCheckbox) self.setLayout(layout) # create connections self._findAction.triggered.connect(self.show) self._searchEdit.textChanged.connect(self.findNext) self._closeButton.clicked.connect(self.hide) self._previousButton.clicked.connect(self.findPrev) self._nextButton.clicked.connect(self.findNext) self._caseSensitiveCheckbox.clicked.connect(self.findNext) self._wholeWordsCheckbox.clicked.connect(self.findNext) self._searchEdit.returnPressed.connect(self.findNext) self._regexCheckbox.clicked.connect(self.findNext) def find(self, flags=0): """ Looks throught the text document based on the current criteria. The \ inputed flags will be merged with the generated search flags. :param flags | <QTextDocument.FindFlag> :return <bool> | success """ # check against the web and text views if (not (self._textEdit or self._webView)): fg = QColor('darkRed') bg = QColor('red').lighter(180) palette = self.palette() palette.setColor(palette.Text, fg) palette.setColor(palette.Base, bg) self._searchEdit.setPalette(palette) self._searchEdit.setToolTip('No Text Edit is linked.') return False if (self._caseSensitiveCheckbox.isChecked()): flags |= QTextDocument.FindCaseSensitively if (self._textEdit and self._wholeWordsCheckbox.isChecked()): flags |= QTextDocument.FindWholeWords terms = self._searchEdit.text() if (terms != self._lastText): self._lastCursor = QTextCursor() if (self._regexCheckbox.isChecked()): terms = QRegExp(terms) palette = self.palette() # search on a text edit if (self._textEdit): cursor = self._textEdit.document().find( terms, self._lastCursor, QTextDocument.FindFlags(flags)) found = not cursor.isNull() self._lastCursor = cursor self._textEdit.setTextCursor(cursor) elif (QWebPage): flags = QWebPage.FindFlags(flags) flags |= QWebPage.FindWrapsAroundDocument found = self._webView.findText(terms, flags) self._lastText = self._searchEdit.text() if (not terms or found): fg = palette.color(palette.Text) bg = palette.color(palette.Base) else: fg = QColor('darkRed') bg = QColor('red').lighter(180) palette.setColor(palette.Text, fg) palette.setColor(palette.Base, bg) self._searchEdit.setPalette(palette) return found def findNext(self): """ Looks for the search terms that come up next based on the criteria. :return <bool> | success """ return self.find() def findPrev(self): """ Looks for the search terms that come up last based on the criteria. :return <bool> | success """ return self.find(QTextDocument.FindBackward) def setTextEdit(self, textEdit): """ Sets the text edit that this find widget will use to search. :param textEdit | <QTextEdit> """ if (self._textEdit): self._textEdit.removeAction(self._findAction) self._textEdit = textEdit if (textEdit): textEdit.addAction(self._findAction) def setWebView(self, webView): """ Sets the web view edit that this find widget will use to search. :param webView | <QWebView> """ if (self._webView): self._webView.removeAction(self._findAction) self._webView = webView if (webView): webView.addAction(self._findAction) def show(self): """ Sets this widget visible and then makes the find field have focus. """ super(XFindWidget, self).show() self._searchEdit.setFocus() def textEdit(self): """ Returns the text edit linked with this find widget. :return <QTextEdit> """ return self._textEdit def webView(self): """ Returns the text edit linked with this find widget. :return <QWebView> """ return self._webView
QPalette,\ QSizePolicy from projexui import resources COMBO_STYLE = """\ QComboBox {border: none;} QComboBox::drop-down { subcontrol-origin: padding; subcontrol-position: top right; width: 16px; border: none; } QComboBox::down-arrow {image: url("%s");} QComboBox::down-arrow:hover { background: palette(Mid); } """ % resources.find('img/treeview/triangle_down.png').replace('\\', '/') 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)
def __init__(self, parent=None): super(XChart, self).__init__(parent) # load the interface projexui.loadUi(__file__, self) # define custom properties self._renderer = None self._chartTitle = "" self._axes = [] self._datasets = [] self._horizontalAxis = None self._verticalAxis = None self._showDatasetToolbar = True self._showTypeButton = True self._dataChanged = False self._showGrid = True self._showRows = True self._showColumns = True self._showXAxis = True self._showYAxis = True # set default properties self.uiChartVIEW.setScene(XChartScene(self)) self.uiXAxisVIEW.setScene(XChartScene(self)) self.uiYAxisVIEW.setScene(XChartScene(self)) self.uiChartVIEW.setAlignment(Qt.AlignTop | Qt.AlignLeft) self.uiXAxisVIEW.setAlignment(Qt.AlignTop | Qt.AlignLeft) self.uiYAxisVIEW.setAlignment(Qt.AlignTop | Qt.AlignLeft) self.uiDatasetTBAR.setFixedHeight(32) self.uiXAxisVIEW.hide() self.uiYAxisVIEW.hide() self.setAutoFillBackground(True) self.setBackgroundRole(QPalette.Base) self.setStyleSheet(STYLE) self.uiChartVIEW.setMouseTracking(True) self.uiDatasetTBAR.setStyleSheet(TOOLBAR_STYLE) # load renderers for renderer in XChartRenderer.plugins(): act = QAction("%s Chart" % renderer, self) ico = "img/chart/%s.png" % renderer.lower() act.setIcon(QIcon(resources.find(ico))) self.uiTypeBTN.addAction(act) # assign the default renderer if not self.uiTypeBTN.defaultAction(): self._renderer = XChartRenderer.plugin(renderer) self.uiTypeBTN.setDefaultAction(act) # create connections chart_hbar = self.uiChartVIEW.horizontalScrollBar() chart_vbar = self.uiChartVIEW.verticalScrollBar() x_bar = self.uiXAxisVIEW.horizontalScrollBar() y_bar = self.uiYAxisVIEW.verticalScrollBar() chart_hbar.valueChanged.connect(self.syncScrollbars) chart_hbar.rangeChanged.connect(self.syncScrollbars) y_bar.valueChanged.connect(self.syncScrollbars) y_bar.rangeChanged.connect(self.syncScrollbars) self.uiTypeBTN.triggered.connect(self.assignRenderer)