X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ec873c943d71f0d5f13e3398557071448cda6c23..a4027e74873007e3430af3bd77019bcab76f6c04:/wxPython/samples/ide/activegrid/tool/PythonEditor.py diff --git a/wxPython/samples/ide/activegrid/tool/PythonEditor.py b/wxPython/samples/ide/activegrid/tool/PythonEditor.py deleted file mode 100644 index abde6fd97b..0000000000 --- a/wxPython/samples/ide/activegrid/tool/PythonEditor.py +++ /dev/null @@ -1,690 +0,0 @@ -#---------------------------------------------------------------------------- -# Name: PythonEditor.py -# Purpose: PythonEditor for wx.lib.pydocview tbat uses the Styled Text Control -# -# Author: Peter Yared -# -# Created: 8/15/03 -# CVS-ID: $Id$ -# Copyright: (c) 2004-2005 ActiveGrid, Inc. -# License: wxWindows License -#---------------------------------------------------------------------------- - -import CodeEditor -import wx -import wx.lib.docview -import wx.lib.pydocview -import string -import keyword # So it knows what to hilite -import wx.py # For the Python interpreter -import wx.stc # For the Python interpreter -import cStringIO # For indent -import OutlineService -import STCTextEditor -import keyword # for GetAutoCompleteKeywordList -import sys # for GetAutoCompleteKeywordList -import MessageService # for OnCheckCode -import OutlineService -import FindInDirService -from UICommon import CaseInsensitiveCompare -try: - import checker # for pychecker - _CHECKER_INSTALLED = True -except ImportError: - _CHECKER_INSTALLED = False -import os.path # for pychecker -_ = wx.GetTranslation - -if wx.Platform == '__WXMSW__': - _WINDOWS = True -else: - _WINDOWS = False - - -VIEW_PYTHON_INTERPRETER_ID = wx.NewId() - - -class PythonDocument(CodeEditor.CodeDocument): - pass - - -class PythonView(CodeEditor.CodeView): - - - def GetCtrlClass(self): - """ Used in split window to instantiate new instances """ - return PythonCtrl - - - def ProcessUpdateUIEvent(self, event): - if not self.GetCtrl(): - return False - - id = event.GetId() - if id == CodeEditor.CHECK_CODE_ID: - hasText = self.GetCtrl().GetTextLength() > 0 - event.Enable(hasText) - return True - - return CodeEditor.CodeView.ProcessUpdateUIEvent(self, event) - - - def OnActivateView(self, activate, activeView, deactiveView): - STCTextEditor.TextView.OnActivateView(self, activate, activeView, deactiveView) - if activate and self.GetCtrl(): - if self.GetDocumentManager().GetFlags() & wx.lib.docview.DOC_SDI: - self.LoadOutline() - else: - wx.CallAfter(self.LoadOutline) # need CallAfter because document isn't loaded yet - - - def OnClose(self, deleteWindow = True): - status = STCTextEditor.TextView.OnClose(self, deleteWindow) - wx.CallAfter(self.ClearOutline) # need CallAfter because when closing the document, it is Activated and then Close, so need to match OnActivateView's CallAfter - return status - - - def GetAutoCompleteKeywordList(self, context, hint): - obj = None - try: - if context and len(context): - obj = eval(context, globals(), locals()) - except: - if not hint or len(hint) == 0: # context isn't valid, maybe it was the hint - hint = context - - if obj is None: - kw = keyword.kwlist[:] - else: - symTbl = dir(obj) - kw = filter(lambda item: item[0] != '_', symTbl) # remove local variables and methods - - if hint and len(hint): - lowerHint = hint.lower() - filterkw = filter(lambda item: item.lower().startswith(lowerHint), kw) # remove variables and methods that don't match hint - kw = filterkw - - kw.sort(CaseInsensitiveCompare) - - if hint: - replaceLen = len(hint) - else: - replaceLen = 0 - - return " ".join(kw), replaceLen - - - def OnCheckCode(self): - if not _CHECKER_INSTALLED: - wx.MessageBox(_("pychecker not found. Please install pychecker."), _("Check Code")) - return - - filename = os.path.basename(self.GetDocument().GetFilename()) - - # pychecker only works on files, doesn't take a stream or string input - if self.GetDocument().IsModified(): - dlg = wx.MessageDialog(self.GetFrame(), _("'%s' has been modfied and must be saved first. Save file and check code?") % filename, _("Check Code")) - dlg.CenterOnParent() - val = dlg.ShowModal() - dlg.Destroy() - if val == wx.ID_OK: - self.GetDocument().Save() - else: - return - - messageService = wx.GetApp().GetService(MessageService.MessageService) - messageService.ShowWindow() - view = messageService.GetView() - if not view: - return - - view.ClearLines() - view.SetCallback(self.OnJumpToFoundLine) - - # Set cursor to Wait cursor - wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_WAIT)) - - try: - # This takes a while for involved code - checker.checkSyntax(self.GetDocument().GetFilename(), view) - - finally: - # Set cursor to Default cursor - wx.GetApp().GetTopWindow().SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT)) - - - def OnJumpToFoundLine(self, event): - messageService = wx.GetApp().GetService(MessageService.MessageService) - lineText, pos = messageService.GetView().GetCurrLine() - - lineEnd = lineText.find(".py:") - if lineEnd == -1: - return - - lineStart = lineEnd + len(".py:") - lineEnd = lineText.find(":", lineStart) - lineNum = int(lineText[lineStart:lineEnd]) - - filename = lineText[0:lineStart - 1] - - foundView = None - openDocs = wx.GetApp().GetDocumentManager().GetDocuments() - for openDoc in openDocs: - if openDoc.GetFilename() == filename: - foundView = openDoc.GetFirstView() - break - - if not foundView: - doc = wx.GetApp().GetDocumentManager().CreateDocument(filename, wx.lib.docview.DOC_SILENT|wx.lib.docview.DOC_OPEN_ONCE) - foundView = doc.GetFirstView() - - if foundView: - foundView.GetFrame().SetFocus() - foundView.Activate() - foundView.GotoLine(lineNum) - startPos = foundView.PositionFromLine(lineNum) - endPos = foundView.GetLineEndPosition(lineNum) - # wxBug: Need to select in reverse order, (end, start) to put cursor at head of line so positioning is correct - # Also, if we use the correct positioning order (start, end), somehow, when we open a edit window for the first - # time, we don't see the selection, it is scrolled off screen - foundView.SetSelection(endPos, startPos) - wx.GetApp().GetService(OutlineService.OutlineService).LoadOutline(foundView, position=startPos) - - - -class PythonInterpreterView(wx.lib.docview.View): - - - def OnCreate(self, doc, flags): - frame = wx.GetApp().CreateDocumentFrame(self, doc, flags) - sizer = wx.BoxSizer() - self._pyCrust = wx.py.crust.Crust(frame) - sizer.Add(self._pyCrust, 1, wx.EXPAND, 0) - frame.SetSizer(sizer) - frame.Layout() - self.Activate() - frame.Show() - return True - - - def ProcessEvent(self, event): - if not hasattr(self, "_pyCrust") or not self._pyCrust: - return wx.lib.docview.View.ProcessEvent(self, event) - stcControl = wx.Window_FindFocus() - if not isinstance(stcControl, wx.stc.StyledTextCtrl): - return wx.lib.docview.View.ProcessEvent(self, event) - id = event.GetId() - if id == wx.ID_UNDO: - stcControl.Undo() - return True - elif id == wx.ID_REDO: - stcControl.Redo() - return True - elif id == wx.ID_CUT: - stcControl.Cut() - return True - elif id == wx.ID_COPY: - stcControl.Copy() - return True - elif id == wx.ID_PASTE: - stcControl.Paste() - return True - elif id == wx.ID_CLEAR: - stcControl.Clear() - return True - elif id == wx.ID_SELECTALL: - stcControl.SetSelection(0, -1) - return True - else: - return wx.lib.docview.View.ProcessEvent(self, event) - - - def ProcessUpdateUIEvent(self, event): - if not hasattr(self, "_pyCrust") or not self._pyCrust: - return wx.lib.docview.View.ProcessUpdateUIEvent(self, event) - stcControl = wx.Window_FindFocus() - if not isinstance(stcControl, wx.stc.StyledTextCtrl): - return wx.lib.docview.View.ProcessUpdateUIEvent(self, event) - id = event.GetId() - if id == wx.ID_UNDO: - event.Enable(stcControl.CanUndo()) - return True - elif id == wx.ID_REDO: - event.Enable(stcControl.CanRedo()) - return True - elif id == wx.ID_CUT: - event.Enable(stcControl.CanCut()) - return True - elif id == wx.ID_COPY: - event.Enable(stcControl.CanCopy()) - return True - elif id == wx.ID_PASTE: - event.Enable(stcControl.CanPaste()) - return True - elif id == wx.ID_CLEAR: - event.Enable(True) # wxBug: should be stcControl.CanCut()) but disabling clear item means del key doesn't work in control as expected - return True - elif id == wx.ID_SELECTALL: - event.Enable(stcControl.GetTextLength() > 0) - return True - else: - return wx.lib.docview.View.ProcessUpdateUIEvent(self, event) - - - def OnClose(self, deleteWindow=True): - if deleteWindow and self.GetFrame(): - self.GetFrame().Destroy() - return True - - -class PythonInterpreterDocument(wx.lib.docview.Document): - """ Generate Unique Doc Type """ - pass - - -class PythonService(CodeEditor.CodeService): - - - def __init__(self): - CodeEditor.CodeService.__init__(self) - docManager = wx.GetApp().GetDocumentManager() - pythonInterpreterTemplate = wx.lib.docview.DocTemplate(docManager, - _("Python Interpreter"), - "*.Foobar", - "Foobar", - ".Foobar", - _("Python Interpreter Document"), - _("Python Interpreter View"), - PythonInterpreterDocument, - PythonInterpreterView, - flags = wx.lib.docview.TEMPLATE_INVISIBLE, - icon = getPythonIcon()) - docManager.AssociateTemplate(pythonInterpreterTemplate) - - - def InstallControls(self, frame, menuBar = None, toolBar = None, statusBar = None, document = None): - CodeEditor.CodeService.InstallControls(self, frame, menuBar, toolBar, statusBar, document) - - if document and document.GetDocumentTemplate().GetDocumentType() != PythonDocument: - return - if not document and wx.GetApp().GetDocumentManager().GetFlags() & wx.lib.docview.DOC_SDI: - return - - viewMenu = menuBar.GetMenu(menuBar.FindMenu(_("&View"))) - - viewStatusBarItemPos = self.GetMenuItemPos(viewMenu, wx.lib.pydocview.VIEW_STATUSBAR_ID) - viewMenu.InsertCheckItem(viewStatusBarItemPos + 1, VIEW_PYTHON_INTERPRETER_ID, _("Python &Interpreter"), _("Shows or hides the Python interactive window")) - wx.EVT_MENU(frame, VIEW_PYTHON_INTERPRETER_ID, frame.ProcessEvent) - wx.EVT_UPDATE_UI(frame, VIEW_PYTHON_INTERPRETER_ID, frame.ProcessUpdateUIEvent) - - - def ProcessEvent(self, event): - id = event.GetId() - if id == VIEW_PYTHON_INTERPRETER_ID: - self.OnViewPythonInterpreter(event) - return True - else: - return CodeEditor.CodeService.ProcessEvent(self, event) - - - def ProcessUpdateUIEvent(self, event): - id = event.GetId() - if id == VIEW_PYTHON_INTERPRETER_ID: - event.Enable(True) - docManager = wx.GetApp().GetDocumentManager() - event.Check(False) - for doc in docManager.GetDocuments(): - if isinstance(doc, PythonInterpreterDocument): - event.Check(True) - break - return True - else: - return CodeEditor.CodeService.ProcessUpdateUIEvent(self, event) - - - def OnViewPythonInterpreter(self, event): - for doc in wx.GetApp().GetDocumentManager().GetDocuments(): - if isinstance(doc, PythonInterpreterDocument): - doc.DeleteAllViews() - return - - for template in self.GetDocumentManager().GetTemplates(): - if template.GetDocumentType() == PythonInterpreterDocument: - newDoc = template.CreateDocument('', wx.lib.docview.DOC_SILENT|wx.lib.docview.DOC_OPEN_ONCE) - if newDoc: - newDoc.SetDocumentName(template.GetDocumentName()) - newDoc.SetDocumentTemplate(template) - newDoc.OnNewDocument() - newDoc.SetWriteable(False) - newDoc.GetFirstView().GetFrame().SetTitle(_("Python Interpreter")) - break - - -class PythonCtrl(CodeEditor.CodeCtrl): - - - def __init__(self, parent, id=-1, style=wx.NO_FULL_REPAINT_ON_RESIZE): - CodeEditor.CodeCtrl.__init__(self, parent, id, style) - self.SetProperty("tab.timmy.whinge.level", "1") - self.SetProperty("fold.comment.python", "1") - self.SetProperty("fold.quotes.python", "1") - self.SetLexer(wx.stc.STC_LEX_PYTHON) - self.SetKeyWords(0, string.join(keyword.kwlist)) - - - def CreatePopupMenu(self): - FINDCLASS_ID = wx.NewId() - FINDDEF_ID = wx.NewId() - - menu = CodeEditor.CodeCtrl.CreatePopupMenu(self) - - self.Bind(wx.EVT_MENU, self.OnPopFindDefinition, id=FINDDEF_ID) - menu.Insert(1, FINDDEF_ID, _("Find 'def'")) - - self.Bind(wx.EVT_MENU, self.OnPopFindClass, id=FINDCLASS_ID) - menu.Insert(2, FINDCLASS_ID, _("Find 'class'")) - - return menu - - - def OnPopFindDefinition(self, event): - view = wx.GetApp().GetDocumentManager().GetCurrentView() - if hasattr(view, "GetCtrl") and view.GetCtrl() and hasattr(view.GetCtrl(), "GetSelectedText"): - pattern = view.GetCtrl().GetSelectedText().strip() - if pattern: - searchPattern = "def\s+%s" % pattern - wx.GetApp().GetService(FindInDirService.FindInDirService).FindInProject(searchPattern) - - - def OnPopFindClass(self, event): - view = wx.GetApp().GetDocumentManager().GetCurrentView() - if hasattr(view, "GetCtrl") and view.GetCtrl() and hasattr(view.GetCtrl(), "GetSelectedText"): - definition = "class\s+%s" - pattern = view.GetCtrl().GetSelectedText().strip() - if pattern: - searchPattern = definition % pattern - wx.GetApp().GetService(FindInDirService.FindInDirService).FindInProject(searchPattern) - - - def SetViewDefaults(self): - CodeEditor.CodeCtrl.SetViewDefaults(self, configPrefix="Python", hasWordWrap=True, hasTabs=True, hasFolding=True) - - - def GetFontAndColorFromConfig(self): - return CodeEditor.CodeCtrl.GetFontAndColorFromConfig(self, configPrefix = "Python") - - - def UpdateStyles(self): - CodeEditor.CodeCtrl.UpdateStyles(self) - - if not self.GetFont(): - return - - faces = { 'font' : self.GetFont().GetFaceName(), - 'size' : self.GetFont().GetPointSize(), - 'size2': self.GetFont().GetPointSize() - 2, - 'color' : "%02x%02x%02x" % (self.GetFontColor().Red(), self.GetFontColor().Green(), self.GetFontColor().Blue()) - } - - # Python styles - # White space - self.StyleSetSpec(wx.stc.STC_P_DEFAULT, "face:%(font)s,fore:#000000,face:%(font)s,size:%(size)d" % faces) - # Comment - self.StyleSetSpec(wx.stc.STC_P_COMMENTLINE, "face:%(font)s,fore:#007F00,italic,face:%(font)s,size:%(size)d" % faces) - # Number - self.StyleSetSpec(wx.stc.STC_P_NUMBER, "face:%(font)s,fore:#007F7F,size:%(size)d" % faces) - # String - self.StyleSetSpec(wx.stc.STC_P_STRING, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces) - # Single quoted string - self.StyleSetSpec(wx.stc.STC_P_CHARACTER, "face:%(font)s,fore:#7F007F,face:%(font)s,size:%(size)d" % faces) - # Keyword - self.StyleSetSpec(wx.stc.STC_P_WORD, "face:%(font)s,fore:#00007F,bold,size:%(size)d" % faces) - # Triple quotes - self.StyleSetSpec(wx.stc.STC_P_TRIPLE, "face:%(font)s,fore:#7F0000,size:%(size)d" % faces) - # Triple double quotes - self.StyleSetSpec(wx.stc.STC_P_TRIPLEDOUBLE, "face:%(font)s,fore:#7F0000,size:%(size)d" % faces) - # Class name definition - self.StyleSetSpec(wx.stc.STC_P_CLASSNAME, "face:%(font)s,fore:#0000FF,bold,size:%(size)d" % faces) - # Function or method name definition - self.StyleSetSpec(wx.stc.STC_P_DEFNAME, "face:%(font)s,fore:#007F7F,bold,size:%(size)d" % faces) - # Operators - self.StyleSetSpec(wx.stc.STC_P_OPERATOR, "face:%(font)s,size:%(size)d" % faces) - # Identifiers - self.StyleSetSpec(wx.stc.STC_P_IDENTIFIER, "face:%(font)s,fore:#%(color)s,face:%(font)s,size:%(size)d" % faces) - # Comment-blocks - self.StyleSetSpec(wx.stc.STC_P_COMMENTBLOCK, "face:%(font)s,fore:#7F7F7F,size:%(size)d" % faces) - # End of line where string is not closed - self.StyleSetSpec(wx.stc.STC_P_STRINGEOL, "face:%(font)s,fore:#000000,face:%(font)s,back:#E0C0E0,eol,size:%(size)d" % faces) - - - def OnUpdateUI(self, evt): - braces = self.GetMatchingBraces() - - # check for matching braces - braceAtCaret = -1 - braceOpposite = -1 - charBefore = None - caretPos = self.GetCurrentPos() - if caretPos > 0: - charBefore = self.GetCharAt(caretPos - 1) - styleBefore = self.GetStyleAt(caretPos - 1) - - # check before - if charBefore and chr(charBefore) in braces and styleBefore == wx.stc.STC_P_OPERATOR: - braceAtCaret = caretPos - 1 - - # check after - if braceAtCaret < 0: - charAfter = self.GetCharAt(caretPos) - styleAfter = self.GetStyleAt(caretPos) - if charAfter and chr(charAfter) in braces and styleAfter == wx.stc.STC_P_OPERATOR: - braceAtCaret = caretPos - - if braceAtCaret >= 0: - braceOpposite = self.BraceMatch(braceAtCaret) - - if braceAtCaret != -1 and braceOpposite == -1: - self.BraceBadLight(braceAtCaret) - else: - self.BraceHighlight(braceAtCaret, braceOpposite) - - evt.Skip() - - - def DoIndent(self): - (text, caretPos) = self.GetCurLine() - - self._tokenizerChars = {} # This is really too much, need to find something more like a C array - for i in range(len(text)): - self._tokenizerChars[i] = 0 - - ctext = cStringIO.StringIO(text) - try: - tokenize.tokenize(ctext.readline, self) - except: - pass - - # Left in for debugging purposes: - #for i in range(len(text)): - # print i, text[i], self._tokenizerChars[i] - - if caretPos == 0 or len(string.strip(text)) == 0: # At beginning of line or within an empty line - self.AddText('\n') - else: - doExtraIndent = False - brackets = False - commentStart = -1 - if caretPos > 1: - startParenCount = 0 - endParenCount = 0 - startSquareBracketCount = 0 - endSquareBracketCount = 0 - startCurlyBracketCount = 0 - endCurlyBracketCount = 0 - startQuoteCount = 0 - endQuoteCount = 0 - for i in range(caretPos - 1, -1, -1): # Go through each character before the caret - if i >= len(text): # Sometimes the caret is at the end of the text if there is no LF - continue - if self._tokenizerChars[i] == 1: - continue - elif self._tokenizerChars[i] == 2: - startQuoteCount = startQuoteCount + 1 - elif self._tokenizerChars[i] == 3: - endQuoteCount = endQuoteCount + 1 - elif text[i] == '(': # Would be nice to use a dict for this, but the code is much more readable this way - startParenCount = startParenCount + 1 - elif text[i] == ')': - endParenCount = endParenCount + 1 - elif text[i] == "[": - startSquareBracketCount = startSquareBracketCount + 1 - elif text[i] == "]": - endSquareBracketCount = endSquareBracketCount + 1 - elif text[i] == "{": - startCurlyBracketCount = startCurlyBracketCount + 1 - elif text[i] == "}": - endCurlyBracketCount = endCurlyBracketCount + 1 - elif text[i] == "#": - commentStart = i - break - if startQuoteCount > endQuoteCount or startParenCount > endParenCount or startSquareBracketCount > endSquareBracketCount or startCurlyBracketCount > endCurlyBracketCount: - if i + 1 >= caretPos: # Caret is right at the open paren, so just do indent as if colon was there - doExtraIndent = True - break - else: - spaces = " " * (i + 1) - brackets = True - break - if not brackets: - spaces = text[0:len(text) - len(string.lstrip(text))] - if caretPos < len(spaces): # If within the opening spaces of a line - spaces = spaces[:caretPos] - - # strip comment off - if commentStart != -1: - text = text[0:commentStart] - - textNoTrailingSpaces = text[0:caretPos].rstrip() - if doExtraIndent or len(textNoTrailingSpaces) and textNoTrailingSpaces[-1] == ':': - spaces = spaces + ' ' * self.GetIndent() - self.AddText('\n' + spaces) - self.EnsureCaretVisible() - - - # Callback for tokenizer in self.DoIndent - def __call__(self, toktype, toktext, (srow,scol), (erow,ecol), line): - if toktype == tokenize.COMMENT: - for i in range(scol, ecol + 1): - self._validChars[i] = False - elif toktype == token.STRING: - self._tokenizerChars[scol] = 2 # Open quote - self._tokenizerChars[ecol - 1] = 3 # Close quote - for i in range(scol + 1, ecol - 2): - self._tokenizerChars[i] = 1 # Part of string, 1 == ignore the char - - -class PythonOptionsPanel(wx.Panel): - - def __init__(self, parent, id): - wx.Panel.__init__(self, parent, id) - pathLabel = wx.StaticText(self, -1, _("python.exe Path:")) - config = wx.ConfigBase_Get() - path = config.Read("ActiveGridPythonLocation") - self._pathTextCtrl = wx.TextCtrl(self, -1, path, size = (150, -1)) - self._pathTextCtrl.SetToolTipString(self._pathTextCtrl.GetValue()) - self._pathTextCtrl.SetInsertionPointEnd() - choosePathButton = wx.Button(self, -1, _("Browse...")) - pathSizer = wx.BoxSizer(wx.HORIZONTAL) - HALF_SPACE = 5 - SPACE = 10 - pathSizer.Add(pathLabel, 0, wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.TOP, HALF_SPACE) - pathSizer.Add(self._pathTextCtrl, 1, wx.EXPAND|wx.LEFT|wx.TOP, HALF_SPACE) - pathSizer.Add(choosePathButton, 0, wx.ALIGN_RIGHT|wx.LEFT|wx.RIGHT|wx.TOP, HALF_SPACE) - wx.EVT_BUTTON(self, choosePathButton.GetId(), self.OnChoosePath) - mainSizer = wx.BoxSizer(wx.VERTICAL) - mainSizer.Add(pathSizer, 0, wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, SPACE) - - self._otherOptions = STCTextEditor.TextOptionsPanel(self, -1, configPrefix = "Python", label = "Python", hasWordWrap = True, hasTabs = True, addPage=False, hasFolding=True) - mainSizer.Add(self._otherOptions, 0, wx.EXPAND|wx.BOTTOM, SPACE) - self.SetSizer(mainSizer) - parent.AddPage(self, _("Python")) - - - def OnChoosePath(self, event): - defaultDir = os.path.dirname(self._pathTextCtrl.GetValue().strip()) - defaultFile = os.path.basename(self._pathTextCtrl.GetValue().strip()) - if _WINDOWS: - wildcard = _("Executable (*.exe)|*.exe|All|*.*") - if not defaultFile: - defaultFile = "python.exe" - else: - wildcard = _("*") - dlg = wx.FileDialog(wx.GetApp().GetTopWindow(), - _("Select a File"), - defaultDir=defaultDir, - defaultFile=defaultFile, - wildcard=wildcard, - style=wx.OPEN|wx.FILE_MUST_EXIST|wx.HIDE_READONLY) - # dlg.CenterOnParent() # wxBug: caused crash with wx.FileDialog - if dlg.ShowModal() == wx.ID_OK: - path = dlg.GetPath() - if path: - self._pathTextCtrl.SetValue(path) - self._pathTextCtrl.SetToolTipString(self._pathTextCtrl.GetValue()) - self._pathTextCtrl.SetInsertionPointEnd() - dlg.Destroy() - - - def OnOK(self, optionsDialog): - config = wx.ConfigBase_Get() - config.Write("ActiveGridPythonLocation", self._pathTextCtrl.GetValue().strip()) - - self._otherOptions.OnOK(optionsDialog) - - - def GetIcon(self): - return getPythonIcon() - - -#---------------------------------------------------------------------------- -# Icon Bitmaps - generated by encode_bitmaps.py -#---------------------------------------------------------------------------- -from wx import ImageFromStream, BitmapFromImage -import cStringIO - - -def getPythonData(): - return \ -'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\ -\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\ -\x00\x01\xe7IDAT8\x8d}\x921h\x13Q\x18\xc7\x7fw\xb9\x0ei\x9d*\xbd\xeb\x10\x8f\ -,\x99\x1c*A[\xaa\x19B\xe8\xd0\xb1\x0e%K\x87\x88T2\x88Cqp\tD\x14i\xe9\xe0V\ -\xdaQ\xb7\xe0P\xa1\x8b\xa0(\x95$z\xd5Q1\x90\xa2\xd7\x9a4^\x87\xa0`\x92!w9\ -\x87\xf8.\xb9\xa6\xc97\xbd\xef{\xef\xfb\xbd\xff\xfb\xbfO*~;v\xf9\x1f\xad\xba\ -\x05@\xf9\xd4\x06\xc0::$\xbb\x96\x92\x18\x11\n@(4\xdd\xcdB\xd3\xd4\x1d\x85\ -\x8b\x97\xe1\xe3;\x83\x99\xe5\x15\xb2\xe0\x8e\x82\xc8\xa3\xe8\x003\xcb+\xac\ -\xaee\xdda\xfb\xb2\x90\rPw\x14\x00\x9a\xb5\n\xbf\xfflSz\x9d\xa2Y\xdc"zca\xe8\ -\x05\xb2h\x14\xcd\xd0\xf3B\x9f\x98\xe5\xf9\xde\x13"\xaaB\xc7\xb1\xcfU!\x0b\ -\xc3D4k\x15\xac\x93\x03\xf4\x89Y\xaf\x96\xffT\x028\x17\xa2\xf4\'\xcdZ\x85\ -\xf7F\x06{\xaa\x80ev\xc1\x91\xb91>\x18\x0f\xb8\xb7\x95a\xe9\xca\x0b:\x8e\xed\ -\xca\x01E\x1a\x00\x98\r\x89\x92\x91\xa1\xda\xd8\x87\x06ha\x1f\x1b\x80\xcd\ -\x9d%\xe0\xa5\x0f"[G\x87\x98\x8d\xde/ia\x05-\xac`\x996\xf9\\\x0b\xcb\xb4)\ -\x1bmOMn\xf7\xd5\xf0\'\\\x8b\xdces\xe7\x8d\xef\x80h\xd6\xc2\n\xf9\\\x0b]\xf5\ -\xab\xf2\xcdApR#\xf1kp4b\xc9 \xf9\\\x0b\x80\xe4\xcdE\xaf\xdeqlW\xaeVL\xaf`~\ -\xd9\x03@W\xd3\x00\xc4\x13\x0b\xc4\x92A\xcf\xd0\xf9\xe8:\x89\xebW\x01(|\xfd\ -\xe1\xbe-~F\xbas\xff\x91\xf75\x82n\x9d\x1c\xf0}\xfciw\xdd\xe7A<\xd1\x1b\xa8j\ -c\x9f\xb2\xd1F\x92\xe4\x80O\x12\xc0\xc6\xb3\x14\xf6Ta\xe0)g\x81\xba\x9a\xf6\ -\x9b(\x07\x14I@\x84lq\xb8?\xe6\xa3\xeb\x00\xdc\xba\x9d\xf4+\x10*~\xfem\xf3\ -\xf8\xe1\x06\xc7\xa7\xdb\xe8j\x9a\xf8\xdc\xa4\xb7\x1f[\\\xe5\xd2\x851/\xff\ -\x07\xac\x9b\xd1e\x12\x96\x0f\xfd\x00\x00\x00\x00IEND\xaeB`\x82' - - -def getPythonBitmap(): - return BitmapFromImage(getPythonImage()) - -def getPythonImage(): - stream = cStringIO.StringIO(getPythonData()) - return ImageFromStream(stream) - -def getPythonIcon(): - return wx.IconFromBitmap(getPythonBitmap())