1///////////////////////////////////////////////////////////////////////////// 2// Name: src/mac/classic/treectrl.cpp 3// Purpose: wxTreeCtrl. See also Robert's generic wxTreeCtrl. 4// Author: Stefan Csomor 5// Modified by: 6// Created: 1998-01-01 7// RCS-ID: $Id: treectrl.cpp 38351 2006-03-24 23:46:43Z ABX $ 8// Copyright: (c) Stefan Csomor 9// Licence: wxWindows licence 10///////////////////////////////////////////////////////////////////////////// 11 12#include "wx/stubs/textctrl.h" 13#include "wx/treebase.h" 14#include "wx/stubs/treectrl.h" 15 16IMPLEMENT_DYNAMIC_CLASS(wxTreeCtrl, wxControl) 17IMPLEMENT_DYNAMIC_CLASS(wxTreeItem, wxObject) 18 19wxTreeCtrl::wxTreeCtrl() 20{ 21 m_imageListNormal = NULL; 22 m_imageListState = NULL; 23 m_textCtrl = NULL; 24} 25 26bool wxTreeCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, 27 long style, const wxValidator& validator, const wxString& name) 28{ 29 SetName(name); 30 SetValidator(validator); 31 32 m_imageListNormal = NULL; 33 m_imageListState = NULL; 34 m_textCtrl = NULL; 35 36 m_windowStyle = style; 37 38 SetParent(parent); 39 40 m_windowId = (id == wxID_ANY) ? NewControlId() : id; 41 42 if (parent) parent->AddChild(this); 43 44 // TODO create tree control 45 46 return false; 47} 48 49wxTreeCtrl::~wxTreeCtrl() 50{ 51 if (m_textCtrl) 52 { 53 delete m_textCtrl; 54 } 55} 56 57// Attributes 58unsigned int wxTreeCtrl::GetCount() const 59{ 60 // TODO 61 return 0; 62} 63 64int wxTreeCtrl::GetIndent() const 65{ 66 // TODO 67 return 0; 68} 69 70void wxTreeCtrl::SetIndent(int indent) 71{ 72 // TODO 73} 74 75wxImageList *wxTreeCtrl::GetImageList(int which) const 76{ 77 if ( which == wxIMAGE_LIST_NORMAL ) 78 { 79 return m_imageListNormal; 80 } 81 else if ( which == wxIMAGE_LIST_STATE ) 82 { 83 return m_imageListState; 84 } 85 return NULL; 86} 87 88void wxTreeCtrl::SetImageList(wxImageList *imageList, int which) 89{ 90 if ( which == wxIMAGE_LIST_NORMAL ) 91 { 92 m_imageListNormal = imageList; 93 } 94 else if ( which == wxIMAGE_LIST_STATE ) 95 { 96 m_imageListState = imageList; 97 } 98 // TODO 99} 100 101long wxTreeCtrl::GetNextItem(long item, int code) const 102{ 103 // TODO 104 return 0; 105} 106 107bool wxTreeCtrl::ItemHasChildren(long item) const 108{ 109 // TODO 110 return false; 111} 112 113long wxTreeCtrl::GetChild(long item) const 114{ 115 // TODO 116 return 0; 117} 118 119long wxTreeCtrl::GetItemParent(long item) const 120{ 121 // TODO 122 return 0; 123} 124 125long wxTreeCtrl::GetFirstVisibleItem() const 126{ 127 // TODO 128 return 0; 129} 130 131long wxTreeCtrl::GetNextVisibleItem(long item) const 132{ 133 // TODO 134 return 0; 135} 136 137long wxTreeCtrl::GetSelection() const 138{ 139 // TODO 140 return 0; 141} 142 143long wxTreeCtrl::GetRootItem() const 144{ 145 // TODO 146 return 0; 147} 148 149bool wxTreeCtrl::GetItem(wxTreeItem& info) const 150{ 151 // TODO 152 return false; 153} 154 155bool wxTreeCtrl::SetItem(wxTreeItem& info) 156{ 157 // TODO 158 return false; 159} 160 161int wxTreeCtrl::GetItemState(long item, long stateMask) const 162{ 163 wxTreeItem info; 164 165 info.m_mask = wxTREE_MASK_STATE ; 166 info.m_stateMask = stateMask; 167 info.m_itemId = item; 168 169 if (!GetItem(info)) 170 return 0; 171 172 return info.m_state; 173} 174 175bool wxTreeCtrl::SetItemState(long item, long state, long stateMask) 176{ 177 wxTreeItem info; 178 179 info.m_mask = wxTREE_MASK_STATE ; 180 info.m_state = state; 181 info.m_stateMask = stateMask; 182 info.m_itemId = item; 183 184 return SetItem(info); 185} 186 187bool wxTreeCtrl::SetItemImage(long item, int image, int selImage) 188{ 189 wxTreeItem info; 190 191 info.m_mask = wxTREE_MASK_IMAGE ; 192 info.m_image = image; 193 if ( selImage > -1) 194 { 195 info.m_selectedImage = selImage; 196 info.m_mask |= wxTREE_MASK_SELECTED_IMAGE; 197 } 198 info.m_itemId = item; 199 200 return SetItem(info); 201} 202 203wxString wxTreeCtrl::GetItemText(long item) const 204{ 205 wxTreeItem info; 206 207 info.m_mask = wxTREE_MASK_TEXT ; 208 info.m_itemId = item; 209 210 if (!GetItem(info)) 211 return wxEmptyString; 212 return info.m_text; 213} 214 215void wxTreeCtrl::SetItemText(long item, const wxString& str) 216{ 217 wxTreeItem info; 218 219 info.m_mask = wxTREE_MASK_TEXT ; 220 info.m_itemId = item; 221 info.m_text = str; 222 223 SetItem(info); 224} 225 226long wxTreeCtrl::GetItemData(long item) const 227{ 228 wxTreeItem info; 229 230 info.m_mask = wxTREE_MASK_DATA ; 231 info.m_itemId = item; 232 233 if (!GetItem(info)) 234 return 0; 235 return info.m_data; 236} 237 238bool wxTreeCtrl::SetItemData(long item, long data) 239{ 240 wxTreeItem info; 241 242 info.m_mask = wxTREE_MASK_DATA ; 243 info.m_itemId = item; 244 info.m_data = data; 245 246 return SetItem(info); 247} 248 249bool wxTreeCtrl::GetItemRect(long item, wxRect& rect, bool textOnly) const 250{ 251 // TODO 252 return false; 253} 254 255wxTextCtrl* wxTreeCtrl::GetEditControl() const 256{ 257 return m_textCtrl; 258} 259 260// Operations 261bool wxTreeCtrl::DeleteItem(long item) 262{ 263 // TODO 264 return false; 265} 266 267bool wxTreeCtrl::ExpandItem(long item, int action) 268{ 269 // TODO 270 switch ( action ) 271 { 272 case wxTREE_EXPAND_EXPAND: 273 break; 274 275 case wxTREE_EXPAND_COLLAPSE: 276 break; 277 278 case wxTREE_EXPAND_COLLAPSE_RESET: 279 break; 280 281 case wxTREE_EXPAND_TOGGLE: 282 break; 283 284 default: 285 wxFAIL_MSG("unknown action in wxTreeCtrl::ExpandItem"); 286 } 287 288 bool bOk = false; // TODO expand item 289 290 // May not send messages, so emulate them 291 if ( bOk ) { 292 wxTreeEvent event(wxEVT_NULL, m_windowId); 293 event.m_item.m_itemId = item; 294 event.m_item.m_mask = 295 event.m_item.m_stateMask = 0xffff; // get all 296 GetItem(event.m_item); 297 298 bool bIsExpanded = (event.m_item.m_state & wxTREE_STATE_EXPANDED) != 0; 299 300 event.m_code = action; 301 event.SetEventObject(this); 302 303 // @@@ return values of {EXPAND|COLLAPS}ING event handler is discarded 304 event.SetEventType(bIsExpanded ? wxEVT_COMMAND_TREE_ITEM_EXPANDING 305 : wxEVT_COMMAND_TREE_ITEM_COLLAPSING); 306 GetEventHandler()->ProcessEvent(event); 307 308 event.SetEventType(bIsExpanded ? wxEVT_COMMAND_TREE_ITEM_EXPANDED 309 : wxEVT_COMMAND_TREE_ITEM_COLLAPSED); 310 GetEventHandler()->ProcessEvent(event); 311 } 312 313 return bOk; 314} 315 316long wxTreeCtrl::InsertItem(long parent, wxTreeItem& info, long insertAfter) 317{ 318 // TODO 319 return 0; 320} 321 322long wxTreeCtrl::InsertItem(long parent, const wxString& label, int image, int selImage, 323 long insertAfter) 324{ 325 wxTreeItem info; 326 info.m_text = label; 327 info.m_mask = wxTREE_MASK_TEXT; 328 if ( image > -1 ) 329 { 330 info.m_mask |= wxTREE_MASK_IMAGE | wxTREE_MASK_SELECTED_IMAGE; 331 info.m_image = image; 332 if ( selImage == -1 ) 333 info.m_selectedImage = image; 334 else 335 info.m_selectedImage = selImage; 336 } 337 338 return InsertItem(parent, info, insertAfter); 339} 340 341bool wxTreeCtrl::SelectItem(long item) 342{ 343 // TODO 344 return false; 345} 346 347bool wxTreeCtrl::ScrollTo(long item) 348{ 349 // TODO 350 return false; 351} 352 353bool wxTreeCtrl::DeleteAllItems() 354{ 355 // TODO 356 return false; 357} 358 359wxTextCtrl* wxTreeCtrl::EditLabel(long item, wxClassInfo* textControlClass) 360{ 361 // TODO 362 return NULL; 363} 364 365// End label editing, optionally cancelling the edit 366bool wxTreeCtrl::EndEditLabel(bool cancel) 367{ 368 // TODO 369 return false; 370} 371 372long wxTreeCtrl::HitTest(const wxPoint& point, int& flags) 373{ 374 // TODO 375 return 0; 376} 377 378bool wxTreeCtrl::SortChildren(long item) 379{ 380 // TODO 381 return false; 382} 383 384bool wxTreeCtrl::EnsureVisible(long item) 385{ 386 // TODO 387 return false; 388} 389 390// Tree item structure 391wxTreeItem::wxTreeItem() 392{ 393 m_mask = 0; 394 m_itemId = 0; 395 m_state = 0; 396 m_stateMask = 0; 397 m_image = -1; 398 m_selectedImage = -1; 399 m_children = 0; 400 m_data = 0; 401} 402 403// Tree event 404IMPLEMENT_DYNAMIC_CLASS(wxTreeEvent, wxCommandEvent) 405 406wxTreeEvent::wxTreeEvent(wxEventType commandType, int id): 407 wxCommandEvent(commandType, id) 408{ 409 m_code = 0; 410 m_oldItem = 0; 411} 412