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.cpp"
21 #pragma interface "tree.cpp"
24 // For compilers that support precompilation, includes "wx/wx.h".
25 #include "wx/wxprec.h"
31 // for all others, include the necessary headers (this file is usually all you
32 // need because it includes almost all "standard" wxWidgets headers)
37 #if !defined(__WXMSW__) || wxUSE_XPM_IN_MSW
39 static char * icon1_xpm
[] = {
40 /* width height ncolors chars_per_pixel */
68 static char * icon2_xpm
[] = {
69 /* width height ncolors chars_per_pixel */
94 #include "wx/imaglist.h"
97 // ----------------------------------------------------------------------------
99 // ----------------------------------------------------------------------------
100 // the application icon
101 #if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__)
102 #include "mondrian.xpm"
105 // ----------------------------------------------------------------------------
106 // event tables and other macros for wxWidgets
107 // ----------------------------------------------------------------------------
109 // the event tables connect the wxWidgets 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
)
117 // Create a new application object: this macro will allow wxWidgets 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
124 // ============================================================================
126 // ============================================================================
128 // ----------------------------------------------------------------------------
129 // the application class
130 // ----------------------------------------------------------------------------
132 // 'Main program' equivalent: the program execution "starts" here
135 // create the main application window
136 MyFrame
*frame
= new MyFrame(wxT("Tree Testing"),
137 wxPoint(50, 50), wxSize(450, 340));
139 // and show it (the frames, unlike simple controls, are not shown when
140 // created initially)
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.
149 // ----------------------------------------------------------------------------
151 // ----------------------------------------------------------------------------
154 MyFrame::MyFrame(const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
)
155 : wxFrame((wxFrame
*)NULL
, idMAIN_FRAME
, title
, pos
, size
)
158 m_scrolledWindow
= NULL
;
160 m_valueWindow
= NULL
;
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
;
167 m_scrolledWindow
= new wxSplitterScrolledWindow(this, idSCROLLED_WINDOW
, wxDefaultPosition
,
168 wxSize(300, 400), 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);
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
);
183 m_scrolledWindow
->EnableScrolling(false, false);
185 // Let the two controls know about each other
186 m_valueWindow
->SetTreeCtrl(m_tree
);
187 m_tree
->SetCompanionWindow(m_valueWindow
);
189 // set the frame icon
190 SetIcon(wxICON(mondrian
));
193 wxMenu
*menuFile
= new wxMenu(wxT(""), wxMENU_TEAROFF
);
195 // the "About" item should be in the help menu
196 wxMenu
*helpMenu
= new wxMenu
;
197 helpMenu
->Append(Minimal_About
, wxT("&About...\tCtrl-A"), wxT("Show about dialog"));
199 menuFile
->Append(Minimal_Quit
, wxT("E&xit\tAlt-X"), wxT("Quit this program"));
201 // now append the freshly created menu to the menu bar...
202 wxMenuBar
*menuBar
= new wxMenuBar();
203 menuBar
->Append(menuFile
, wxT("&File"));
204 menuBar
->Append(helpMenu
, wxT("&Help"));
206 // ... and attach this menu bar to the frame
213 void MyFrame::OnQuit(wxCommandEvent
& WXUNUSED(event
))
215 // true is to force the frame to close
219 void MyFrame::OnAbout(wxCommandEvent
& WXUNUSED(event
))
222 msg
.Printf( wxT("This is the about dialog of splittree sample.\n")
223 wxT("Welcome to %s"), wxVERSION_STRING
);
225 wxMessageBox(msg
, wxT("About Tree Test"), wxOK
| wxICON_INFORMATION
, this);
232 IMPLEMENT_CLASS(TestTree
, wxRemotelyScrolledTreeCtrl
)
234 BEGIN_EVENT_TABLE(TestTree
, wxRemotelyScrolledTreeCtrl
)
237 TestTree::TestTree(wxWindow
* parent
, wxWindowID id
, const wxPoint
& pt
,
238 const wxSize
& sz
, long style
):
239 wxRemotelyScrolledTreeCtrl(parent
, id
, pt
, sz
, style
)
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
));
249 #error "Sorry, we don't have icons available for this platforms."
251 SetImageList(m_imageList
);
254 // Add some dummy items
255 wxTreeItemId rootId
= AddRoot(_("Root"), -1, -1);
257 for (i
= 1; i
<= 20; i
++)
260 label
.Printf(wxT("Item %d"), i
);
261 wxTreeItemId id
= AppendItem(rootId
, label
, 0);
262 //SetItemImage( id, 1, wxTreeItemIcon_Expanded );
265 for (j
= 0; j
< 10; j
++)
266 AppendItem(id
, _("Child"), 1);
271 TestTree::~TestTree()
281 //IMPLEMENT_CLASS(TestValueWindow, wxWindow)
283 BEGIN_EVENT_TABLE(TestValueWindow
, wxTreeCompanionWindow
)
286 TestValueWindow::TestValueWindow(wxWindow
* parent
, wxWindowID id
,
290 wxTreeCompanionWindow(parent
, id
, pos
, sz
, style
)
292 SetBackgroundColour(* wxWHITE
);