Package printrun_utilities :: Module SimpleEditor'
[hide private]
[frames] | no frames]

Source Code for Module printrun_utilities.SimpleEditor'

 1  """ 
 2  Simple editor class extracted from macroed class in Printrun pronterface module. 
 3   
 4  Credits: 
 5      Original Author: Kliment (https://github.com/kliment/Printrun) 
 6   
 7  """ 
 8   
 9  try: 
10      import wx 
11  except: 
12      print _("WX is not installed. This program requires WX to run.") 
13      raise 
14   
15 -class SimpleEditor(wx.Dialog):
16 """Really simple editor"""
17 - def __init__(self, filename, text, callback, readonly=False):
18 self.originalText = text 19 self.filename = filename 20 self.readonly = readonly 21 22 if self.readonly: 23 self.title = '%s (readonly)'%filename 24 else : 25 self.title = filename 26 27 wx.Dialog.__init__(self, None, title=self.title, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER) 28 self.callback = callback 29 self.panel = wx.Panel(self, -1) 30 topsizer = wx.BoxSizer(wx.VERTICAL) 31 32 self.editorTxtCtrl = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE + wx.HSCROLL, size=(400, 300)) 33 self.editorTxtCtrl.SetValue(text) 34 self.editorTxtCtrl.SetEditable(not self.readonly) 35 self.editorTxtCtrl.Bind(wx.EVT_TEXT, self.onTextChange) 36 37 topsizer.Add(self.editorTxtCtrl, 1, wx.ALL + wx.EXPAND) 38 39 commandsizer = wx.BoxSizer(wx.HORIZONTAL) 40 self.okBtn = wx.Button(self.panel, -1, "Save") 41 self.okBtn.Bind(wx.EVT_BUTTON, self.save) 42 self.okBtn.Disable() 43 self.Bind(wx.EVT_CLOSE, self.close) 44 self.Bind(wx.EVT_CHAR_HOOK, self.onKeyPress) 45 commandsizer.Add(self.okBtn) 46 self.cancelBtn = wx.Button(self.panel, -1, "Cancel") 47 self.cancelBtn.Bind(wx.EVT_BUTTON, self.close) 48 commandsizer.Add(self.cancelBtn) 49 topsizer.Add(commandsizer, 0, wx.EXPAND) 50 51 self.panel.SetSizer(topsizer) 52 topsizer.Layout() 53 topsizer.Fit(self) 54 self.Show() 55 self.editorTxtCtrl.SetFocus() 56 self.editorTxtCtrl.SetSelection(0,0)
57
58 - def save(self, event):
59 self.Destroy() 60 self.callback(self.editorTxtCtrl.GetValue())
61
62 - def close(self, event):
63 self.Destroy()
64
65 - def onKeyPress(self, event):
66 x = event.GetKeyCode() 67 if x == wx.WXK_ESCAPE: 68 if self.editorTxtCtrl.GetValue() != self.originalText: 69 msgDlg = wx.MessageDialog(self, 'Save changes?', 'Confirm', wx.YES_NO | wx.CANCEL | wx.ICON_QUESTION) 70 result = msgDlg.ShowModal() 71 msgDlg.Destroy() 72 if result == wx.ID_YES: 73 self.save(event) 74 elif result == wx.ID_NO: 75 self.close(event) 76 event.Skip()
77
78 - def onTextChange(self, event):
79 if self.editorTxtCtrl.GetValue() != self.originalText: 80 self.SetTitle("%s*"%self.title) 81 self.okBtn.Enable() 82 else: 83 self.SetTitle(self.title) 84 self.okBtn.Disable()
85