home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 October / maximum-cd-2011-10.iso / DiscContents / digsby_setup.exe / lib / wx / py / editor.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-06-22  |  23.9 KB  |  759 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
  5. __cvsid__ = '$Id: editor.py 41077 2006-09-08 20:09:27Z RD $'
  6. __revision__ = '$Revision: 41077 $'[11:-2]
  7. import wx
  8. from buffer import Buffer
  9. import crust
  10. import dispatcher
  11. import editwindow
  12. import frame
  13. from shell import Shell
  14. import version
  15.  
  16. class EditorFrame(frame.Frame):
  17.     
  18.     def __init__(self, parent = None, id = -1, title = 'PyAlaCarte', pos = wx.DefaultPosition, size = (800, 600), style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE, filename = None):
  19.         frame.Frame.__init__(self, parent, id, title, pos, size, style)
  20.         self.buffers = { }
  21.         self.buffer = None
  22.         self.editor = None
  23.         self._defaultText = title + ' - the tastiest Python editor.'
  24.         self._statusText = self._defaultText
  25.         self.SetStatusText(self._statusText)
  26.         self.Bind(wx.EVT_IDLE, self.OnIdle)
  27.         self._setup()
  28.         if filename:
  29.             self.bufferCreate(filename)
  30.         
  31.  
  32.     
  33.     def _setup(self):
  34.         pass
  35.  
  36.     
  37.     def setEditor(self, editor):
  38.         self.editor = editor
  39.         self.buffer = self.editor.buffer
  40.         self.buffers[self.buffer.id] = self.buffer
  41.  
  42.     
  43.     def OnAbout(self, event):
  44.         title = 'About PyAlaCarte'
  45.         text = 'Another fine, flaky program.'
  46.         dialog = wx.MessageDialog(self, text, title, wx.OK | wx.ICON_INFORMATION)
  47.         dialog.ShowModal()
  48.         dialog.Destroy()
  49.  
  50.     
  51.     def OnClose(self, event):
  52.         for buffer in self.buffers.values():
  53.             self.buffer = buffer
  54.             if buffer.hasChanged():
  55.                 cancel = self.bufferSuggestSave()
  56.                 if cancel and event.CanVeto():
  57.                     event.Veto()
  58.                     return None
  59.                 continue
  60.             event.CanVeto()
  61.         
  62.         self.Destroy()
  63.  
  64.     
  65.     def OnIdle(self, event):
  66.         self._updateStatus()
  67.         if hasattr(self, 'notebook'):
  68.             self._updateTabText()
  69.         
  70.         self._updateTitle()
  71.         event.Skip()
  72.  
  73.     
  74.     def _updateStatus(self):
  75.         if self.editor and hasattr(self.editor, 'getStatus'):
  76.             status = self.editor.getStatus()
  77.             text = 'File: %s  |  Line: %d  |  Column: %d' % status
  78.         else:
  79.             text = self._defaultText
  80.         if text != self._statusText:
  81.             self.SetStatusText(text)
  82.             self._statusText = text
  83.         
  84.  
  85.     
  86.     def _updateTabText(self):
  87.         pass
  88.  
  89.     
  90.     def _updateTitle(self):
  91.         title = self.GetTitle()
  92.         if self.bufferHasChanged():
  93.             if title.startswith('* '):
  94.                 pass
  95.             else:
  96.                 self.SetTitle('* ' + title)
  97.         elif title.startswith('* '):
  98.             self.SetTitle(title[2:])
  99.         
  100.  
  101.     
  102.     def hasBuffer(self):
  103.         if self.buffer:
  104.             return True
  105.         return False
  106.  
  107.     
  108.     def bufferClose(self):
  109.         if self.bufferHasChanged():
  110.             cancel = self.bufferSuggestSave()
  111.             if cancel:
  112.                 return cancel
  113.         
  114.         self.bufferDestroy()
  115.         cancel = False
  116.         return cancel
  117.  
  118.     
  119.     def bufferCreate(self, filename = None):
  120.         self.bufferDestroy()
  121.         buffer = Buffer()
  122.         self.panel = panel = wx.Panel(parent = self, id = -1)
  123.         panel.Bind(wx.EVT_ERASE_BACKGROUND, (lambda x: x))
  124.         editor = Editor(parent = panel)
  125.         panel.editor = editor
  126.         sizer = wx.BoxSizer(wx.VERTICAL)
  127.         sizer.Add(editor.window, 1, wx.EXPAND)
  128.         panel.SetSizer(sizer)
  129.         panel.SetAutoLayout(True)
  130.         sizer.Layout()
  131.         buffer.addEditor(editor)
  132.         buffer.open(filename)
  133.         self.setEditor(editor)
  134.         self.editor.setFocus()
  135.         self.SendSizeEvent()
  136.  
  137.     
  138.     def bufferDestroy(self):
  139.         if self.buffer:
  140.             for editor in self.buffer.editors.values():
  141.                 editor.destroy()
  142.             
  143.             self.editor = None
  144.             del self.buffers[self.buffer.id]
  145.             self.buffer = None
  146.             self.panel.Destroy()
  147.         
  148.  
  149.     
  150.     def bufferHasChanged(self):
  151.         if self.buffer:
  152.             return self.buffer.hasChanged()
  153.         return False
  154.  
  155.     
  156.     def bufferNew(self):
  157.         if self.bufferHasChanged():
  158.             cancel = self.bufferSuggestSave()
  159.             if cancel:
  160.                 return cancel
  161.         
  162.         self.bufferCreate()
  163.         cancel = False
  164.         return cancel
  165.  
  166.     
  167.     def bufferOpen(self):
  168.         if self.bufferHasChanged():
  169.             cancel = self.bufferSuggestSave()
  170.             if cancel:
  171.                 return cancel
  172.         
  173.         filedir = ''
  174.         if self.buffer and self.buffer.doc.filedir:
  175.             filedir = self.buffer.doc.filedir
  176.         
  177.         result = openSingle(directory = filedir)
  178.         if result.path:
  179.             self.bufferCreate(result.path)
  180.         
  181.         cancel = False
  182.         return cancel
  183.  
  184.     
  185.     def bufferSave(self):
  186.         if self.buffer.doc.filepath:
  187.             self.buffer.save()
  188.             cancel = False
  189.         else:
  190.             cancel = self.bufferSaveAs()
  191.         return cancel
  192.  
  193.     
  194.     def bufferSaveAs(self):
  195.         if self.bufferHasChanged() and self.buffer.doc.filepath:
  196.             cancel = self.bufferSuggestSave()
  197.             if cancel:
  198.                 return cancel
  199.         
  200.         filedir = ''
  201.         if self.buffer and self.buffer.doc.filedir:
  202.             filedir = self.buffer.doc.filedir
  203.         
  204.         result = saveSingle(directory = filedir)
  205.         if result.path:
  206.             self.buffer.saveAs(result.path)
  207.             cancel = False
  208.         else:
  209.             cancel = True
  210.         return cancel
  211.  
  212.     
  213.     def bufferSuggestSave(self):
  214.         result = messageDialog(parent = None, message = '%s has changed.\nWould you like to save it first?' % self.buffer.name, title = 'Save current file?')
  215.         if result.positive:
  216.             cancel = self.bufferSave()
  217.         else:
  218.             cancel = result.text == 'Cancel'
  219.         return cancel
  220.  
  221.     
  222.     def updateNamespace(self):
  223.         if self.buffer.updateNamespace():
  224.             self.SetStatusText('Namespace updated')
  225.         else:
  226.             self.SetStatusText('Error executing, unable to update namespace')
  227.  
  228.  
  229.  
  230. class EditorNotebookFrame(EditorFrame):
  231.     
  232.     def __init__(self, parent = None, id = -1, title = 'PyAlaMode', pos = wx.DefaultPosition, size = (800, 600), style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE, filename = None):
  233.         self.notebook = None
  234.         EditorFrame.__init__(self, parent, id, title, pos, size, style, filename)
  235.         if self.notebook:
  236.             dispatcher.connect(receiver = self._editorChange, signal = 'EditorChange', sender = self.notebook)
  237.         
  238.  
  239.     
  240.     def _setup(self):
  241.         self.notebook = EditorNotebook(parent = self)
  242.         intro = 'Py %s' % version.VERSION
  243.         import imp
  244.         module = imp.new_module('__main__')
  245.         import __builtin__
  246.         module.__dict__['__builtins__'] = __builtin__
  247.         namespace = module.__dict__.copy()
  248.         self.crust = crust.Crust(parent = self.notebook, intro = intro, locals = namespace)
  249.         self.shell = self.crust.shell
  250.         self.crust.filling.tree.setStatusText = self.SetStatusText
  251.         self.shell.setStatusText = self.SetStatusText
  252.         self.crust.filling.SetSashPosition(200)
  253.         self.notebook.AddPage(page = self.crust, text = '*Shell*', select = True)
  254.         self.setEditor(self.crust.editor)
  255.         self.crust.editor.SetFocus()
  256.  
  257.     
  258.     def _editorChange(self, editor):
  259.         self.setEditor(editor)
  260.  
  261.     
  262.     def OnAbout(self, event):
  263.         title = 'About PyAlaMode'
  264.         text = 'Another fine, flaky program.'
  265.         dialog = wx.MessageDialog(self, text, title, wx.OK | wx.ICON_INFORMATION)
  266.         dialog.ShowModal()
  267.         dialog.Destroy()
  268.  
  269.     
  270.     def _updateTitle(self):
  271.         pass
  272.  
  273.     
  274.     def bufferCreate(self, filename = None):
  275.         buffer = Buffer()
  276.         panel = wx.Panel(parent = self.notebook, id = -1)
  277.         panel.Bind(wx.EVT_ERASE_BACKGROUND, (lambda x: x))
  278.         editor = Editor(parent = panel)
  279.         panel.editor = editor
  280.         sizer = wx.BoxSizer(wx.VERTICAL)
  281.         sizer.Add(editor.window, 1, wx.EXPAND)
  282.         panel.SetSizer(sizer)
  283.         panel.SetAutoLayout(True)
  284.         sizer.Layout()
  285.         buffer.addEditor(editor)
  286.         buffer.open(filename)
  287.         self.setEditor(editor)
  288.         self.notebook.AddPage(page = panel, text = self.buffer.name, select = True)
  289.         self.editor.setFocus()
  290.  
  291.     
  292.     def bufferDestroy(self):
  293.         selection = self.notebook.GetSelection()
  294.         if selection > 0:
  295.             if self.buffer:
  296.                 del self.buffers[self.buffer.id]
  297.                 self.buffer = None
  298.             
  299.             self.notebook.DeletePage(selection)
  300.         
  301.  
  302.     
  303.     def bufferNew(self):
  304.         self.bufferCreate()
  305.         cancel = False
  306.         return cancel
  307.  
  308.     
  309.     def bufferOpen(self):
  310.         filedir = ''
  311.         if self.buffer and self.buffer.doc.filedir:
  312.             filedir = self.buffer.doc.filedir
  313.         
  314.         result = openMultiple(directory = filedir)
  315.         for path in result.paths:
  316.             self.bufferCreate(path)
  317.         
  318.         cancel = False
  319.         return cancel
  320.  
  321.  
  322.  
  323. class EditorNotebook(wx.Notebook):
  324.     
  325.     def __init__(self, parent):
  326.         wx.Notebook.__init__(self, parent, id = -1, style = wx.CLIP_CHILDREN)
  327.         self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self.OnPageChanging, id = self.GetId())
  328.         self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged, id = self.GetId())
  329.         self.Bind(wx.EVT_IDLE, self.OnIdle)
  330.  
  331.     
  332.     def OnIdle(self, event):
  333.         self._updateTabText()
  334.         event.Skip()
  335.  
  336.     
  337.     def _updateTabText(self):
  338.         size = 3
  339.         changed = ' **'
  340.         unchanged = ' --'
  341.         selection = self.GetSelection()
  342.         if selection < 1:
  343.             return None
  344.         text = self.GetPageText(selection)
  345.         window = self.GetPage(selection)
  346.         if not window.editor:
  347.             return None
  348.         if name != window.editor.buffer.name:
  349.             text = window.editor.buffer.name
  350.         
  351.         if window.editor.buffer.hasChanged():
  352.             if text.endswith(changed):
  353.                 text = None
  354.             elif text.endswith(unchanged):
  355.                 text = text[:-size] + changed
  356.             else:
  357.                 text += changed
  358.         elif text.endswith(changed):
  359.             text = text[:-size] + unchanged
  360.         elif text.endswith(unchanged):
  361.             text = None
  362.         else:
  363.             text += unchanged
  364.         if text is not None:
  365.             self.SetPageText(selection, text)
  366.             self.Refresh()
  367.         
  368.  
  369.     
  370.     def OnPageChanging(self, event):
  371.         event.Skip()
  372.  
  373.     
  374.     def OnPageChanged(self, event):
  375.         new = event.GetSelection()
  376.         window = self.GetPage(new)
  377.         dispatcher.send(signal = 'EditorChange', sender = self, editor = window.editor)
  378.         window.SetFocus()
  379.         event.Skip()
  380.  
  381.  
  382.  
  383. class EditorShellNotebookFrame(EditorNotebookFrame):
  384.     
  385.     def __init__(self, parent = None, id = -1, title = 'PyAlaModeTest', pos = wx.DefaultPosition, size = (600, 400), style = wx.DEFAULT_FRAME_STYLE, filename = None, singlefile = False):
  386.         self._singlefile = singlefile
  387.         EditorNotebookFrame.__init__(self, parent, id, title, pos, size, style, filename)
  388.  
  389.     
  390.     def _setup(self):
  391.         if not self._singlefile:
  392.             self.notebook = EditorNotebook(parent = self)
  393.         
  394.  
  395.     
  396.     def OnAbout(self, event):
  397.         title = 'About PyAlaModePlus'
  398.         text = 'Another fine, flaky program.'
  399.         dialog = wx.MessageDialog(self, text, title, wx.OK | wx.ICON_INFORMATION)
  400.         dialog.ShowModal()
  401.         dialog.Destroy()
  402.  
  403.     
  404.     def bufferCreate(self, filename = None):
  405.         if self._singlefile:
  406.             self.bufferDestroy()
  407.             notebook = EditorShellNotebook(parent = self, filename = filename)
  408.             self.notebook = notebook
  409.         else:
  410.             notebook = EditorShellNotebook(parent = self.notebook, filename = filename)
  411.         self.setEditor(notebook.editor)
  412.         if not self._singlefile:
  413.             self.notebook.AddPage(page = notebook, text = self.buffer.name, select = True)
  414.         
  415.         self.editor.setFocus()
  416.  
  417.     
  418.     def bufferDestroy(self):
  419.         if self.buffer:
  420.             self.editor = None
  421.             del self.buffers[self.buffer.id]
  422.             self.buffer = None
  423.         
  424.         if self._singlefile:
  425.             self.notebook.Destroy()
  426.             self.notebook = None
  427.         else:
  428.             selection = self.notebook.GetSelection()
  429.             self.notebook.DeletePage(selection)
  430.  
  431.     
  432.     def bufferNew(self):
  433.         if self._singlefile and self.bufferHasChanged():
  434.             cancel = self.bufferSuggestSave()
  435.             if cancel:
  436.                 return cancel
  437.         
  438.         self.bufferCreate()
  439.         cancel = False
  440.         return cancel
  441.  
  442.     
  443.     def bufferOpen(self):
  444.         if self._singlefile and self.bufferHasChanged():
  445.             cancel = self.bufferSuggestSave()
  446.             if cancel:
  447.                 return cancel
  448.         
  449.         filedir = ''
  450.         if self.buffer and self.buffer.doc.filedir:
  451.             filedir = self.buffer.doc.filedir
  452.         
  453.         if self._singlefile:
  454.             result = openSingle(directory = filedir)
  455.             if result.path:
  456.                 self.bufferCreate(result.path)
  457.             
  458.         else:
  459.             result = openMultiple(directory = filedir)
  460.             for path in result.paths:
  461.                 self.bufferCreate(path)
  462.             
  463.         cancel = False
  464.         return cancel
  465.  
  466.  
  467.  
  468. class EditorShellNotebook(wx.Notebook):
  469.     
  470.     def __init__(self, parent, filename = None):
  471.         wx.Notebook.__init__(self, parent, id = -1)
  472.         usePanels = True
  473.         if usePanels:
  474.             editorparent = editorpanel = wx.Panel(self, -1)
  475.             shellparent = shellpanel = wx.Panel(self, -1)
  476.         else:
  477.             editorparent = self
  478.             shellparent = self
  479.         self.buffer = Buffer()
  480.         self.editor = Editor(parent = editorparent)
  481.         self.buffer.addEditor(self.editor)
  482.         self.buffer.open(filename)
  483.         self.shell = Shell(parent = shellparent, locals = self.buffer.interp.locals, style = wx.CLIP_CHILDREN | wx.SUNKEN_BORDER)
  484.         self.buffer.interp.locals.clear()
  485.         if usePanels:
  486.             self.AddPage(page = editorpanel, text = 'Editor', select = True)
  487.             self.AddPage(page = shellpanel, text = 'Shell')
  488.             editorsizer = wx.BoxSizer(wx.VERTICAL)
  489.             editorsizer.Add(self.editor.window, 1, wx.EXPAND)
  490.             editorpanel.SetSizer(editorsizer)
  491.             editorpanel.SetAutoLayout(True)
  492.             shellsizer = wx.BoxSizer(wx.VERTICAL)
  493.             shellsizer.Add(self.shell, 1, wx.EXPAND)
  494.             shellpanel.SetSizer(shellsizer)
  495.             shellpanel.SetAutoLayout(True)
  496.         else:
  497.             self.AddPage(page = self.editor.window, text = 'Editor', select = True)
  498.             self.AddPage(page = self.shell, text = 'Shell')
  499.         self.editor.setFocus()
  500.         self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged, id = self.GetId())
  501.  
  502.     
  503.     def OnPageChanged(self, event):
  504.         selection = event.GetSelection()
  505.         if selection == 0:
  506.             self.editor.setFocus()
  507.         else:
  508.             self.shell.SetFocus()
  509.         event.Skip()
  510.  
  511.     
  512.     def SetFocus(self):
  513.         wx.Notebook.SetFocus(self)
  514.         selection = self.GetSelection()
  515.         if selection == 0:
  516.             self.editor.setFocus()
  517.         else:
  518.             self.shell.SetFocus()
  519.  
  520.  
  521.  
  522. class Editor:
  523.     
  524.     def __init__(self, parent, id = -1, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.CLIP_CHILDREN | wx.SUNKEN_BORDER):
  525.         self.window = EditWindow(self, parent, id, pos, size, style)
  526.         self.id = self.window.GetId()
  527.         self.buffer = None
  528.         self.window.Bind(wx.EVT_CHAR, self.OnChar)
  529.         self.window.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
  530.  
  531.     
  532.     def _setBuffer(self, buffer, text):
  533.         self.buffer = buffer
  534.         self.autoCompleteKeys = buffer.interp.getAutoCompleteKeys()
  535.         self.clearAll()
  536.         self.setText(text)
  537.         self.emptyUndoBuffer()
  538.         self.setSavePoint()
  539.  
  540.     
  541.     def destroy(self):
  542.         self.window.Destroy()
  543.  
  544.     
  545.     def clearAll(self):
  546.         self.window.ClearAll()
  547.  
  548.     
  549.     def emptyUndoBuffer(self):
  550.         self.window.EmptyUndoBuffer()
  551.  
  552.     
  553.     def getStatus(self):
  554.         if self.window:
  555.             pos = self.window.GetCurrentPos()
  556.             line = self.window.LineFromPosition(pos) + 1
  557.             col = self.window.GetColumn(pos)
  558.             if self.buffer:
  559.                 if not self.buffer.doc.filepath:
  560.                     pass
  561.                 name = self.buffer.name
  562.             else:
  563.                 name = ''
  564.             status = (name, line, col)
  565.             return status
  566.         return ('', 0, 0)
  567.  
  568.     
  569.     def getText(self):
  570.         return self.window.GetText()
  571.  
  572.     
  573.     def hasChanged(self):
  574.         return self.window.GetModify()
  575.  
  576.     
  577.     def setFocus(self):
  578.         self.window.SetFocus()
  579.  
  580.     
  581.     def setSavePoint(self):
  582.         self.window.SetSavePoint()
  583.  
  584.     
  585.     def setText(self, text):
  586.         self.window.SetText(text)
  587.  
  588.     
  589.     def OnChar(self, event):
  590.         key = event.GetKeyCode()
  591.         if key in self.autoCompleteKeys:
  592.             if self.window.AutoCompActive():
  593.                 self.window.AutoCompCancel()
  594.             
  595.             self.window.ReplaceSelection('')
  596.             self.window.AddText(chr(key))
  597.             (text, pos) = self.window.GetCurLine()
  598.             text = text[:pos]
  599.             if self.window.autoComplete:
  600.                 self.autoCompleteShow(text)
  601.             
  602.         elif key == ord('('):
  603.             if self.window.AutoCompActive():
  604.                 self.window.AutoCompCancel()
  605.             
  606.             self.window.ReplaceSelection('')
  607.             self.window.AddText('(')
  608.             (text, pos) = self.window.GetCurLine()
  609.             text = text[:pos]
  610.             self.autoCallTipShow(text)
  611.         else:
  612.             event.Skip()
  613.  
  614.     
  615.     def OnKeyDown(self, event):
  616.         key = event.GetKeyCode()
  617.         if self.window.AutoCompActive():
  618.             event.Skip()
  619.             return None
  620.         controlDown = event.ControlDown()
  621.         altDown = event.AltDown()
  622.         shiftDown = event.ShiftDown()
  623.         if controlDown and altDown:
  624.             event.Skip()
  625.         elif controlDown and key in (ord(']'),):
  626.             dispatcher.send(signal = 'FontIncrease')
  627.         elif controlDown and key in (ord('['),):
  628.             dispatcher.send(signal = 'FontDecrease')
  629.         elif controlDown and key in (ord('='),):
  630.             dispatcher.send(signal = 'FontDefault')
  631.         else:
  632.             event.Skip()
  633.  
  634.     
  635.     def autoCompleteShow(self, command):
  636.         list = self.buffer.interp.getAutoCompleteList(command, includeMagic = self.window.autoCompleteIncludeMagic, includeSingle = self.window.autoCompleteIncludeSingle, includeDouble = self.window.autoCompleteIncludeDouble)
  637.         if list:
  638.             options = ' '.join(list)
  639.             offset = 0
  640.             self.window.AutoCompShow(offset, options)
  641.         
  642.  
  643.     
  644.     def autoCallTipShow(self, command):
  645.         if self.window.CallTipActive():
  646.             self.window.CallTipCancel()
  647.         
  648.         (name, argspec, tip) = self.buffer.interp.getCallTip(command)
  649.         if tip:
  650.             dispatcher.send(signal = 'Shell.calltip', sender = self, calltip = tip)
  651.         
  652.         if not self.window.autoCallTip:
  653.             return None
  654.         if argspec:
  655.             startpos = self.window.GetCurrentPos()
  656.             self.window.AddText(argspec + ')')
  657.             endpos = self.window.GetCurrentPos()
  658.             self.window.SetSelection(endpos, startpos)
  659.         
  660.         if tip:
  661.             curpos = self.window.GetCurrentPos()
  662.             size = len(name)
  663.             tippos = curpos - (size + 1)
  664.             fallback = curpos - self.window.GetColumn(curpos)
  665.             tippos = max(tippos, fallback)
  666.             self.window.CallTipShow(tippos, tip)
  667.             self.window.CallTipSetHighlight(0, size)
  668.         
  669.  
  670.  
  671.  
  672. class EditWindow(editwindow.EditWindow):
  673.     
  674.     def __init__(self, editor, parent, id = -1, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.CLIP_CHILDREN | wx.SUNKEN_BORDER):
  675.         editwindow.EditWindow.__init__(self, parent, id, pos, size, style)
  676.         self.editor = editor
  677.  
  678.  
  679.  
  680. class DialogResults:
  681.     
  682.     def __init__(self, returned):
  683.         self.returned = returned
  684.         self.positive = returned in (wx.ID_OK, wx.ID_YES)
  685.         self.text = self._asString()
  686.  
  687.     
  688.     def __repr__(self):
  689.         return str(self.__dict__)
  690.  
  691.     
  692.     def _asString(self):
  693.         returned = self.returned
  694.         if returned == wx.ID_OK:
  695.             return 'Ok'
  696.         if returned == wx.ID_CANCEL:
  697.             return 'Cancel'
  698.         if returned == wx.ID_YES:
  699.             return 'Yes'
  700.         if returned == wx.ID_NO:
  701.             return 'No'
  702.  
  703.  
  704.  
  705. def fileDialog(parent = None, title = 'Open', directory = '', filename = '', wildcard = 'All Files (*.*)|*.*', style = wx.OPEN | wx.MULTIPLE):
  706.     dialog = wx.FileDialog(parent, title, directory, filename, wildcard, style)
  707.     result = DialogResults(dialog.ShowModal())
  708.     if result.positive:
  709.         result.paths = dialog.GetPaths()
  710.     else:
  711.         result.paths = []
  712.     dialog.Destroy()
  713.     return result
  714.  
  715.  
  716. def openSingle(parent = None, title = 'Open', directory = '', filename = '', wildcard = 'All Files (*.*)|*.*', style = wx.OPEN):
  717.     dialog = wx.FileDialog(parent, title, directory, filename, wildcard, style)
  718.     result = DialogResults(dialog.ShowModal())
  719.     if result.positive:
  720.         result.path = dialog.GetPath()
  721.     else:
  722.         result.path = None
  723.     dialog.Destroy()
  724.     return result
  725.  
  726.  
  727. def openMultiple(parent = None, title = 'Open', directory = '', filename = '', wildcard = 'All Files (*.*)|*.*', style = wx.OPEN | wx.MULTIPLE):
  728.     return fileDialog(parent, title, directory, filename, wildcard, style)
  729.  
  730.  
  731. def saveSingle(parent = None, title = 'Save', directory = '', filename = '', wildcard = 'All Files (*.*)|*.*', style = wx.SAVE | wx.OVERWRITE_PROMPT):
  732.     dialog = wx.FileDialog(parent, title, directory, filename, wildcard, style)
  733.     result = DialogResults(dialog.ShowModal())
  734.     if result.positive:
  735.         result.path = dialog.GetPath()
  736.     else:
  737.         result.path = None
  738.     dialog.Destroy()
  739.     return result
  740.  
  741.  
  742. def directory(parent = None, message = 'Choose a directory', path = '', style = 0, pos = wx.DefaultPosition, size = wx.DefaultSize):
  743.     dialog = wx.DirDialog(parent, message, path, style, pos, size)
  744.     result = DialogResults(dialog.ShowModal())
  745.     if result.positive:
  746.         result.path = dialog.GetPath()
  747.     else:
  748.         result.path = None
  749.     dialog.Destroy()
  750.     return result
  751.  
  752.  
  753. def messageDialog(parent = None, message = '', title = 'Message box', style = wx.YES_NO | wx.CANCEL | wx.CENTRE | wx.ICON_QUESTION, pos = wx.DefaultPosition):
  754.     dialog = wx.MessageDialog(parent, message, title, style, pos)
  755.     result = DialogResults(dialog.ShowModal())
  756.     dialog.Destroy()
  757.     return result
  758.  
  759.