00001 #include "GuiTree.h"
00002
00003 #include <iostream>
00004 using namespace std;
00005
00006 GuiTreeEntry::GuiTreeEntry(TGClient* client, const char* name,
00007 const TGPicture* opened,const TGPicture* closed)
00008 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,19,01)
00009 : TGListTreeItemStd(client,name,opened,closed)
00010 #else
00011 : TGListTreeItem(client,name,opened,closed)
00012 #endif
00013 {
00014 }
00015
00016 GuiTreeEntry::~GuiTreeEntry()
00017 {
00018 }
00019
00020 GuiTree::GuiTree(TGWindow& parent, UInt_t options)
00021 : TGListTree(&parent,10,10,options)
00022 {
00023 this->SetLayoutHints(kLHintsExpandX|kLHintsExpandY);
00024 this->Associate(&parent);
00025 }
00026 GuiTree::~GuiTree()
00027 {
00028 }
00029
00030 GuiTreeEntry* GuiTree::AddEntry(GuiTreeEntry* parent, const char* label)
00031 {
00032
00033 GuiTreeEntry *entry;
00034
00035 const TGPicture* open = fClient->GetPicture("ofolder_t.xpm");
00036 const TGPicture* closed = fClient->GetPicture("folder_t.xpm");
00037
00038 entry = new GuiTreeEntry(fClient, label, open, closed);
00039 this->TGListTree::InsertChild(parent, entry);
00040
00041 return entry;
00042 }
00043
00044
00045 void GuiTree::Clicked(TGListTreeItem* item, Int_t btn)
00046 {
00047 this->TGListTree::Clicked(item,btn);
00048
00049 GuiTreeEntry* entry = dynamic_cast<GuiTreeEntry*>(item);
00050 if (!entry) return;
00051 entry->clicked.emit();
00052 }
00053 void GuiTree::DoubleClicked(TGListTreeItem* item, Int_t btn)
00054 {
00055 this->TGListTree::DoubleClicked(item,btn);
00056
00057 cerr << "Double clicked, item is "
00058 << (item->IsOpen() ? "open" : "closed") << endl;
00059
00060 fClient->NeedRedraw(this);
00061 return;
00062
00063 if (item->IsOpen()) {
00064 this->TGListTree::CloseItem(item);
00065 }
00066 else {
00067 this->TGListTree::OpenItem(item);
00068 }
00069 cerr << " now item is "
00070 << (item->IsOpen() ? "open" : "closed") << endl;
00071
00072 }
00073 void GuiTree::OnMouseOver(TGListTreeItem* item)
00074 {
00075 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,19,01)
00076 this->TGListTree::MouseOver(item);
00077 #else
00078 this->TGListTree::OnMouseOver(item);
00079 #endif
00080
00081 GuiTreeEntry* entry = dynamic_cast<GuiTreeEntry*>(item);
00082 if (!entry) return;
00083 entry->on_mouse_over.emit();
00084 }
00085
00086 void GuiTree::DeleteAllItems()
00087 {
00088 TGListTreeItem* item;
00089 while ( (item = this->GetFirstItem()) ) {
00090 this->DeleteChildren(item);
00091 this->DeleteItem(item);
00092
00093 }
00094 fClient->NeedRedraw(this);
00095 }