def _create_control(self, parent): """ Creates the toolkit-specific control for the widget. """ # Base-class constructor. self.control = stc = PythonSTC(parent, -1) # No folding! stc.SetProperty("fold", "0") # Mark the maximum line size. stc.SetEdgeMode(wx.stc.STC_EDGE_LINE) stc.SetEdgeColumn(79) # Display line numbers in the margin. if self.show_line_numbers: stc.SetMarginType(1, wx.stc.STC_MARGIN_NUMBER) stc.SetMarginWidth(1, 45) self.set_style(wx.stc.STC_STYLE_LINENUMBER, "#000000", "#c0c0c0") else: stc.SetMarginWidth(1, 4) self.set_style(wx.stc.STC_STYLE_LINENUMBER, "#ffffff", "#ffffff") # Create 'tabs' out of spaces! stc.SetUseTabs(False) # One 'tab' is 4 spaces. stc.SetIndent(4) # Line ending mode. stc.SetEOLMode(wx.stc.STC_EOL_LF) # Unix # self.SetEOLMode(wx.stc.STC_EOL_CR) # Apple Mac # self.SetEOLMode(wx.stc.STC_EOL_CRLF) # Windows # ------------------------------------------------------------------------ # Global styles for all languages. # ------------------------------------------------------------------------ self.set_style(wx.stc.STC_STYLE_DEFAULT, "#000000", "#ffffff") self.set_style(wx.stc.STC_STYLE_CONTROLCHAR, "#000000", "#ffffff") self.set_style(wx.stc.STC_STYLE_BRACELIGHT, "#000000", "#ffffff") self.set_style(wx.stc.STC_STYLE_BRACEBAD, "#000000", "#ffffff") # ------------------------------------------------------------------------ # Python styles. # ------------------------------------------------------------------------ # White space self.set_style(wx.stc.STC_P_DEFAULT, "#000000", "#ffffff") # Comment self.set_style(wx.stc.STC_P_COMMENTLINE, "#007f00", "#ffffff") # Number self.set_style(wx.stc.STC_P_NUMBER, "#007f7f", "#ffffff") # String self.set_style(wx.stc.STC_P_STRING, "#7f007f", "#ffffff") # Single quoted string self.set_style(wx.stc.STC_P_CHARACTER, "#7f007f", "#ffffff") # Keyword self.set_style(wx.stc.STC_P_WORD, "#00007f", "#ffffff") # Triple quotes self.set_style(wx.stc.STC_P_TRIPLE, "#7f0000", "#ffffff") # Triple double quotes self.set_style(wx.stc.STC_P_TRIPLEDOUBLE, "#ff0000", "#ffffff") # Class name definition self.set_style(wx.stc.STC_P_CLASSNAME, "#0000ff", "#ffffff") # Function or method name definition self.set_style(wx.stc.STC_P_DEFNAME, "#007f7f", "#ffffff") # Operators self.set_style(wx.stc.STC_P_OPERATOR, "#000000", "#ffffff") # Identifiers self.set_style(wx.stc.STC_P_IDENTIFIER, "#000000", "#ffffff") # Comment-blocks self.set_style(wx.stc.STC_P_COMMENTBLOCK, "#007f00", "#ffffff") # End of line where string is not closed self.set_style(wx.stc.STC_P_STRINGEOL, "#000000", "#ffffff") # ------------------------------------------------------------------------ # Events. # ------------------------------------------------------------------------ # By default, the will fire EVT_STC_CHANGE evented for all mask values # (STC_MODEVENTMASKALL). This generates too many events. stc.SetModEventMask(wx.stc.STC_MOD_INSERTTEXT | wx.stc.STC_MOD_DELETETEXT | wx.stc.STC_PERFORMED_UNDO | wx.stc.STC_PERFORMED_REDO) # Listen for changes to the file. stc.Bind(wx.stc.EVT_STC_CHANGE, self._on_stc_changed) # Listen for key press events. stc.Bind(wx.EVT_CHAR, self._on_char) # Load the editor's contents. self.load() return stc
def OnPopUp(stc, event): stc.actiondict = SetUpPopUpActions(EpyGlob.mainFrame) if not EpyGlob.PopupMenuList: EpyGlob.PopupMenuList = [ "Undo", "Redo", "<Separator>", "Cut", "Copy", "Paste", "Delete", "<Separator>", "Select All" ] stc.PopUpMenu = wx.Menu() #Franz: added getlabel functions. x = 0 l = len(EpyGlob.PopupMenuList) while x < l: try: if EpyGlob.PopupMenuList[x] == "<Separator>": stc.PopUpMenu.AppendSeparator() elif EpyGlob.PopupMenuList[x].find("<DrScript>") > -1: label = EpyGlob.PopupMenuList[x][EpyGlob.PopupMenuList[x]. find(":") + 1:] try: i = stc.grandparent.drscriptmenu.titles.index(label) stc.PopUpMenu.Append( stc.grandparent.ID_SCRIPT_BASE + i, stc.grandparent.drscriptmenu.getdrscriptmenulabel( label)) stc.Bind(wx.EVT_MENU, stc.OnPopUpMenu, id=stc.grandparent.ID_SCRIPT_BASE + i) except: pass elif EpyGlob.PopupMenuList[x].find("<Plugin>") > -1: label = EpyGlob.PopupMenuList[x][EpyGlob.PopupMenuList[x]. find(":") + 1:] try: i = stc.grandparent.PluginPopUpMenuLabels.index(label) stc.grandparent.PluginPopUpMenuLabels.index(label) stc.PopUpMenu.Append( stc.ID_POPUP_BASE + x, stc.grandparent.GetPluginMenuLabel( stc.grandparent.PluginPopUpMenuNames[i], label, label)) stc.Bind(wx.EVT_MENU, stc.OnPopUpMenu, id=stc.ID_POPUP_BASE + x) except: pass else: utils.Append_Menu(stc.PopUpMenu, stc.ID_POPUP_BASE + x, EpyGlob.PopupMenuList[x]) stc.Bind(wx.EVT_MENU, stc.OnPopUpMenu, id=stc.ID_POPUP_BASE + x) except: #Error with PopUpMenu Item pass x = x + 1 stc.PopupMenu(stc.PopUpMenu, event.GetPosition()) stc.PopUpMenu.Destroy()