Added SplitTree sample to the demo
authorRobin Dunn <robin@alldunn.com>
Mon, 3 Dec 2001 20:41:03 +0000 (20:41 +0000)
committerRobin Dunn <robin@alldunn.com>
Mon, 3 Dec 2001 20:41:03 +0000 (20:41 +0000)
Fixes for wxEditor and its FrogEdit sample

Misc. other stuff

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12844 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

29 files changed:
wxPython/CHANGES.txt
wxPython/contrib/ogl/oglbasic.cpp
wxPython/contrib/ogl/oglbasic.py
wxPython/demo/Main.py
wxPython/demo/SplitTree.py
wxPython/demo/bmp_source/file1.bmp [new file with mode: 0644]
wxPython/demo/bmp_source/file1.ico [deleted file]
wxPython/demo/bmp_source/file2.bmp [new file with mode: 0644]
wxPython/demo/bmp_source/folder1.bmp [new file with mode: 0644]
wxPython/demo/bmp_source/folder1.ico [deleted file]
wxPython/demo/bmp_source/folder2.bmp [new file with mode: 0644]
wxPython/demo/bmp_source/folder2.ico [deleted file]
wxPython/demo/bmp_source/folder3.bmp [new file with mode: 0644]
wxPython/demo/encode_bitmaps.py
wxPython/demo/images.py
wxPython/demo/wxEditor.py
wxPython/samples/frogedit/FrogEdit.py
wxPython/setup.py
wxPython/src/.cvsignore
wxPython/src/__version__.py
wxPython/src/_defs.i
wxPython/src/controls2.i
wxPython/src/msw/controls2.py
wxPython/src/msw/windows.cpp
wxPython/src/msw/windows.py
wxPython/src/msw/wx.cpp
wxPython/src/msw/wx.py
wxPython/src/windows.i
wxPython/wxPython/lib/editor/editor.py

index 87dffdbac093dd96c188af1afb65c18dde348872..c3afe48498b8837dc518ce1c95658ce0fc9ea694 100644 (file)
@@ -95,7 +95,15 @@ same document.
 
 Added wxEditableListBox gizmo.
 
-Added a greatly enhanced wxEditor from Steve Howell and Adam Feuer.
+Updated wxEditor with lots of enhancements from Steve Howell and Adam
+Feuer.
+
+Added the "SplitTree gizmos" which are a collection of classes that
+were designed to operate together and provide a tree control with
+additional columns for each item.  The classes are
+wxRemotelyScrolledTreeCtrl, wxTreeCompanionWindow,
+wxThinSplitterWindow, and wxSplitterScrolledWindow, some of which may
+also be useful by themselves.
 
 
 
index 24965a42aeb60c1b8e5a43cbc9629aeff5a0572b..e7b77d1fa0eb35f0267d5ed919cbc837cb2528ac 100644 (file)
@@ -4355,81 +4355,6 @@ static PyObject *_wrap_wxPyShape_SetBrush(PyObject *self, PyObject *args, PyObje
     return _resultobj;
 }
 
-static void  wxPyShape_SetClientData(wxPyShape *self,PyObject * userData) {
-            wxPyUserData* data = NULL;
-            if (userData)
-                data = new wxPyUserData(userData);
-            self->SetClientData(data);
-        }
-static PyObject *_wrap_wxPyShape_SetClientData(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    wxPyShape * _arg0;
-    PyObject * _arg1;
-    PyObject * _argo0 = 0;
-    PyObject * _obj1 = 0;
-    char *_kwnames[] = { "self","userData", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxPyShape_SetClientData",_kwnames,&_argo0,&_obj1)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyShape_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyShape_SetClientData. Expected _wxPyShape_p.");
-        return NULL;
-        }
-    }
-{
-  _arg1 = _obj1;
-}
-{
-    wxPy_BEGIN_ALLOW_THREADS;
-        wxPyShape_SetClientData(_arg0,_arg1);
-
-    wxPy_END_ALLOW_THREADS;
-}    Py_INCREF(Py_None);
-    _resultobj = Py_None;
-    return _resultobj;
-}
-
-static PyObject * wxPyShape_GetClientData(wxPyShape *self) {
-            wxPyUserData* data = (wxPyUserData*)self->GetClientData();
-            if (data) {
-                Py_INCREF(data->m_obj);
-                return data->m_obj;
-            } else {
-                Py_INCREF(Py_None);
-                return Py_None;
-            }
-        }
-static PyObject *_wrap_wxPyShape_GetClientData(PyObject *self, PyObject *args, PyObject *kwargs) {
-    PyObject * _resultobj;
-    PyObject * _result;
-    wxPyShape * _arg0;
-    PyObject * _argo0 = 0;
-    char *_kwnames[] = { "self", NULL };
-
-    self = self;
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxPyShape_GetClientData",_kwnames,&_argo0)) 
-        return NULL;
-    if (_argo0) {
-        if (_argo0 == Py_None) { _arg0 = NULL; }
-        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxPyShape_p")) {
-            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxPyShape_GetClientData. Expected _wxPyShape_p.");
-        return NULL;
-        }
-    }
-{
-    wxPy_BEGIN_ALLOW_THREADS;
-        _result = (PyObject *)wxPyShape_GetClientData(_arg0);
-
-    wxPy_END_ALLOW_THREADS;
-}{
-  _resultobj = _result;
-}
-    return _resultobj;
-}
-
 #define wxPyShape_Show(_swigobj,_swigarg0)  (_swigobj->Show(_swigarg0))
 static PyObject *_wrap_wxPyShape_Show(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -8280,8 +8205,6 @@ static PyMethodDef oglbasiccMethods[] = {
         { "wxPyShape_Move", (PyCFunction) _wrap_wxPyShape_Move, METH_VARARGS | METH_KEYWORDS },
         { "wxPyShape_IsShown", (PyCFunction) _wrap_wxPyShape_IsShown, METH_VARARGS | METH_KEYWORDS },
         { "wxPyShape_Show", (PyCFunction) _wrap_wxPyShape_Show, METH_VARARGS | METH_KEYWORDS },
-        { "wxPyShape_GetClientData", (PyCFunction) _wrap_wxPyShape_GetClientData, METH_VARARGS | METH_KEYWORDS },
-        { "wxPyShape_SetClientData", (PyCFunction) _wrap_wxPyShape_SetClientData, METH_VARARGS | METH_KEYWORDS },
         { "wxPyShape_SetBrush", (PyCFunction) _wrap_wxPyShape_SetBrush, METH_VARARGS | METH_KEYWORDS },
         { "wxPyShape_SetPen", (PyCFunction) _wrap_wxPyShape_SetPen, METH_VARARGS | METH_KEYWORDS },
         { "wxPyShape_GetId", (PyCFunction) _wrap_wxPyShape_GetId, METH_VARARGS | METH_KEYWORDS },
index 7e23386ead90ce29f1dfc6c12e48befa33533624..86ae9a5d8567690a07d90478db166d88a8f6d5f8 100644 (file)
@@ -451,12 +451,6 @@ class wxPyShapePtr(wxPyShapeEvtHandlerPtr):
     def SetBrush(self, *_args, **_kwargs):
         val = apply(oglbasicc.wxPyShape_SetBrush,(self,) + _args, _kwargs)
         return val
-    def SetClientData(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_SetClientData,(self,) + _args, _kwargs)
-        return val
-    def GetClientData(self, *_args, **_kwargs):
-        val = apply(oglbasicc.wxPyShape_GetClientData,(self,) + _args, _kwargs)
-        return val
     def Show(self, *_args, **_kwargs):
         val = apply(oglbasicc.wxPyShape_Show,(self,) + _args, _kwargs)
         return val
@@ -781,6 +775,15 @@ class wxPyShapePtr(wxPyShapeEvtHandlerPtr):
         return val
     def __repr__(self):
         return "<C wxPyShape instance at %s>" % (self.this,)
+    
+    def SetClientData(self, data):
+        self.clientData = data
+    def GetClientData(self):
+        if hasattr(self, 'clientData'):
+            return self.clientData
+        else:
+            return None
+
 class wxPyShape(wxPyShapePtr):
     def __init__(self,this):
         self.this = this
index a3b065e521369e4d60fa276792636d3146bc1090..3d72ac519f4d3fc17046bc049adc32f7926ea539 100644 (file)
@@ -38,6 +38,7 @@ _treeList = [
                                 'wxPopupWindow',
                                 'wxDynamicSashWindow',
                                 'wxEditableListBox',
+                                'SplitTree',
                                 ]),
 
     ('Windows', ['wxFrame', 'wxDialog', 'wxMiniFrame',
@@ -74,6 +75,7 @@ _treeList = [
                         'ActiveXWrapper_Acrobat', 'ActiveXWrapper_IE',
                         'wxDragImage', "wxProcess", "FancyText", "OOR", "wxWave",
                         'wxJoystick', 'DrawXXXList', 'ErrorDialogs', 'wxMimeTypesManager',
+                        'SplitTree',
                         ]),
 
     ('wxPython Library', ['Layoutf', 'wxScrolledMessageDialog',
index b87f9912a525d4c7c9e91ecc2617274b6af3354c..5de68027e432f2386f7abfc8abaa882587b9e06d 100644 (file)
@@ -10,29 +10,62 @@ class TestTree(wxRemotelyScrolledTreeCtrl):
                  style=wxTR_HAS_BUTTONS):
         wxRemotelyScrolledTreeCtrl.__init__(self, parent, ID, pos, size, style)
         ##self.SetBackgroundColour("LIGHT BLUE")
+        EVT_PAINT(self, self.OnPaint)
 
         # make an image list
         im1 = im2 = -1
-        ##self.il = wxImageList(16, 16)
-        ##im1 = self.il.Add(images.getFolder1Bitmap())
-        ##im2 = self.il.Add(images.getFile1Bitmap())
-        ##self.SetImageList(self.il)
+        self.il = wxImageList(16, 16)
+        im1 = self.il.Add(images.getFolder1Bitmap())
+        im2 = self.il.Add(images.getFile1Bitmap())
+        self.SetImageList(self.il)
 
         # Add some items
         root = self.AddRoot("Root")
         for i in range(30):
             item = self.AppendItem(root, "Item %d" % i, im1)
             for j in range(10):
-                self.AppendItem(item, "Child %d" % j, im2)
+                child = self.AppendItem(item, "Child %d" % j, im2)
 
         self.Expand(root)
 
+    def OnPaint(self, evt):
+        dc = wxPaintDC(self)
+
+        self.base_OnPaint(evt)
+
+        # Reset the device origin since it may have been set
+        dc.SetDeviceOrigin(0, 0)
+
+        pen = wxPen(wxSystemSettings_GetSystemColour(wxSYS_COLOUR_3DLIGHT), 1, wxSOLID)
+        dc.SetPen(pen)
+        dc.SetBrush(wxTRANSPARENT_BRUSH)
+
+        clientSize = self.GetClientSize()
+        cy = 0
+        h = self.GetFirstVisibleItem()
+        while h.Ok():
+            rect = self.GetBoundingRect(h)
+            if rect is not None:
+                cy = rect.GetTop()
+                dc.DrawLine(0, cy, clientSize.x, cy)
+                lastH = h
+            h = self.GetNextVisible(h)
+
+        rect = self.GetBoundingRect(lastH)
+        if rect is not None:
+            cy = rect.GetBottom()
+            dc.DrawLine(0, cy, clientSize.x, cy)
+
 
 
 class TestValueWindow(wxTreeCompanionWindow):
     def __init__(self, parent, ID, pos=wxDefaultPosition, size=wxDefaultSize, style=0):
         wxTreeCompanionWindow.__init__(self, parent, ID, pos, size, style)
         self.SetBackgroundColour("WHITE")
+        EVT_ERASE_BACKGROUND(self, self.OEB)
+
+    def OEB(self, evt):
+        pass
 
     # This method is called to draw each item in the value window
     def DrawItem(self, dc, itemId, rect):
@@ -44,6 +77,10 @@ class TestValueWindow(wxTreeCompanionWindow):
                 ptext = tree.GetItemText(parent)
                 text = text + ptext + " --> "
             text = text + tree.GetItemText(itemId)
+            pen = wxPen(wxSystemSettings_GetSystemColour(wxSYS_COLOUR_3DLIGHT), 1, wxSOLID)
+            dc.SetPen(pen)
+            dc.SetBrush(wxBrush(self.GetBackgroundColour(), wxSOLID))
+            dc.DrawRectangle(rect.x, rect.y, rect.width+1, rect.height)
             dc.SetTextForeground("BLACK")
             dc.SetBackgroundMode(wxTRANSPARENT)
             tw, th = dc.GetTextExtent(text)
diff --git a/wxPython/demo/bmp_source/file1.bmp b/wxPython/demo/bmp_source/file1.bmp
new file mode 100644 (file)
index 0000000..9a0544b
Binary files /dev/null and b/wxPython/demo/bmp_source/file1.bmp differ
diff --git a/wxPython/demo/bmp_source/file1.ico b/wxPython/demo/bmp_source/file1.ico
deleted file mode 100644 (file)
index cc828ab..0000000
Binary files a/wxPython/demo/bmp_source/file1.ico and /dev/null differ
diff --git a/wxPython/demo/bmp_source/file2.bmp b/wxPython/demo/bmp_source/file2.bmp
new file mode 100644 (file)
index 0000000..e812d69
Binary files /dev/null and b/wxPython/demo/bmp_source/file2.bmp differ
diff --git a/wxPython/demo/bmp_source/folder1.bmp b/wxPython/demo/bmp_source/folder1.bmp
new file mode 100644 (file)
index 0000000..dada286
Binary files /dev/null and b/wxPython/demo/bmp_source/folder1.bmp differ
diff --git a/wxPython/demo/bmp_source/folder1.ico b/wxPython/demo/bmp_source/folder1.ico
deleted file mode 100644 (file)
index c43de1c..0000000
Binary files a/wxPython/demo/bmp_source/folder1.ico and /dev/null differ
diff --git a/wxPython/demo/bmp_source/folder2.bmp b/wxPython/demo/bmp_source/folder2.bmp
new file mode 100644 (file)
index 0000000..35fedba
Binary files /dev/null and b/wxPython/demo/bmp_source/folder2.bmp differ
diff --git a/wxPython/demo/bmp_source/folder2.ico b/wxPython/demo/bmp_source/folder2.ico
deleted file mode 100644 (file)
index 98b6d3f..0000000
Binary files a/wxPython/demo/bmp_source/folder2.ico and /dev/null differ
diff --git a/wxPython/demo/bmp_source/folder3.bmp b/wxPython/demo/bmp_source/folder3.bmp
new file mode 100644 (file)
index 0000000..dfc3c4f
Binary files /dev/null and b/wxPython/demo/bmp_source/folder3.bmp differ
index 65d89dc118e80d39789fba7d5784394d52388342..31e09bb9a24f40533e26126b67468a5390d95f85 100644 (file)
@@ -51,9 +51,11 @@ command_lines = [
     "-a -n SmallUpArrow  -m #0000FF bmp_source/sm_up.bmp images.py",
     "-a -n SmallDnArrow  -m #0000FF bmp_source/sm_down.bmp images.py",
 
-    "-a -n Folder1 bmp_source/folder1.ico images.py",
-    "-a -n Folder2 bmp_source/folder2.ico images.py",
-    "-a -n File1   bmp_source/file1.ico   images.py",
+    "-a -n Folder1 -m #FFFFFF bmp_source/folder1.bmp images.py",
+    "-a -n Folder2 -m #FFFFFF bmp_source/folder2.bmp images.py",
+    "-a -n Folder3 -m #FFFFFF bmp_source/folder3.bmp images.py",
+    "-a -n File1   -m #FFFFFF bmp_source/file1.bmp   images.py",
+    "-a -n File2   -m #FFFFFF bmp_source/file2.bmp   images.py",
 
     ]
 
index 90d2a5750d845fcac38e605d1113d75c85b07905..9aaa3c3392c7d9bb4c9a563a045675128575a130 100644 (file)
@@ -1937,8 +1937,11 @@ def getSmallDnArrowImage():
 #----------------------------------------------------------------------
 def getFolder1Data():
     return cPickle.loads(zlib.decompress(
-'x\xda\xd3\xc8)0\xe4\nV76R\x00"C\x05Cu\xae\xc4`u\x05\x85d\x05\xbf\xfc\xbcT(\
-\x07?\x18U4\xaahT\xd1\xa8\xa2\x81Q\xa4\x07\x00jB\xa8\xe5' ))
+'x\xda\xd3\xc8)0\xe4\nV74S\x00"S\x05Cu\xae\xc4`u\x7f\x85d\x05\xa7\x9c\xc4\
+\xe4l0/\x1f\xc8Sv6\x00A0_\x0f\xc4\xb70\x00A0_\x01\xc8\xf7\xcb\xcfK\x05s"@\
+\x92n@`\x00\x93D\x050A=\x10@\x13\xd4\x8b\xc8\x07B=\x14A\x88\x18P\x14\xa2\x01\
+*\x88l\xa2\x9e?L\x10\xaa\x14\xac\x1c.\x88\x10\xcb\xa7\xbfJ\x14\x00\x15T\xf0G\
+\x01xC\t]P\x0f\x00\xbc\x8fdr' ))
 
 def getFolder1Bitmap():
     return wxBitmapFromXPMData(getFolder1Data())
@@ -1949,129 +1952,11 @@ def getFolder1Image():
 #----------------------------------------------------------------------
 def getFolder2Data():
     return cPickle.loads(zlib.decompress(
-'x\xda\xcdYkS\x14K\x12\xfd~\x7fE"o\xd0\xb4g\xbagz\xda\x07A?UDFD1\xd5\x10AT@\
-\xc1\xc27\xa0\xf2\xdb\xb7\xbaNV\xb5z\x8d\x8dkll\xecN\xfa\xc5cUV\xe6\xc9Ge\
-\xb5s\x87\xc7\xbd\xbf6f\xe3>\xb5\x7f\xd2\x01\xf5g\xff\xda\xd9\x98]\x1e\xd3.\
-\x15\x87;\xbbo\xdc_\xaf\x91\xfd\xebd3l\x86y\xee\x80+\xdc\x02uY\x97\x83\xd2\
-\x01\xcf\x1d\xd0\xe4M\x1e%\x0eX1-P\xf6\xca^6t\xc0e\xa7\xa3\xca\xaa,\x8b\x1dp\
-\xe2\xb6\x14eQ\xa6\xd8r\xcf\x01\xa3\xd2\n\xb6<\x0b\xc7\x16\x99\x03\xee8\xa5y\
-\xd6\x8a\x03f\x1cP\xa7u\x9a@\xe9\x14\x07\x00J\'\xc5mI\xf2d\x84-\xb7\x1cP%U\
-\x92\xc2\xf4\x1b\x14\x80\xca\x01\x8b\xad\xf3\x93\xf1\xa0\x15\x07\xbc7aE\xed\
-\x80\x03\xf1\xee\xa7#\xb8\x1f,-q\xca\xa1xo\xf3\xc6\x01\xc3@P\xbfp\xc0;\xf6J3\
-pn\x82\xa59L_w\xc7fM\xd6\x8c"\x07\xec\xb8-e^\xda%\x0ex\xe1V\x0c\xf3V\xc0X\
-\xb7E\x95:_\x92\xf6\x188\xf7\x02\xac\xa7E:\x82sO\xe0K\xbf\xee\x0fz\x0exC\x01\
-\x80\x8e\xefp\xae\xd7\xf4J\x98>\xd7m\x01\xeb\xd3\xe2\xddo\x10\xb9\x8d\xe0~\
-\x05>\x9e\xb17,\x03\x1f\xe2\x0c\x1b\x0eZq@\x0e\x92\xed/\x81\xb7\xe4V\xe4U^\r\
-\x00\xc4\xe2\xed\xa8a\xe9\x18\x9c\x0e\x9aA\x0c\xf7\x93n\x05L\xff\n>l\xbe\x8c\
-\x109vJ\xb3A6\x18"rK\xe4C\xa9\x91\xcb\x1cP6e\xa39\xf6\x88\xc3\x16$\x8c\x84\
-\x0c\xaa\x10\xa8\xa6[\x01\x92_\x81\xe4~\xd1\xcf`\xe95\xf6J\x0bx\xbb\xe6\x80\
-\xb4j\xc5\x01\x1f\xc4\xfb2H\x1d\xb0\xe0\xec\x18F\xad\xa0&\xc5G\xdf\x17P\xb7\
-\x05\x86-9o\x07\xc5\xa0Hp\xca\x03p:\xaaFJ\xe1f\xb04s+.\xcc\xa2\xa2F\xf9h8\
-\xb8\xe0\x08\ny\x9a\x83\xc2\xe7nE\\\xb7\x82\x94\xeaV\xc0\xd2u(\x8d\xb2(E~\\t\
-[\xa2\xa4\x15\x07lS\xd8\x02\x1d\x93(\xd3\xa2.b\xe8\xb8I\x01@\\\xee\xa3\xb2\
-\x87\xf5\xb0\x87\x15\x13\xe4}I\xe1\xcb#\t\x00,\x1d\xa1\x1a\xb2a\xd6\x83\x1d\
-\x93\xc1}\xed0s!\xb5K(=r+\xd2\xb8\x15\x94\xa9xKKP\xd8\xeb\x00li\xc4[\xaa\xac\
-\xbf\x0b\xa7\x8c\x00D\xc1\xd2\x11b\xdb\x0f+4\x1d>\x91\x8f\\\x01\xd3\xc7\xe4\
-\xc3\x90\xc3\xfd\x8f\xc1}\xedc\x15\x05@\xeb\xb6\xd3\x01NW%\xac@\x11\n\xd2\
-\xa1\xd7\x8a\x03>\x07\x92\x95\xb1\x19\xf4\xa0\xb8\x8aST\xe5\x8e\xdb\xd2K[A\
-\x18\xc4\xaf\x18\x81\xa0\x1b\x1d\x00Ko\x85\xd86(\xc2O`\xacnj\xed\x0e\xafB\
-\xa0\n\x00Y(\xf5\n\x04\xdd\x80\xb7\xb6\xae\xb5\xe3\x9e\xa3^\xb22\xd3\xa4\xdb\
-\xc4u\x12\xb5\xe2\x80y\xb7"\x8f[\xc1\xed\xe1V\x14\xbd\xa2\xa7\x9d\xee\xb1;v4\
-l\x05m\x9c\xbc\xe9\x19L\x7f\x0bKmO\x8a\xb1\xe5\x8b\x032\xfb\x1b\xe0\xd83\xa7\
-\xb4I\x9a\xa4\x87\xd8^\r\x8c\xe9M8\x1d\xc2\xd0\xc0\xf4]\xf2\xbe\x0c\x00\x1cv\
-\x00\xec\x98\t\xf9Q\xc1\x8e\x03\xb8o)\x8b\x10\xa8\xd5`\xa9^|\xecV\x8cz\xad\
-\x80d\xf0a\xfb\x96\xa6\xd4E\xf8\x125Q\x8d\x84\x19u\x00\xecXb\xefK\x82\xe8\
-\xdf5\x9ed\xad\xdb2\x00z\xca!\xc2\x90\x94\xc9\x00+VQ\xeaI\x96\x0cA\xd0\xed\
-\x0e@\x06=&oX\x01\x1d7\xc2\x8a\x14\xc0C\xe4i^\xfbQ\xe1=\xfb\xc8\xe9\xa8`\x9c\
-\x0eG)\x94\xce\x87\xc4\xad\xc0\xfa5gi\xd2o\xc5\x01\xaf\xc1XY\x95C$\xeei\xc8B\
-\xbd\x80?\x92\'Y+\xea3Bi;p\x82\xd8\x0e\xc8\xbb\xaf\xb1]\x08:J\x9c\xf2N<\x1fz\
-\xbd\x1e\xbb-\xa9\xfb\xa1LMX\x01\xa5c\xe3sL\x95\xde\xc7\x94\xd3\x8c\x1a\x1d&\
-\xaa\x0e\x80\xa5w\x03\xa0\xf7\xfe\x94\xf1\x8c\xc5\x08\xc3\n\x05\x00\xa7\x1c\
-\x05\xd3\xf5\x16{\x1d*\xaa\x04\xeb3\xc1\x17\xbd\x1a\xcf\xc4\xf3\xa1\xb3CN\
-\x9e\x0f\xed\x85\x1f1\x90\xb47\x0eNILX\x01\n\xaf\xb3\xb7C\x9b\xd2\x8a\x84\
-\x15\x00\x96\x03\xc9)b{\x89|\x16f`\xecr\xe7-\xdc\x7f\x82t\xc8\x8b\\o\xc2\x03\
-\x90\xdco\xc5\x01{\xe2\x83\x9dCi?\x14\xb2\xba?\xe8\x0087\n\x8ciU\xee#\xb5\
-\xad\x12\xad\xfd\xab\xc10M\x18\x16O\xa1\x8e\x1b\x93h\xd2i+\x98\xa5\xc2\x96\
-\x02\x85\\\xe3X\xebJ\x0f\x91{\x8f\x1e\xe4\x1a;f\x18\xc4eP\x0f\x12l\xf9\x8c&\
-\x1d\xb5\x82;[\xc2\n\xf82\xec\xb6\xe4\xb8\xb3\xbb\x15\x85\xbb\xb3o#r\xfd\xaa\
-\xafi9\xcd\x01@(\x9f\x82\xe4\xc1h\x90\xc2\x8e\x13\xa4e\xdc\xc4\x11\xf8\xf8\
-\x1c"\xa7\xbedh\xb0\xfdV\x1c\xf0\r\r6*"m\xb0}\xf6\xde\xea%~\x19\xd3\x96\x1d\
-\xfaF\xc8\x8fO \xd9\x0e\xf4\tr}\xc2\x9d\xd2oo`\x00[\xdd\x16\xe8\x18\xb0wN\
-\xdb\xc51\xd2\xc1N5\x18\xe0/\xcc\x86B.\x1b\xe7\xfe\x1e\x80\xa8\x8e\x06\xba\
-\x02\xdeF\xad\xb8\x15G\x0e\x18\xc6\xad\xa0\x90\xc9\xbb\x1f\x83\xe4\xdbH\xed\
-\xa2\xf2\xa3\xd3\xa5P\x1e5\x0c[\x0c\x8c\xe9|\xfa\x14\xa3\x93MT\x1c;;\xd1\x01\
-\xa8\x97\xfb\xe4M\xd7\xa9\xaf\x1f\xb2\xb0\x84\xfb\x0f\xd0\x1c\xe3,\xd6\xd4\
-\xce;\x00\x96naPl\x07v\xd4\xfe)\xd2\xc1\xfe\xfa\xc8\xd3K\x01\x88a\xd8\x074\
-\xc7^+\xe8\xb8\xe4\x9d\xd3\xe6\xf84\xd8QA\xc7\xd5\xe0\xbe\x8e\xc5\'\xdd\x168\
-\xb7/\xde\xfd!\x94>\n:j\xa4Td|E\x95\xc8\x8f\xcb\xe2\rKp\xec\x1d\xf2\x19T\xc0\
-\xd2u\x94G2Jz8\xe5"\xf9\x94\xd2\xa4\xfb\x0eN\xed\x03G\xbb\xd4\x11\x94fu\xd6\
-\xc7)\x17\xd9[\x9aA\xe9\n\xa2_[\x81\xa57;\x00\x9c\xde\x0c:\xb4\x9fN\x91O:\
-\xbd+\x0fMX\x81S\x08\xc9\x9f\x15\x99f\xf2\x02\x87\x15\xa0\xf0\x1b\xfb\xe8\
-\xe7P\xfa"\xb8\xafwe)\xc1\x0e\x00_Qs\xc3j\xa8\xcd\xf1n\x07 \x0cw\x10}7\x90\
-\xe1q&\xde[\xbdNVaiR\'}\x00K\xa1\x07\x95\xc8\xc2\xac\x03\xe0\xcb\x15\xf8b\
-\xafSel\xdf\xf8\x02\xaa\x01\x9c\xa2n\xedO\xaf\xd7\x14q\xb1\x0f\x98\x18\x14\
-\xee!\xd8q+\x98\x93\x03\x1fCm\xf4\xec}\xd1F_ \x0cY+\xb8\xa3\xd8s\xaa/qb\x9fc\
-z\xdf.\x04\xe7\xf4\xc1\xbbN\x01\xc0\x96m\t\x008]F&\xf7\xaa\x9e6\x14\n\x8cU\
-\xfazE\xa0z\xad`\xa2\xc7\x96\xa6j4\x1d\xae\x86\\\xafp\xca7\x00\xfd\xa6\x1f\
-\x01H\xbb\x15\xe0t\x8c\xe7l\xda\nfK\xa7\xb4\xdf\xf6`\xacxI\xde\xb0\x0c\x96R\
-\x0b\xac\x99\xb7/\xe1\x08\x1a\xa1\xbd\xc0\x95\x9d{\xe4\xd3G_\xdd\x8f\xd1\x1a\
-\xd2,\xd5w\xe8\x94x\xfetJ\xcc\xc5\xeb\xc8\xb0b\x137g\x93\xfa\xd1"\x85\xab\
-\xf6Q\xad}\xafF\xaf\x18\xb4\x82\xb2\x06\xe5U]\xe9\x15V\x86c\xb5\xa9\xbf\r\
-\x86\xd5pd\x1e5j\x7f:5\xaf9;\xd2(\x8d\xfa\xfa\xe1\x02\x85\x9f\xb4\x82\nD\xfa\
-\xa4e\xaa\xb3yA\xfe\x14\xcd\x96\x1e\xf9|\xaa\x10%\x81/\xee\xfa\x85\xe90\xac\
-\x9f\xf5u\x1a\xd9t\xc7\x0e\xaaV\xf0\x15\x82\xbc/z\xdb\xc4\xec#\xad\xc7\xbeA.\
-\xd8\xb7K\x06\xa5o\x91\x936Y4\xf3\xcb\xce\x0ep\xba\x85\xd0[J\x95\x8f$\x14K\
-\x01\x92w;\xa5\x00&\x82\xa5z?\x9f\x91\x0f\xc3\x10\xb1\xfd\x16N\xa9\xb5\xedw+\
-p\xec\xeb\x90\x82\xfa\xbd\xe4\x99\x84\x15\xf0v\x17a\x88\xf2H3.\n\x86i\'\xd8\
-\x11\xef\xbe\xe6G\x1a\xbc\xd5\xa9\xe8K`L\x0b\xee\x0c\x8cEU\xa4/\xb3\x98\xbc\
-\xfb:\x04m \x94\xfd\xd2\x7f\xeb\xa8\x83\xe9#8\xf7\x15\xad\xa1m\xbfH\xbac\xbc\
-\xba\xeb\xb4\x8e\xb0\xe2\x16ZC\xfb \x02\xa7\x1b\x1d\x80c\xef`\xf2.\xcaBS\xea\
-\xa5\xf1J\xf5:\xbe-\x01\x00\xc9\xdb\x9d\x0e\xf01\x0f\xf7mzh\x06=\x17\xef\xad\
-^\xb6\x06\xc3\x98\xfb\xf4\x87A\xca\x84-\xb0\xf4z\x88~\xa9\xef\x1d\xd8\x11\
-\xd7\xb1\xde\xbe\x128U>\xd6B{\xd1\xcb\xf6\x15yK\xf5\xcbN\x14b\xab\xf7\xe2\
-\x93\x10J\xffu\x88\xbd\xfb\xfa\xb6\xbfe\xfc)\xda\xc4\x18\x9f\x8b\x8aV0\xbd\
-\xc3\x8eQ1\xd2k0\t\xb1\xd5\\\xaf\x82\xfb\x19\xb6|\xc7\x96\xb8\x88u\x809\'\
-\xef\x9c\x0e\xa7\xa7\x88~\xd1\x14:\x9c\xbe\t\xee\xeb7\x86\xeb\x1d\x8004\xe43\
-HG\xe0"\xf4 }\xcc-\x86\x1c\xd3\x84\x19\xe3\xa2\x8c\xad\xe0\xd8W\x81\x8f\x1c\
-\xc0q\x08e\x01\x82\xae\x05\n\x95\xe4s\x07$\xed\xbb\x13\x96\xee\x81\xc2a9T\
-\xc3\xae\x07\xc34\x93_v+\x00<D\xdd\x0e\xed\x95\x06\x1d\x1f\xc8\x9f\xd2@\xc7A\
-`Ls\xec^\xf8\x02\xd9\xd7\xefG\xa1\x9f\xea\xc8\xb7H>.:h/\xa3\xf5\xb9>\x0e;\
-\xd0>m+\xd4~Z`jv/ \xcc\t!\x94\xda.\x1et\x00\xec\x98\x0b_\xca5\xc7\xce;\x00[F\
-\xecOI\xe1\xdc\x95\x90\x96\x15r\xeck\x08\xb6\xce\x1a\xdf\xc3g\xef\x18e\xfa%|\
-\xc3\xd6\xcf4_LX\xa1\x0f1\xe3?\x04k\x97\xda\x0f\xff\r\xa0S\xd1\xd3\xf0\xa9X\
-\xbf\xeb\xad\xe1\x99\xe5&K46\xac\xb0\xbei\xae?\xc4]\xd9k\x05\x9c\x8awNs\xec\
-\x8ax\xd3KX:\x0c\x1f\xe8\xb3\xca\xdf\xbe\xff\xd1\xef\xbf\xa7\x84\xed\xc4\xf2\
-\xb3\x98?W2\xa6\xc5_d\xf9\xcf\x940M\xd2\x14M\xff"3V\xcd\xc2?W2\xa6\xebt\x89\
-\xae\xd2\x15Z\xa2\x8bt\x8dz\xd4\xa7\x98\x12\x1a\xfc\x1bk~R\x02+\x86\x94\xd2\
-\x882\x8a\xe8\x1d}\xa1\x97\xf4\x9e>\xd2)}r\xd6\x1c\xfcV~RrL;\xf4\x81^\xd0+\
-\xda\xa3}zMo\xe8\x90\xce\xe8\xc4&\xc4gzNo\xe9\x88\xee\xfc"kT\xd0\xe6\xef\x94\
-\x94\xf4\x98r\xda\xa0\x8a\x1a\xbaA7i\x85n\xd3*\xdd\xa5[\xf6\xdf\x1e\xfc"\x8f\
-\xe8\xbe*\xb9\xf0\xb3\x92{T\xd3CZ\xb7\xe7OX;\xce\xad=[t\x99\xe6h\x9e\x9e\xd1\
-6\xcd\xd2SzB_\xe9;\xd9\xa1\x80\x99\x857\xe9\xc2\xdf-1<\xe6uZ\xe4e\x9e\xe4)\
-\x9e\xe6\x19^\xe0\xeb|\x89\xaf\xf2\x15^\xe2\x8b|\x8d{\xdc\xe7\x98\x13\x1e\
-\xf0\x90S\xfe\xc5\x9d\x11g\x1c\xf1;\xfe\xc2/\xf9=\x7f\xe4S\xfe\xc4\x07|\xcc;\
-\xfc\x81_\xf0+\xde\xe3}~\xcdo\xf8\x90\xcf\xf8\x84w\xf93?\xe7\xb7?*9\xe2;\xbc\
-\xc6\x05or\xc9\x8f9\xe7\r\xae\xb8\xe1\x1b|\x93W\xf86\xaf\xf2]\xbe\xc5\x0f\
-\xf8\x11\xdf\xe7{\\\xf3C^\xe7\t>\xffA\x89\xe3d\x8b/\xf3\x1c\xcf\xff\x03y\xc6\
-\xdb<k\xe5)?\xe1\xaf\xfc]9Q%\xf6\xe9%\xfc\x0fD\xc4H\xabd,\x8b\xb2,\x93\xf2\
-\x03\xb1[<%\xd32#\x0br].\xc9U\xb9"KrQ\xaeIO\xfa\x12K"\x03\x19J*#\xc9$\x92w\
-\xf2E^\xca\x11\xbf\x97\x8f\xb2\xf9#\'Pr*\x9f\xe4@\x8eeG>\xc8\x0by%{\xb2/\xaf\
-\xe5\x8d\x1c\xca\x99\x9c\xc8\xae|\x96\xe7\xf2V\x8e\xe4\x8e\xacI!\x9bR\xcac\
-\xf9A\x89\xa1\\6\xa4\x92Sj\xe4\x86\xec\xd3MY\xa7\x19^\x91\xdb\xb2*w\xe5\x96<\
-\x90\x05~$\xf7\xe5\x9c\xeeI-\x0fe]&\xe4\\\xdap\xfc\x92l\xcb\xb6\xcc>\xd1\x96\
-\\\x969\x99\x97gv\xfb\xb6\xacHN\xb3V\xc5S\xab\xea\x89L\xf1\x19}\x95\xefb\x9f\
-7\x86\x8d\x98B\x8c\xf9m\xb2\x8d\xcd\xa2\xd9\x96e3i\xa6\xcc\xaa\xcc\xf0\xb4\
-\x991\x0b|W\xa6y\xc1L\xf2\x84M\xc3\xeb\xe6\x92\xb9j\xae\x98%s\xd1\\3\xbf\xad\
-\x9d\x9e\xe9\x9b\x13\x8a\xcd\x9c$f`\xd6i[&\xe8\x91\xb5bh\xceh\x99wiU\x1e\xd2\
-\xb4\xd9\xa3\xd4\x8c~\xa7\xe4\xc8\xe6@f2\x13\x99w\xe6\x8b\x89\xcd\xb2\x99\
-\x97)\xf3\xd2\xbc7\xd3\xfc\xd1Z\xb1\xcc\x8b\xb6 N\xcd>}\xb2\xd6\x1d\x98c\xb3\
-c>\x98\x17\xe6oM\xe9\x95\xd93\xfb\xe6\xb5Usbm\x98\xb3\x14\x0f\xcc\x1bsnKq\
-\xc2\x96\xe4\xba-\xcd\xc4Zqh\xce\xcc\x89\xd95\x9f\xcds\xf3\xf6\xefJ\x8e\xcc\
-\x1d\xb3f\n\xb3iJ\xf3\xd8\xe4f\xc3T\xa617\xccM\xb3bn\x9bUs\xd7\xdc2\x0f\xcc#\
-+\xf7\xcd=\xb3\xc5\xf6\x9d\xf5st\xa0\xe4\xa1U3i\x03\xben&\xcc\xb9\xd92\x97\
-\xcd\x9c\x997\xcf\xcc\xb6\x995O\xcd\x13\xf3\xd5|7\xdf\xac\xd0\x98\xc7k,c3\
-\xbe\xf0\xb7\x1e;>\xa0?\x95\xdf^\x19\x8b\xe3?\x93\xdf*Y\x1e\xff\x99\xfc\x9f\
-\xdf\xc5\xff+%\xfc/J\xa6~h' ))
+'x\xda\xd3\xc8)0\xe4\nV74S\x00"S\x05Cu\xae\xc4`u\x7f\x85d\x05\xa7\x9c\xc4\
+\xe4l0/\x1f\xc8Sv6\x00A0_\x0f\xc4\xb70\x00A0?\x02\xc4ws3\x00\x020_\x01\xc8\
+\xf7\xcb\xcfK\x85rP\x01LP\x0f\x04\xd0\x04\xf5"\xf2\x81P\x0fE\x10"\x06\x14\
+\x85h\x80\n"\x9b\xa8\xe7\x0f\x13\x84*\x05+\x87\x0b"\xc4\xf2\xe9\xaf\x12\x05@\
+\x05\x15\xfcQ\x00\xdePB\x17\xd4\x03\x00x\x93dF' ))
 
 def getFolder2Bitmap():
     return wxBitmapFromXPMData(getFolder2Data())
@@ -2079,11 +1964,28 @@ def getFolder2Bitmap():
 def getFolder2Image():
     return wxImageFromBitmap(getFolder2Bitmap())
 
+#----------------------------------------------------------------------
+def getFolder3Data():
+    return cPickle.loads(zlib.decompress(
+'x\xda\xd3\xc8)0\xe4\nV74S\x00"\x13\x05Cu\xae\xc4`u=\x85d\x05\xa7\x9c\xc4\
+\xe4l0/\x1f\xc8S\xb60\xb0000\x00\xf3\x15\x80|\xbf\xfc\xbcT0\'\x02$\xe9\x06\
+\x04pIT\x80GP\x0f\x040\x04#""\xf4\xa0\x00E\x10\n\x08\x0b\xea!\x00B0\x1f\x0e\
+\x10\x82z\x08A\x84vd\x85pw"+\x84\t\xa2(D\xf6\x11\xdc\xed\n\xa4\x06\x08\xa6\
+\xa0\x1e\x00\xc9\xbd[\x89' ))
+
+def getFolder3Bitmap():
+    return wxBitmapFromXPMData(getFolder3Data())
+
+def getFolder3Image():
+    return wxImageFromBitmap(getFolder3Bitmap())
+
 #----------------------------------------------------------------------
 def getFile1Data():
     return cPickle.loads(zlib.decompress(
-'x\xda\xd3\xc8)0\xe4\nV76R\x00"C\x05Cu\xae\xc4`u\x05\x85d\x05\xbf\xfc\xbcT(\
-\x07?\x18U4\xaahT\xd1\xa8\xa2\x81Q\xa4\x07\x00jB\xa8\xe5' ))
+'x\xda\xd3\xc8)0\xe4\nV74S\x00"#\x05Cu\xae\xc4`u=\x85d\x05\xa7\x9c\xc4\xe4l0\
+O\x01\xc8\xf3\xcb\xcfK\x85rP\x01TP\x0f\nP\x05!<\xa8(\\\x10\x04!\x04\xa6J\xb0\
+ZT\x95\n\x10iT\x95\xe8\x82\x088\x00*\x11\x00!\x885\x940\x04\xf5\x00\x08\x9a?\
+H' ))
 
 def getFile1Bitmap():
     return wxBitmapFromXPMData(getFile1Data())
@@ -2091,3 +1993,17 @@ def getFile1Bitmap():
 def getFile1Image():
     return wxImageFromBitmap(getFile1Bitmap())
 
+#----------------------------------------------------------------------
+def getFile2Data():
+    return cPickle.loads(zlib.decompress(
+'x\xda\xd3\xc8)0\xe4\nV74S\x00"c\x05Cu\xae\xc4`u=\x85d\x05\xa7\x9c\xc4\xe4l0\
+/\x02\xc8Svs3\x00\x020_\x01\xc8\xf7\xcb\xcfK\x85rP\x01TP\x0f\nP\x05#\xc0\x00\
+*\n\x17\x04\xc1\x08=\x05=l*\xc1jQU\x82\xc41T\xa2\x0b\xc2\xe1@\xa8D\x00\x84 \
+\xd6P\xc2\x10\xd4\x03\x00f\xa3R\xef' ))
+
+def getFile2Bitmap():
+    return wxBitmapFromXPMData(getFile2Data())
+
+def getFile2Image():
+    return wxImageFromBitmap(getFile2Bitmap())
+
index 756b46e3f736b8411182cbf2067cfeb31644ab79..d3bbd087857ac80a78625a7635a39a71c684b5d8 100644 (file)
@@ -8,7 +8,7 @@ def runTest(frame, nb, log):
     win = wxPanel(nb, -1)
     ed = wxEditor(win, -1, style=wxSUNKEN_BORDER)
     box = wxBoxSizer(wxVERTICAL)
-    box.Add(ed, 1, wxALL|wxGROW, 5)
+    box.Add(ed, 1, wxALL|wxGROW, 1)
     win.SetSizer(box)
     win.SetAutoLayout(true)
 
@@ -38,7 +38,7 @@ def runTest(frame, nb, log):
 overview = """
 The wxEditor class implements a simple text editor using wxPython.  You
 can create a custom editor by subclassing wxEditor.  Even though much of
-the editor is implemented in Python, it runs surprisingly smoothly on  
+the editor is implemented in Python, it runs surprisingly smoothly on
 normal hardware with small files.
 
 How to use it
index 68f3e27a049802a2194ff21398d615efbc87cc58..5e2d11d1c68fd2505b5180558f937f4f0a933fb2 100644 (file)
@@ -36,7 +36,7 @@ class OutlinerPanel(wxPanel):
         wxPanel.Close(self)
 
 ##----------------------------------------------------------------------
-    
+
 
 class FrogEditFrame(wxFrame):
     def __init__(self, parent, ID, title, pos=wxDefaultPosition,
@@ -48,7 +48,7 @@ class FrogEditFrame(wxFrame):
         win = OutlinerPanel(splitter, -1, style=wxCLIP_CHILDREN)
         win.parent = self
         log = self.MakeLogWindow(splitter)
-        
+
         self.MakeStatusbar()
         self.MakeEditorWindow(win, log)
         self.SetUpSplitter(splitter, win, log)
@@ -57,6 +57,8 @@ class FrogEditFrame(wxFrame):
         self.RegisterEventHandlers()
         self.InitVariables()
 
+        win.Layout()
+
 
 ##------------- Init Misc
 
@@ -66,7 +68,7 @@ class FrogEditFrame(wxFrame):
     def InitVariables(self):
         self.fileName = None
         self.edl.UnTouchBuffer()
-        
+
     def MakeMenus(self):
         self.MainMenu = wxMenuBar()
         self.AddMenus(self.MainMenu)
@@ -172,7 +174,7 @@ class FrogEditFrame(wxFrame):
         messageDialog = wxMessageDialog(self, text, title, wxOK | wxICON_INFORMATION)
         messageDialog.ShowModal()
         messageDialog.Destroy()
-    
+
     def OkCancelDialog(self, text, title):
         dialog = wxMessageDialog(self, text, title, wxOK | wxCANCEL | wxICON_INFORMATION)
         result = dialog.ShowModal()
@@ -191,11 +193,11 @@ class FrogEditFrame(wxFrame):
             wildCard = "*.*"
         fileName = None
         fileDialog = wxFileDialog(self, "Choose a file", defaultDir, defaultFile, wildCard, wxOPEN|wxMULTIPLE)
-        result = fileDialog.ShowModal() 
+        result = fileDialog.ShowModal()
         if result == wxID_OK:
             fileName = fileDialog.GetPath()
             wxLogMessage('You selected: %s\n' % fileName)
-        fileDialog.Destroy()       
+        fileDialog.Destroy()
         return fileName
 
     def OpenFileError(self, fileName):
@@ -220,13 +222,13 @@ class FrogEditFrame(wxFrame):
 
     def SetAltFuncs(self, action):
         FrogEditor.SetAltFuncs(self.edl, action)
-        action['x'] = self.OnFileExit 
+        action['x'] = self.OnFileExit
 
     def GetCurrentDir(self):
         if self.fileName is not None:
             return os.path.split(self.fileName)[0]
         return "."
-            
+
     def GetFileName(self):
         if self.fileName is not None:
             return os.path.split(self.fileName)[1]
@@ -263,7 +265,7 @@ class FrogEditFrame(wxFrame):
             return TRUE
         except:
             return FALSE
-        
+
 
 
 ##---------------- Event handlers
@@ -279,7 +281,7 @@ class FrogEditFrame(wxFrame):
                 return
         self.NewFile()
         self.edl.SetFocus()
-    
+
     def OnOpenFile(self, event):
         if self.edl.BufferWasTouched():
             if not self.OkCancelDialog("Open file - abandon changes?", "Open File"):
@@ -289,7 +291,7 @@ class FrogEditFrame(wxFrame):
             if self.OpenFile(fileName) is FALSE:
                 self.OpenFileError(fileName)
         self.edl.SetFocus()
-    
+
     def OnSaveFile(self, event):
         if self.fileName is None:
             return self.OnSaveFileAs(event)
@@ -297,7 +299,7 @@ class FrogEditFrame(wxFrame):
         if self.SaveFile(self.fileName) is not TRUE:
             self.SaveFileError(self.fileName)
         self.edl.SetFocus()
-    
+
     def OnSaveFileAs(self, event):
         fileName = self.SelectFileDialog(self.GetCurrentDir(),self.GetFileName())
         if fileName is not None:
@@ -306,8 +308,8 @@ class FrogEditFrame(wxFrame):
             if self.SaveFile(self.fileName) is not TRUE:
                 self.SaveFileError(self.fileName)
         self.edl.SetFocus()
-    
-    def OnFileExit(self, event):        
+
+    def OnFileExit(self, event):
         if self.edl.BufferWasTouched():
             if not self.OkCancelDialog("Exit program - abandon changes?", "Exit"):
                 return
@@ -316,11 +318,11 @@ class FrogEditFrame(wxFrame):
     def OnEditPreferences(self, event):
         self.MessageDialog("Edit preferences is not implemented yet.", "Not implemented.")
         pass
-    
+
     def OnHelpAbout(self, event):
         self.MessageDialog(ABOUT_TEXT, "About FrogEdit")
         pass
-    
+
     def Show(self, show):
         wxFrame.Show(self, show)
         self.edl.SetFocus()
@@ -330,7 +332,7 @@ class FrogEditFrame(wxFrame):
     def LoadInitialFile(self, fileName):
         if fileName is not None:
             if self.OpenFile(fileName) is FALSE:
-                self.OpenFileError(fileName)        
+                self.OpenFileError(fileName)
 
 
 
@@ -341,7 +343,8 @@ class FrogEditLauncher:
 
     def MakeAppFrame(self):
         return FrogEditFrame(None, -1, "FrogEdit", size=(640, 480),
-                             style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE)    
+                             style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE)
+
     def GetArgvFilename(self):
         if len(sys.argv) > 1:
             return sys.argv[1]
@@ -349,8 +352,8 @@ class FrogEditLauncher:
             return None
 
     def Main(self):
-        win = self.MakeAppFrame()
         app = wxPySimpleApp()
+        win = self.MakeAppFrame()
         win.Show(true)
         win.LoadInitialFile(self.GetArgvFilename())
         app.MainLoop()
index ed41eb4ba143a51f886745cf5405d65a242e34b9..96ecf34550d519917f84d11a9139054926cd0599 100755 (executable)
@@ -13,7 +13,7 @@ from my_distutils import run_swig, contrib_copy_tree
 # flags and values that affect this script
 #----------------------------------------------------------------------
 
-VERSION          = "2.3.2b7"
+VERSION          = "2.3.2b7+"
 DESCRIPTION      = "Cross platform GUI toolkit for Python"
 AUTHOR           = "Robin Dunn"
 AUTHOR_EMAIL     = "Robin Dunn <robin@alldunn.com>"
@@ -31,10 +31,11 @@ on.
 BUILD_GLCANVAS = 1 # If true, build the contrib/glcanvas extension module
 BUILD_OGL = 1      # If true, build the contrib/ogl extension module
 BUILD_STC = 1      # If true, build the contrib/stc extension module
-BUILD_IEWIN = 0    # Internet Explorer wrapper (experimental)
 BUILD_XRC = 1      # XML based resource system
 BUILD_GIZMOS = 1   # Build a module for the gizmos contrib library
 
+BUILD_IEWIN = 0    # Internet Explorer wrapper (experimental)
+
 
 CORE_ONLY = 0      # if true, don't build any of the above
 GL_ONLY = 0        # Only used when making the -gl RPM.  See the "b" script
index 7e68c2a5908ea26d91d7a8fd5d22fa86adedc6b0..d7e8d6a9637f09c58724ecc2bb2ed744fc63875b 100644 (file)
@@ -1,3 +1,4 @@
+*.dsp
 .emacs.desktop
 Makefile
 Makefile.pre
@@ -32,6 +33,7 @@ wxPython.dsp
 wxPython.dsw
 wxPython.ncb
 wxPython.opt
+wxSamples
 wxc.exp
 wxc.ilk
 wxc.lib
@@ -43,4 +45,3 @@ wxpc.exp
 wxpc.lib
 wxpc.res
 wxpc.res.save
-*.dsp
\ No newline at end of file
index b9d8802174beb2f7e532bb826d1fc6e654e85cb3..1265b0ba70171695c299a5da7292c87f4d473359 100644 (file)
@@ -1 +1 @@
-ver = '2.3.2b7'
+ver = '2.3.2b7+'
index 4e393463b1cf0a1c3b6e7a6d6d02fdbb95ff598b..cd743b007d8b7f757046833f2e56426cad8c6325 100644 (file)
@@ -475,6 +475,7 @@ enum {
 
     wxWS_EX_VALIDATE_RECURSIVELY,
     wxWS_EX_BLOCK_EVENTS,
+    wxWS_EX_TRANSIENT,
 
     // Mapping modes (as per Windows)
     wxMM_TEXT,
index 298d60550208a817597d16c0b5d9cd12f8c57e3f..12990e015cd4dfd32562575634d5185cf1b5ee86 100644 (file)
@@ -919,6 +919,7 @@ public:
     wxTreeItemId();
     ~wxTreeItemId();
     bool IsOk();
+    %pragma(python) addtoclass = "Ok = IsOk"
 
     %addmethods {
         int __cmp__(wxTreeItemId* other) {
index 5fc50375709d52051120ff0e392ba16fbfd66b21..1470b4b076ce8aed04579b5e0a71cb15269aeeae 100644 (file)
@@ -780,6 +780,7 @@ class wxTreeItemIdPtr :
         return val
     def __repr__(self):
         return "<C wxTreeItemId instance at %s>" % (self.this,)
+    Ok = IsOk
 class wxTreeItemId(wxTreeItemIdPtr):
     def __init__(self,*_args,**_kwargs):
         self.this = apply(controls2c.new_wxTreeItemId,_args,_kwargs)
index b0950603dbdf5f3054a424ae85143915853f8993..e0951cff5259975e63b830147220c7e5c1c81a90 100644 (file)
@@ -5787,6 +5787,43 @@ static PyObject *_wrap_wxWindow_GetAcceleratorTable(PyObject *self, PyObject *ar
     return _resultobj;
 }
 
+#define wxWindow_base_OnPaint(_swigobj,_swigarg0)  (_swigobj->OnPaint(_swigarg0))
+static PyObject *_wrap_wxWindow_base_OnPaint(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    wxWindow * _arg0;
+    wxPaintEvent * _arg1;
+    PyObject * _argo0 = 0;
+    PyObject * _argo1 = 0;
+    char *_kwnames[] = { "self","event", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxWindow_base_OnPaint",_kwnames,&_argo0,&_argo1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxWindow_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxWindow_base_OnPaint. Expected _wxWindow_p.");
+        return NULL;
+        }
+    }
+    if (_argo1) {
+        if (_argo1 == Py_None) { _arg1 = NULL; }
+        else if (SWIG_GetPtrObj(_argo1,(void **) &_arg1,"_wxPaintEvent_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 2 of wxWindow_base_OnPaint. Expected _wxPaintEvent_p.");
+        return NULL;
+        }
+    }
+{
+    wxPy_BEGIN_ALLOW_THREADS;
+        wxWindow_base_OnPaint(_arg0,*_arg1);
+
+    wxPy_END_ALLOW_THREADS;
+    if (PyErr_Occurred()) return NULL;
+}    Py_INCREF(Py_None);
+    _resultobj = Py_None;
+    return _resultobj;
+}
+
 static void *SwigwxPanelTowxWindow(void *ptr) {
     wxPanel *src;
     wxWindow *dest;
@@ -10562,6 +10599,7 @@ static PyMethodDef windowscMethods[] = {
         { "wxPanel_Create", (PyCFunction) _wrap_wxPanel_Create, METH_VARARGS | METH_KEYWORDS },
         { "new_wxPrePanel", (PyCFunction) _wrap_new_wxPrePanel, METH_VARARGS | METH_KEYWORDS },
         { "new_wxPanel", (PyCFunction) _wrap_new_wxPanel, METH_VARARGS | METH_KEYWORDS },
+        { "wxWindow_base_OnPaint", (PyCFunction) _wrap_wxWindow_base_OnPaint, METH_VARARGS | METH_KEYWORDS },
         { "wxWindow_GetAcceleratorTable", (PyCFunction) _wrap_wxWindow_GetAcceleratorTable, METH_VARARGS | METH_KEYWORDS },
         { "wxWindow_SetAcceleratorTable", (PyCFunction) _wrap_wxWindow_SetAcceleratorTable, METH_VARARGS | METH_KEYWORDS },
         { "wxWindow_PrevControlId", (PyCFunction) _wrap_wxWindow_PrevControlId, METH_VARARGS | METH_KEYWORDS },
index d702a31a85b4f7613cb3767bba3c227ef41c40e0..21add562c64965c62187cc6fd03e6ae509ba66ea 100644 (file)
@@ -556,6 +556,9 @@ class wxWindowPtr(wxEvtHandlerPtr):
         val = apply(windowsc.wxWindow_GetAcceleratorTable,(self,) + _args, _kwargs)
         if val: val = wxAcceleratorTablePtr(val) 
         return val
+    def base_OnPaint(self, *_args, **_kwargs):
+        val = apply(windowsc.wxWindow_base_OnPaint,(self,) + _args, _kwargs)
+        return val
     def __repr__(self):
         return "<C wxWindow instance at %s>" % (self.this,)
     # replaces broken shadow method
index 11a4f295bbdf07e20be5b49ab22de7beb3e2e503..87bedd78cd9929c7e3d9da2b86761c77290e482f 100644 (file)
@@ -2177,6 +2177,7 @@ SWIGEXPORT(void) initwxc() {
         PyDict_SetItemString(d,"wxJOY_BUTTON_ANY", PyInt_FromLong((long) wxJOY_BUTTON_ANY));
         PyDict_SetItemString(d,"wxWS_EX_VALIDATE_RECURSIVELY", PyInt_FromLong((long) wxWS_EX_VALIDATE_RECURSIVELY));
         PyDict_SetItemString(d,"wxWS_EX_BLOCK_EVENTS", PyInt_FromLong((long) wxWS_EX_BLOCK_EVENTS));
+        PyDict_SetItemString(d,"wxWS_EX_TRANSIENT", PyInt_FromLong((long) wxWS_EX_TRANSIENT));
         PyDict_SetItemString(d,"wxMM_TEXT", PyInt_FromLong((long) wxMM_TEXT));
         PyDict_SetItemString(d,"wxMM_LOMETRIC", PyInt_FromLong((long) wxMM_LOMETRIC));
         PyDict_SetItemString(d,"wxMM_HIMETRIC", PyInt_FromLong((long) wxMM_HIMETRIC));
index 365158fa2aafab5926f54269b1bfc5feccbfa0c1..e65da8df1c0626cd21191fa73ca6558e548297e2 100644 (file)
@@ -440,6 +440,7 @@ wxJOY_BUTTON4 = wxc.wxJOY_BUTTON4
 wxJOY_BUTTON_ANY = wxc.wxJOY_BUTTON_ANY
 wxWS_EX_VALIDATE_RECURSIVELY = wxc.wxWS_EX_VALIDATE_RECURSIVELY
 wxWS_EX_BLOCK_EVENTS = wxc.wxWS_EX_BLOCK_EVENTS
+wxWS_EX_TRANSIENT = wxc.wxWS_EX_TRANSIENT
 wxMM_TEXT = wxc.wxMM_TEXT
 wxMM_LOMETRIC = wxc.wxMM_LOMETRIC
 wxMM_HIMETRIC = wxc.wxMM_HIMETRIC
index a4bee153e1bfce86d33dc0d53dea04334d51d58e..1aab58d1dae6578c9604388a1ffa2883aefa62c6 100644 (file)
@@ -400,6 +400,9 @@ public:
 
     void SetAcceleratorTable(const wxAcceleratorTable& accel);
     wxAcceleratorTable *GetAcceleratorTable();
+
+
+    %name(base_OnPaint)void OnPaint(wxPaintEvent& event);
 };
 
 
index e531bff7ff826f01c5b082b9aba483e851f5a8cf..833d7678e5f5b3c4abd9a54b2041317d962fa2e4 100644 (file)
@@ -13,7 +13,7 @@
 #   syntax coloring and outliner collapse mode.  Adam and Steve
 #   inherited the code, and added a lot of basic editor
 #   functionality that had not been there before, such as cut-and-paste.
-#   
+#
 #
 # Created:     15-Dec-1999
 # RCS-ID:      $Id$
@@ -31,7 +31,7 @@ import images
 
 #----------------------------
 
-def ForceBetween(min, val, max):                            
+def ForceBetween(min, val, max):
     if val  > max:
         return max
     if val < min:
@@ -103,6 +103,7 @@ class wxEditor(wxScrolledWindow):
         EVT_PAINT(self, self.OnPaint)
         EVT_SIZE(self, self.OnSize)
         EVT_WINDOW_DESTROY(self, self.OnDestroy)
+        EVT_ERASE_BACKGROUND(self, self.OnEraseBackground)
 
 ##------------------- Platform-specific stuff
 
@@ -111,7 +112,7 @@ class wxEditor(wxScrolledWindow):
             return wxFont(10, wxMODERN, wxNORMAL, wxNORMAL)
         else:
             return wxFont(12, wxMODERN, wxNORMAL, wxNORMAL, false)
-          
+
     def UnixKeyHack(self, key):
         # this will be obsolete when we get the new wxWindows patch
         if key <= 26:
@@ -151,12 +152,15 @@ class wxEditor(wxScrolledWindow):
         self.KeepCursorOnScreen()
         self.DrawSimpleCursor(0,0,dc, true)
         self.Draw(dc)
-        
+
     def OnPaint(self, event):
         dc = wxPaintDC(self)
         self.UpdateView(dc)
         self.AdjustScrollbars()
 
+    def OnEraseBackground(self, evt):
+        pass
+
 ##-------------------- Drawing code
 
     def InitFonts(self):
@@ -272,7 +276,7 @@ class wxEditor(wxScrolledWindow):
         self.sy = ForceBetween(max(0, self.cy-self.sh), self.sy, self.cy)
         self.sx = ForceBetween(max(0, self.cx-self.sw), self.sx, self.cx)
         self.AdjustScrollbars()
-            
+
     def HorizBoundaries(self):
         self.SetCharDimensions()
         maxLineLen = self.CalcMaxLineLen()
@@ -283,11 +287,11 @@ class wxEditor(wxScrolledWindow):
         self.SetCharDimensions()
         self.sy = ForceBetween(0, self.sy, max(self.sh, self.LinesInFile() - self.sh + 1))
         self.cy = ForceBetween(self.sy, self.cy, self.sy + self.sh - 1)
-       
+
     def cVert(self, num):
         self.cy = self.cy + num
         self.cy = ForceBetween(0, self.cy, self.LinesInFile() - 1)
-        self.sy = ForceBetween(self.cy - self.sh + 1, self.sy, self.cy) 
+        self.sy = ForceBetween(self.cy - self.sh + 1, self.sy, self.cy)
         self.cx = min(self.cx, self.CurrentLineLength())
 
     def cHoriz(self, num):
@@ -346,7 +350,7 @@ class wxEditor(wxScrolledWindow):
 
     def TouchBuffer(self):
         self.bufferTouched = TRUE
-        
+
 
 ##-------------------------- Mouse scroll timing functions
 
@@ -393,7 +397,7 @@ class wxEditor(wxScrolledWindow):
             row = self.sy + self.sh
             row  = min(row, self.LinesInFile() - 1)
             self.cy = row
-        
+
     def HandleLeftOfScreen(self, col):
         self.SetScrollTimer()
         if self.CanScroll():
@@ -407,7 +411,7 @@ class wxEditor(wxScrolledWindow):
             col = self.sx + self.sw
             col = min(col, self.CurrentLineLength())
             self.cx = col
-        
+
 ##------------------------ mousing functions
 
     def MouseToRow(self, mouseY):
@@ -430,14 +434,14 @@ class wxEditor(wxScrolledWindow):
 
     def MouseToCursor(self, event):
         self.MouseToRow(event.GetY())
-        self.MouseToCol(event.GetX())            
+        self.MouseToCol(event.GetX())
 
     def OnMotion(self, event):
         if event.LeftIsDown():
             self.Selecting = true
             self.MouseToCursor(event)
             self.SelectUpdate()
-            
+
     def OnLeftDown(self, event):
         self.MouseToCursor(event)
         self.SelectBegin = (self.cy, self.cx)
@@ -454,7 +458,7 @@ class wxEditor(wxScrolledWindow):
 
         self.ReleaseMouse()
         self.scrollTimer.Stop()
-            
+
 
 #------------------------- Scrolling
 
@@ -495,7 +499,7 @@ class wxEditor(wxScrolledWindow):
             self.cy = self.LinesInFile()
         else:
             self.sy = event.GetPosition()
-            
+
         self.VertBoundaries()
 
     def OnScroll(self, event):
@@ -514,7 +518,7 @@ class wxEditor(wxScrolledWindow):
             self.scroller.SetScrollbars(
                 self.fw, self.fh,
                 self.CalcMaxLineLen()+3, max(self.LinesInFile()+1, self.sh),
-                self.sx, self.sy) 
+                self.sx, self.sy)
 
 #------------ backspace, delete, return
 
@@ -540,11 +544,11 @@ class wxEditor(wxScrolledWindow):
         self.cx = len(t1)
         self.lines = self.lines[:self.cy] + [t1 + t2] + self.lines[self.cy+2:]
         self.TouchBuffer()
-        
+
 
     def DeleteChar(self,x,y,oldtext):
         newtext = oldtext[:x] + oldtext[x+1:]
-        self.SetTextLine(y, newtext)        
+        self.SetTextLine(y, newtext)
         self.TouchBuffer()
 
 
@@ -561,7 +565,7 @@ class wxEditor(wxScrolledWindow):
                 self.TouchBuffer()
             else:
                 wxBell()
-            
+
     def Delete(self, event):
         t = self.GetTextLine(self.cy)
         if self.cx<len(t):
@@ -577,7 +581,7 @@ class wxEditor(wxScrolledWindow):
 
     def TabKey(self, event):
         numSpaces = self.SpacesPerTab - (self.cx % self.SpacesPerTab)
-        self.SingleLineInsert(' ' * numSpaces)       
+        self.SingleLineInsert(' ' * numSpaces)
 
 ##----------- selection routines
 
@@ -599,7 +603,7 @@ class wxEditor(wxScrolledWindow):
                 return (begin, end)
             else:
                 return (end, begin)
-                
+
     def FindSelection(self):
         if self.SelectEnd is None or self.SelectBegin is None:
             wxBell()
@@ -620,12 +624,12 @@ class wxEditor(wxScrolledWindow):
         if selection is None:
             return
         (bRow, bCol, eRow, eCol) = selection
-        
+
         if bRow == eRow:
             self.SingleLineCopy(bRow, bCol, eCol)
         else:
             self.MultipleLineCopy(bRow, bCol, eRow, eCol)
-        
+
     def OnCopySelection(self, event):
         self.CopySelection(event)
         self.SelectOff()
@@ -636,7 +640,7 @@ class wxEditor(wxScrolledWindow):
     def SingleLineCopy(self, Row, bCol, eCol):
         Line = self.GetTextLine(Row)
         self.CopyData([Line[bCol:eCol]])
-            
+
     def MultipleLineCopy(self, bRow, bCol, eRow, eCol):
         bLine = self.GetTextLine(bRow)[bCol:]
         eLine = self.GetTextLine(eRow)[:eCol]
@@ -647,7 +651,7 @@ class wxEditor(wxScrolledWindow):
         if selection is None:
             return
         (bRow, bCol, eRow, eCol) = selection
-        
+
         if bRow == eRow:
             self.SingleLineDelete(bRow, bCol, eCol)
         else:
@@ -684,7 +688,7 @@ class wxEditor(wxScrolledWindow):
         else:
             self.MultipleLinePaste()
 
-    def SingleLineInsert(self, newText): 
+    def SingleLineInsert(self, newText):
         ModLine = self.GetTextLine(self.cy)
         ModLine = ModLine[:self.cx] + newText + ModLine[self.cx:]
         self.SetTextLine(self.cy, ModLine)
@@ -710,7 +714,7 @@ class wxEditor(wxScrolledWindow):
     def OnCutSelection(self,event):
         self.CopySelection(event)
         self.OnDeleteSelection(event)
-        
+
 #-------------- Keyboard movement implementations
 
     def MoveDown(self, event):
@@ -739,7 +743,7 @@ class wxEditor(wxScrolledWindow):
                 self.cVert(1)
         else:
             self.cx += 1
-           
+
 
     def MovePageDown(self, event):
         self.cVert(self.sh)
@@ -810,7 +814,7 @@ class wxEditor(wxScrolledWindow):
 
         if not action.has_key(key):
             return false
-       
+
         if event.ShiftDown():
             if not self.Selecting:
                 self.Selecting = true
@@ -821,7 +825,7 @@ class wxEditor(wxScrolledWindow):
             action[key](event)
             if self.Selecting:
                 self.Selecting = false
-                
+
         self.SelectNotify(self.Selecting, self.SelectBegin, self.SelectEnd)
         self.UpdateView()
         return true
@@ -861,7 +865,7 @@ class wxEditor(wxScrolledWindow):
 
     def AltKey(self, event, key):
         return self.ModifierKey(key, event, event.AltDown(), self.SetAltFuncs)
-    
+
     def SpecialControlKey(self, event, key):
         if not event.ControlDown():
             return false
@@ -917,7 +921,7 @@ class wxEditor(wxScrolledWindow):
 
     def OnClick(self):
         pass
-        
+
     def SelectNotify(self, Selecting, SelectionBegin, SelectionEnd):
         pass