def __init__(self): """ Line numbers need to be displayed in a separate panel with different styling. """ # Align right para_attribs = SimpleAttributeSet() StyleConstants.setAlignment(para_attribs, StyleConstants.ALIGN_RIGHT) self.setParagraphAttributes(para_attribs, True) # Use default font style default_attribs = SimpleAttributeSet() self.font = set_font() StyleConstants.setFontFamily(default_attribs, self.font.getFamily()) StyleConstants.setFontSize(default_attribs, self.font.getSize()) StyleConstants.setForeground(default_attribs, Color.gray) self.setCharacterAttributes(default_attribs, True) # Initialize content border = BorderFactory.createEmptyBorder(4, 4, 4, 4) self.border = border self.setText("1: \n") self.setEditable(False) # Prevent auto scroll down when line numbers are repainted caret = self.getCaret() caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE)
def __init__(self): """ Line numbers need to be displayed in a separate panel with different styling. """ # Align right para_attribs = SimpleAttributeSet() StyleConstants.setAlignment(para_attribs, StyleConstants.ALIGN_RIGHT) self.setParagraphAttributes(para_attribs, True) # Use default font style default_attribs = SimpleAttributeSet() StyleConstants.setFontFamily(default_attribs, "Monaco") StyleConstants.setFontSize(default_attribs, 14) StyleConstants.setForeground(default_attribs, Color.gray) self.setCharacterAttributes(default_attribs, True) # Initialize content border = BorderFactory.createEmptyBorder(4, 4, 4, 4) self.border = border self.setText("1: \n") self.setEditable(False) # Prevent auto scroll down when line numbers are repainted caret = self.getCaret() caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE)
def setFontSize(self, size): """ Updates the document to have the provided font size. """ # First, we need to resize all the existing text. attr = SimpleAttributeSet() StyleConstants.setFontSize(attr, size) self.setCharacterAttributes(0, self.getLength(), attr, False) # Next, ensure that new text is given the proper size. for name in self.getStyleNames(): StyleConstants.setFontSize(self.getStyle(name), size)
def get_attribs(color, error=False): ''' Closure to make the generation of font styling cleaner. Note closures need to be defined before being invoked. ''' attribs = SimpleAttributeSet() StyleConstants.setFontFamily(attribs, self.font.getFamily()) StyleConstants.setFontSize(attribs, self.font.getSize()) StyleConstants.setForeground(attribs, Color(*self.colorlut[color])) # Add yellow background to error line styling # White if no error, otherwise it'll keep on being yellow forever if error: StyleConstants.setBackground(attribs, Color.yellow) else: StyleConstants.setBackground(attribs, Color.white) return attribs
def get_attribs(color, error=False, match=False): ''' Closure to make the generation of font styling cleaner. Note closures need to be defined before being invoked. ''' attribs = SimpleAttributeSet() StyleConstants.setFontFamily(attribs, self.font.getFamily()) StyleConstants.setFontSize(attribs, self.font.getSize()) StyleConstants.setForeground(attribs, Color(*self.colorlut[color])) # Add yellow background to error line styling # White if no error, otherwise it'll keep on being yellow forever if error: StyleConstants.setBackground(attribs, Color.yellow) elif match: # TODO: Change to another background colour Eleanor likes StyleConstants.setBackground(attribs, Color.yellow) else: StyleConstants.setBackground(attribs, Color.white) return attribs
def refresh(self): ''' Restyle edit area using user selected appearance settings. ''' config = self.controller.controller.config # Create a new font with the new size font = set_font(config['edit_area_style']['fontsize']['user']) # Update the sytnax highlighter font params, so our changes are not # superceded self.controller.syntax_highlighter.font = font self.controller.syntax_highlighter.setup_attribs() attrs = self.controller.edit_area.getInputAttributes() StyleConstants.setFontSize(attrs, font.getSize()) # Get the Styledoc so we can update it doc = self.controller.edit_area.getStyledDocument() # Apply the new fontsize to the whole document doc.setCharacterAttributes(0, doc.getLength() + 1, attrs, False)
def getUiComponent(self): """Burp uses this method to obtain the component that should be used as the contents of the custom tab when it is displayed. Returns a awt.Component. """ # GUI happens here from javax.swing import (JPanel, JSplitPane, JList, JTextPane, JScrollPane, ListSelectionModel, JLabel, JTabbedPane, JEditorPane) from java.awt import BorderLayout panel = JPanel(BorderLayout()) # create a list and then JList out of it. colors = [ "red", "orange", "yellow", "green", "cyan", "blue", "pink", "magenta", "gray", "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" ] # create a list - the list is not used in this example list1 = JList(colors) list1.selectionMode = ListSelectionModel.SINGLE_SELECTION # create a StyledDocument for tab 1 from javax.swing.text import DefaultStyledDocument doc = DefaultStyledDocument() # create a JTextPane from doc tab1 = JTextPane(doc) tab1.editable = False # we can add more styles # new styles can be a child of previous styles # our first style is a child of the default style from javax.swing.text import StyleContext, StyleConstants defaultStyle = StyleContext.getDefaultStyleContext().getStyle( StyleContext.DEFAULT_STYLE) # returns a Style regular = doc.addStyle("regular", defaultStyle) StyleConstants.setFontFamily(defaultStyle, "Times New Roman") # make different styles from regular style1 = doc.addStyle("italic", regular) StyleConstants.setItalic(style1, True) style1 = doc.addStyle("bold", regular) StyleConstants.setBold(style1, True) style1 = doc.addStyle("small", regular) StyleConstants.setFontSize(style1, 10) style1 = doc.addStyle("large", regular) StyleConstants.setFontSize(style1, 16) # insert text doc.insertString(doc.length, "This is regular\n", doc.getStyle("regular")) doc.insertString(doc.length, "This is italic\n", doc.getStyle("italic")) doc.insertString(doc.length, "This is bold\n", doc.getStyle("bold")) doc.insertString(doc.length, "This is small\n", doc.getStyle("small")) doc.insertString(doc.length, "This is large\n", doc.getStyle("large")) # create the tabbedpane tabs = JTabbedPane() tabs.addTab("Tab 1", tab1) # create splitpane - horizontal split spl = JSplitPane(JSplitPane.HORIZONTAL_SPLIT, JScrollPane(list1), tabs) panel.add(spl) return panel