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)
Exemple #2
0
    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, 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(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))
Exemple #6
0
    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 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 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)
Exemple #10
0
    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)
Exemple #12
0
    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)
Exemple #14
0
    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)
Exemple #15
0
    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)
Exemple #16
0
    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)
Exemple #17
0
 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)
Exemple #19
0
 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(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 )
Exemple #24
0
 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)
Exemple #26
0
    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)
Exemple #27
0
 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)
Exemple #28
0
    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)
Exemple #30
0
    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)
Exemple #31
0
    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)
Exemple #32
0
 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)
Exemple #33
0
    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 __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
Exemple #37
0
    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)
Exemple #39
0
 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)
Exemple #40
0
    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)
Exemple #41
0
    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 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()
Exemple #43
0
    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)
Exemple #44
0
 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
Exemple #45
0
 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
Exemple #46
0
 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)
Exemple #47
0
    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)
Exemple #48
0
 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)
Exemple #49
0
    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)
Exemple #51
0
 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 )
Exemple #53
0
    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)
Exemple #54
0
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)
        
Exemple #56
0
                              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)
Exemple #57
0
    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)