1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Minimal wxWidgets sample
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 #pragma implementation "tree.h"
23 // For compilers that support precompilation, includes "wx/wx.h".
24 #include "wx/wxprec.h"
30 // for all others, include the necessary headers (this file is usually all you
31 // need because it includes almost all "standard" wxWidgets headers)
36 #if !defined(__WXMSW__) || wxUSE_XPM_IN_MSW
38 static char * icon1_xpm
[] = {
39 /* width height ncolors chars_per_pixel */
67 static char * icon2_xpm
[] = {
68 /* width height ncolors chars_per_pixel */
93 #include "wx/imaglist.h"
96 // ----------------------------------------------------------------------------
98 // ----------------------------------------------------------------------------
99 // the application icon
100 #if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__)
101 #include "mondrian.xpm"
104 // ----------------------------------------------------------------------------
105 // event tables and other macros for wxWidgets
106 // ----------------------------------------------------------------------------
108 // the event tables connect the wxWidgets events with the functions (event
109 // handlers) which process them. It can be also done at run-time, but for the
110 // simple menu events like this the static method is much simpler.
111 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
112 EVT_MENU(Minimal_Quit
, MyFrame::OnQuit
)
113 EVT_MENU(Minimal_About
, MyFrame::OnAbout
)
116 // Create a new application object: this macro will allow wxWidgets to create
117 // the application object during program execution (it's better than using a
118 // static object for many reasons) and also declares the accessor function
119 // wxGetApp() which will return the reference of the right type (i.e. MyApp and
123 // ============================================================================
125 // ============================================================================
127 // ----------------------------------------------------------------------------
128 // the application class
129 // ----------------------------------------------------------------------------
131 // 'Main program' equivalent: the program execution "starts" here
134 // create the main application window
135 MyFrame
*frame
= new MyFrame(wxT("Tree Testing"),
136 wxPoint(50, 50), wxSize(450, 340));
138 // and show it (the frames, unlike simple controls, are not shown when
139 // created initially)
142 // success: wxApp::OnRun() will be called which will enter the main message
143 // loop and the application will run. If we returned false here, the
144 // application would exit immediately.
148 // ----------------------------------------------------------------------------
150 // ----------------------------------------------------------------------------
153 MyFrame::MyFrame(const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
)
154 : wxFrame((wxFrame
*)NULL
, idMAIN_FRAME
, title
, pos
, size
)
157 m_scrolledWindow
= NULL
;
159 m_valueWindow
= NULL
;
161 // we need this in order to allow the about menu relocation, since ABOUT is
162 // not the default id of the about menu
163 wxApp::s_macAboutMenuItemId
= Minimal_About
;
166 m_scrolledWindow
= new wxSplitterScrolledWindow(this, idSCROLLED_WINDOW
, wxDefaultPosition
,
167 wxSize(300, 400), wxNO_BORDER
| wxCLIP_CHILDREN
| wxVSCROLL
);
168 m_splitter
= new wxThinSplitterWindow(m_scrolledWindow
, idSPLITTER_WINDOW
, wxDefaultPosition
,
169 wxDefaultSize
, wxSP_3DBORDER
| wxCLIP_CHILDREN
/* | wxSP_LIVE_UPDATE */);
170 m_splitter
->SetSashSize(2);
172 /* Note the wxTR_ROW_LINES style: draws horizontal lines between items */
173 m_tree
= new TestTree(m_splitter
, idTREE_CTRL
, wxDefaultPosition
,
174 wxDefaultSize
, wxTR_HAS_BUTTONS
| wxTR_NO_LINES
| wxNO_BORDER
| wxTR_ROW_LINES
);
175 m_valueWindow
= new TestValueWindow(m_splitter
, idVALUE_WINDOW
, wxDefaultPosition
,
176 wxDefaultSize
, wxNO_BORDER
);
177 m_splitter
->SplitVertically(m_tree
, m_valueWindow
);
178 //m_splitter->AdjustScrollbars();
179 m_splitter
->SetSashPosition(200);
180 m_scrolledWindow
->SetTargetWindow(m_tree
);
182 m_scrolledWindow
->EnableScrolling(false, false);
184 // Let the two controls know about each other
185 m_valueWindow
->SetTreeCtrl(m_tree
);
186 m_tree
->SetCompanionWindow(m_valueWindow
);
188 // set the frame icon
189 SetIcon(wxICON(mondrian
));
192 wxMenu
*menuFile
= new wxMenu(wxT(""), wxMENU_TEAROFF
);
194 // the "About" item should be in the help menu
195 wxMenu
*helpMenu
= new wxMenu
;
196 helpMenu
->Append(Minimal_About
, wxT("&About...\tCtrl-A"), wxT("Show about dialog"));
198 menuFile
->Append(Minimal_Quit
, wxT("E&xit\tAlt-X"), wxT("Quit this program"));
200 // now append the freshly created menu to the menu bar...
201 wxMenuBar
*menuBar
= new wxMenuBar();
202 menuBar
->Append(menuFile
, wxT("&File"));
203 menuBar
->Append(helpMenu
, wxT("&Help"));
205 // ... and attach this menu bar to the frame
212 void MyFrame::OnQuit(wxCommandEvent
& WXUNUSED(event
))
214 // true is to force the frame to close
218 void MyFrame::OnAbout(wxCommandEvent
& WXUNUSED(event
))
221 msg
.Printf( wxT("This is the about dialog of splittree sample.\n")
222 wxT("Welcome to %s"), wxVERSION_STRING
);
224 wxMessageBox(msg
, wxT("About Tree Test"), wxOK
| wxICON_INFORMATION
, this);
231 IMPLEMENT_CLASS(TestTree
, wxRemotelyScrolledTreeCtrl
)
233 BEGIN_EVENT_TABLE(TestTree
, wxRemotelyScrolledTreeCtrl
)
236 TestTree::TestTree(wxWindow
* parent
, wxWindowID id
, const wxPoint
& pt
,
237 const wxSize
& sz
, long style
):
238 wxRemotelyScrolledTreeCtrl(parent
, id
, pt
, sz
, style
)
240 m_imageList
= new wxImageList(16, 16, true);
241 #if !defined(__WXMSW__) // || wxUSE_XPM_IN_MSW
242 m_imageList
->Add(wxIcon(icon1_xpm
));
243 m_imageList
->Add(wxIcon(icon2_xpm
));
244 #elif defined(__WXMSW__)
245 m_imageList
->Add(wxIcon(wxT("wxICON_SMALL_CLOSED_FOLDER"), wxBITMAP_TYPE_ICO_RESOURCE
));
246 m_imageList
->Add(wxIcon(wxT("wxICON_SMALL_FILE"), wxBITMAP_TYPE_ICO_RESOURCE
));
248 #error "Sorry, we don't have icons available for this platforms."
250 SetImageList(m_imageList
);
253 // Add some dummy items
254 wxTreeItemId rootId
= AddRoot(_("Root"), -1, -1);
256 for (i
= 1; i
<= 20; i
++)
259 label
.Printf(wxT("Item %d"), i
);
260 wxTreeItemId id
= AppendItem(rootId
, label
, 0);
261 //SetItemImage( id, 1, wxTreeItemIcon_Expanded );
264 for (j
= 0; j
< 10; j
++)
265 AppendItem(id
, _("Child"), 1);
270 TestTree::~TestTree()
280 //IMPLEMENT_CLASS(TestValueWindow, wxWindow)
282 BEGIN_EVENT_TABLE(TestValueWindow
, wxTreeCompanionWindow
)
285 TestValueWindow::TestValueWindow(wxWindow
* parent
, wxWindowID id
,
289 wxTreeCompanionWindow(parent
, id
, pos
, sz
, style
)
291 SetBackgroundColour(* wxWHITE
);