from wxPython.wx import *
from wxPython.stc import *
+import images
+
#----------------------------------------------------------------------
+debug = 1
+
+
demoText = """\
This editor is provided by a class named wxStyledTextCtrl. As
face1 = 'Arial'
face2 = 'Times New Roman'
face3 = 'Courier New'
- pb = 6
+ pb = 10
else:
face1 = 'Helvetica'
face2 = 'Times'
wxStyledTextCtrl.__init__(self, parent, ID)
self.log = log
+ 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_WINDOW_DESTROY(self, self.OnDestroy)
+
+ def OnDestroy(self, evt):
+ # This is how the clipboard contents can be preserved after
+ # the app has exited.
+ wxTheClipboard.Flush()
+ evt.Skip()
+
+
+ def OnStartDrag(self, evt):
+ self.log.write("OnStartDrag: %d, %s\n"
+ % (evt.GetDragAllowMove(), evt.GetDragText()))
+
+ if debug and 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
+
+
+ def OnDragOver(self, evt):
+ self.log.write("OnDragOver: x,y=(%d, %d) pos: %d DragResult: %d\n"
+ % (evt.GetX(), evt.GetY(), evt.GetPosition(), evt.GetDragResult()))
+
+ if debug and evt.GetPosition() < 250:
+ evt.SetDragResult(wxDragNone) # prevent dropping at the begining of the buffer
+
+
+ def OnDoDrop(self, evt):
+ self.log.write("OnDoDrop: x,y=(%d, %d) pos: %d DragResult: %d\n"
+ "\ttext: %s\n"
+ % (evt.GetX(), evt.GetY(), evt.GetPosition(), evt.GetDragResult(),
+ evt.GetDragText()))
+
+ if debug and 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...
+
+
+
def OnModified(self, evt):
self.log.write("""OnModified
evt.GetPosition(),
evt.GetLinesAdded(),
evt.GetLength(),
- evt.GetText() ))
+ repr(evt.GetText()) ))
+
def transModType(self, modType):
st = ""
+
#----------------------------------------------------------------------
_USE_PANEL = 1
ed = p = MySTC(nb, -1, log)
else:
- p = wxPanel(nb, -1)
+ p = wxPanel(nb, -1, style=wxNO_FULL_REPAINT_ON_RESIZE)
ed = MySTC(p, -1, log)
s = wxBoxSizer(wxHORIZONTAL)
s.Add(ed, 1, wxEXPAND)
p.SetSizer(s)
- p.SetAutoLayout(true)
+ p.SetAutoLayout(True)
+
+
+ #ed.SetBufferedDraw(False)
+ #ed.StyleClearAll()
+ #ed.SetScrollWidth(800)
+ #ed.SetWrapMode(True)
ed.SetText(demoText)
+ if wxUSE_UNICODE:
+ import codecs
+ decode = codecs.lookup("utf-8")[1]
+
+ ed.GotoPos(ed.GetLength())
+ ed.AddText("\n\nwxStyledTextCtrl can also do Unicode:\n")
+ unitext, l = decode('\xd0\x9f\xd0\xb8\xd1\x82\xd0\xbe\xd0\xbd - '
+ '\xd0\xbb\xd1\x83\xd1\x87\xd1\x88\xd0\xb8\xd0\xb9 '
+ '\xd1\x8f\xd0\xb7\xd1\x8b\xd0\xba \xd0\xbf\xd1\x80\xd0\xbe\xd0\xb3\xd1\x80\xd0\xb0\xd0\xbc\xd0\xbc\xd0\xb8\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xb8\xd1\x8f!\n\n')
+ ed.AddText('\tRussian: ')
+ ed.AddText(unitext)
+ ed.GotoPos(0)
+
ed.EmptyUndoBuffer()
# make some styles
- ed.StyleSetSpec(wxSTC_STYLE_DEFAULT, "size:%d,face:%s" % (pb+2, face3))
- ed.StyleSetSpec(1, "size:%d,bold,face:%s,fore:#0000FF" % (pb+3, face1))
- ed.StyleSetSpec(2, "face:%s,italic,fore:#FF0000,size:%d" % (face2, pb+2))
- ed.StyleSetSpec(3, "face:%s,bold,size:%d" % (face2, pb+3))
- ed.StyleSetSpec(4, "face:%s,size:%d" % (face1, pb))
-
+ ed.StyleSetSpec(wxSTC_STYLE_DEFAULT, "size:%d,face:%s" % (pb, face3))
+ ed.StyleSetSpec(1, "size:%d,bold,face:%s,fore:#0000FF" % (pb+2, face1))
+ ed.StyleSetSpec(2, "face:%s,italic,fore:#FF0000,size:%d" % (face2, pb))
+ ed.StyleSetSpec(3, "face:%s,bold,size:%d" % (face2, pb+2))
+ ed.StyleSetSpec(4, "face:%s,size:%d" % (face1, pb-1))
- # now set some text to those styles... Normally this would be
+ # Now set some text to those styles... Normally this would be
# done in an event handler that happens when text needs displayed.
ed.StartStyling(98, 0xff)
ed.SetStyling(6, 1) # set style for 6 characters using style 1
# setup some markers
ed.SetMarginType(1, wxSTC_MARGIN_SYMBOL)
ed.MarkerDefine(0, wxSTC_MARK_ROUNDRECT, "#CCFF00", "RED")
- ed.MarkerDefine(1, wxSTC_MARK_CIRCLE, "FOREST GREEN", "SIENNA")
+ #ed.MarkerDefine(1, wxSTC_MARK_CIRCLE, "FOREST GREEN", "SIENNA")
+ ed.MarkerDefineBitmap(1, images.getFolder1Bitmap())
ed.MarkerDefine(2, wxSTC_MARK_SHORTARROW, "blue", "blue")
ed.MarkerDefine(3, wxSTC_MARK_ARROW, "#00FF00", "#00FF00")
ed.SetStyling(10, wxSTC_INDIC1_MASK)
ed.SetStyling(10, wxSTC_INDIC2_MASK | wxSTC_INDIC1_MASK)
+
# some test stuff...
- if 1:
+ if debug:
print "GetTextLength(): ", ed.GetTextLength(), len(ed.GetText())
print "GetText(): ", repr(ed.GetText())
print
ed.SetSelection(25, 35)
print "GetSelectedText(): ", repr(ed.GetSelectedText())
print "GetTextRange(25, 35): ", repr(ed.GetTextRange(25, 35))
-
+ print "FindText(0, max, 'indicators'): ",
+ print ed.FindText(0, ed.GetTextLength(), "indicators")
ed.GotoPos(0)
+
return p
"""
-
if __name__ == '__main__':
- import sys
- app = wxPySimpleApp()
- frame = wxFrame(None, -1, "Tester...", size=(640, 480))
- win = runTest(frame, frame, sys.stdout)
- frame.Show(true)
- app.MainLoop()
-
+ import sys,os
+ import run
+ run.main(['', os.path.basename(sys.argv[0])])