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)
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))
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_()
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)
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)
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.')
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))
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)
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
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