예제 #1
0
 def setPenColor(self, color):
     """ setPenColor(color)
     Set the color of the pen. Color can be anything that can be passed to
     Qcolor().
     """
     pen = QtGui.QPen()
     if isinstance(color, tuple):
         pen.setColor(QtGui.QColor(*color))
     else:
         pen.setColor(QtGui.QColor(color))
     self._painter.setPen(pen)
예제 #2
0
 def SetItems(parentItem, fictiveObjects, level):
     level += 1
     for object in fictiveObjects:
         type = object.type
         if not type in showTypes:
             continue
         # Construct text
         if type in ('cell', '##', '#%%', '# %%'):
             type = 'cell:'
         elif type == 'attribute':
             type = 'attr'
         #
         if type == 'import':
             text = "%s (%s)" % (object.name, object.text)
         elif type == 'todo':
             text = object.name
         else:
             text = "%s %s" % (type, object.name)
         # Create item
         thisItem = QtWidgets.QTreeWidgetItem(parentItem, [text])
         color = QtGui.QColor(colours[object.type])
         thisItem.setForeground(0, QtGui.QBrush(color))
         font = thisItem.font(0)
         font.setBold(True)
         thisItem.setFont(0, font)
         thisItem.linenr = object.linenr
         # Is this the current item?
         if ln and object.linenr <= ln and object.linenr2 > ln:
             selectedItem[0] = thisItem
         # Any children that we should display?
         if object.children:
             SetItems(thisItem, object.children, level)
         # Set visibility
         thisItem.setExpanded(bool(level < showLevel))
예제 #3
0
파일: themeEdit.py 프로젝트: sunlinjin/pyzo
 def openColorDialog(self):
     """A simple function that opens a QColorDialog 
        and link the dialog current color selection 
        to the QLineEdit text """
     dlg = QtWidgets.QColorDialog(self)
     dlg.setWindowTitle("Pick a color for the " + self.name.lower())
     dlg.setCurrentColor(QtGui.QColor(self.text()))
     dlg.currentColorChanged.connect(lambda clr: self.setText(clr.name()))
     dlg.setModal(False)
     dlg.exec_()
예제 #4
0
파일: editorTabs.py 프로젝트: ghisvail/pyzo
    def updateItems(self):
        """ updateItems()
        
        Update the appearance of the items.
        
        """

        # Get items and tab bar
        items = self.items()
        tabBar = self.tabBar()

        for i in range(len(items)):

            # Get item
            item = items[i]
            if item is None:
                continue

            # Update name and tooltip
            if item.dirty:
                #tabBar.setTabText(i, '*'+item.name)
                tabBar.setTabToolTip(i, item.filename + ' [modified]')
            else:
                tabBar.setTabText(i, item.name)
                tabBar.setTabToolTip(i, item.filename)

            # Determine text color. Is main file? Is current?
            if self._mainFile == item.id:
                tabBar.setTabTextColor(i, QtGui.QColor('#008'))
            elif i == self.currentIndex():
                tabBar.setTabTextColor(i, QtGui.QColor('#000'))
            else:
                tabBar.setTabTextColor(i, QtGui.QColor('#444'))

            # Get number of blocks
            nBlocks = item.editor.blockCount()
            if nBlocks == 1 and not item.editor.toPlainText():
                nBlocks = 0

            # Update appearance of icon
            but = tabBar.tabButton(i, QtGui.QTabBar.LeftSide)
            but.updateIcon(item.dirty, self._mainFile == item.id, item.pinned,
                           nBlocks)
예제 #5
0
파일: pdfExport.py 프로젝트: filman230/pyzo
    def _print(self):
        """Generate the pdf for preview and export"""

        if self.editor is not None:

            cursor = self.editor.textCursor()
            cursor.movePosition(cursor.Start)
            cursor.movePosition(cursor.End, cursor.KeepAnchor)

            cursor.insertText(pyzo.editors.getCurrentEditor().toPlainText())
            self._set_zoom(self.zoom_selected)

            # Print with line numbers
            lines = self.editor.toPlainText().splitlines()
            nzeros = len(str(len(lines)))

            self._apply_syntax_highlighting()
            starting_line = 0

            self._change_orientation()

            # Print name or filename in the editor
            if self.combobox_file_name.currentIndex():
                starting_line = 1
                if self.combobox_file_name.currentIndex() == 1:
                    lines.insert(0, '# ' + self.editor_name + '\n')
                elif self.combobox_file_name.currentIndex() == 2:
                    lines.insert(0, '# ' + self.editor_filename + '\n')

            # Print line numbers in the editor
            if self.show_line_number:
                for i in range(starting_line, len(lines)):
                    lines[i] = str(i+1-starting_line).rjust(nzeros, '0') \
                        + '| ' + lines[i]

            cursor = self.editor.textCursor()
            cursor.movePosition(cursor.Start)
            cursor.movePosition(cursor.End, cursor.KeepAnchor)
            cursor.insertText('\n'.join(lines))

            # Highlight line numbers
            if self.show_line_number:
                cursor.movePosition(cursor.Start, cursor.MoveAnchor)
                # Move the cursor down 2 lines if a title is printed
                if starting_line != 0:
                    cursor.movePosition(cursor.NextBlock, cursor.MoveAnchor, 2)
                # Apply background for lines numbers
                for i in range(len(lines)):
                    fmt = QtGui.QTextCharFormat()
                    fmt.setBackground(QtGui.QColor(240, 240, 240))
                    cursor.movePosition(cursor.Right, cursor.KeepAnchor,
                                        nzeros)
                    cursor.setCharFormat(fmt)
                    cursor.movePosition(cursor.NextBlock, cursor.MoveAnchor)
                    cursor.movePosition(cursor.StartOfBlock, cursor.MoveAnchor)
예제 #6
0
    def _getPixmap(self, icon):

        # Get icon if given by name
        if isinstance(icon, str):
            icon = pyzo.icons[icon]

        # Create pixmap
        if icon is None:
            pm = QtGui.QPixmap(16, 16)
            pm.fill(QtGui.QColor(0, 0, 0, 0))
            return pm
        elif isinstance(icon, tuple):
            pm = QtGui.QPixmap(icon[0], icon[1])
            pm.fill(QtGui.QColor(0, 0, 0, 0))
            return pm
        elif isinstance(icon, QtGui.QPixmap):
            return icon
        elif isinstance(icon, QtGui.QIcon):
            return icon.pixmap(16, 16)
        else:
            raise ValueError(
                'Icon for IconArtis should be icon, pixmap or name.')
예제 #7
0
        def SetItems(parentItem, fictiveObjects, level):
            level += 1
            for object in fictiveObjects:
                type = object.type
                if type not in showTypes and type != "nameismain":
                    continue
                # Construct text
                if type == "import":
                    text = "→ %s (%s)" % (object.name, object.text)
                elif type == "todo":
                    text = object.name
                elif type == "nameismain":
                    text = object.text
                elif type == "class":
                    text = object.name
                elif type == "def":
                    text = object.name + "()"
                elif type == "attribute":
                    text = "- " + object.name
                elif type in ("cell", "##", "#%%", "# %%"):
                    type = "cell"
                    text = "## " + object.name + " " * 120
                else:
                    text = "%s %s" % (type, object.name)
                # Create item
                thisItem = QtWidgets.QTreeWidgetItem(parentItem, [text])
                color = QtGui.QColor(colours[object.type])
                bold = bolds[object.type]
                thisItem.setForeground(0, QtGui.QBrush(color))
                font = thisItem.font(0)

                if bold == "yes":
                    font.setBold(True)
                else:
                    font.setBold(False)

                if type == "cell":
                    font.setUnderline(True)
                thisItem.setFont(0, font)
                thisItem.linenr = object.linenr
                # Is this the current item?
                if ln and object.linenr <= ln and object.linenr2 > ln:
                    selectedItem[0] = thisItem
                # Any children that we should display?
                if object.children:
                    SetItems(thisItem, object.children, level)
                # Set visibility
                thisItem.setExpanded(bool(level < showLevel))
예제 #8
0
 def data(self, index, role):
     if role == QtCore.Qt.ForegroundRole:
         text = super().data(index, QtCore.Qt.DisplayRole)
         if text.lstrip().startswith('#'):
             return QtGui.QBrush(QtGui.QColor('#007F00'))
     return super().data(index, role)
예제 #9
0
    def updateStructure(self):
        """ Updates the tree. 
        """

        # Get editor
        editor = pyzo.editors.getCurrentEditor()
        if not editor:
            return

        # Something to show
        result = pyzo.parser._getResult()
        if result is None:
            return

        # Do the ids match?
        id0, id1, id2 = self._currentEditorId, id(editor), result.editorId
        if id0 != id1 or id0 != id2:
            return

        # Get current line number and the structure
        ln = editor.textCursor().blockNumber()
        ln += 1  # is ln as in line number area

        # Define colours
        colours = {
            'cell': '#007F00',
            'class': '#0000FF',
            'def': '#007F7F',
            'attribute': '#444444',
            'import': '#8800BB',
            'todo': '#FF3333'
        }

        # Define what to show
        showTypes = self._config.showTypes

        # Define to what level to show (now is also a good time to save)
        showLevel = int(self._slider.value())
        self._config.level = showLevel

        # Define function to set items
        selectedItem = [None]

        def SetItems(parentItem, fictiveObjects, level):
            level += 1
            for object in fictiveObjects:
                type = object.type
                if not type in showTypes:
                    continue
                # Construct text
                if type in ('cell', '##', '#%%', '# %%'):
                    type = 'cell:'
                elif type == 'attribute':
                    type = 'attr'
                #
                if type == 'import':
                    text = "%s (%s)" % (object.name, object.text)
                elif type == 'todo':
                    text = object.name
                else:
                    text = "%s %s" % (type, object.name)
                # Create item
                thisItem = QtWidgets.QTreeWidgetItem(parentItem, [text])
                color = QtGui.QColor(colours[object.type])
                thisItem.setForeground(0, QtGui.QBrush(color))
                font = thisItem.font(0)
                font.setBold(True)
                thisItem.setFont(0, font)
                thisItem.linenr = object.linenr
                # Is this the current item?
                if ln and object.linenr <= ln and object.linenr2 > ln:
                    selectedItem[0] = thisItem
                # Any children that we should display?
                if object.children:
                    SetItems(thisItem, object.children, level)
                # Set visibility
                thisItem.setExpanded(bool(level < showLevel))

        # Go
        self._tree.setUpdatesEnabled(False)
        self._tree.clear()
        SetItems(self._tree, result.rootItem.children, 0)
        self._tree.setUpdatesEnabled(True)

        # Handle selected item
        selectedItem = selectedItem[0]
        if selectedItem:
            selectedItem.setBackground(0, QtGui.QBrush(QtGui.QColor('#CCC')))
            self._tree.scrollToItem(selectedItem)  # ensure visible
예제 #10
0
    def updateStructure(self):
        """Updates the tree."""

        # Get editor
        editor = pyzo.editors.getCurrentEditor()
        if not editor:
            return

        # Something to show
        result = pyzo.parser._getResult()
        if result is None:
            return

        # Do the ids match?
        id0, id1, id2 = self._currentEditorId, id(editor), result.editorId
        if id0 != id1 or id0 != id2:
            return

        # Get current line number and the structure
        ln = editor.textCursor().blockNumber()
        ln += 1  # is ln as in line number area

        # Define colours
        colours = {
            "cell": "#b58900",
            "class": "#cb4b16",
            "def": "#073642",
            "attribute": "#657b83",
            "import": "#268bd2",
            "todo": "#d33682",
            "nameismain": "#859900",
        }
        # colours = {'cell':'#007F00', 'class':'#0000FF', 'def':'#007F7F',
        #            'attribute':'#444444', 'import':'#8800BB', 'todo':'#FF3333',
        #            'nameismain':'#007F00'}

        # Define what to show
        showTypes = self._config.showTypes

        # Define to what level to show (now is also a good time to save)
        showLevel = int(self._slider.value())
        self._config.level = showLevel
        showLevel = showLevel if showLevel < 5 else 99

        # Define function to set items
        selectedItem = [None]

        def SetItems(parentItem, fictiveObjects, level):
            level += 1
            for object in fictiveObjects:
                type = object.type
                if type not in showTypes and type != "nameismain":
                    continue
                # Construct text
                if type == "import":
                    text = "→ %s (%s)" % (object.name, object.text)
                elif type == "todo":
                    text = object.name
                elif type == "nameismain":
                    text = object.text
                elif type == "class":
                    text = object.name
                elif type == "def":
                    text = object.name + "()"
                elif type == "attribute":
                    text = "- " + object.name
                elif type in ("cell", "##", "#%%", "# %%"):
                    type = "cell"
                    text = "## " + object.name + " " * 120
                else:
                    text = "%s %s" % (type, object.name)
                # Create item
                thisItem = QtWidgets.QTreeWidgetItem(parentItem, [text])
                color = QtGui.QColor(colours[object.type])
                thisItem.setForeground(0, QtGui.QBrush(color))
                font = thisItem.font(0)
                font.setBold(True)
                if type == "cell":
                    font.setUnderline(True)
                thisItem.setFont(0, font)
                thisItem.linenr = object.linenr
                # Is this the current item?
                if ln and object.linenr <= ln and object.linenr2 > ln:
                    selectedItem[0] = thisItem
                # Any children that we should display?
                if object.children:
                    SetItems(thisItem, object.children, level)
                # Set visibility
                thisItem.setExpanded(bool(level < showLevel))

        # Go
        self._tree.setUpdatesEnabled(False)
        self._tree.clear()
        SetItems(self._tree, result.rootItem.children, 0)
        self._tree.setUpdatesEnabled(True)

        # Handle selected item
        selectedItem = selectedItem[0]
        if selectedItem:
            selectedItem.setBackground(0, QtGui.QBrush(QtGui.QColor("#CCC")))
            self._tree.scrollToItem(selectedItem)  # ensure visible