home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_1819 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  13.7 KB  |  374 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import wx
  5. import wx.stc as stc
  6. import keyword
  7. __version__ = 0.5
  8. __author__ = 'Laurent Dufrechou'
  9. __email__ = 'laurent.dufrechou _at_ gmail.com'
  10. __license__ = 'BSD'
  11.  
  12. class IPythonHistoryPanel(wx.Panel):
  13.     
  14.     def __init__(self, parent, flt_empty = True, flt_doc = True, flt_cmd = True, flt_magic = True):
  15.         wx.Panel.__init__(self, parent, -1)
  16.         text_ctrl = PythonSTC(self, -1)
  17.         st_filt = wx.StaticText(self, -1, ' Filter:')
  18.         self.filter_empty = wx.CheckBox(self, -1, 'Empty commands')
  19.         self.filter_doc = wx.CheckBox(self, -1, '?: Doc commands')
  20.         self.filter_cmd = wx.CheckBox(self, -1, '!: Sys commands')
  21.         self.filter_magic = wx.CheckBox(self, -1, '%: Magic keys')
  22.         self.options = {
  23.             'filter_empty': {
  24.                 'value': 'True',
  25.                 'checkbox': self.filter_empty,
  26.                 'True': True,
  27.                 'False': False,
  28.                 'setfunc': (lambda x: pass) },
  29.             'filter_doc': {
  30.                 'value': 'True',
  31.                 'checkbox': self.filter_doc,
  32.                 'True': True,
  33.                 'False': False,
  34.                 'setfunc': (lambda x: pass) },
  35.             'filter_cmd': {
  36.                 'value': 'True',
  37.                 'checkbox': self.filter_cmd,
  38.                 'True': True,
  39.                 'False': False,
  40.                 'setfunc': (lambda x: pass) },
  41.             'filter_magic': {
  42.                 'value': 'True',
  43.                 'checkbox': self.filter_magic,
  44.                 'True': True,
  45.                 'False': False,
  46.                 'setfunc': (lambda x: pass) } }
  47.         self.reloadOptions(self.options)
  48.         self.filter_empty.Bind(wx.EVT_CHECKBOX, self.evtCheckEmptyFilter)
  49.         self.filter_doc.Bind(wx.EVT_CHECKBOX, self.evtCheckDocFilter)
  50.         self.filter_cmd.Bind(wx.EVT_CHECKBOX, self.evtCheckCmdFilter)
  51.         self.filter_magic.Bind(wx.EVT_CHECKBOX, self.evtCheckMagicFilter)
  52.         sizer = wx.BoxSizer(wx.VERTICAL)
  53.         sizer.Add(text_ctrl, 1, wx.EXPAND)
  54.         sizer.AddMany([
  55.             (5, 5),
  56.             st_filt,
  57.             (10, 10),
  58.             self.filter_empty,
  59.             self.filter_doc,
  60.             self.filter_cmd,
  61.             self.filter_magic,
  62.             (10, 10)])
  63.         self.SetAutoLayout(True)
  64.         sizer.Fit(self)
  65.         sizer.SetSizeHints(self)
  66.         self.SetSizer(sizer)
  67.         self.text_ctrl = text_ctrl
  68.         text_ctrl.EmptyUndoBuffer()
  69.         text_ctrl.Colourise(0, -1)
  70.         text_ctrl.SetMarginType(1, stc.STC_MARGIN_NUMBER)
  71.         text_ctrl.SetMarginWidth(1, 15)
  72.  
  73.     
  74.     def write(self, history_line):
  75.         add = True
  76.         if self.filter_empty.GetValue() == True and history_line == '':
  77.             add = False
  78.         
  79.         if len(history_line) > 0:
  80.             if self.filter_doc.GetValue() == True and history_line[-1:] == '?':
  81.                 add = False
  82.             
  83.             if self.filter_cmd.GetValue() == True and history_line[0] == '!':
  84.                 add = False
  85.             
  86.             if self.filter_magic.GetValue() == True and history_line[0] == '%':
  87.                 add = False
  88.             
  89.         
  90.         if add:
  91.             self.text_ctrl.AppendText(history_line + '\n')
  92.         
  93.  
  94.     
  95.     def processOptionCheckedEvt(self, event, name):
  96.         if event.IsChecked():
  97.             self.options[name]['value'] = 'True'
  98.         else:
  99.             self.options[name]['value'] = 'False'
  100.         self.updateOptionTracker(name, self.options[name]['value'])
  101.  
  102.     
  103.     def evtCheckEmptyFilter(self, event):
  104.         self.processOptionCheckedEvt(event, 'filter_empty')
  105.  
  106.     
  107.     def evtCheckDocFilter(self, event):
  108.         self.processOptionCheckedEvt(event, 'filter_doc')
  109.  
  110.     
  111.     def evtCheckCmdFilter(self, event):
  112.         self.processOptionCheckedEvt(event, 'filter_cmd')
  113.  
  114.     
  115.     def evtCheckMagicFilter(self, event):
  116.         self.processOptionCheckedEvt(event, 'filter_magic')
  117.  
  118.     
  119.     def getOptions(self):
  120.         return self.options
  121.  
  122.     
  123.     def reloadOptions(self, options):
  124.         self.options = options
  125.         for key in self.options.keys():
  126.             value = self.options[key]['value']
  127.             self.options[key]['checkbox'].SetValue(self.options[key][value])
  128.             self.options[key]['setfunc'](value)
  129.         
  130.  
  131.     
  132.     def updateOptionTracker(self, name, value):
  133.         pass
  134.  
  135.     
  136.     def setOptionTrackerHook(self, func):
  137.         self.updateOptionTracker = func
  138.  
  139.  
  140. if wx.Platform == '__WXMSW__':
  141.     faces = {
  142.         'times': 'Times New Roman',
  143.         'mono': 'Courier New',
  144.         'helv': 'Arial',
  145.         'other': 'Comic Sans MS',
  146.         'size': 8,
  147.         'size2': 6 }
  148. elif wx.Platform == '__WXMAC__':
  149.     faces = {
  150.         'times': 'Times New Roman',
  151.         'mono': 'Monaco',
  152.         'helv': 'Arial',
  153.         'other': 'Comic Sans MS',
  154.         'size': 8,
  155.         'size2': 6 }
  156. else:
  157.     faces = {
  158.         'times': 'Times',
  159.         'mono': 'Courier',
  160.         'helv': 'Helvetica',
  161.         'other': 'new century schoolbook',
  162.         'size': 8,
  163.         'size2': 6 }
  164.  
  165. class PythonSTC(stc.StyledTextCtrl):
  166.     fold_symbols = 3
  167.     
  168.     def __init__(self, parent, ID, pos = wx.DefaultPosition, size = wx.DefaultSize, style = 0):
  169.         stc.StyledTextCtrl.__init__(self, parent, ID, pos, size, style)
  170.         self.SetLexer(stc.STC_LEX_PYTHON)
  171.         self.SetKeyWords(0, ' '.join(keyword.kwlist))
  172.         self.SetEOLMode(stc.STC_EOL_CRLF)
  173.         self.SetEdgeMode(stc.STC_EDGE_LINE)
  174.         self.SetEdgeColumn(80)
  175.         self.SetEdgeColour(wx.LIGHT_GREY)
  176.         self.SetLayoutCache(stc.STC_CACHE_PAGE)
  177.         self.SetMarginType(2, stc.STC_MARGIN_SYMBOL)
  178.         self.SetMarginMask(2, stc.STC_MASK_FOLDERS)
  179.         self.SetMarginSensitive(2, True)
  180.         self.SetMarginWidth(2, 12)
  181.         if self.fold_symbols == 0:
  182.             self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPEN, stc.STC_MARK_ARROWDOWN, 'black', 'black')
  183.             self.MarkerDefine(stc.STC_MARKNUM_FOLDER, stc.STC_MARK_ARROW, 'black', 'black')
  184.             self.MarkerDefine(stc.STC_MARKNUM_FOLDERSUB, stc.STC_MARK_EMPTY, 'black', 'black')
  185.             self.MarkerDefine(stc.STC_MARKNUM_FOLDERTAIL, stc.STC_MARK_EMPTY, 'black', 'black')
  186.             self.MarkerDefine(stc.STC_MARKNUM_FOLDEREND, stc.STC_MARK_EMPTY, 'white', 'black')
  187.             self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPENMID, stc.STC_MARK_EMPTY, 'white', 'black')
  188.             self.MarkerDefine(stc.STC_MARKNUM_FOLDERMIDTAIL, stc.STC_MARK_EMPTY, 'white', 'black')
  189.         elif self.fold_symbols == 1:
  190.             self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPEN, stc.STC_MARK_MINUS, 'white', 'black')
  191.             self.MarkerDefine(stc.STC_MARKNUM_FOLDER, stc.STC_MARK_PLUS, 'white', 'black')
  192.             self.MarkerDefine(stc.STC_MARKNUM_FOLDERSUB, stc.STC_MARK_EMPTY, 'white', 'black')
  193.             self.MarkerDefine(stc.STC_MARKNUM_FOLDERTAIL, stc.STC_MARK_EMPTY, 'white', 'black')
  194.             self.MarkerDefine(stc.STC_MARKNUM_FOLDEREND, stc.STC_MARK_EMPTY, 'white', 'black')
  195.             self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPENMID, stc.STC_MARK_EMPTY, 'white', 'black')
  196.             self.MarkerDefine(stc.STC_MARKNUM_FOLDERMIDTAIL, stc.STC_MARK_EMPTY, 'white', 'black')
  197.         elif self.fold_symbols == 2:
  198.             self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPEN, stc.STC_MARK_CIRCLEMINUS, 'white', '#404040')
  199.             self.MarkerDefine(stc.STC_MARKNUM_FOLDER, stc.STC_MARK_CIRCLEPLUS, 'white', '#404040')
  200.             self.MarkerDefine(stc.STC_MARKNUM_FOLDERSUB, stc.STC_MARK_VLINE, 'white', '#404040')
  201.             self.MarkerDefine(stc.STC_MARKNUM_FOLDERTAIL, stc.STC_MARK_LCORNERCURVE, 'white', '#404040')
  202.             self.MarkerDefine(stc.STC_MARKNUM_FOLDEREND, stc.STC_MARK_CIRCLEPLUSCONNECTED, 'white', '#404040')
  203.             self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPENMID, stc.STC_MARK_CIRCLEMINUSCONNECTED, 'white', '#404040')
  204.             self.MarkerDefine(stc.STC_MARKNUM_FOLDERMIDTAIL, stc.STC_MARK_TCORNERCURVE, 'white', '#404040')
  205.         elif self.fold_symbols == 3:
  206.             self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPEN, stc.STC_MARK_BOXMINUS, 'white', '#808080')
  207.             self.MarkerDefine(stc.STC_MARKNUM_FOLDER, stc.STC_MARK_BOXPLUS, 'white', '#808080')
  208.             self.MarkerDefine(stc.STC_MARKNUM_FOLDERSUB, stc.STC_MARK_VLINE, 'white', '#808080')
  209.             self.MarkerDefine(stc.STC_MARKNUM_FOLDERTAIL, stc.STC_MARK_LCORNER, 'white', '#808080')
  210.             self.MarkerDefine(stc.STC_MARKNUM_FOLDEREND, stc.STC_MARK_BOXPLUSCONNECTED, 'white', '#808080')
  211.             self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPENMID, stc.STC_MARK_BOXMINUSCONNECTED, 'white', '#808080')
  212.             self.MarkerDefine(stc.STC_MARKNUM_FOLDERMIDTAIL, stc.STC_MARK_TCORNER, 'white', '#808080')
  213.         
  214.         self.Bind(stc.EVT_STC_UPDATEUI, self.OnUpdateUI)
  215.         self.Bind(stc.EVT_STC_MARGINCLICK, self.OnMarginClick)
  216.         self.Bind(wx.EVT_KEY_DOWN, self.OnKeyPressed)
  217.         self.StyleSetSpec(stc.STC_STYLE_DEFAULT, 'face:%(helv)s,size:%(size)d' % faces)
  218.         self.StyleClearAll()
  219.         self.StyleSetSpec(stc.STC_STYLE_DEFAULT, 'face:%(helv)s,size:%(size)d' % faces)
  220.         self.StyleSetSpec(stc.STC_STYLE_LINENUMBER, 'back:#C0C0C0,face:%(helv)s,size:%(size2)d' % faces)
  221.         self.StyleSetSpec(stc.STC_STYLE_CONTROLCHAR, 'face:%(other)s' % faces)
  222.         self.StyleSetSpec(stc.STC_STYLE_BRACELIGHT, 'fore:#FFFFFF,back:#0000FF,bold')
  223.         self.StyleSetSpec(stc.STC_STYLE_BRACEBAD, 'fore:#000000,back:#FF0000,bold')
  224.         self.StyleSetSpec(stc.STC_P_DEFAULT, 'fore:#000000,face:%(helv)s,size:%(size)d' % faces)
  225.         self.StyleSetSpec(stc.STC_P_COMMENTLINE, 'fore:#007F00,face:%(other)s,size:%(size)d' % faces)
  226.         self.StyleSetSpec(stc.STC_P_NUMBER, 'fore:#007F7F,size:%(size)d' % faces)
  227.         self.StyleSetSpec(stc.STC_P_STRING, 'fore:#7F007F,face:%(helv)s,size:%(size)d' % faces)
  228.         self.StyleSetSpec(stc.STC_P_CHARACTER, 'fore:#7F007F,face:%(helv)s,size:%(size)d' % faces)
  229.         self.StyleSetSpec(stc.STC_P_WORD, 'fore:#00007F,bold,size:%(size)d' % faces)
  230.         self.StyleSetSpec(stc.STC_P_TRIPLE, 'fore:#7F0000,size:%(size)d' % faces)
  231.         self.StyleSetSpec(stc.STC_P_TRIPLEDOUBLE, 'fore:#7F0000,size:%(size)d' % faces)
  232.         self.StyleSetSpec(stc.STC_P_CLASSNAME, 'fore:#0000FF,bold,underline,size:%(size)d' % faces)
  233.         self.StyleSetSpec(stc.STC_P_DEFNAME, 'fore:#007F7F,bold,size:%(size)d' % faces)
  234.         self.StyleSetSpec(stc.STC_P_OPERATOR, 'bold,size:%(size)d' % faces)
  235.         self.StyleSetSpec(stc.STC_P_IDENTIFIER, 'fore:#000000,face:%(helv)s,size:%(size)d' % faces)
  236.         self.StyleSetSpec(stc.STC_P_COMMENTBLOCK, 'fore:#7F7F7F,size:%(size)d' % faces)
  237.         self.StyleSetSpec(stc.STC_P_STRINGEOL, 'fore:#000000,face:%(mono)s,back:#E0C0E0,eol,size:%(size)d' % faces)
  238.         self.SetCaretForeground('BLUE')
  239.  
  240.     
  241.     def OnKeyPressed(self, event):
  242.         if self.CallTipActive():
  243.             self.CallTipCancel()
  244.         
  245.         key = event.GetKeyCode()
  246.         if key == 32 and event.ControlDown():
  247.             pos = self.GetCurrentPos()
  248.             if event.ShiftDown():
  249.                 self.CallTipSetBackground('yellow')
  250.                 self.CallTipShow(pos, 'lots of of text: blah, blah, blah\n\nshow some suff, maybe parameters..\n\nfubar(param1, param2)')
  251.             else:
  252.                 kw = keyword.kwlist[:]
  253.                 kw.sort()
  254.                 self.AutoCompSetIgnoreCase(False)
  255.                 for i in range(len(kw)):
  256.                     if kw[i] in keyword.kwlist:
  257.                         kw[i] = kw[i]
  258.                         continue
  259.                 
  260.                 self.AutoCompShow(0, ' '.join(kw))
  261.         else:
  262.             event.Skip()
  263.  
  264.     
  265.     def OnUpdateUI(self, evt):
  266.         braceAtCaret = -1
  267.         braceOpposite = -1
  268.         charBefore = None
  269.         caretPos = self.GetCurrentPos()
  270.         if caretPos > 0:
  271.             charBefore = self.GetCharAt(caretPos - 1)
  272.             styleBefore = self.GetStyleAt(caretPos - 1)
  273.         
  274.         if charBefore and chr(charBefore) in '[]{}()' and styleBefore == stc.STC_P_OPERATOR:
  275.             braceAtCaret = caretPos - 1
  276.         
  277.         if braceAtCaret < 0:
  278.             charAfter = self.GetCharAt(caretPos)
  279.             styleAfter = self.GetStyleAt(caretPos)
  280.             if charAfter and chr(charAfter) in '[]{}()' and styleAfter == stc.STC_P_OPERATOR:
  281.                 braceAtCaret = caretPos
  282.             
  283.         
  284.         if braceAtCaret >= 0:
  285.             braceOpposite = self.BraceMatch(braceAtCaret)
  286.         
  287.         if braceAtCaret != -1 and braceOpposite == -1:
  288.             self.BraceBadLight(braceAtCaret)
  289.         else:
  290.             self.BraceHighlight(braceAtCaret, braceOpposite)
  291.  
  292.     
  293.     def OnMarginClick(self, evt):
  294.         if evt.GetMargin() == 2:
  295.             if evt.GetShift() and evt.GetControl():
  296.                 self.FoldAll()
  297.             else:
  298.                 lineClicked = self.LineFromPosition(evt.GetPosition())
  299.                 if self.GetFoldLevel(lineClicked) & stc.STC_FOLDLEVELHEADERFLAG:
  300.                     if evt.GetShift():
  301.                         self.SetFoldExpanded(lineClicked, True)
  302.                         self.Expand(lineClicked, True, True, 1)
  303.                     elif evt.GetControl():
  304.                         if self.GetFoldExpanded(lineClicked):
  305.                             self.SetFoldExpanded(lineClicked, False)
  306.                             self.Expand(lineClicked, False, True, 0)
  307.                         else:
  308.                             self.SetFoldExpanded(lineClicked, True)
  309.                             self.Expand(lineClicked, True, True, 100)
  310.                     else:
  311.                         self.ToggleFold(lineClicked)
  312.                 
  313.         
  314.  
  315.     
  316.     def FoldAll(self):
  317.         lineCount = self.GetLineCount()
  318.         expanding = True
  319.         for lineNum in range(lineCount):
  320.             if self.GetFoldLevel(lineNum) & stc.STC_FOLDLEVELHEADERFLAG:
  321.                 expanding = not self.GetFoldExpanded(lineNum)
  322.                 break
  323.                 continue
  324.         
  325.         lineNum = 0
  326.         while lineNum < lineCount:
  327.             level = self.GetFoldLevel(lineNum)
  328.             if level & stc.STC_FOLDLEVELHEADERFLAG and level & stc.STC_FOLDLEVELNUMBERMASK == stc.STC_FOLDLEVELBASE:
  329.                 if expanding:
  330.                     self.SetFoldExpanded(lineNum, True)
  331.                     lineNum = self.Expand(lineNum, True)
  332.                     lineNum = lineNum - 1
  333.                 else:
  334.                     lastChild = self.GetLastChild(lineNum, -1)
  335.                     self.SetFoldExpanded(lineNum, False)
  336.                     if lastChild > lineNum:
  337.                         self.HideLines(lineNum + 1, lastChild)
  338.                     
  339.             
  340.             lineNum = lineNum + 1
  341.  
  342.     
  343.     def Expand(self, line, doExpand, force = False, visLevels = 0, level = -1):
  344.         lastChild = self.GetLastChild(line, level)
  345.         line = line + 1
  346.         while line <= lastChild:
  347.             if force:
  348.                 if visLevels > 0:
  349.                     self.ShowLines(line, line)
  350.                 else:
  351.                     self.HideLines(line, line)
  352.             elif doExpand:
  353.                 self.ShowLines(line, line)
  354.             
  355.             if level == -1:
  356.                 level = self.GetFoldLevel(line)
  357.             
  358.             if level & stc.STC_FOLDLEVELHEADERFLAG:
  359.                 if force:
  360.                     if visLevels > 1:
  361.                         self.SetFoldExpanded(line, True)
  362.                     else:
  363.                         self.SetFoldExpanded(line, False)
  364.                     line = self.Expand(line, doExpand, force, visLevels - 1)
  365.                 elif doExpand and self.GetFoldExpanded(line):
  366.                     line = self.Expand(line, True, force, visLevels - 1)
  367.                 else:
  368.                     line = self.Expand(line, False, force, visLevels - 1)
  369.             self.GetFoldExpanded(line)
  370.             line = line + 1
  371.         return line
  372.  
  373.  
  374.