# Created by Leo from: C:\Python23\Tom\leo\clipboard.leo # <> from wxPython.wx import * from wxPython.stc import * import sys,string,time,os from HTMLgen import HTMLgen import Image import image_view import urllib2 import StringIO #import metakit wxInitAllImageHandlers() if wxPlatform == '__WXMSW__': face1 = 'Arial' face2 = 'Times New Roman' face3 = 'Courier New' pb = 10 else: face1 = 'Helvetica' face2 = 'Times' face3 = 'Courier' pb = 10 if wxPlatform == '__WXMSW__': faces = { 'times': 'Times New Roman','mono' : 'Courier New','helv' : 'Arial','other': 'Comic Sans MS','size' : 10,'size2': 8,} # -- end -- <> # << STCTest methods >> (1 of 6) def WXToPIL(image, mode = 'RGBA'): "convert a wxImage to a PIL RGBA image" imageData = image.GetData() size = (image.GetWidth(), image.GetHeight()) imagePIL = Image.fromstring('RGB', size, imageData) if mode != 'RGB': imagePIL = imagePIL.convert(mode) return imagePIL # << STCTest methods >> (2 of 6) class HTMLSTC(wxStyledTextCtrl): # << class PythonSTC methods >> (1 of 7) def __init__(self, parent, ID): wxStyledTextCtrl.__init__(self, parent, ID, style = wxNO_FULL_REPAINT_ON_RESIZE) self.CmdKeyAssign(ord('B'), wxSTC_SCMOD_CTRL, wxSTC_CMD_ZOOMIN) self.CmdKeyAssign(ord('N'), wxSTC_SCMOD_CTRL, wxSTC_CMD_ZOOMOUT) self.SetLexer(wxSTC_LEX_HTML) self.SetMarginWidth(1,0) self.SetMarginWidth(2,0) self.SetMarginWidth(3,0) self.parent = parent #self.SetKeyWords(0, string.join(keyword.kwlist)) #self.SetProperty("fold", "1") #self.SetProperty("tab.timmy.whinge.level", "1") #self.SetMargins(0,0) #self.SetViewWhiteSpace(false) #self.SetBufferedDraw(false) #self.SetEdgeMode(wxSTC_EDGE_BACKGROUND) #self.SetEdgeColumn(78) # Setup a margin to hold fold markers #self.SetFoldFlags(16) ### WHAT IS THIS VALUE? WHAT ARE THE OTHER FLAGS? DOES IT MATTER? #self.SetMarginType(2, wxSTC_MARGIN_SYMBOL) #self.SetMarginMask(2, wxSTC_MASK_FOLDERS) #self.SetMarginSensitive(2, true) #self.SetMarginWidth(2, 12) #if 0: # simple folder marks, like the old version #self.MarkerDefine(wxSTC_MARKNUM_FOLDER, wxSTC_MARK_ARROW, "navy", "navy") #self.MarkerDefine(wxSTC_MARKNUM_FOLDEROPEN, wxSTC_MARK_ARROWDOWN, "navy", "navy") # Set these to an invisible mark #self.MarkerDefine(wxSTC_MARKNUM_FOLDEROPENMID, wxSTC_MARK_BACKGROUND, "white", "black") #self.MarkerDefine(wxSTC_MARKNUM_FOLDERMIDTAIL, wxSTC_MARK_BACKGROUND, "white", "black") #self.MarkerDefine(wxSTC_MARKNUM_FOLDERSUB, wxSTC_MARK_BACKGROUND, "white", "black") #self.MarkerDefine(wxSTC_MARKNUM_FOLDERTAIL, wxSTC_MARK_BACKGROUND, "white", "black") #else: # more involved "outlining" folder marks #self.MarkerDefine(wxSTC_MARKNUM_FOLDEREND, wxSTC_MARK_BOXPLUSCONNECTED, "white", "black") #self.MarkerDefine(wxSTC_MARKNUM_FOLDEROPENMID, wxSTC_MARK_BOXMINUSCONNECTED, "white", "black") #self.MarkerDefine(wxSTC_MARKNUM_FOLDERMIDTAIL, wxSTC_MARK_TCORNER, "white", "black") #self.MarkerDefine(wxSTC_MARKNUM_FOLDERTAIL, wxSTC_MARK_LCORNER, "white", "black") #self.MarkerDefine(wxSTC_MARKNUM_FOLDERSUB, wxSTC_MARK_VLINE, "white", "black") #self.MarkerDefine(wxSTC_MARKNUM_FOLDER, wxSTC_MARK_BOXPLUS, "white", "black") #self.MarkerDefine(wxSTC_MARKNUM_FOLDEROPEN, wxSTC_MARK_BOXMINUS, "white", "black") EVT_STC_UPDATEUI(self, ID, self.OnUpdateUI) #EVT_STC_MARGINCLICK(self, ID, self.OnMarginClick) # Make some styles, The lexer defines what each style is used for, we # just have to define what each style looks like. This set is adapted from # Scintilla sample property files. self.StyleClearAll() # Global default styles for all languages self.StyleSetSpec(wxSTC_STYLE_DEFAULT, "face:%(helv)s,size:%(size)d" % faces) self.StyleSetSpec(wxSTC_STYLE_LINENUMBER, "back:#C0C0C0,face:%(helv)s,size:%(size2)d" % faces) self.StyleSetSpec(wxSTC_STYLE_CONTROLCHAR, "face:%(other)s" % faces) self.StyleSetSpec(wxSTC_STYLE_BRACELIGHT, "fore:#C0C0C0,back:#FFFFFF,bold") self.StyleSetSpec(wxSTC_STYLE_BRACEBAD, "fore:#000000,back:#FF0000,bold") # Python styles # White space self.StyleSetSpec(wxSTC_H_DEFAULT, "fore:#0000FF,face:%(helv)s,size:%(size)d" % faces) self.StyleSetSpec(wxSTC_H_TAGUNKNOWN, "fore:#C0C0C0,face:%(helv)s,size:%(size)d" % faces) self.StyleSetSpec(wxSTC_H_ATTRIBUTE, "fore:#C0C0C0,face:%(helv)s,size:%(size)d" % faces) self.StyleSetSpec(wxSTC_H_ATTRIBUTEUNKNOWN, "fore:#C0C0C0,face:%(helv)s,size:%(size)d" % faces) self.StyleSetSpec(wxSTC_H_OTHER, "fore:#C0C0C0,face:%(helv)s,size:%(size)d" % faces) self.StyleSetSpec(wxSTC_H_COMMENT, "fore:#C0C0C0,face:%(helv)s,size:%(size)d" % faces) self.StyleSetSpec(wxSTC_H_ENTITY, "fore:#C0C0C0,face:%(helv)s,size:%(size)d" % faces) # Comment self.StyleSetSpec(wxSTC_H_COMMENT, "fore:#C0C0C0,face:%(other)s,size:%(size)d" % faces) # Number self.StyleSetSpec(wxSTC_H_NUMBER, "fore:#C0C0C0,size:%(size)d" % faces) # String self.StyleSetSpec(wxSTC_H_SINGLESTRING, "fore:#C0C0C0,italic,face:%(times)s,size:%(size)d" % faces) self.StyleSetSpec(wxSTC_H_DOUBLESTRING, "fore:#C0C0C0,italic,face:%(times)s,size:%(size)d" % faces) # Single quoted string #self.StyleSetSpec(wxSTC_P_CHARACTER, "fore:#7F007F,italic,face:%(times)s,size:%(size)d" % faces) # Keyword #self.StyleSetSpec(wxSTC_P_WORD, "fore:#00007F,bold,size:%(size)d" % faces) # Triple quotes self.StyleSetSpec(wxSTC_H_ENTITY, "fore:#C0C0C0,size:%(size)d" % faces) # Triple double quotes #self.StyleSetSpec(wxSTC_P_TRIPLEDOUBLE, "fore:#7F0000,size:%(size)d" % faces) # Class name definition self.StyleSetSpec(wxSTC_H_TAG, "fore:#C0C0C0,bold,size:%(size)d" % faces) # Function or method name definition #self.StyleSetSpec(wxSTC_P_DEFNAME, "fore:#007F7F,bold,size:%(size)d" % faces) # Operators #self.StyleSetSpec(wxSTC_P_OPERATOR, "bold,size:%(size)d" % faces) # Identifiers #self.StyleSetSpec(wxSTC_P_IDENTIFIER, "fore:#808080,face:%(helv)s,size:%(size)d" % faces) # Comment-blocks #self.StyleSetSpec(wxSTC_P_COMMENTBLOCK, "fore:#7F7F7F,size:%(size)d" % faces) # End of line where string is not closed #self.StyleSetSpec(wxSTC_P_STRINGEOL, "fore:#000000,face:%(mono)s,back:#E0C0E0,eol,size:%(size)d" % faces) self.SetCaretForeground("BLUE") self.SetWrapMode(1) EVT_KEY_DOWN(self, self.OnKeyPressed) # << class PythonSTC methods >> (2 of 7) def OnKeyPressed(self, event): if self.CallTipActive(): self.CallTipCancel() key = event.KeyCode() if key == 32 and event.ControlDown(): pos = self.GetCurrentPos() # Tips if event.ShiftDown(): self.CallTipSetBackground("yellow") self.CallTipShow(pos, 'param1, param2') # Code completion else: #lst = [] #for x in range(50000): # lst.append('%05d' % x) #st = string.join(lst) #print len(st) #self.AutoCompShow(0, st) kw = keyword.kwlist[:] #kw.append("zzzzzz") #kw.append("aaaaa") kw.append("__init__") #kw.append("zzaaaaa") #kw.append("zzbaaaa") #kw.append("this_is_a_longer_value") #kw.append("this_is_a_much_much_much_much_much_much_much_longer_value") kw.sort() # Python sorts are case sensitive self.AutoCompSetIgnoreCase(false) # so this needs to match self.AutoCompShow(0, string.join(kw)) else: event.Skip() # << class PythonSTC methods >> (3 of 7) def OnUpdateUI(self, evt): # 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 "<>" and styleBefore == wxSTC_H_TAG: braceAtCaret = caretPos - 1 # check after if braceAtCaret < 0: charAfter = self.GetCharAt(caretPos) styleAfter = self.GetStyleAt(caretPos) if charAfter and chr(charAfter) in "<>" and styleAfter == wxSTC_H_TAG: braceAtCaret = caretPos if braceAtCaret >= 0: braceOpposite = self.BraceMatch(braceAtCaret) if braceAtCaret != -1 and braceOpposite == -1: self.BraceBadLight(braceAtCaret) else: self.BraceHighlight(braceAtCaret, braceOpposite) #pt = self.PointFromPosition(braceOpposite) #self.Refresh(true, wxRect(pt.x, pt.y, 5,5)) #print pt #self.Refresh(false) # << class PythonSTC methods >> (4 of 7) def OnMarginClick(self, evt): # fold and unfold as needed if evt.GetMargin() == 2: if evt.GetShift() and evt.GetControl(): self.FoldAll() else: lineClicked = self.LineFromPosition(evt.GetPosition()) if self.GetFoldLevel(lineClicked) & wxSTC_FOLDLEVELHEADERFLAG: if evt.GetShift(): self.SetFoldExpanded(lineClicked, true) self.Expand(lineClicked, true, true, 1) elif evt.GetControl(): if self.GetFoldExpanded(lineClicked): self.SetFoldExpanded(lineClicked, false) self.Expand(lineClicked, false, true, 0) else: self.SetFoldExpanded(lineClicked, true) self.Expand(lineClicked, true, true, 100) else: self.ToggleFold(lineClicked) # << class PythonSTC methods >> (5 of 7) def FoldAll(self): lineCount = self.GetLineCount() expanding = true # find out if we are folding or unfolding for lineNum in range(lineCount): if self.GetFoldLevel(lineNum) & wxSTC_FOLDLEVELHEADERFLAG: expanding = not self.GetFoldExpanded(lineNum) break; lineNum = 0 while lineNum < lineCount: level = self.GetFoldLevel(lineNum) if level & wxSTC_FOLDLEVELHEADERFLAG and \ (level & wxSTC_FOLDLEVELNUMBERMASK) == wxSTC_FOLDLEVELBASE: if expanding: self.SetFoldExpanded(lineNum, true) lineNum = self.Expand(lineNum, true) lineNum = lineNum - 1 else: lastChild = self.GetLastChild(lineNum, -1) self.SetFoldExpanded(lineNum, false) if lastChild > lineNum: self.HideLines(lineNum+1, lastChild) lineNum = lineNum + 1 # << class PythonSTC methods >> (6 of 7) def Expand(self, line, doExpand, force=false, visLevels=0, level=-1): lastChild = self.GetLastChild(line, level) line = line + 1 while line <= lastChild: if force: if visLevels > 0: self.ShowLines(line, line) else: self.HideLines(line, line) else: if doExpand: self.ShowLines(line, line) if level == -1: level = self.GetFoldLevel(line) if level & wxSTC_FOLDLEVELHEADERFLAG: if force: if visLevels > 1: self.SetFoldExpanded(line, true) else: self.SetFoldExpanded(line, false) line = self.Expand(line, doExpand, force, visLevels-1) else: if doExpand and self.GetFoldExpanded(line): line = self.Expand(line, true, force, visLevels-1) else: line = self.Expand(line, false, force, visLevels-1) else: line = line + 1; return line # << class PythonSTC methods >> (7 of 7) def SetValue(self, text): self.SetText(text) # -- end -- << class PythonSTC methods >> # << STCTest methods >> (3 of 6) class LogEditor(wxStyledTextCtrl): # << class LogEditor methods >> (1 of 14) def __init__(self, parent, ID): wxStyledTextCtrl.__init__(self, parent, ID) self.parent = parent self.entrys = {} self.timeflag = 1 self.linezerroflag = 0 self.indentnum = [0,0] self.backspaceflag = 0 self.insertlinemiddleflag = 0 self.pastingflag = 0 self.line = 0 self.txtl = '' EVT_STC_DO_DROP(self, ID, self.OnDoDrop) EVT_STC_DRAG_OVER(self, ID, self.OnDragOver) EVT_STC_START_DRAG(self, ID, self.OnStartDrag) EVT_STC_MODIFIED(self, ID, self.OnModified) EVT_STC_UPDATEUI(self, ID, self.UpdateUI) EVT_WINDOW_DESTROY(self, self.OnDestroy) self.CmdKeyAssign(ord('B'), wxSTC_SCMOD_CTRL, wxSTC_CMD_ZOOMIN) self.CmdKeyAssign(ord('N'), wxSTC_SCMOD_CTRL, wxSTC_CMD_ZOOMOUT) self.SetMarginType(0, wxSTC_MARGIN_SYMBOL) self.SetMarginWidth(0,16) self.SetMarginMask(0, 7936) # 000-000-000-000 to 111-111-111-111 bin 1-111-100-000-000 self.SetMarginType(1, wxSTC_MARGIN_SYMBOL) self.SetMarginWidth(1,16) self.SetMarginMask(1, 8447) #8432)# bin 10-000-011-110-000 new 100000-11-111-111 self.SetMarginType(2, wxSTC_MARGIN_SYMBOL) self.SetMarginWidth(2,16) self.SetMarginMask(2, wxSTC_MASK_FOLDERS ) self.SetMarginSensitive(0, 1) self.SetMarginSensitive(1, 1) self.SetMarginSensitive(2, 1) self.SetLexer(wxSTC_LEX_PYTHON) self.StyleClearAll() self.SetProperty("fold", "1") #self.SetProperty("tab.timmy.whinge.level", "1") EXPANDED_LINE_ABOVE = 2 EXPANDED_LINE_BELOW = 8 COLLAPSED_LINE_ABOVE = 4 COLLAPSED_LINE_BELOW = 16 LINE_DEBUGGING = 64 self.SetFoldFlags(COLLAPSED_LINE_BELOW) foldIconsFG = '#0000FF' foldIconsBG = '#FFFFFF' # Top Level Folders... self.MarkerDefine(wxSTC_MARKNUM_FOLDER, wxSTC_MARK_CIRCLEPLUS, foldIconsBG , foldIconsFG) # Collapsed self.MarkerDefine(wxSTC_MARKNUM_FOLDEROPEN, wxSTC_MARK_CIRCLEMINUS, foldIconsBG, foldIconsFG) # Expanded self.MarkerDefine(wxSTC_MARKNUM_FOLDERTAIL, wxSTC_MARK_LCORNERCURVE, foldIconsBG, foldIconsFG) # End of Top Level Folder # Nested Folders.... self.MarkerDefine(wxSTC_MARKNUM_FOLDEREND, wxSTC_MARK_CIRCLEPLUSCONNECTED, foldIconsBG, foldIconsFG) # Collapsed self.MarkerDefine(wxSTC_MARKNUM_FOLDEROPENMID, wxSTC_MARK_CIRCLEMINUSCONNECTED, foldIconsBG, foldIconsFG) # Expanded self.MarkerDefine(wxSTC_MARKNUM_FOLDERMIDTAIL, wxSTC_MARK_TCORNERCURVE, foldIconsBG, foldIconsFG) # End of Nested Folder # Inside of Folder Marker self.MarkerDefine(wxSTC_MARKNUM_FOLDERSUB, wxSTC_MARK_VLINE, foldIconsBG, foldIconsFG) EVT_STC_MARGINCLICK(self, ID, self.OnMarginClick) fore = "#A4ABCC" back = "#D0A7C9" new_color = "#D537D0" self.MarkerDefine(0, wxSTC_MARK_ROUNDRECT, fore,new_color) self.MarkerDefine(1, wxSTC_MARK_CIRCLE, fore,new_color) self.MarkerDefine(2, wxSTC_MARK_SHORTARROW, fore,new_color) self.MarkerDefine(3, wxSTC_MARK_ARROW, fore,new_color) self.MarkerDefine(4, wxSTC_MARK_SMALLRECT, fore,new_color) self.MarkerDefine(5, wxSTC_MARK_EMPTY, fore,new_color) self.MarkerDefine(6, wxSTC_MARK_ARROWDOWN,fore,new_color) self.MarkerDefine(8, wxSTC_MARK_MINUS,fore,new_color) self.MarkerDefine(7, wxSTC_MARK_PLUS, new_color,fore) self.MarkerDefine(9, wxSTC_MARK_ARROWS, back,fore) self.MarkerDefine(10, wxSTC_MARK_DOTDOTDOT, back,fore) self.MarkerDefine(11, wxSTC_MARK_BACKGROUND, fore, back) self.MarkerDefine(13, wxSTC_MARK_CIRCLE, back, fore) self.MarkerDefine(12, wxSTC_MARK_CIRCLE, fore, back) self.MarkerDefine(14, wxSTC_MARK_CIRCLE, fore, back) #self.MarkerDefine(wxSTC_MARKNUM_FOLDEREND, wxSTC_MARK_BOXPLUSCONNECTED, "white", "black") #self.MarkerDefine(wxSTC_MARKNUM_FOLDEROPENMID, wxSTC_MARK_BOXMINUSCONNECTED, "white", "black") #self.MarkerDefine(wxSTC_MARKNUM_FOLDERMIDTAIL, wxSTC_MARK_TCORNER, "white", "black") #self.MarkerDefine(wxSTC_MARKNUM_FOLDERTAIL, wxSTC_MARK_LCORNER, "white", "black") #self.MarkerDefine(wxSTC_MARKNUM_FOLDERSUB, wxSTC_MARK_VLINE, "white", "black") #self.MarkerDefine(wxSTC_MARKNUM_FOLDER, wxSTC_MARK_BOXPLUS, "white", "black") #self.MarkerDefine(wxSTC_MARKNUM_FOLDEROPEN, wxSTC_MARK_BOXMINUS, "white", "black") self.SetWrapMode(1) if self.timeflag: self.MarkerAdd(0, 12) # << class LogEditor methods >> (2 of 14) def OnDestroy(self, evt): #self.parent.deactivate() # This is how the clipboard contents can be preserved after # the app has exited. wxTheClipboard.Flush() evt.Skip() # << class LogEditor methods >> (3 of 14) def UpdateUI(self, evt): line = self.LineFromPosition(self.GetCurrentPos()) #print 'self.GetCurrentPos ',self.GetCurrentPos() #print self.line,' self.line ',line,' line' if self.line != line: self.line = line self.parent.RefreshImages() #pass if self.linezerroflag: self.SetLineIndentation(0, 0) self.linezerroflag = 0 if self.indentnum[0]: if self.indentnum[1] < self.GetLineCount(): self.SetLineIndentation(self.indentnum[1], 8) self.indentnum = [0,0] if not(self.insertlinemiddleflag): self.GotoPos(self.GetCurrentPos() + 8) else: self.GotoPos(self.GetCurrentPos() + 1) self.insertlinemiddleflag = 0 # << class LogEditor methods >> (4 of 14) def OnStartDrag(self, evt): if evt.GetPosition() < 250: evt.SetDragAllowMove(false) # you can prevent moving of text (only copy) evt.SetDragText("DRAGGED TEXT") # you can change what is dragged #evt.SetDragText("") # or prevent the drag with empty text # << class LogEditor methods >> (5 of 14) def OnDragOver(self, evt): if evt.GetPosition() < 250: evt.SetDragResult(wxDragNone) # prevent dropping at the begining of the buffer # << class LogEditor methods >> (6 of 14) def OnDoDrop(self, evt): if evt.GetPosition() < 500: evt.SetDragText("DROPPED TEXT") # Can change text if needed ##evt.SetDragResult(wxDragNone) # Can also change the drag operation, but it # is probably better to do it in OnDragOver so # there is visual feedback ##evt.SetPosition(25) # Can also change position, but I'm not sure why # you would want to... # << class LogEditor methods >> (7 of 14) def OnModified(self, evt): lines_added = evt.GetLinesAdded() line = self.LineFromPosition(evt.GetPosition()) self.line = line new_key = [] tmp_text = '' temp_num = 0 ##print 'Line is ',line if wxSTC_MOD_INSERTTEXT & evt.GetModificationType():#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Insert Tesxt ##print 'insert text ', if len(evt.GetText()) > 1: if evt.GetText() == '\r\n': if self.GetLineIndentation(line) != 0: self.indentnum = [1, line + 1] # if in middle move lines forward else pass if line < self.GetLineCount() - 2 and self.GetLineIndentation(line) != 0: self.insertlinemiddleflag = 1 if self.entrys.has_key(self.GetFoldParent(line)): self.entrys[self.GetFoldParent(line)].AddLine('') for j in range(len(self.entrys[self.GetFoldParent(line)].linelist) - 1,line - self.GetFoldParent(line),-1): #print 'sublist range ', j self.entrys[self.GetFoldParent(line)].ChangeLine(self.entrys[self.GetFoldParent(line)].linelist[j-1],j) self.MoveLines(line ,1) line = line + 1 self.RefreshCode() #elif line < self.GetLineCount() - 2: #self.MoveLines(line ,1) #line = line + 1 #self.RefreshCode() ##print ' a speaceal case, return pressed' ##print line,' line '#, self.GetColumn(evt.GetPosition()), ' column ',evt.GetPosition(),' position' else: # feed the text into feed me line < self.GetLineCount() - 2: new_key = string.split(evt.GetText(),'\r\n') #print new_key, " the key" #for i in range(len(new_key)): # if len(new_key[i]): # if new_key[i][0] == '\t': # self.SetLineIndentation(line + i + 1, 8) temp_num = 0 for i in new_key: self.pastingflag = 1 for j in i: self.FeedMe(evt , line + temp_num,j) #print repr(j),line,line + temp_num #### self.MoveLines(line + temp_num,1) wxSafeYield() temp_num = temp_num + 1 new_key = [] temp_num = 0 self.pastingflag = 0 else: self.FeedMe(evt , line ,evt.GetText()) elif wxSTC_MOD_DELETETEXT & evt.GetModificationType():# ****************************************** Delete Text #print 'delete text ', evt.GetText() , ' at line', line if len(evt.GetText()) > 1: if evt.GetText() == '\r\n': if self.entrys.has_key(line + 1): del self.entrys[line + 1] self.MoveLinesIn(line ,-1) self.RefreshCode() elif self.entrys.has_key(self.GetFoldParent(line)): #print 'deleteing before tab' self.entrys[self.GetFoldParent(line)].DeleteLine(line - self.GetFoldParent(line) -1) else: for i in range(line -1 - lines_added,line-1, -1): if self.entrys.has_key(i + 1): del self.entrys[i + 1] #print 'deleteing',i + 1 self.MoveLinesIn(i ,-1) self.RefreshCode() elif self.entrys.has_key(self.GetFoldParent(i)): self.entrys[self.GetFoldParent(i)].DeleteLine(i - self.GetFoldParent(i) -1) else: #1 if self.GetFoldParent(line) == -1: #print 'lone line ',line, if self.entrys.has_key(line): #print ' I have a key, I was ', self.entrys[line].headding,' I am ',self.GetLine(line) self.entrys[line].headding = self.GetLine(line) self.RefreshCode() else:#2 pass #print ' new line' elif self.GetFoldLevel(line) & wxSTC_FOLDLEVELNUMBERMASK == 1024: #print ' main level', line, if self.entrys.has_key(line): #print ' I am a key, at ',line,' I am ',self.GetLine(line) self.entrys[line].headding = self.GetLine(line) self.RefreshCode() else: # before sub #print 'sub level ', if self.entrys.has_key(self.GetFoldParent(line)): #print 'I have an key at line ',self.GetFoldParent(line), if evt.GetText() == '\t' and self.GetColumn(evt.GetPosition()) == 0: #print ' a speaceal case, tab deleted at beginning of line' self.backspaceflag = 1 new_key.append(self.entrys[self.GetFoldParent(line)]) temp_num = self.GetFoldParent(line) if self.timeflag: self.MarkerAdd(line, 12) if self.MarkerGet(line) & 4096: self.entrys[line] = Logger(self.GetLine(line), time.strftime('%c'), line) self.entrys[line].headding = self.GetLine(line) else: self.entrys[line] = Logger(self.GetLine(line),'', line) self.entrys[line].headding = self.GetLine(line) for j in range(line - temp_num ,len(new_key[0].linelist)): #print 'sublist range ', j self.entrys[line].AddLine(new_key[0].linelist[j]) for j in range(len(new_key[0].linelist)-1, line - temp_num - 2, -1): #print 'delete list range ',line - temp_num - 2,'to', len(new_key[0].linelist)-1,j new_key[0].DeleteLine(j) self.RefreshCode() new_key = [] elif int(line - self.GetFoldParent(line) - 1) in range(len(self.entrys[self.GetFoldParent(line)].linelist)): #print 'I am line Number ', line - self.GetFoldParent(line) -1,'I am ',self.GetLine(line)[1:] self.entrys[self.GetFoldParent(line)].ChangeLine(self.GetLine(line)[1:],line - self.GetFoldParent(line) -1) self.RefreshCode() else: # end pass #print ' new sub line' # << class LogEditor methods >> (8 of 14) def OnMarginClick(self, evt): line = self.LineFromPosition(evt.GetPosition()) Iconflag = 5 if evt.GetMargin() == 0: if self.MarkerGet(line) & 4096: self.MarkerDelete(line, 12) if self.GetFoldParent(line) == -1 or (self.GetFoldLevel(line) & wxSTC_FOLDLEVELHEADERFLAG): try: self.entrys[line].maketime = '' except KeyError: pass #print "key error" self.RefreshCode() else: self.MarkerAdd(line, 12) if self.GetFoldParent(line) == -1 and line < len(self.entrys): try: self.entrys[line].maketime = time.strftime('%c') except KeyError: pass #print "key error" self.RefreshCode() elif evt.GetMargin() == 1: try: Iconflag = self.entrys[line].icon except KeyError: Iconflag = 5 #print Iconflag,' it should be ', self.MarkerGet(line) & 2**Iconflag if self.MarkerGet(line) & 2**Iconflag: self.MarkerDelete(line , Iconflag) Iconflag = Iconflag + 1 if Iconflag > 7: Iconflag = 0 self.MarkerAdd(line, Iconflag) try: self.entrys[line].icon = Iconflag except KeyError: pass #print "key error" self.RefreshCode() else: self.MarkerAdd(line, Iconflag) try: self.entrys[line].icon = Iconflag except KeyError: pass #print "key error" self.RefreshCode() elif evt.GetMargin() == 2: if evt.GetShift() and evt.GetControl(): self.FoldAll() else: lineClicked = self.LineFromPosition(evt.GetPosition()) if self.GetFoldLevel(lineClicked) & wxSTC_FOLDLEVELHEADERFLAG: if evt.GetShift(): self.SetFoldExpanded(lineClicked, true) self.Expand(lineClicked, true, true, 1) elif evt.GetControl(): if self.GetFoldExpanded(lineClicked): self.SetFoldExpanded(lineClicked, false) self.Expand(lineClicked, false, true, 0) else: self.SetFoldExpanded(lineClicked, true) self.Expand(lineClicked, true, true, 100) else: self.ToggleFold(lineClicked) else: event.Skip() # << class LogEditor methods >> (9 of 14) def FeedMe(self, evt,line ,char): #print ' My fold parent ',self.GetFoldParent(line) #print 'Get Fold Level ',self.GetFoldLevel(line) & wxSTC_FOLDLEVELNUMBERMASK #print 'Char ',char, char,self.GetColumn(evt.GetPosition()) #print 'self.entrys.has_key(line)',self.entrys.has_key(line) if self.pastingflag: columnpos = 0 else: columnpos = self.GetColumn(evt.GetPosition()) #print ' ***************************************** ',self.GetFoldLevel(line) & wxSTC_FOLDLEVELNUMBERMASK,(self.GetFoldLevel(line)| 1032) & wxSTC_FOLDLEVELNUMBERMASK if self.GetFoldParent(line) == -1: #print 'lone line ',line, if self.entrys.has_key(line): if char == '\t' and columnpos == 0: #print ' A tab at begining ', if line == 0: #print 'backup a space' self.linezerroflag = 1 else: #print ' a speaceal case, tab added to beginning of main line' if self.GetFoldParent(line - 1) == -1: try: self.entrys[line-1].AddLine(self.entrys[line].headding) except: pass else: self.entrys[self.GetFoldParent(line - 1)].AddLine(self.entrys[line].headding) for j in self.entrys[line].linelist: if self.GetFoldParent(line - 1) == -1: self.entrys[line - 1].AddLine(j) else: self.entrys[self.GetFoldParent(line - 1)].AddLine(j) del self.entrys[line] if self.MarkerGet(line) & 4096: self.MarkerDelete(line, 12) self.RefreshCode() else: #print ' I have a key, I was ', self.entrys[line].headding,' I am ',self.GetLine(line) self.entrys[line].headding = self.GetLine(line) self.RefreshCode() elif char != '\t': #print ' new line',repr(char) if self.timeflag: self.MarkerAdd(line, 12) self.entrys[line] = Logger(self.GetLine(line), time.strftime('%c'), line) else: self.entrys[line] = Logger(self.GetLine(line),'', line) else: #print ' count back to first line with key and add line 0' for i in range(line,0,-1): if self.entrys.has_key(i): self.entrys[i].AddLine('') #print ' added to line ', i if self.MarkerGet(line) & 4096: self.MarkerDelete(line, 12) break #SCI_SETFOLDLEVEL(int line, int level) self.SetFoldLevel(line,self.GetFoldLevel(line)| 1032) self.RefreshCode() elif self.GetFoldLevel(line) & wxSTC_FOLDLEVELNUMBERMASK == 1024: #print ' main level', line, if self.entrys.has_key(line): if char == '\t' and columnpos == 0: if line == 0: #print 'backup a space' self.linezerroflag = 1 else: #print ' a speaceal case, tab added to beginning of main line' if self.GetFoldParent(line - 1) == -1: self.entrys[line-1].AddLine(self.entrys[line].headding) else: self.entrys[self.GetFoldParent(line - 1)].AddLine(self.entrys[line].headding) for j in self.entrys[line].linelist: if self.GetFoldParent(line - 1) == -1: self.entrys[line - 1].AddLine(j) else: self.entrys[self.GetFoldParent(line - 1)].AddLine(j) if self.MarkerGet(line) & 4096: self.MarkerDelete(line, 12) del self.entrys[line] self.RefreshCode() else: #print ' I am a key, at ',line,' I am ',self.GetLine(line) self.entrys[line].headding = self.GetLine(line) self.RefreshCode() elif char != '\t': #print ' new line',repr(char) if self.timeflag: self.MarkerAdd(line, 12) self.entrys[line] = Logger(self.GetLine(line), time.strftime('%c'), line) else: self.entrys[line] = Logger(self.GetLine(line),'', line) self.RefreshCode() elif char == '\t': #print ' count back to first line with key and add line 1' if self.GetFoldParent(line - 1) == -1: self.entrys[line-1].AddLine(char) else: self.entrys[self.GetFoldParent(line - 1)].AddLine(char) if self.MarkerGet(line) & 4096: self.MarkerDelete(line, 12) self.RefreshCode() else: #print 'sub level ', if self.entrys.has_key(self.GetFoldParent(line)): #print 'I have an key at line ',self.GetFoldParent(line), if int(line - self.GetFoldParent(line) - 1) in range(len(self.entrys[self.GetFoldParent(line)].linelist)): #print 'I am line Number ', line - self.GetFoldParent(line) -1,'I am ',self.GetLine(line)[1:] self.entrys[self.GetFoldParent(line)].ChangeLine(self.GetLine(line)[1:],line - self.GetFoldParent(line) -1) elif not(self.backspaceflag): #print ' new sub line' #print ' My key is ',self.GetFoldParent(line),' the line is ', line #print 'done',self.GetFoldParent(line),line self.entrys[self.GetFoldParent(line)].AddLine(self.GetLine(line)[1:]) if self.MarkerGet(line) & 4096: self.MarkerDelete(line, 12) self.RefreshCode() else: self.backspaceflag = 0 #print 'backspace flag ', if self.timeflag: self.MarkerAdd(line, 12) self.entrys[line] = Logger(char, time.strftime('%c'), line) else: self.entrys[line] = Logger(char,'', line) #print 'new line at',line self.SetFoldLevel(line,wxSTC_FOLDLEVELBASE) self.RefreshCode() else: #print ' count back to first line with key and add line 2' if self.GetFoldParent(line - 1) == -1: self.entrys[line-1].AddLine(char) else: self.entrys[self.GetFoldParent(line - 1)].AddLine(char) if self.MarkerGet(line) & 4096: self.MarkerDelete(line, 12) self.RefreshCode() self.RefreshCode() # << class LogEditor methods >> (10 of 14) def MoveLines(self, line ,lines_added): new_key = [] for i in range(self.GetLineCount(),line - lines_added + 1, -1): if self.entrys.has_key(i): #print ' moving key ', i new_key.append(self.entrys[i]) del self.entrys[i] self.entrys[i + lines_added] = new_key[0] new_key = [] self.RefreshCode() # << class LogEditor methods >> (11 of 14) def MoveLinesIn(self, line ,lines_added): new_key = [] for i in range(line + 2, self.GetLineCount()): if self.entrys.has_key(i): #print ' moving key ', i new_key.append(self.entrys[i]) if i + lines_added < line +1: del self.entrys[i] self.RefreshCode() else: self.entrys[i + lines_added]= self.entrys[i] del self.entrys[i] self.RefreshCode() # << class LogEditor methods >> (12 of 14) def RefreshCode(self): fullpage = '' keysandthings = self.entrys.keys() keysandthings.sort() keysandthings.reverse() for i in keysandthings: fullpage = fullpage + self.entrys[i].Hgen() self.parent.CodeWindow.SetValue(fullpage) # << class LogEditor methods >> (13 of 14) def FoldAll(self): lineCount = self.GetLineCount() expanding = true # find out if we are folding or unfolding for lineNum in range(lineCount): if self.GetFoldLevel(lineNum) & wxSTC_FOLDLEVELHEADERFLAG: expanding = not self.GetFoldExpanded(lineNum) break; lineNum = 0 while lineNum < lineCount: level = self.GetFoldLevel(lineNum) if level & wxSTC_FOLDLEVELHEADERFLAG and \ (level & wxSTC_FOLDLEVELNUMBERMASK) == wxSTC_FOLDLEVELBASE: if expanding: self.SetFoldExpanded(lineNum, true) lineNum = self.Expand(lineNum, true) lineNum = lineNum - 1 else: lastChild = self.GetLastChild(lineNum, -1) self.SetFoldExpanded(lineNum, false) if lastChild > lineNum: self.HideLines(lineNum+1, lastChild) lineNum = lineNum + 1 # << class LogEditor methods >> (14 of 14) def Expand(self, line, doExpand, force=false, visLevels=0, level=-1): lastChild = self.GetLastChild(line, level) line = line + 1 while line <= lastChild: if force: if visLevels > 0: self.ShowLines(line, line) else: self.HideLines(line, line) else: if doExpand: self.ShowLines(line, line) if level == -1: level = self.GetFoldLevel(line) if level & wxSTC_FOLDLEVELHEADERFLAG: if force: if visLevels > 1: self.SetFoldExpanded(line, true) else: self.SetFoldExpanded(line, false) line = self.Expand(line, doExpand, force, visLevels-1) else: if doExpand and self.GetFoldExpanded(line): line = self.Expand(line, true, force, visLevels-1) else: line = self.Expand(line, false, force, visLevels-1) else: line = line + 1; return line # -- end -- << class LogEditor methods >> # << STCTest methods >> (4 of 6) class MyFrame(wxFrame): # << class MyFrame methods >> (1 of 9) def __init__(self, parent, id, title): wxFrame.__init__(self, parent, -1, title, size = (500, 500),style = wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE ) #image_view.ImageView(self.ImageWindow , -1) #self.ImageViewList = {} #self.database = metakit.storage(os.path.join(os.getcwd(), 'CaptLog.mk') ,1) #self.dataview = self.database.getas("logg[headding:S,maketime:S,linenumber:I,icon:I,imglist:S,linelist:S]") self.SetAutoLayout(true) inSizer = wxBoxSizer(wxHORIZONTAL) buttonsizer = wxBoxSizer(wxVERTICAL) fileselectsizer = wxBoxSizer(wxHORIZONTAL) id = wxNewId() self.CodeWindow = HTMLSTC(self, id) id = wxNewId() self.Filebutton = wxButton(self, id, "File", wxPoint(20, 20), wxSize(250, -1)) EVT_BUTTON(self, id, self.OnFileClick) id = wxNewId() self.ImageWindow = wxNotebook(self, id, style=wxNB_BOTTOM) id = wxNewId() self.MainLog = LogEditor(self, id) fileselectsizer.Add(self.Filebutton,1,wxGROW) id = wxNewId() self.Urlbutton = wxButton(self, id, "URL", wxPoint(20, 20), wxSize(250, -1)) EVT_BUTTON(self, id, self.OnURLClick) id = wxNewId() EVT_WINDOW_DESTROY(self, self.OnDestroy) self.Deletebutton = wxButton(self, id, "X", wxPoint(20, 20), wxSize(250, -1)) EVT_BUTTON(self, id, self.OnDeleteClick) fileselectsizer.Add(self.Urlbutton,1,wxGROW) fileselectsizer.Add(self.Deletebutton,1,wxGROW) inSizer.Add(self.MainLog, 1, wxGROW) buttonsizer.Add(self.ImageWindow, 20, wxGROW) buttonsizer.Add(fileselectsizer, 1, wxGROW) buttonsizer.Add(self.CodeWindow, 20, wxGROW) inSizer.Add(buttonsizer, 1, wxGROW) self.SetSizer(inSizer) self.Show(1) #self.activate() # << class MyFrame methods >> (2 of 9) def OnFileClick(self,evt): wildcard = "Jpeg (*.JPG)|*.jpg|Bitmap (*.BMP)|*.bmp|All files (*.*)|*.*" dlg = wxFileDialog(self, "Choose a file", "", "", wildcard, wxOPEN) if dlg.ShowModal() == wxID_OK: path = str(dlg.GetPath()) else: path = '' dlg.Destroy() if not(self.ImageWindow.IsShown()): self.ImageWindow.Show(1) line = self.MainLog.line #if self.ImageViewList.has_key(line): #ViewList = self.ImageViewList[line] #elif self.ImageViewList.has_key(self.MainLog.GetFoldParent(line)): #ViewList = self.ImageViewList[self.MainLog.GetFoldParent(line)] #else: #ViewList = [] if self.MainLog.entrys.has_key(line): ViewList = self.MainLog.entrys[line].ViewList img = Image.open(path) id = wxNewId() ViewList.append(image_view.ImageView(self.ImageWindow,id,tools = [ image_view.PanTool, image_view.ZoomTool])) ViewList[len(ViewList)-1].set_image(img) self.ImageWindow.AddPage(ViewList[len(ViewList)-1],os.path.split(path)[1]) self.MainLog.entrys[line].AddImage(path) self.MainLog.RefreshCode() self.MainLog.entrys[line].ViewList = ViewList elif self.MainLog.entrys.has_key(self.MainLog.GetFoldParent(line)): ViewList = self.MainLog.entrys[self.MainLog.GetFoldParent(line)].ViewList img = Image.open(path) id = wxNewId() ViewList.append(image_view.ImageView(self.ImageWindow,id,tools = [ image_view.PanTool, image_view.ZoomTool])) ViewList[len(ViewList)-1].set_image(img) self.ImageWindow.AddPage(ViewList[len(ViewList)-1],os.path.split(path)[1]) self.MainLog.entrys[self.MainLog.GetFoldParent(line)].AddImage(path) self.MainLog.RefreshCode() self.MainLog.entrys[self.MainLog.GetFoldParent(line)].ViewList = ViewList #self.ImageViewList[line] = ViewList #filename = evt.GetString() #tools = [ PanTool, ZoomTool, InspectTool , SharpTool , ColorTool , BrightTool , ContTool , RestoreTool , RedTool , GreenTool , BlueTool] # << class MyFrame methods >> (3 of 9) def OnURLClick(self,evt): dlg = wxTextEntryDialog(self, 'Enter Image URL',"Captain's Log", '') dlg.SetValue('') if dlg.ShowModal() == wxID_OK: path = str(dlg.GetValue()) #print str(dlg.GetValue()) tom = urllib2.urlopen(str(dlg.GetValue())) tomstr = tom.read() #typofimage = os.path.splitext(str(dlg.GetValue()))[1] #print typofimage img = WXToPIL(wxImageFromStream(StringIO.StringIO(tomstr)),'RGB') del tom else: path = '' img = Image.open('') dlg.Destroy() if not(self.ImageWindow.IsShown()): self.ImageWindow.Show(1) line = self.MainLog.line # if self.ImageViewList.has_key(line): # ViewList = self.ImageViewList[line] # elif self.ImageViewList.has_key(self.MainLog.GetFoldParent(line)): # ViewList = self.ImageViewList[self.MainLog.GetFoldParent(line)] # else: # ViewList = [] if self.MainLog.entrys.has_key(line): ViewList = self.MainLog.entrys[line].ViewList id = wxNewId() ViewList.append(image_view.ImageView(self.ImageWindow,id,tools = [image_view.PanTool, image_view.ZoomTool])) ViewList[len(ViewList)-1].set_image(img) self.ImageWindow.AddPage(ViewList[len(ViewList)-1],os.path.split(path)[1]) self.MainLog.entrys[line].AddImage(path) self.MainLog.RefreshCode() self.MainLog.entrys[line].ViewList = ViewList elif self.MainLog.entrys.has_key(self.MainLog.GetFoldParent(line)): ViewList = self.MainLog.entrys[self.MainLog.GetFoldParent(line)].ViewList id = wxNewId() ViewList.append(image_view.ImageView(self.ImageWindow,id,tools = [image_view.PanTool, image_view.ZoomTool])) ViewList[len(ViewList)-1].set_image(img) self.ImageWindow.AddPage(ViewList[len(ViewList)-1],os.path.split(path)[1]) self.MainLog.entrys[self.MainLog.GetFoldParent(line)].AddImage(path) self.MainLog.RefreshCode() self.MainLog.entrys[self.MainLog.GetFoldParent(line)].ViewList = ViewList #self.ImageViewList[line] = ViewList # << class MyFrame methods >> (4 of 9) def OnDeleteClick(self,evt): line = self.MainLog.line #print self.ImageWindow.GetSelection() #print self.ImageViewList if self.MainLog.entrys.has_key(line): del self.MainLog.entrys[line].ViewList[self.ImageWindow.GetSelection()] #del self.ImageViewList[line][self.ImageWindow.GetSelection()] self.MainLog.entrys[line].DeleteImage(self.ImageWindow.GetSelection()) self.ImageWindow.DeletePage(self.ImageWindow.GetSelection()) self.MainLog.RefreshCode() #if self.ImageViewList[line] == []: #del self.ImageViewList[line] elif self.MainLog.entrys.has_key(self.MainLog.GetFoldParent(line)): del self.MainLog.entrys[self.MainLog.GetFoldParent(line)].ViewList[self.ImageWindow.GetSelection()] #del self.ImageViewList[line][self.ImageWindow.GetSelection()] self.MainLog.entrys[self.MainLog.GetFoldParent(line)].DeleteImage(self.ImageWindow.GetSelection()) self.ImageWindow.DeletePage(self.ImageWindow.GetSelection()) self.MainLog.RefreshCode() #if self.ImageViewList[line] == []: #del self.ImageViewList[self.MainLog.GetFoldParent(line)] # << class MyFrame methods >> (5 of 9) def RefreshImages(self): line = self.MainLog.line pagecount = self.ImageWindow.GetPageCount() # clear note book, count thrue line images and add each one to list for i in range(pagecount,0,-1): self.ImageWindow.GetPage(i-1).Show(0) self.ImageWindow.RemovePage(i-1) self.ImageWindow.Show(0) #self.ImageWindow.Refresh() # if self.ImageViewList.has_key(line): # ViewList = self.ImageViewList[line] # elif self.ImageViewList.has_key(self.MainLog.GetFoldParent(line)): # ViewList = self.ImageViewList[self.MainLog.GetFoldParent(line)][:] # else: # ViewList = [] #print len(ViewList),line #print ViewList if self.MainLog.entrys.has_key(line): ViewList = self.MainLog.entrys[line].ViewList elif self.MainLog.entrys.has_key(self.MainLog.GetFoldParent(line)): ViewList = self.MainLog.entrys[self.MainLog.GetFoldParent(line)].ViewList else: ViewList = [] for i in range(len(ViewList)): if not(self.ImageWindow.IsShown()): self.ImageWindow.Show(1) if self.MainLog.entrys.has_key(line): path = self.MainLog.entrys[line].imglist[i] elif self.MainLog.entrys.has_key(self.MainLog.GetFoldParent(line)): path = self.MainLog.entrys[self.MainLog.GetFoldParent(line)].imglist[i] #print path ViewList[i].Show(1) self.ImageWindow.AddPage(ViewList[i],os.path.split(path)[1]) #print 'added page ',os.path.split(path)[1] self.ImageWindow.Refresh() self.MainLog.SetFocus() # << class MyFrame methods >> (6 of 9) def deactivate(self): self.dataview[:] = [] for p in self.MainLog.entrys.keys(): i = self.MainLog.entrys[p] self.dataview.append(headding=str(i.headding),maketime=str(i.maketime),linenumber=int(i.linenumber),icon=int(i.icon),imglist=str(string.join(i.imglist,'|')),linelist=str(string.join(i.linelist,'|'))) self.database.commit() #vw.append(first='John',last='Lennon',shoesize=44) #self.dataview = self.database.getas("logg[headding:S,maketime:S,linenumber:I,icon:I,imglist:S,linelist:S]") # << class MyFrame methods >> (7 of 9) def activate(self): temptxt = '' for i in self.dataview: self.MainLog.entrys[i.linenumber] = Logger(i.headding, i.maketime, i.linenumber) self.MainLog.entrys[i.linenumber].icon = i.icon temptxt = temptxt + i.headding + '\r' #self.MainLog.entrys[i.linenumber].imglist = i.imglist #self.MainLog.entrys[i.linenumber].linelist = i.linelist print repr(i.linelist),'yyyyyyyy',repr(i.headding ) for j in string.split(i.linelist,'|'): self.MainLog.entrys[i.linenumber].AddLine(j) temptxt = temptxt + '\t' + j + '\r' for j in string.split(i.imglist,','): self.MainLog.entrys[i.linenumber].AddImage(j) #ViewList = self.MainLog.entrys[line].ViewList if j[:3].lower() == 'http': tom = urllib2.urlopen(str(j)) tomstr = tom.read() img = WXToPIL(wxImageFromStream(StringIO.StringIO(tomstr)),'RGB') del tom else: try: img = Image.open(j) except: img = None id = wxNewId() self.MainLog.entrys[i.linenumber].ViewList.append(image_view.ImageView(self.ImageWindow,id,tools = [ image_view.PanTool, image_view.ZoomTool])) self.MainLog.entrys[i.linenumber].ViewList[len(self.MainLog.entrys[i.linenumber].ViewList)-1].set_image(img) if i.linenumber == 0: self.ImageWindow.AddPage(self.MainLog.entrys[i.linenumber].ViewList[len(self.MainLog.entrys[i.linenumber].ViewList)-1],os.path.split(j)[1]) self.MainLog.RefreshCode() self.MainLog.SetText(temptxt) # << class MyFrame methods >> (8 of 9) def OnDestroy(self,evt): evt.Skip() # << class MyFrame methods >> (9 of 9) def Blank__(self,evt): pass # -- end -- << class MyFrame methods >> # << STCTest methods >> (5 of 6) class Logger(wxNotebook): # << class Logger methods >> (1 of 7) def __init__(self,headding, maketime, linenumber): self.headding = headding self.maketime = maketime self.linenumber = linenumber self.image_text,self.stories_text = '','' self.font_big = HTMLgen.Font(face="Book Antiqua", size=4) self.font_small = HTMLgen.Font(face="Book Antiqua", size=2) self.font_time = HTMLgen.Font(face="Book Antiqua", size=1) self.imglist = [] self.ViewList = [] self.image_text = '' self.linelist = [] self.stories_text = '' self.icon = 5 self.icons = ['rb_image/azicon.jpg','rb_image/Pumpkinicon.jpg','rb_image/planticon.jpg','rb_image/houseicon.jpg','rb_image/peakicon.jpg','','rb_image/rbicon.jpg','rb_image/pythonicon.jpg','rb_image/rockinbicon.jpg'] # << class Logger methods >> (2 of 7) def AddImage(self,img): self.imglist.append(img) self.image_text = '' for i in self.imglist: self.image_text = self.image_text + str(HTMLgen.Image(i)) + '
' # << class Logger methods >> (3 of 7) def DeleteImage(self, linenum): del self.imglist[linenum] self.image_text = '' for i in self.imglist: self.image_text = self.image_text + str(HTMLgen.Image(i)) + '
' # << class Logger methods >> (4 of 7) def AddLine(self,line): self.linelist.append(str(line)) self.stories_text = '' for i in self.linelist: self.stories_text = self.stories_text + str(i) + '
' # << class Logger methods >> (5 of 7) def DeleteLine(self, linenum): del self.linelist[linenum] self.stories_text = '' for i in self.linelist: self.stories_text = self.stories_text + str(i) + '
' # << class Logger methods >> (6 of 7) def ChangeLine(self, line, linenum): self.linelist[linenum] = line self.stories_text = '' for i in self.linelist: self.stories_text = self.stories_text + str(i) + '
' # << class Logger methods >> (7 of 7) def Hgen(self): code = HTMLgen.Table(caption_align='top',border=0,cell_padding=0,cell_spacing=0,width='90%',colspan=[1,1],heading= [' '],heading_align='left',heading_valign='middle',body_color=None,heading_color=None,body=[[' ']],column1_align='left',cell_align='left',cell_line_breaks=1) cont = HTMLgen.Container() cont2 = HTMLgen.Container() cont2.append(self.stories_text) img = '' if self.icon != 5: img = str(HTMLgen.Image(self.icons[self.icon])) + ' ' else: img = '' cont.append(img,self.font_big(self.headding),'
',self.font_time(self.maketime),'
',self.image_text,'
',self.font_small(cont2),'
') code.body.append([cont]) return str(code) # -- end -- << class Logger methods >> # << STCTest methods >> (6 of 6) class LogApp(wxApp): # << class App methods >> def OnInit(self): frame = MyFrame(None, -1, "Captain's Log") self.SetTopWindow(frame) return true # -- end -- << class App methods >> # -- end -- << STCTest methods >> app = LogApp(0) # Create an instance of the application class app.MainLoop() # Tell it to start processing event