merged 2.2 branch
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@7748 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		
							
								
								
									
										186
									
								
								wxPython/demo/wxStyledTextCtrl_1.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										186
									
								
								wxPython/demo/wxStyledTextCtrl_1.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,186 @@
 | 
			
		||||
 | 
			
		||||
from wxPython.wx import *
 | 
			
		||||
from wxPython.stc import *
 | 
			
		||||
 | 
			
		||||
#----------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
demoText = """\
 | 
			
		||||
 | 
			
		||||
This editor is provided by a class named wxStyledTextCtrl.  As
 | 
			
		||||
the name suggests, you can define styles that can be applied to
 | 
			
		||||
sections of text.  This will typically be used for things like
 | 
			
		||||
syntax highlighting code editors, but I'm sure that there are other
 | 
			
		||||
applications as well.  A style is a combination of font, point size,
 | 
			
		||||
forground and background colours.  The editor can handle
 | 
			
		||||
proportional fonts just as easily as monospaced fonts, and various
 | 
			
		||||
styles can use different sized fonts.
 | 
			
		||||
 | 
			
		||||
There are a few canned language lexers and colourizers included,
 | 
			
		||||
(see the next demo) or you can handle the colourization yourself.
 | 
			
		||||
If you do you can simply register an event handler and the editor
 | 
			
		||||
will let you know when the visible portion of the text needs
 | 
			
		||||
styling.
 | 
			
		||||
 | 
			
		||||
wxStyledTextEditor also supports setting markers in the margin...
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
...and indicators within the text.  You can use these for whatever
 | 
			
		||||
you want in your application.  Cut, Copy, Paste, Drag and Drop of
 | 
			
		||||
text works, as well as virtually unlimited Undo and Redo
 | 
			
		||||
capabilities, (right click to try it out.)
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
if wxPlatform == '__WXMSW__':
 | 
			
		||||
    face1 = 'Arial'
 | 
			
		||||
    face2 = 'Times New Roman'
 | 
			
		||||
    face3 = 'Courier New'
 | 
			
		||||
    pb = 6
 | 
			
		||||
else:
 | 
			
		||||
    face1 = 'Helvetica'
 | 
			
		||||
    face2 = 'Times'
 | 
			
		||||
    face3 = 'Courier'
 | 
			
		||||
    pb = 10
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#----------------------------------------------------------------------
 | 
			
		||||
# This shows how to catch the Modified event from the wxStyledTextCtrl
 | 
			
		||||
 | 
			
		||||
class MySTC(wxStyledTextCtrl):
 | 
			
		||||
    def __init__(self, parent, ID, log):
 | 
			
		||||
        wxStyledTextCtrl.__init__(self, parent, ID)
 | 
			
		||||
        self.log = log
 | 
			
		||||
 | 
			
		||||
        EVT_STC_MODIFIED(self, ID, self.OnModified)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def OnModified(self, evt):
 | 
			
		||||
        self.log.write("""OnModified
 | 
			
		||||
        Mod type:     %s
 | 
			
		||||
        At position:  %d
 | 
			
		||||
        Lines added:  %d
 | 
			
		||||
        Text Length:  %d
 | 
			
		||||
        Text:         %s\n""" % ( self.transModType(evt.GetModificationType()),
 | 
			
		||||
                                  evt.GetPosition(),
 | 
			
		||||
                                  evt.GetLinesAdded(),
 | 
			
		||||
                                  evt.GetLength(),
 | 
			
		||||
                                  evt.GetText() ))
 | 
			
		||||
 | 
			
		||||
    def transModType(self, modType):
 | 
			
		||||
        st = ""
 | 
			
		||||
        table = [(wxSTC_MOD_INSERTTEXT, "InsertText"),
 | 
			
		||||
                 (wxSTC_MOD_DELETETEXT, "DeleteText"),
 | 
			
		||||
                 (wxSTC_MOD_CHANGESTYLE, "ChangeStyle"),
 | 
			
		||||
                 (wxSTC_MOD_CHANGEFOLD, "ChangeFold"),
 | 
			
		||||
                 (wxSTC_PERFORMED_USER, "UserFlag"),
 | 
			
		||||
                 (wxSTC_PERFORMED_UNDO, "Undo"),
 | 
			
		||||
                 (wxSTC_PERFORMED_REDO, "Redo"),
 | 
			
		||||
                 (wxSTC_LASTSTEPINUNDOREDO, "Last-Undo/Redo"),
 | 
			
		||||
                 (wxSTC_MOD_CHANGEMARKER, "ChangeMarker"),
 | 
			
		||||
                 (wxSTC_MOD_BEFOREINSERT, "B4-Insert"),
 | 
			
		||||
                 (wxSTC_MOD_BEFOREDELETE, "B4-Delete")
 | 
			
		||||
                 ]
 | 
			
		||||
 | 
			
		||||
        for flag,text in table:
 | 
			
		||||
            if flag & modType:
 | 
			
		||||
                st = st + text + " "
 | 
			
		||||
 | 
			
		||||
        if not st:
 | 
			
		||||
            st = 'UNKNOWN'
 | 
			
		||||
 | 
			
		||||
        return st
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#----------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
def runTest(frame, nb, log):
 | 
			
		||||
    ed = MySTC(nb, -1, log)
 | 
			
		||||
 | 
			
		||||
    ed.SetText(demoText)
 | 
			
		||||
    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))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    # 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.SetStyleFor(6, 1)  # set style for 6 characters using style 1
 | 
			
		||||
 | 
			
		||||
    ed.StartStyling(190, 0xff)
 | 
			
		||||
    ed.SetStyleFor(20, 2)
 | 
			
		||||
 | 
			
		||||
    ed.StartStyling(310, 0xff)
 | 
			
		||||
    ed.SetStyleFor(4, 3)
 | 
			
		||||
    ed.SetStyleFor(2, 0)
 | 
			
		||||
    ed.SetStyleFor(10, 4)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    # line numbers in the margin
 | 
			
		||||
    ed.SetMarginType(0, wxSTC_MARGIN_NUMBER)
 | 
			
		||||
    ed.SetMarginWidth(0, 22)
 | 
			
		||||
    ed.StyleSetSpec(wxSTC_STYLE_LINENUMBER, "size:%d,face:%s" % (pb, face1))
 | 
			
		||||
 | 
			
		||||
    # 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(2, wxSTC_MARK_SHORTARROW, "blue", "blue")
 | 
			
		||||
    ed.MarkerDefine(3, wxSTC_MARK_ARROW, "#00FF00", "#00FF00")
 | 
			
		||||
 | 
			
		||||
    # put some markers on some lines
 | 
			
		||||
    ed.MarkerAdd(17, 0)
 | 
			
		||||
    ed.MarkerAdd(18, 1)
 | 
			
		||||
    ed.MarkerAdd(19, 2)
 | 
			
		||||
    ed.MarkerAdd(20, 3)
 | 
			
		||||
    ed.MarkerAdd(20, 0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    # and finally, an indicator or two
 | 
			
		||||
    ed.IndicatorSetStyle(0, wxSTC_INDIC_SQUIGGLE)
 | 
			
		||||
    ed.IndicatorSetColour(0, wxRED)
 | 
			
		||||
    ed.IndicatorSetStyle(1, wxSTC_INDIC_DIAGONAL)
 | 
			
		||||
    ed.IndicatorSetColour(1, wxBLUE)
 | 
			
		||||
    ed.IndicatorSetStyle(2, wxSTC_INDIC_STRIKE)
 | 
			
		||||
    ed.IndicatorSetColour(2, wxRED)
 | 
			
		||||
 | 
			
		||||
    ed.StartStyling(836, wxSTC_INDICS_MASK)
 | 
			
		||||
    ed.SetStyleFor(10, wxSTC_INDIC0_MASK)
 | 
			
		||||
    ed.SetStyleFor(10, wxSTC_INDIC1_MASK)
 | 
			
		||||
    ed.SetStyleFor(10, wxSTC_INDIC2_MASK | wxSTC_INDIC1_MASK)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    return ed
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#----------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
overview = """\
 | 
			
		||||
<html><body>
 | 
			
		||||
Once again, no docs yet.  <b>Sorry.</b>  But <a href="data/stc.h">this</a>
 | 
			
		||||
and <a href="http://www.scintilla.org/ScintillaDoc.html">this</a> should
 | 
			
		||||
be helpful.
 | 
			
		||||
</body><html>
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user