]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wx.CollapsiblePane
authorRobin Dunn <robin@alldunn.com>
Sat, 11 Nov 2006 07:40:41 +0000 (07:40 +0000)
committerRobin Dunn <robin@alldunn.com>
Sat, 11 Nov 2006 07:40:41 +0000 (07:40 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43301 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

wxPython/demo/CollapsiblePane.py [new file with mode: 0644]
wxPython/demo/Main.py
wxPython/docs/CHANGES.txt
wxPython/setup.py
wxPython/src/_collpane.i [new file with mode: 0644]
wxPython/src/controls.i

diff --git a/wxPython/demo/CollapsiblePane.py b/wxPython/demo/CollapsiblePane.py
new file mode 100644 (file)
index 0000000..4e0b993
--- /dev/null
@@ -0,0 +1,119 @@
+
+import wx
+
+#----------------------------------------------------------------------
+
+label1 = "Click here to show pane"
+label2 = "Click here to hide pane"
+
+btnlbl1 = "call Expand(True)"
+btnlbl2 = "call Expand(False)"
+
+
+class TestPanel(wx.Panel):
+    def __init__(self, parent, log):
+        self.log = log
+        wx.Panel.__init__(self, parent, -1)
+
+        title = wx.StaticText(self, label="wx.CollapsiblePane")
+        title.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD))
+        title.SetForegroundColour("blue")
+
+        self.cp = cp = wx.CollapsiblePane(self, label=label1)
+        self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnPaneChanged, cp)
+        self.MakePaneContent(cp.GetPane())
+
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        self.SetSizer(sizer)
+        sizer.Add(title, 0, wx.ALL, 25)
+        sizer.Add(cp, 0, wx.RIGHT|wx.LEFT|wx.EXPAND, 25)
+
+        self.btn = btn = wx.Button(self, label=btnlbl1)
+        self.Bind(wx.EVT_BUTTON, self.OnToggle, btn)
+        sizer.Add(btn, 0, wx.ALL, 25)
+        
+        
+    def OnToggle(self, evt):
+        self.cp.Collapse(self.cp.IsExpanded())
+        self.OnPaneChanged()
+        
+
+    def OnPaneChanged(self, evt=None):
+        self.log.write('wx.EVT_COLLAPSIBLEPANE_CHANGED')
+        self.Layout()
+        if self.cp.IsExpanded():
+            self.cp.SetLabel(label2)
+            self.btn.SetLabel(btnlbl2)
+        else:
+            self.cp.SetLabel(label1)
+            self.btn.SetLabel(btnlbl1)
+        self.btn.SetInitialSize()
+        
+
+    def MakePaneContent(self, pane):
+        '''Just make a few controls to put on the collapsible pane'''
+        nameLbl = wx.StaticText(pane, -1, "Name:")
+        name = wx.TextCtrl(pane, -1, "");
+
+        addrLbl = wx.StaticText(pane, -1, "Address:")
+        addr1 = wx.TextCtrl(pane, -1, "");
+        addr2 = wx.TextCtrl(pane, -1, "");
+
+        cstLbl = wx.StaticText(pane, -1, "City, State, Zip:")
+        city  = wx.TextCtrl(pane, -1, "", size=(150,-1));
+        state = wx.TextCtrl(pane, -1, "", size=(50,-1));
+        zip   = wx.TextCtrl(pane, -1, "", size=(70,-1));
+        
+        addrSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
+        addrSizer.Add((10,10))
+        addrSizer.Add((10,10))
+        addrSizer.AddGrowableCol(1)
+        addrSizer.Add(nameLbl, 0, 
+                wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
+        addrSizer.Add(name, 0, wx.EXPAND)
+        addrSizer.Add(addrLbl, 0,
+                wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
+        addrSizer.Add(addr1, 0, wx.EXPAND)
+        addrSizer.Add((10,10)) 
+        addrSizer.Add(addr2, 0, wx.EXPAND)
+
+        addrSizer.Add(cstLbl, 0,
+                wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
+
+        cstSizer = wx.BoxSizer(wx.HORIZONTAL)
+        cstSizer.Add(city, 1)
+        cstSizer.Add(state, 0, wx.LEFT|wx.RIGHT, 5)
+        cstSizer.Add(zip)
+        addrSizer.Add(cstSizer, 0, wx.EXPAND)
+
+        pane.SetSizer(addrSizer)
+
+
+
+#----------------------------------------------------------------------
+
+def runTest(frame, nb, log):
+    win = TestPanel(nb, log)
+    return win
+
+#----------------------------------------------------------------------
+
+
+
+overview = """<html><body>
+<h2><center>wx.CollapsiblePane</center></h2>
+
+A collapsable panel is a container with an embedded button-like
+control which can be used by the user to collapse or expand the pane's
+contents.
+
+</body></html>
+"""
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
+
index 2b441e9dfc1bfbfb7ceb2dbc657e50a7e45f5721..784878f3ce00cb01be4eed6c78c6fce3f9e0b490 100644 (file)
@@ -69,6 +69,7 @@ _treeList = [
         'AnimateCtrl',
         'AlphaDrawing',
         'GraphicsContext',
+        'CollapsiblePane',
         ]),
 
     # managed windows == things with a (optional) caption you can close
@@ -177,6 +178,7 @@ _treeList = [
         'Calendar',
         'CalendarCtrl',
         'CheckListCtrlMixin',
+        'CollapsiblePane',
         'ContextHelp',
         'DatePickerCtrl',
         'DynamicSashWindow',
@@ -1255,27 +1257,23 @@ class wxPythonDemo(wx.Frame):
 
         # Create a TreeCtrl
         tID = wx.NewId()
+        leftPanel = wx.Panel(splitter)
+        
+        self.filter = wx.TextCtrl(leftPanel)
+        self.filter.Bind(wx.EVT_TEXT, self.RecreateTree)
+        
         self.treeMap = {}
-        self.tree = wx.TreeCtrl(splitter, tID, style =
+        self.tree = wx.TreeCtrl(leftPanel, tID, style =
                                 wx.TR_DEFAULT_STYLE #| wx.TR_HAS_VARIABLE_ROW_HEIGHT
                                )
 
-        root = self.tree.AddRoot("wxPython Overview")
-        firstChild = None
-        for item in _treeList:
-            child = self.tree.AppendItem(root, item[0])
-            if not firstChild: firstChild = child
-            for childItem in item[1]:
-                theDemo = self.tree.AppendItem(child, childItem)
-                self.treeMap[childItem] = theDemo
-
-        self.tree.Expand(root)
-        self.tree.Expand(firstChild)
+        self.root = self.tree.AddRoot("wxPython Overview")
+        self.RecreateTree()
         self.tree.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded, id=tID)
         self.tree.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed, id=tID)
         self.tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, id=tID)
         self.tree.Bind(wx.EVT_LEFT_DOWN, self.OnTreeLeftDown)
-
+        
         # Set up a wx.html.HtmlWindow on the Overview Notebook page
         # we put it in a panel first because there seems to be a
         # refresh bug of some sort (wxGTK) when it is directly in
@@ -1319,7 +1317,12 @@ class wxPythonDemo(wx.Frame):
 
         # add the windows to the splitter and split it.
         splitter2.SplitHorizontally(self.nb, self.log, -160)
-        splitter.SplitVertically(self.tree, splitter2, 200)
+        leftBox = wx.BoxSizer(wx.VERTICAL)
+        leftBox.Add(self.tree, 1, wx.EXPAND)
+        leftBox.Add(wx.StaticText(leftPanel, label = "Filter Demos:"), 0, wx.TOP|wx.LEFT, 5)
+        leftBox.Add(self.filter, 0, wx.EXPAND|wx.ALL, 5)
+        leftPanel.SetSizer(leftBox)
+        splitter.SplitVertically(leftPanel, splitter2, 220)
 
         splitter.SetMinimumPaneSize(120)
         splitter2.SetMinimumPaneSize(60)
@@ -1335,7 +1338,7 @@ class wxPythonDemo(wx.Frame):
 
         # select initial items
         self.nb.SetSelection(0)
-        self.tree.SelectItem(root)
+        self.tree.SelectItem(self.root)
 
         # Load 'Main' module
         self.LoadDemo(self.overviewText)
@@ -1353,6 +1356,27 @@ class wxPythonDemo(wx.Frame):
 
 
     #---------------------------------------------
+    
+    def RecreateTree(self, evt=None):
+        self.tree.DeleteAllItems()
+        self.root = self.tree.AddRoot("wxPython Overview")
+        firstChild = None
+        filter = self.filter.GetValue()
+        for category, items in _treeList:
+            if filter:
+                items = [item for item in items if filter in item.lower()]
+            if items:
+                child = self.tree.AppendItem(self.root, category)
+                if not firstChild: firstChild = child
+                for childItem in items:
+                    theDemo = self.tree.AppendItem(child, childItem)
+                    self.treeMap[childItem] = theDemo
+
+        self.tree.Expand(self.root)
+        if firstChild:
+            self.tree.Expand(firstChild)
+
+    
     def WriteText(self, text):
         if text[-1:] == '\n':
             text = text[:-1]
index bf9e02ae6a0512bfb785283b3f7ed9cf9fb73da6..b273f6230fbcd733b3392a15220af70e28c2cb22 100644 (file)
@@ -2,6 +2,17 @@ Recent Changes for wxPython
 =====================================================================
 
 
+2.8.0.0
+-------
+*
+
+Lots of fixes and updates to AUI classes.
+
+Added wx.CollapsiblePane.
+
+
+
+
 2.7.2.0
 -------
 * 7-Nov-2006
index f0068aa9ecdf3d11ef2ad8cfb576f0191a2ef9fe..c9dfc483ea5c7d096a9d4ca8f46e6284bb232a77 100755 (executable)
@@ -189,8 +189,7 @@ wxpExtensions.append(ext)
 # Extension for the GDI module
 swig_sources = run_swig(['gdi.i'], 'src', GENDIR, PKGDIR,
                         USE_SWIG, swig_force, swig_args, swig_deps +
-                        ['src/__gdi_rename.i',
-                         'src/_bitmap.i',
+                        ['src/_bitmap.i',
                          'src/_colour.i',
                          'src/_dc.i',
                          'src/_graphics.i',
@@ -233,9 +232,7 @@ wxpExtensions.append(ext)
 # Extension for the windows module
 swig_sources = run_swig(['windows.i'], 'src', GENDIR, PKGDIR,
                         USE_SWIG, swig_force, swig_args, swig_deps +
-                        ['src/__windows_rename.i',
-                         'src/__windows_reverse.txt',
-                         'src/_panel.i',
+                        ['src/_panel.i',
                          'src/_toplvl.i',
                          'src/_statusbar.i',
                          'src/_splitter.i',
@@ -267,9 +264,7 @@ wxpExtensions.append(ext)
 # Extension for the controls module
 swig_sources = run_swig(['controls.i'], 'src', GENDIR, PKGDIR,
                         USE_SWIG, swig_force, swig_args, swig_deps +
-                        [ 'src/__controls_rename.i',
-                          'src/__controls_reverse.txt',
-                          'src/_toolbar.i',
+                        [ 'src/_toolbar.i',
                           'src/_button.i',
                           'src/_checkbox.i',
                           'src/_choice.i',
@@ -293,6 +288,7 @@ swig_sources = run_swig(['controls.i'], 'src', GENDIR, PKGDIR,
                           'src/_datectrl.i',
                           'src/_hyperlink.i',
                           'src/_picker.i',
+                          'src/_collpane.i',
                           ],
                         True)
 ext = Extension('_controls_', swig_sources,
@@ -312,9 +308,7 @@ wxpExtensions.append(ext)
 # Extension for the misc module
 swig_sources = run_swig(['misc.i'], 'src', GENDIR, PKGDIR,
                         USE_SWIG, swig_force, swig_args, swig_deps +
-                        [ 'src/__misc_rename.i',
-                          'src/__misc_reverse.txt',
-                          'src/_settings.i',
+                        [ 'src/_settings.i',
                           'src/_functions.i',
                           'src/_misc.i',
                           'src/_tipdlg.i',
@@ -445,8 +439,7 @@ wxpExtensions.append(ext)
 
 swig_sources = run_swig(['xrc.i'], 'src', GENDIR, PKGDIR,
                         USE_SWIG, swig_force, swig_args, swig_deps +
-                        [ 'src/_xrc_rename.i',
-                          'src/_xrc_ex.py',
+                        [ 'src/_xrc_ex.py',
                           'src/_xmlres.i',
                           'src/_xmlsub.i',
                           'src/_xml.i',
diff --git a/wxPython/src/_collpane.i b/wxPython/src/_collpane.i
new file mode 100644 (file)
index 0000000..58ba3fa
--- /dev/null
@@ -0,0 +1,133 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        _collpane.i
+// Purpose:     SWIG interface for wxCollapsiblePane
+//
+// Author:      Robin Dunn
+//
+// Created:     10-Nov-2006
+// RCS-ID:      $Id$
+// Copyright:   (c) 2006 by Total Control Software
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// Not a %module
+
+
+//---------------------------------------------------------------------------
+%newgroup
+
+%{
+#include <wx/collpane.h>
+%}
+
+MAKE_CONST_WXSTRING(CollapsiblePaneNameStr);
+
+enum {
+     wxCP_DEFAULT_STYLE,
+     wxCP_NO_TLW_RESIZE
+};
+
+
+
+MustHaveApp(wxCollapsiblePane);
+DocStr(wxCollapsiblePane,
+"A collapsable pane is a container with an embedded button-like
+control which can be used by the user to collapse or expand the pane's
+contents.
+
+Once constructed you should use the `GetPane` function to access the
+pane and add your controls inside it (i.e. use the window returned
+from `GetPane` as the parent for the controls which must go in the
+pane, NOT the wx.CollapsiblePane itself!).
+
+Note that because of its nature of control which can dynamically (and
+drastically) change its size at run-time under user-input, when
+putting a wx.CollapsiblePane inside a `wx.Sizer` you should be careful
+to add it with a proportion value of zero; this is because otherwise
+all other windows with non-zero proportion values would automatically
+get resized each time the user expands or collapses the pane window,
+usually resulting a weird, flickering effect.", "");
+
+class wxCollapsiblePane : public wxControl
+{
+public:
+    %pythonAppend wxCollapsiblePane         "self._setOORInfo(self)";
+    %pythonAppend wxCollapsiblePane()       "";
+
+    DocCtorStr(
+        wxCollapsiblePane(wxWindow *parent,
+                          wxWindowID winid = -1,
+                          const wxString& label = wxPyEmptyString,
+                          const wxPoint& pos = wxDefaultPosition,
+                          const wxSize& size = wxDefaultSize,
+                          long style = wxCP_DEFAULT_STYLE,
+                          const wxValidator& val = wxDefaultValidator,
+                          const wxString& name = wxPyCollapsiblePaneNameStr),
+        "Create and show a wx.CollapsiblePane", "");
+    
+    DocCtorStrName(
+        wxCollapsiblePane(),
+        "Precreate a wx.CollapsiblePane for 2-phase creation.", "",
+        PreCollapsiblePane);
+
+
+    DocDeclStr(
+        bool , Create(wxWindow *parent,
+                      wxWindowID winid =-1,
+                      const wxString& label = wxPyEmptyString,
+                      const wxPoint& pos = wxDefaultPosition,
+                      const wxSize& size = wxDefaultSize,
+                      long style = wxCP_DEFAULT_STYLE,
+                      const wxValidator& val = wxDefaultValidator,
+                      const wxString& name = wxPyCollapsiblePaneNameStr),
+        "", "");
+    
+
+
+    
+    DocDeclStr(
+        virtual void , Collapse(bool collapse = true),
+        "Collapses or expands the pane window.", "");
+    
+    DocDeclStr(
+        void , Expand(),
+        "Same as Collapse(False).", "");
+    
+
+    DocDeclStr(
+        virtual bool , IsCollapsed() const,
+        "Returns ``True`` if the pane window is currently hidden.", "");
+    
+    DocDeclStr(
+        bool , IsExpanded() const,
+        "Returns ``True`` if the pane window is currently shown.", "");
+    
+
+    DocDeclStr(
+        virtual wxWindow *, GetPane() const,
+        "Returns a reference to the pane window.  Use the returned `wx.Window`
+as the parent of widgets to make them part of the collapsible area.", "");
+    
+};
+
+
+
+//---------------------------------------------------------------------------
+
+
+%constant wxEventType wxEVT_COMMAND_COLLPANE_CHANGED;
+%pythoncode {
+    EVT_COLLAPSIBLEPANE_CHANGED = wx.PyEventBinder( wxEVT_COMMAND_COLLPANE_CHANGED, 1 )
+}
+
+class wxCollapsiblePaneEvent : public wxCommandEvent
+{
+public:
+    //wxCollapsiblePaneEvent() {}
+    wxCollapsiblePaneEvent(wxObject *generator, int id, bool collapsed);
+
+    bool GetCollapsed() const;
+    void SetCollapsed(bool c);
+};
+
+//---------------------------------------------------------------------------
index f508c2c09a3be95f6636890b3ad4f7d6be14dad5..073ac752c7de58684afab0c26b6e5ae5992531a5 100644 (file)
@@ -61,6 +61,8 @@ MAKE_CONST_WXSTRING_NOSWIG(ControlNameStr);
 %include _datectrl.i
 %include _hyperlink.i
 %include _picker.i
+%include _collpane.i
+
 
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------