def __init__( self, parent, plugin ):
     super(PluginWidget, self).__init__(parent)
     
     self._icon = QLabel(self)
     pixmap = QPixmap(plugin.iconFile())
     if pixmap.isNull():
         pixmap = QPixmap(projexui.resources.find('img/plugin_48.png'))
     self._icon.setPixmap(pixmap)
     self._icon.setMinimumWidth(48)
     self._icon.setMinimumHeight(48)
     self._icon.setAlignment(Qt.AlignCenter)
     
     self._title = QLabel(plugin.title(), self)
     self._title.setAlignment(Qt.AlignCenter)
     
     font = self.font()
     font.setPointSize(7)
     
     self._title.setFont(font)
     
     vbox = QVBoxLayout()
     vbox.addStretch()
     vbox.addWidget(self._icon)
     vbox.addWidget(self._title)
     vbox.addStretch()
     
     self.setLayout(vbox)
     
     self._plugin = plugin
Esempio n. 2
0
    def __init__(self, parent=None):
        super(XPagesWidget, self).__init__(parent)

        # define custom properties
        self._currentPage = 1
        self._pageCount = 10
        self._itemCount = 0
        self._pageSize = 50
        self._itemsTitle = 'items'

        self._pagesSpinner = QSpinBox()
        self._pagesSpinner.setMinimum(1)
        self._pagesSpinner.setMaximum(10)

        self._pageSizeCombo = XComboBox(self)
        self._pageSizeCombo.setHint('all')
        self._pageSizeCombo.addItems(['', '25', '50', '75', '100'])
        self._pageSizeCombo.setCurrentIndex(2)

        self._nextButton = QToolButton(self)
        self._nextButton.setAutoRaise(True)
        self._nextButton.setArrowType(Qt.RightArrow)
        self._nextButton.setFixedWidth(16)

        self._prevButton = QToolButton(self)
        self._prevButton.setAutoRaise(True)
        self._prevButton.setArrowType(Qt.LeftArrow)
        self._prevButton.setFixedWidth(16)
        self._prevButton.setEnabled(False)

        self._pagesLabel = QLabel('of 10 for ', self)
        self._itemsLabel = QLabel(' items per page', self)

        # define the interface
        layout = QHBoxLayout()
        layout.addWidget(QLabel('Page', self))
        layout.addWidget(self._prevButton)
        layout.addWidget(self._pagesSpinner)
        layout.addWidget(self._nextButton)
        layout.addWidget(self._pagesLabel)
        layout.addWidget(self._pageSizeCombo)
        layout.addWidget(self._itemsLabel)
        layout.addStretch(1)

        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)

        self.setLayout(layout)
        self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)

        # create connections
        self._pageSizeCombo.currentIndexChanged.connect(self.pageSizePicked)
        self._nextButton.clicked.connect(self.gotoNext)
        self._prevButton.clicked.connect(self.gotoPrevious)
        self._pagesSpinner.editingFinished.connect(self.assignCurrentPage)
Esempio n. 3
0
    def __init__(self, orientation, parent):
        super(XSplitterHandle, self).__init__(orientation, parent)

        # create a layout for the different buttons
        self._collapsed = False
        self._storedSizes = None

        self._collapseBefore = QToolButton(self)
        self._resizeGrip = QLabel(self)
        self._collapseAfter = QToolButton(self)

        self._collapseBefore.setAutoRaise(True)
        self._collapseAfter.setAutoRaise(True)

        self._collapseBefore.setCursor(Qt.ArrowCursor)
        self._collapseAfter.setCursor(Qt.ArrowCursor)

        # define the layout
        layout = QBoxLayout(QBoxLayout.LeftToRight, self)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addStretch(1)
        layout.addWidget(self._collapseBefore)
        layout.addWidget(self._resizeGrip)
        layout.addWidget(self._collapseAfter)
        layout.addStretch(1)
        self.setLayout(layout)

        # set the orientation to start with
        self.setOrientation(orientation)

        # create connections
        self._collapseAfter.clicked.connect(self.toggleCollapseAfter)
        self._collapseBefore.clicked.connect(self.toggleCollapseBefore)
Esempio n. 4
0
    def addSection(self, section):
        """
        Adds a section to this menu.  A section will create a label for the
        menu to separate sections of the menu out.
        
        :param      section | <str>
        """
        label = QLabel(section, self)
        label.setMinimumHeight(self.titleHeight())

        # setup font
        font = label.font()
        font.setBold(True)

        # setup palette
        palette = label.palette()
        palette.setColor(palette.WindowText, palette.color(palette.Mid))

        # setup label
        label.setFont(font)
        label.setAutoFillBackground(True)
        label.setPalette(palette)

        # create the widget action
        action = QWidgetAction(self)
        action.setDefaultWidget(label)
        self.addAction(action)

        return action
Esempio n. 5
0
    def getText(cls,
                parent=None,
                windowTitle='Get Text',
                label='',
                text='',
                plain=True,
                wrapped=True):
        """
        Prompts the user for a text entry using the text edit class.
        
        :param      parent | <QWidget>
                    windowTitle | <str>
                    label       | <str>
                    text        | <str>
                    plain       | <bool> | return plain text or not
        
        :return     (<str> text, <bool> accepted)
        """
        # create the dialog
        dlg = QDialog(parent)
        dlg.setWindowTitle(windowTitle)

        # create the layout
        layout = QVBoxLayout()

        # create the label
        if label:
            lbl = QLabel(dlg)
            lbl.setText(label)
            layout.addWidget(lbl)

        # create the widget
        widget = cls(dlg)
        widget.setText(text)

        if not wrapped:
            widget.setLineWrapMode(XTextEdit.NoWrap)

        layout.addWidget(widget)

        # create the buttons
        btns = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel,
                                Qt.Horizontal, dlg)
        layout.addWidget(btns)

        dlg.setLayout(layout)
        dlg.adjustSize()

        # create connections
        btns.accepted.connect(dlg.accept)
        btns.rejected.connect(dlg.reject)

        if dlg.exec_():
            if plain:
                return (widget.toPlainText(), True)
            else:
                return (widget.toHtml(), True)
        else:
            return ('', False)
Esempio n. 6
0
 def richTextLabel(self):
     """
     Returns the label that is used for drawing the rich text to this button.
     
     :return     <QLabel>
     """
     if not self._richTextLabel:
         self._richTextLabel = QLabel(self)
         self._richTextLabel.installEventFilter(self)
         self._richTextLabel.setMargin(10)
     return self._richTextLabel
Esempio n. 7
0
    def __init__(self, parent):
        super(XBasicCardWidget, self).__init__(parent)

        # define the interface
        self._thumbnailButton = XIconButton(self)
        self._thumbnailButton.setIconSize(QSize(64, 64))

        self._titleLabel = QLabel(self)

        layout = QHBoxLayout()
        layout.addWidget(self._thumbnailButton)
        layout.addWidget(self._titleLabel)
        self.setLayout(layout)
Esempio n. 8
0
    def __init__(self, parent, uifile=''):
        uifile = ''

        super(XSchemeConfigWidget, self).__init__(parent, uifile)

        # define the font widgets
        self._applicationFont = QFontComboBox(self)
        self._applicationFont.setProperty('dataName', wrapVariant('font'))
        self._applicationFont.setSizePolicy(QSizePolicy.Expanding,
                                            QSizePolicy.Preferred)

        self._applicationFontSize = QSpinBox(self)
        self._applicationFontSize.setProperty('dataName',
                                              wrapVariant('fontSize'))

        self._colorButton = XColorButton(self)

        hbox = QHBoxLayout()
        hbox.addWidget(QLabel('Font:', self))
        hbox.addWidget(self._applicationFont)
        hbox.addWidget(QLabel('Size:', self))
        hbox.addWidget(self._applicationFontSize)
        hbox.addWidget(QLabel('Quick Color:', self))
        hbox.addWidget(self._colorButton)

        # define the color tree
        self._colorTree = XColorTreeWidget(self)
        self._colorTree.setProperty('dataName', wrapVariant('colorSet'))

        vbox = QVBoxLayout()
        vbox.addLayout(hbox)
        vbox.addWidget(self._colorTree)

        self.setLayout(vbox)

        # create connections
        self._colorButton.colorChanged.connect(self._colorTree.setQuickColor)
Esempio n. 9
0
 def getPlainText( parent, title, caption, text = '' ):
     """
     Prompts the user for more advanced text input.
     
     :param      parent  | <QWidget> || None
                 title   | <str>
                 caption | <str>
                 text    | <str>
     
     :return     (<str>, <bool> accepted)
     """
     dlg = QDialog(parent)
     dlg.setWindowTitle(title)
     
     label = QLabel(dlg)
     label.setText(caption)
     
     edit = QTextEdit(dlg)
     edit.setText(text)
     edit.selectAll()
     
     opts = QDialogButtonBox.Ok | QDialogButtonBox.Cancel
     btns = QDialogButtonBox(opts, Qt.Horizontal, dlg)
     
     btns.accepted.connect(dlg.accept)
     btns.rejected.connect(dlg.reject)
     
     layout = QVBoxLayout()
     layout.addWidget(label)
     layout.addWidget(edit)
     layout.addWidget(btns)
     
     dlg.setLayout(layout)
     dlg.adjustSize()
     
     if ( dlg.exec_() ):
         return (edit.toPlainText(), True)
     return ('', False)
Esempio n. 10
0
    def showToolTip(text,
                    point=None,
                    anchor=None,
                    parent=None,
                    background=None,
                    foreground=None,
                    key=None,
                    seconds=5):
        """
        Displays a popup widget as a tooltip bubble.
        
        :param      text        | <str>
                    point       | <QPoint> || None
                    anchor      | <XPopupWidget.Mode.Anchor> || None
                    parent      | <QWidget> || None
                    background  | <QColor> || None
                    foreground  | <QColor> || None
                    key         | <str> || None
                    seconds     | <int>
        """
        if point is None:
            point = QCursor.pos()

        if parent is None:
            parent = QApplication.activeWindow()

        if anchor is None and parent is None:
            anchor = XPopupWidget.Anchor.TopCenter

        # create a new tooltip widget
        widget = XPopupWidget(parent)
        widget.setToolTipMode()
        widget.setResizable(False)

        # create the tooltip label
        label = QLabel(text, widget)
        label.setOpenExternalLinks(True)
        label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
        label.setMargin(3)
        label.setIndent(3)
        label.adjustSize()

        widget.setCentralWidget(label)

        # update the tip
        label.adjustSize()
        widget.adjustSize()

        palette = widget.palette()
        if not background:
            background = palette.color(palette.ToolTipBase)
        if not foreground:
            foreground = palette.color(palette.ToolTipText)

        palette.setColor(palette.Window, QColor(background))
        palette.setColor(palette.WindowText, QColor(foreground))
        widget.setPalette(palette)
        widget.centralWidget().setPalette(palette)

        if anchor is None:
            widget.setAutoCalculateAnchor(True)
        else:
            widget.setAnchor(anchor)

        widget.setAutoCloseOnFocusOut(True)
        widget.setAttribute(Qt.WA_DeleteOnClose)
        widget.popup(point)
        widget.startTimer(1000 * seconds)

        return widget
Esempio n. 11
0
 def rebuild( self ):
     """
     Rebuilds the interface for this widget based on the current model.
     """
     self.setUpdatesEnabled(False)
     self.blockSignals(True)
     
     # clear out all the subwidgets for this widget
     for child in self.findChildren(QObject):
         child.setParent(None)
         child.deleteLater()
     
     # load up all the interface for this widget
     schema = self.schema()
     if ( schema ):
         self.setEnabled(True)
         
         uifile = self.uiFile()
         
         # load a user defined file
         if ( uifile ):
             projexui.loadUi('', self, uifile)
             
             for widget in self.findChildren(XOrbColumnEdit):
                 columnName = widget.columnName()
                 column     = schema.column(columnName)
                 
                 if ( column ):
                     widget.setColumn(column)
                 else:
                     logger.debug('%s is not a valid column of %s' % \
                                  (columnName, schema.name()))
         
         # dynamically load files
         else:
             layout = QFormLayout()
             layout.setContentsMargins(0, 0, 0, 0)
             columns = schema.columns()
             columns.sort(key = lambda x: x.displayName())
             
             record = self.record()
             
             for column in columns:
                 # ignore protected columns
                 if ( column.name().startswith('_') ):
                     continue
                 
                 label   = column.displayName()
                 coltype = column.columnType()
                 name    = column.name()
                 
                 # create the column edit widget
                 widget  = XOrbColumnEdit(self)
                 widget.setObjectName('ui_' + name)
                 widget.setColumnName(name)
                 widget.setColumnType(coltype)
                 widget.setColumn(column)
                 
                 layout.addRow(QLabel(label, self), widget)
             
             self.setLayout(layout)
             self.adjustSize()
             
             self.setWindowTitle('Edit %s' % schema.name())
     else:
         self.setEnabled(False)
     
     self.setUpdatesEnabled(True)
     self.blockSignals(False)
Esempio n. 12
0
 def __init__( self, parent = None, style='gray' ):
     super(XLoaderWidget, self).__init__( parent )
     
     # define properties
     self._currentMode       = None
     self._showSubProgress   = False
     
     self.setAttribute(Qt.WA_DeleteOnClose)
     
     # udpate the palette
     palette = self.palette()
     
     if style == 'white':
         palette.setColor( palette.Window, QColor(255, 255, 255, 180) )
     else:
         palette.setColor( palette.Window, QColor( 80, 80, 80, 180 ) )
     
     palette.setColor( palette.Base, Qt.gray )
     palette.setColor( palette.AlternateBase, Qt.lightGray )
     palette.setColor( palette.WindowText, Qt.gray )
     self.setPalette(palette)
     
     # create the movie label
     self._movieLabel = QLabel(self)
     self._movieLabel.setAlignment(Qt.AlignCenter)
     self._movieLabel.setMovie(XLoaderWidget.getMovie())
     self._movieLabel.setPalette(palette)
     
     self._smallMovieLabel = QLabel(self)
     self._smallMovieLabel.setAlignment(Qt.AlignCenter)
     self._smallMovieLabel.setMovie(XLoaderWidget.getMovie())
     self._smallMovieLabel.setPalette(palette)
     self._smallMovieLabel.hide()
     
     # create text label
     self._messageLabel = QLabel(self)
     self._messageLabel.setAlignment(Qt.AlignCenter)
     self._messageLabel.setText('Loading...')
     self._messageLabel.setPalette(palette)
     
     # create primary progress bar
     self._primaryProgressBar    = XLoaderProgressBar(self)
     self._subProgressBar        = XLoaderProgressBar(self)
     
     self._primaryProgressBar.setPalette(palette)
     self._subProgressBar.setPalette(palette)
     
     # create the loader widget
     self._loaderFrame = QFrame(self)
     self._loaderFrame.setFrameShape(QFrame.Box)
     self._loaderFrame.setAutoFillBackground(True)
     self._loaderFrame.setFixedWidth(160)
     self._loaderFrame.setFixedHeight(60)
     
     if style == 'white':
         palette.setColor(palette.Window, QColor('white'))
     else:
         palette.setColor(palette.Window, QColor(85, 85, 85))
     self._loaderFrame.setPalette(palette)
     
     layout = QVBoxLayout()
     layout.addWidget(self._movieLabel)
     layout.addWidget(self._primaryProgressBar)
     layout.addWidget(self._subProgressBar)
     layout.addStretch()
     layout.addWidget(self._messageLabel)
     self._loaderFrame.setLayout(layout)
     
     # set default properties
     self.setAutoFillBackground(True)
     
     # layout the controls
     layout = QVBoxLayout()
     layout.addStretch(1)
     layout.addWidget(self._loaderFrame)
     layout.addWidget(self._smallMovieLabel)
     layout.addStretch(1)
     
     hlayout = QHBoxLayout()
     hlayout.addStretch(1)
     hlayout.addLayout(layout)
     hlayout.addStretch(1)
     
     self.setLayout(hlayout)
     self.setCurrentMode(XLoaderWidget.Mode.Spinner)
    def rebuild(self):
        """
        Rebuilds the data associated with this filter widget.
        """
        table = self.tableType()
        form = nativestring(self.filterFormat())

        if not table and form:
            if self.layout().count() == 0:
                self.layout().addWidget(QLabel(form, self))
            else:
                self.layout().itemAt(0).widget().setText(form)
            return

        elif not form:
            return

        for child in self.findChildren(QWidget):
            child.close()
            child.setParent(None)
            child.deleteLater()

        self.setUpdatesEnabled(False)
        schema = table.schema()

        vlayout = self.layout()
        for i in range(vlayout.count()):
            vlayout.takeAt(0)

        self._plugins = []
        for line in form.split('\n'):
            row = QHBoxLayout()
            row.setContentsMargins(0, 0, 0, 0)
            row.setSpacing(0)

            for label, lookup in FORMAT_SPLITTER.findall(line):
                # create the label
                lbl = QLabel(label, self)
                row.addWidget(lbl)

                # create the query plugin
                opts = lookup.split(':')
                if len(opts) == 1:
                    opts.append('is')

                column = schema.column(opts[0])
                if not column:
                    continue

                plugin = self.pluginFactory().plugin(column)
                if not plugin:
                    continue

                editor = plugin.createEditor(self, column, opts[1], None)
                if editor:
                    editor.setObjectName(opts[0])
                    row.addWidget(editor)
                    self._plugins.append((opts[0], opts[1], plugin, editor))

            row.addStretch(1)
            vlayout.addLayout(row)

        self.setUpdatesEnabled(True)
        self.adjustSize()