home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2233.zip / wxOS2-2_3_3.zip / wxWindows-2.3.3 / contrib / samples / gizmos / splittree / tree.cpp < prev    next >
C/C++ Source or Header  |  2002-03-21  |  9KB  |  294 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        tree.cpp
  3. // Purpose:     Minimal wxWindows sample
  4. // Author:      Julian Smart
  5. // Modified by:
  6. // Created:     04/01/98
  7. // RCS-ID:      $Id: tree.cpp,v 1.8 2002/03/21 10:32:02 JS Exp $
  8. // Copyright:   (c) Julian Smart
  9. // Licence:     wxWindows licence
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. // ============================================================================
  13. // declarations
  14. // ============================================================================
  15.  
  16. // ----------------------------------------------------------------------------
  17. // headers
  18. // ----------------------------------------------------------------------------
  19. #ifdef __GNUG__
  20.     #pragma implementation "tree.cpp"
  21.     #pragma interface "tree.cpp"
  22. #endif
  23.  
  24. // For compilers that support precompilation, includes "wx/wx.h".
  25. #include "wx/wxprec.h"
  26.  
  27. #ifdef __BORLANDC__
  28.     #pragma hdrstop
  29. #endif
  30.  
  31. // for all others, include the necessary headers (this file is usually all you
  32. // need because it includes almost all "standard" wxWindows headers)
  33. #ifndef WX_PRECOMP
  34.     #include "wx/wx.h"
  35. #endif
  36.  
  37. #if !defined(__WXMSW__) || wxUSE_XPM_IN_MSW
  38. /* Closed folder */
  39. static char * icon1_xpm[] = {
  40. /* width height ncolors chars_per_pixel */
  41. "16 16 6 1",
  42. /* colors */
  43. "   s None  c None",
  44. ".  c #000000",
  45. "+  c #c0c0c0",
  46. "@  c #808080",
  47. "#  c #ffff00",
  48. "$  c #ffffff",
  49. /* pixels */
  50. "                ",
  51. "   @@@@@        ",
  52. "  @#+#+#@       ",
  53. " @#+#+#+#@@@@@@ ",
  54. " @$$$$$$$$$$$$@.",
  55. " @$#+#+#+#+#+#@.",
  56. " @$+#+#+#+#+#+@.",
  57. " @$#+#+#+#+#+#@.",
  58. " @$+#+#+#+#+#+@.",
  59. " @$#+#+#+#+#+#@.",
  60. " @$+#+#+#+#+#+@.",
  61. " @$#+#+#+#+#+#@.",
  62. " @@@@@@@@@@@@@@.",
  63. "  ..............",
  64. "                ",
  65. "                "};
  66.  
  67. /* File */
  68. static char * icon2_xpm[] = {
  69. /* width height ncolors chars_per_pixel */
  70. "16 16 3 1",
  71. /* colors */
  72. "     s None    c None",
  73. ".    c #000000",
  74. "+    c #ffffff",
  75. /* pixels */
  76. "                ",
  77. "  ........      ",
  78. "  .++++++..     ",
  79. "  .+.+.++.+.    ",
  80. "  .++++++....   ",
  81. "  .+.+.+++++.   ",
  82. "  .+++++++++.   ",
  83. "  .+.+.+.+.+.   ",
  84. "  .+++++++++.   ",
  85. "  .+.+.+.+.+.   ",
  86. "  .+++++++++.   ",
  87. "  .+.+.+.+.+.   ",
  88. "  .+++++++++.   ",
  89. "  ...........   ",
  90. "                ",
  91. "                "};
  92. #endif
  93.  
  94. #include "wx/imaglist.h"
  95. #include "tree.h"
  96.  
  97. // ----------------------------------------------------------------------------
  98. // resources
  99. // ----------------------------------------------------------------------------
  100. // the application icon
  101. #if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__)
  102.     #include "mondrian.xpm"
  103. #endif
  104.  
  105. // ----------------------------------------------------------------------------
  106. // event tables and other macros for wxWindows
  107. // ----------------------------------------------------------------------------
  108.  
  109. // the event tables connect the wxWindows events with the functions (event
  110. // handlers) which process them. It can be also done at run-time, but for the
  111. // simple menu events like this the static method is much simpler.
  112. BEGIN_EVENT_TABLE(MyFrame, wxFrame)
  113.     EVT_MENU(Minimal_Quit,  MyFrame::OnQuit)
  114.     EVT_MENU(Minimal_About, MyFrame::OnAbout)
  115. END_EVENT_TABLE()
  116.  
  117. // Create a new application object: this macro will allow wxWindows to create
  118. // the application object during program execution (it's better than using a
  119. // static object for many reasons) and also declares the accessor function
  120. // wxGetApp() which will return the reference of the right type (i.e. MyApp and
  121. // not wxApp)
  122. IMPLEMENT_APP(MyApp)
  123.  
  124. // ============================================================================
  125. // implementation
  126. // ============================================================================
  127.  
  128. // ----------------------------------------------------------------------------
  129. // the application class
  130. // ----------------------------------------------------------------------------
  131.  
  132. // 'Main program' equivalent: the program execution "starts" here
  133. bool MyApp::OnInit()
  134. {
  135.     // create the main application window
  136.     MyFrame *frame = new MyFrame("Tree Testing",
  137.                                  wxPoint(50, 50), wxSize(450, 340));
  138.  
  139.     // and show it (the frames, unlike simple controls, are not shown when
  140.     // created initially)
  141.     frame->Show(TRUE);
  142.  
  143.     // success: wxApp::OnRun() will be called which will enter the main message
  144.     // loop and the application will run. If we returned FALSE here, the
  145.     // application would exit immediately.
  146.     return TRUE;
  147. }
  148.  
  149. // ----------------------------------------------------------------------------
  150. // main frame
  151. // ----------------------------------------------------------------------------
  152.  
  153. // frame constructor
  154. MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
  155.        : wxFrame((wxFrame *)NULL, idMAIN_FRAME, title, pos, size)
  156. {
  157.     m_splitter = NULL;
  158.     m_scrolledWindow = NULL;
  159.     m_tree = NULL;
  160.     m_valueWindow = NULL;
  161. #ifdef __WXMAC__
  162.     // we need this in order to allow the about menu relocation, since ABOUT is
  163.     // not the default id of the about menu
  164.     wxApp::s_macAboutMenuItemId = Minimal_About;
  165. #endif
  166.  
  167.     m_scrolledWindow = new wxSplitterScrolledWindow(this, idSCROLLED_WINDOW, wxDefaultPosition,
  168.         wxDefaultSize, wxNO_BORDER | wxCLIP_CHILDREN | wxVSCROLL);
  169.     m_splitter = new wxThinSplitterWindow(m_scrolledWindow, idSPLITTER_WINDOW, wxDefaultPosition,
  170.         wxDefaultSize, wxSP_3DBORDER | wxCLIP_CHILDREN /* | wxSP_LIVE_UPDATE */);
  171.     m_splitter->SetSashSize(2);
  172.  
  173.     /* Note the wxTR_ROW_LINES style: draws horizontal lines between items */
  174.     m_tree = new TestTree(m_splitter , idTREE_CTRL, wxDefaultPosition,
  175.         wxDefaultSize, wxTR_HAS_BUTTONS | wxTR_NO_LINES | wxNO_BORDER | wxTR_ROW_LINES );
  176.     m_valueWindow = new TestValueWindow(m_splitter, idVALUE_WINDOW, wxDefaultPosition,
  177.         wxDefaultSize, wxNO_BORDER);
  178.     m_splitter->SplitVertically(m_tree, m_valueWindow);
  179.     //m_splitter->AdjustScrollbars();
  180.     m_splitter->SetSashPosition(200);
  181.     m_scrolledWindow->SetTargetWindow(m_tree);
  182.  
  183.     m_scrolledWindow->EnableScrolling(FALSE, FALSE);
  184.  
  185.     // Let the two controls know about each other
  186.     m_valueWindow->SetTreeCtrl(m_tree);
  187.     m_tree->SetCompanionWindow(m_valueWindow);
  188.  
  189.     // set the frame icon
  190.     SetIcon(wxICON(mondrian));
  191.  
  192.     // create a menu bar
  193.     wxMenu *menuFile = new wxMenu("", wxMENU_TEAROFF);
  194.  
  195.     // the "About" item should be in the help menu
  196.     wxMenu *helpMenu = new wxMenu;
  197.     helpMenu->Append(Minimal_About, "&About...\tCtrl-A", "Show about dialog");
  198.  
  199.     menuFile->Append(Minimal_Quit, "E&xit\tAlt-X", "Quit this program");
  200.  
  201.     // now append the freshly created menu to the menu bar...
  202.     wxMenuBar *menuBar = new wxMenuBar();
  203.     menuBar->Append(menuFile, "&File");
  204.     menuBar->Append(helpMenu, "&Help");
  205.  
  206.     // ... and attach this menu bar to the frame
  207.     SetMenuBar(menuBar);
  208. }
  209.  
  210.  
  211. // event handlers
  212.  
  213. void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
  214. {
  215.     // TRUE is to force the frame to close
  216.     Close(TRUE);
  217. }
  218.  
  219. void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
  220. {
  221.     wxString msg;
  222.     msg.Printf( _T("This is the about dialog of splittree sample.\n")
  223.                 _T("Welcome to %s"), wxVERSION_STRING);
  224.  
  225.     wxMessageBox(msg, "About Tree Test", wxOK | wxICON_INFORMATION, this);
  226. }
  227.  
  228. /*
  229.  * TesTree
  230.  */
  231.  
  232. IMPLEMENT_CLASS(TestTree, wxRemotelyScrolledTreeCtrl)
  233.  
  234. BEGIN_EVENT_TABLE(TestTree, wxRemotelyScrolledTreeCtrl)
  235. END_EVENT_TABLE()
  236.  
  237. TestTree::TestTree(wxWindow* parent, wxWindowID id, const wxPoint& pt,
  238.         const wxSize& sz, long style):
  239.         wxRemotelyScrolledTreeCtrl(parent, id, pt, sz, style)
  240. {
  241.     m_imageList = new wxImageList(16, 16, TRUE);
  242. #if !defined(__WXMSW__) // || wxUSE_XPM_IN_MSW
  243.     m_imageList->Add(wxIcon(icon1_xpm));
  244.     m_imageList->Add(wxIcon(icon2_xpm));
  245. #elif defined(__WXMSW__)
  246.     m_imageList->Add(wxIcon(wxT("wxICON_SMALL_CLOSED_FOLDER"), wxBITMAP_TYPE_ICO_RESOURCE));
  247.     m_imageList->Add(wxIcon(wxT("wxICON_SMALL_FILE"), wxBITMAP_TYPE_ICO_RESOURCE));
  248. #else
  249. #error "Sorry, we don't have icons available for this platforms."
  250. #endif
  251.     SetImageList(m_imageList);
  252.  
  253.         
  254.     // Add some dummy items
  255.     wxTreeItemId rootId = AddRoot(_("Root"), -1, -1);
  256.     int i;
  257.     for (i = 1; i <= 20; i++)
  258.     {
  259.         wxString label;
  260.         label.Printf(wxT("Item %d"), i);
  261.         wxTreeItemId id = AppendItem(rootId, label, 0);
  262.         //SetItemImage( id, 1, wxTreeItemIcon_Expanded );
  263.  
  264.         int j;
  265.         for (j = 0; j < 10; j++)
  266.             AppendItem(id, _("Child"), 1);
  267.     }
  268.     Expand(rootId);
  269. }
  270.  
  271. TestTree::~TestTree()
  272. {
  273.     SetImageList(NULL);
  274.     delete m_imageList;
  275. }
  276.  
  277. /*
  278.  * TestValueWindow
  279.  */
  280.  
  281. //IMPLEMENT_CLASS(TestValueWindow, wxWindow)
  282.  
  283. BEGIN_EVENT_TABLE(TestValueWindow, wxTreeCompanionWindow)
  284. END_EVENT_TABLE()
  285.  
  286. TestValueWindow::TestValueWindow(wxWindow* parent, wxWindowID id,
  287.       const wxPoint& pos,
  288.       const wxSize& sz,
  289.       long style):
  290.       wxTreeCompanionWindow(parent, id, pos, sz, style)
  291. {
  292.     SetBackgroundColour(* wxWHITE);
  293. }
  294.