]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/samples/gizmos/splittree/tree.cpp
Patch from Joe "shmengie" Brown joebrown@podiatryfl.com
[wxWidgets.git] / contrib / samples / gizmos / splittree / tree.cpp
index 14687eedf8ab98b58ff24ea513afc0249b63627d..e3cc5486f6aa031bf850ebe6709ece9ca9bdb7d2 100644 (file)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        tree.cpp
 /////////////////////////////////////////////////////////////////////////////
 // Name:        tree.cpp
-// Purpose:     Minimal wxWindows sample
+// Purpose:     Minimal wxWidgets sample
 // Author:      Julian Smart
 // Modified by:
 // Created:     04/01/98
 // Author:      Julian Smart
 // Modified by:
 // Created:     04/01/98
@@ -17,8 +17,7 @@
 // headers
 // ----------------------------------------------------------------------------
 #ifdef __GNUG__
 // headers
 // ----------------------------------------------------------------------------
 #ifdef __GNUG__
-    #pragma implementation "tree.cpp"
-    #pragma interface "tree.cpp"
+    #pragma implementation "tree.h"
 #endif
 
 // For compilers that support precompilation, includes "wx/wx.h".
 #endif
 
 // For compilers that support precompilation, includes "wx/wx.h".
 #endif
 
 // for all others, include the necessary headers (this file is usually all you
 #endif
 
 // for all others, include the necessary headers (this file is usually all you
-// need because it includes almost all "standard" wxWindows headers)
+// need because it includes almost all "standard" wxWidgets headers)
 #ifndef WX_PRECOMP
     #include "wx/wx.h"
 #endif
 
 #ifndef WX_PRECOMP
     #include "wx/wx.h"
 #endif
 
+#if !defined(__WXMSW__) || wxUSE_XPM_IN_MSW
+/* Closed folder */
+static char * icon1_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 16 6 1",
+/* colors */
+"   s None  c None",
+".  c #000000",
+"+  c #c0c0c0",
+"@  c #808080",
+"#  c #ffff00",
+"$  c #ffffff",
+/* pixels */
+"                ",
+"   @@@@@        ",
+"  @#+#+#@       ",
+" @#+#+#+#@@@@@@ ",
+" @$$$$$$$$$$$$@.",
+" @$#+#+#+#+#+#@.",
+" @$+#+#+#+#+#+@.",
+" @$#+#+#+#+#+#@.",
+" @$+#+#+#+#+#+@.",
+" @$#+#+#+#+#+#@.",
+" @$+#+#+#+#+#+@.",
+" @$#+#+#+#+#+#@.",
+" @@@@@@@@@@@@@@.",
+"  ..............",
+"                ",
+"                "};
+
+/* File */
+static char * icon2_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 16 3 1",
+/* colors */
+"     s None    c None",
+".    c #000000",
+"+    c #ffffff",
+/* pixels */
+"                ",
+"  ........      ",
+"  .++++++..     ",
+"  .+.+.++.+.    ",
+"  .++++++....   ",
+"  .+.+.+++++.   ",
+"  .+++++++++.   ",
+"  .+.+.+.+.+.   ",
+"  .+++++++++.   ",
+"  .+.+.+.+.+.   ",
+"  .+++++++++.   ",
+"  .+.+.+.+.+.   ",
+"  .+++++++++.   ",
+"  ...........   ",
+"                ",
+"                "};
+#endif
+
 #include "wx/imaglist.h"
 #include "tree.h"
 
 #include "wx/imaglist.h"
 #include "tree.h"
 
 // resources
 // ----------------------------------------------------------------------------
 // the application icon
 // resources
 // ----------------------------------------------------------------------------
 // the application icon
-#if defined(__WXGTK__) || defined(__WXMOTIF__)
+#if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__)
     #include "mondrian.xpm"
 #endif
 
 // ----------------------------------------------------------------------------
     #include "mondrian.xpm"
 #endif
 
 // ----------------------------------------------------------------------------
-// event tables and other macros for wxWindows
+// event tables and other macros for wxWidgets
 // ----------------------------------------------------------------------------
 
 // ----------------------------------------------------------------------------
 
-// the event tables connect the wxWindows events with the functions (event
+// the event tables connect the wxWidgets events with the functions (event
 // handlers) which process them. It can be also done at run-time, but for the
 // simple menu events like this the static method is much simpler.
 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
 // handlers) which process them. It can be also done at run-time, but for the
 // simple menu events like this the static method is much simpler.
 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
@@ -57,7 +113,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU(Minimal_About, MyFrame::OnAbout)
 END_EVENT_TABLE()
 
     EVT_MENU(Minimal_About, MyFrame::OnAbout)
 END_EVENT_TABLE()
 
-// Create a new application object: this macro will allow wxWindows to create
+// Create a new application object: this macro will allow wxWidgets to create
 // the application object during program execution (it's better than using a
 // static object for many reasons) and also declares the accessor function
 // wxGetApp() which will return the reference of the right type (i.e. MyApp and
 // the application object during program execution (it's better than using a
 // static object for many reasons) and also declares the accessor function
 // wxGetApp() which will return the reference of the right type (i.e. MyApp and
@@ -76,17 +132,17 @@ IMPLEMENT_APP(MyApp)
 bool MyApp::OnInit()
 {
     // create the main application window
 bool MyApp::OnInit()
 {
     // create the main application window
-    MyFrame *frame = new MyFrame("Tree Testing",
+    MyFrame *frame = new MyFrame(wxT("Tree Testing"),
                                  wxPoint(50, 50), wxSize(450, 340));
 
     // and show it (the frames, unlike simple controls, are not shown when
     // created initially)
                                  wxPoint(50, 50), wxSize(450, 340));
 
     // and show it (the frames, unlike simple controls, are not shown when
     // created initially)
-    frame->Show(TRUE);
+    frame->Show(true);
 
     // success: wxApp::OnRun() will be called which will enter the main message
 
     // success: wxApp::OnRun() will be called which will enter the main message
-    // loop and the application will run. If we returned FALSE here, the
+    // loop and the application will run. If we returned false here, the
     // application would exit immediately.
     // application would exit immediately.
-    return TRUE;
+    return true;
 }
 
 // ----------------------------------------------------------------------------
 }
 
 // ----------------------------------------------------------------------------
@@ -98,7 +154,7 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
        : wxFrame((wxFrame *)NULL, idMAIN_FRAME, title, pos, size)
 {
     m_splitter = NULL;
        : wxFrame((wxFrame *)NULL, idMAIN_FRAME, title, pos, size)
 {
     m_splitter = NULL;
-       m_scrolledWindow = NULL;
+    m_scrolledWindow = NULL;
     m_tree = NULL;
     m_valueWindow = NULL;
 #ifdef __WXMAC__
     m_tree = NULL;
     m_valueWindow = NULL;
 #ifdef __WXMAC__
@@ -108,37 +164,43 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
 #endif
 
     m_scrolledWindow = new wxSplitterScrolledWindow(this, idSCROLLED_WINDOW, wxDefaultPosition,
 #endif
 
     m_scrolledWindow = new wxSplitterScrolledWindow(this, idSCROLLED_WINDOW, wxDefaultPosition,
-               wxDefaultSize, wxNO_BORDER | wxCLIP_CHILDREN | wxVSCROLL);
+        wxSize(300, 400), wxNO_BORDER | wxCLIP_CHILDREN | wxVSCROLL);
     m_splitter = new wxThinSplitterWindow(m_scrolledWindow, idSPLITTER_WINDOW, wxDefaultPosition,
     m_splitter = new wxThinSplitterWindow(m_scrolledWindow, idSPLITTER_WINDOW, wxDefaultPosition,
-               wxDefaultSize, wxSP_3DBORDER | wxCLIP_CHILDREN /* | wxSP_LIVE_UPDATE */);
-       m_splitter->SetSashSize(2);
-    m_tree = new TestTree(m_splitter, idTREE_CTRL, wxDefaultPosition,
-               wxDefaultSize, wxTR_HAS_BUTTONS | wxTR_NO_LINES | wxNO_BORDER );
+        wxDefaultSize, wxSP_3DBORDER | wxCLIP_CHILDREN /* | wxSP_LIVE_UPDATE */);
+    m_splitter->SetSashSize(2);
+
+    /* Note the wxTR_ROW_LINES style: draws horizontal lines between items */
+    m_tree = new TestTree(m_splitter , idTREE_CTRL, wxDefaultPosition,
+        wxDefaultSize, wxTR_HAS_BUTTONS | wxTR_NO_LINES | wxNO_BORDER | wxTR_ROW_LINES );
     m_valueWindow = new TestValueWindow(m_splitter, idVALUE_WINDOW, wxDefaultPosition,
     m_valueWindow = new TestValueWindow(m_splitter, idVALUE_WINDOW, wxDefaultPosition,
-               wxDefaultSize, wxNO_BORDER);
+        wxDefaultSize, wxNO_BORDER);
     m_splitter->SplitVertically(m_tree, m_valueWindow);
     m_splitter->SplitVertically(m_tree, m_valueWindow);
-       //m_splitter->AdjustScrollbars();
-       m_splitter->SetSashPosition(200);
-       m_scrolledWindow->SetTargetWindow(m_tree);
+    //m_splitter->AdjustScrollbars();
+    m_splitter->SetSashPosition(200);
+    m_scrolledWindow->SetTargetWindow(m_tree);
+
+    m_scrolledWindow->EnableScrolling(false, false);
 
 
-       m_scrolledWindow->EnableScrolling(FALSE, FALSE);
+    // Let the two controls know about each other
+    m_valueWindow->SetTreeCtrl(m_tree);
+    m_tree->SetCompanionWindow(m_valueWindow);
 
     // set the frame icon
     SetIcon(wxICON(mondrian));
 
     // create a menu bar
 
     // set the frame icon
     SetIcon(wxICON(mondrian));
 
     // create a menu bar
-    wxMenu *menuFile = new wxMenu("", wxMENU_TEAROFF);
+    wxMenu *menuFile = new wxMenu(wxT(""), wxMENU_TEAROFF);
 
     // the "About" item should be in the help menu
     wxMenu *helpMenu = new wxMenu;
 
     // the "About" item should be in the help menu
     wxMenu *helpMenu = new wxMenu;
-    helpMenu->Append(Minimal_About, "&About...\tCtrl-A", "Show about dialog");
+    helpMenu->Append(Minimal_About, wxT("&About...\tCtrl-A"), wxT("Show about dialog"));
 
 
-    menuFile->Append(Minimal_Quit, "E&xit\tAlt-X", "Quit this program");
+    menuFile->Append(Minimal_Quit, wxT("E&xit\tAlt-X"), wxT("Quit this program"));
 
     // now append the freshly created menu to the menu bar...
     wxMenuBar *menuBar = new wxMenuBar();
 
     // now append the freshly created menu to the menu bar...
     wxMenuBar *menuBar = new wxMenuBar();
-    menuBar->Append(menuFile, "&File");
-    menuBar->Append(helpMenu, "&Help");
+    menuBar->Append(menuFile, wxT("&File"));
+    menuBar->Append(helpMenu, wxT("&Help"));
 
     // ... and attach this menu bar to the frame
     SetMenuBar(menuBar);
 
     // ... and attach this menu bar to the frame
     SetMenuBar(menuBar);
@@ -149,17 +211,17 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
 
 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
 {
 
 void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
 {
-    // TRUE is to force the frame to close
-    Close(TRUE);
+    // true is to force the frame to close
+    Close(true);
 }
 
 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
 {
     wxString msg;
 }
 
 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
 {
     wxString msg;
-    msg.Printf( _T("This is the about dialog of tree sample.\n")
-                _T("Welcome to %s"), wxVERSION_STRING);
+    msg.Printf( wxT("This is the about dialog of splittree sample.\n")
+                wxT("Welcome to %s"), wxVERSION_STRING);
 
 
-    wxMessageBox(msg, "About Tree Test", wxOK | wxICON_INFORMATION, this);
+    wxMessageBox(msg, wxT("About Tree Test"), wxOK | wxICON_INFORMATION, this);
 }
 
 /*
 }
 
 /*
@@ -175,52 +237,40 @@ TestTree::TestTree(wxWindow* parent, wxWindowID id, const wxPoint& pt,
         const wxSize& sz, long style):
         wxRemotelyScrolledTreeCtrl(parent, id, pt, sz, style)
 {
         const wxSize& sz, long style):
         wxRemotelyScrolledTreeCtrl(parent, id, pt, sz, style)
 {
-    m_imageList = new wxImageList(16, 16, TRUE);
+    m_imageList = new wxImageList(16, 16, true);
 #if !defined(__WXMSW__) // || wxUSE_XPM_IN_MSW
     m_imageList->Add(wxIcon(icon1_xpm));
     m_imageList->Add(wxIcon(icon2_xpm));
 #if !defined(__WXMSW__) // || wxUSE_XPM_IN_MSW
     m_imageList->Add(wxIcon(icon1_xpm));
     m_imageList->Add(wxIcon(icon2_xpm));
-    m_imageList->Add(wxIcon(icon3_xpm));
-    m_imageList->Add(wxIcon(icon4_xpm));
-    m_imageList->Add(wxIcon(icon5_xpm));
-    m_imageList->Add(wxIcon(icon6_xpm));
-    m_imageList->Add(wxIcon(icon7_xpm));
-    m_imageList->Add(wxIcon(icon8_xpm));
 #elif defined(__WXMSW__)
     m_imageList->Add(wxIcon(wxT("wxICON_SMALL_CLOSED_FOLDER"), wxBITMAP_TYPE_ICO_RESOURCE));
 #elif defined(__WXMSW__)
     m_imageList->Add(wxIcon(wxT("wxICON_SMALL_CLOSED_FOLDER"), wxBITMAP_TYPE_ICO_RESOURCE));
-    m_imageList->Add(wxIcon(wxT("wxICON_SMALL_OPEN_FOLDER"), wxBITMAP_TYPE_ICO_RESOURCE));
     m_imageList->Add(wxIcon(wxT("wxICON_SMALL_FILE"), wxBITMAP_TYPE_ICO_RESOURCE));
     m_imageList->Add(wxIcon(wxT("wxICON_SMALL_FILE"), wxBITMAP_TYPE_ICO_RESOURCE));
-    m_imageList->Add(wxIcon(wxT("wxICON_SMALL_COMPUTER"), wxBITMAP_TYPE_ICO_RESOURCE));
-    m_imageList->Add(wxIcon(wxT("wxICON_SMALL_DRIVE"), wxBITMAP_TYPE_ICO_RESOURCE));
-    m_imageList->Add(wxIcon(wxT("wxICON_SMALL_CDROM"), wxBITMAP_TYPE_ICO_RESOURCE));
-    m_imageList->Add(wxIcon(wxT("wxICON_SMALL_FLOPPY"), wxBITMAP_TYPE_ICO_RESOURCE));
-    m_imageList->Add(wxIcon(wxT("wxICON_SMALL_REMOVEABLE"), wxBITMAP_TYPE_ICO_RESOURCE));
 #else
 #error "Sorry, we don't have icons available for this platforms."
 #endif
     SetImageList(m_imageList);
 
 #else
 #error "Sorry, we don't have icons available for this platforms."
 #endif
     SetImageList(m_imageList);
 
-               
-       // Add some dummy items
-       wxTreeItemId rootId = AddRoot(_("Root"), 3, -1);
-       int i;
-       for (i = 1; i <= 20; i++)
-       {
-               wxString label;
-               label.Printf(wxT("Item %d"), i);
-               wxTreeItemId id = AppendItem(rootId, label, 0);
-               SetItemImage( id, 1, wxTreeItemIcon_Expanded );
-
-               int j;
-               for (j = 0; j < 10; j++)
-                       AppendItem(id, _("Child"), 2);
-       }
-       Expand(rootId);
+
+    // Add some dummy items
+    wxTreeItemId rootId = AddRoot(_("Root"), -1, -1);
+    int i;
+    for (i = 1; i <= 20; i++)
+    {
+        wxString label;
+        label.Printf(wxT("Item %d"), i);
+        wxTreeItemId id = AppendItem(rootId, label, 0);
+        //SetItemImage( id, 1, wxTreeItemIcon_Expanded );
+
+        int j;
+        for (j = 0; j < 10; j++)
+            AppendItem(id, _("Child"), 1);
+    }
+    Expand(rootId);
 }
 
 TestTree::~TestTree()
 {
 }
 
 TestTree::~TestTree()
 {
-       SetImageList(NULL);
-       delete m_imageList;
+    SetImageList(NULL);
+    delete m_imageList;
 }
 
 /*
 }
 
 /*
@@ -229,19 +279,14 @@ TestTree::~TestTree()
 
 //IMPLEMENT_CLASS(TestValueWindow, wxWindow)
 
 
 //IMPLEMENT_CLASS(TestValueWindow, wxWindow)
 
-BEGIN_EVENT_TABLE(TestValueWindow, wxWindow)
-       EVT_SIZE(TestValueWindow::OnSize)
+BEGIN_EVENT_TABLE(TestValueWindow, wxTreeCompanionWindow)
 END_EVENT_TABLE()
 
 TestValueWindow::TestValueWindow(wxWindow* parent, wxWindowID id,
       const wxPoint& pos,
       const wxSize& sz,
       long style):
 END_EVENT_TABLE()
 
 TestValueWindow::TestValueWindow(wxWindow* parent, wxWindowID id,
       const wxPoint& pos,
       const wxSize& sz,
       long style):
-      wxWindow(parent, id, pos, sz, style)
-{
-       SetBackgroundColour(* wxWHITE);
-}
-
-void TestValueWindow::OnSize(wxSizeEvent& event)
+      wxTreeCompanionWindow(parent, id, pos, sz, style)
 {
 {
+    SetBackgroundColour(* wxWHITE);
 }
 }