Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
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()