void NSBrowserTreeCtrl::build_tree() { // resolve name service reference int dummy = 0; CORBA::ORB_var orb = CORBA::ORB_init(dummy,0); std::string ns; ns = Qedo::ConfigurationReader::instance()->lookup_config_value( "/General/NameService" );; //ns = "corbaloc::tri:12356/NameService"; CORBA::Object_var obj; obj = orb -> string_to_object( ns.c_str() ); CreateImageList(); try { nameService = CosNaming::NamingContext::_narrow(obj.in()); } catch (CORBA::SystemException) {}; if (!CORBA::is_nil(nameService)) { wxTreeItemId rootId = AddRoot(wxT("RootContext"), TreeCtrlIcon_FolderOpened , TreeCtrlIcon_Folder , new NSBrowserTreeItemData(wxT("Root item"))); AddItemsRecursively(rootId, nameService); } }
void NSBrowserTreeCtrl::AddItemsRecursively(const wxTreeItemId& idParent, CosNaming::NamingContext_ptr context) { try { // list context CosNaming::BindingList_var bl ; CosNaming::BindingIterator_var bi; context -> list (10, bl, bi); wxString str; for (CORBA::ULong i = 0; i < bl->length(); i++) { // if context // if ((*bl)[i].binding_type == CosNaming::ncontext) // { CosNaming::NamingContext_var child_context; CORBA::Object_var tmp_obj; tmp_obj = context -> resolve((*bl)[i].binding_name); try { child_context = CosNaming::NamingContext::_narrow(tmp_obj); } catch (CORBA::SystemException e) {} if (!CORBA::is_nil(child_context)) { str.Printf(wxT("%s"), wxT((*bl)[i].binding_name[0].id.in())); wxTreeItemId id = AppendItem(idParent, str, TreeCtrlIcon_Folder, TreeCtrlIcon_Folder, new NSBrowserTreeItemData(str)); AddItemsRecursively(id, child_context.in()); } else { str.Printf(wxT("%s"), wxT((*bl)[i].binding_name[0].id.in())); wxTreeItemId id = AppendItem(idParent, str, TreeCtrlIcon_File, TreeCtrlIcon_File, new NSBrowserTreeItemData(str)); } // } // add to tree //wxTreeItemId id = AppendItem(idParent, str, 1, 1, new MyTreeItemData(str)); } } catch (CORBA::SystemException&) { } }
void MyTreeCtrl::CreateButtonsImageList(int size) { if ( size == -1 ) { SetButtonsImageList(NULL); return; } // Make an image list containing small icons wxImageList *images = new wxImageList(size, size, true); // should correspond to TreeCtrlIcon_xxx enum wxBusyCursor wait; wxIcon icons[4]; icons[0] = wxIcon(icon3_xpm); // closed icons[1] = wxIcon(icon3_xpm); // closed, selected icons[2] = wxIcon(icon5_xpm); // open icons[3] = wxIcon(icon5_xpm); // open, selected for ( size_t i = 0; i < WXSIZEOF(icons); i++ ) { int sizeOrig = icons[i].GetWidth(); if ( size == sizeOrig ) { images->Add(icons[i]); } else { images->Add(wxBitmap(wxBitmap(icons[i]).ConvertToImage().Rescale(size, size))); } } AssignButtonsImageList(images); #else void MyTreeCtrl::CreateButtonsImageList(int WXUNUSED(size)) { #endif } int MyTreeCtrl::OnCompareItems(const wxTreeItemId& item1, const wxTreeItemId& item2) { if ( m_reverseSort ) { // just exchange 1st and 2nd items return wxTreeCtrl::OnCompareItems(item2, item1); } else { return wxTreeCtrl::OnCompareItems(item1, item2); } } void MyTreeCtrl::AddItemsRecursively(const wxTreeItemId& idParent, size_t numChildren, size_t depth, size_t folder) { if ( depth > 0 ) { bool hasChildren = depth > 1; wxString str; for ( size_t n = 0; n < numChildren; n++ ) { // at depth 1 elements won't have any more children if ( hasChildren ) str.Printf(wxT("%s child %u"), wxT("Folder"), unsigned(n + 1)); else str.Printf(wxT("%s child %u.%u"), wxT("File"), unsigned(folder), unsigned(n + 1)); // here we pass to AppendItem() normal and selected item images (we // suppose that selected image follows the normal one in the enum) int image, imageSel; if ( wxGetApp().ShowImages() ) { image = depth == 1 ? TreeCtrlIcon_File : TreeCtrlIcon_Folder; imageSel = image + 1; } else { image = imageSel = -1; } wxTreeItemId id = AppendItem(idParent, str, image, imageSel, new MyTreeItemData(str)); // and now we also set the expanded one (only for the folders) if ( hasChildren && wxGetApp().ShowImages() ) { SetItemImage(id, TreeCtrlIcon_FolderOpened, wxTreeItemIcon_Expanded); } // remember the last child for OnEnsureVisible() if ( !hasChildren && n == numChildren - 1 ) { m_lastItem = id; } AddItemsRecursively(id, numChildren, depth - 1, n + 1); } } //else: done! } void MyTreeCtrl::AddTestItemsToTree(size_t numChildren, size_t depth) { int image = wxGetApp().ShowImages() ? MyTreeCtrl::TreeCtrlIcon_Folder : -1; wxTreeItemId rootId = AddRoot(wxT("Root"), image, image, new MyTreeItemData(wxT("Root item"))); if ( !HasFlag(wxTR_HIDE_ROOT) && image != -1 ) { SetItemImage(rootId, TreeCtrlIcon_FolderOpened, wxTreeItemIcon_Expanded); } AddItemsRecursively(rootId, numChildren, depth, 0); // set some colours/fonts for testing if ( !HasFlag(wxTR_HIDE_ROOT) ) SetItemFont(rootId, *wxITALIC_FONT); wxTreeItemIdValue cookie; wxTreeItemId id = GetFirstChild(rootId, cookie); SetItemTextColour(id, *wxBLUE); id = GetNextChild(rootId, cookie); id = GetNextChild(rootId, cookie); SetItemTextColour(id, *wxRED); SetItemBackgroundColour(id, *wxLIGHT_GREY); }