]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TGeant4/TG4ListTreeFrame.cxx
added comment only
[u/mrichter/AliRoot.git] / TGeant4 / TG4ListTreeFrame.cxx
CommitLineData
8d68ee9f 1// $Id$
2// Category: interfaces
3//
4// Author: D. Adamova
208c9539 5//
8d68ee9f 6//========================================================
7//
8//------------TG4ListTreeFrame.cxx--------------------------------//
9//--------- Frame for the ListTree container---//
10//
11//=========================================================
12
13#include "TG4ListTreeFrame.h"
14#include "TG4GuiVolume.h"
15#include "TG4Globals.h"
16
17#include <TGListTree.h>
18#include <TGCanvas.h>
208c9539 19#include <TGTab.h>
8d68ee9f 20
21#include <G4LogicalVolume.hh>
22#include <G4UImanager.hh>
23
24ClassImp(TG4ListTreeFrame)
25
208c9539 26TG4ListTreeFrame::TG4ListTreeFrame( TGTab* Tab, TGMainFrame* ActionFrame)
8d68ee9f 27{
28//------>canvas for the ListTree
2ced62e8 29 TGCompositeFrame* parent= Tab->AddTab("Volumes");
30 fCanvasWindow = new TGCanvas( parent, 400, 240);
8d68ee9f 31 ULong_t back= TGFrame::GetWhitePixel();
32 fCanvasWindow->ChangeBackground(back);
33
34//----->ListTree for the logical volumes
35 fVolumesListTree= new TGListTree(fCanvasWindow->GetViewPort(), 10, 10, kHorizontalFrame);
36 fVolumesListTree->Associate(ActionFrame);
37//------->container for the ListTree
38 fCanvasWindow->SetContainer(fVolumesListTree);
39
40 TGLayoutHints *lCanvasLayout = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY);
2ced62e8 41 parent->AddFrame(fCanvasWindow, lCanvasLayout);
8d68ee9f 42
43}
44
45TG4ListTreeFrame::TG4ListTreeFrame(const TG4ListTreeFrame& ltf)
46{
47// Dummy copy constructor
48 TG4Globals::Exception(
49 "Attempt to use TG4ListTreeFrame copy constructor.");
50}
51
52TG4ListTreeFrame& TG4ListTreeFrame::operator=(const TG4ListTreeFrame& ltf)
53{
54 // check assignement to self
55 if (this == &ltf) return *this;
56
57 TG4Globals::Exception(
58 "Attempt to assign singleton.");
59
60 return *this;
61}
62
63TG4ListTreeFrame::~TG4ListTreeFrame()
64{
65//---> liquidator
66
67 G4cout << "\n Now in TG4ListTreeFrame destructor \n" << G4endl;
68 delete fCanvasWindow;
69 delete fVolumesListTree;
70
208c9539 71}
8d68ee9f 72
208c9539 73TGListTreeItem* TG4ListTreeFrame::
74AddItem(TObject* obj, TGListTreeItem* parent, const char* name,
75 const TGPicture* open, const TGPicture* closed)
8d68ee9f 76{
208c9539 77//----->Add item to the list tree
78 return fVolumesListTree->AddItem(parent, name, obj, open, closed);
79}
80
81Bool_t TG4ListTreeFrame::ProcessSubMessage(Long_t msg, Long_t parm1)
82{
83//---> Processes events generated by the ListTree widget
84
85 switch (GET_SUBMSG(msg)) {
86
87//----->Cases to Handle mouse click
88 //-->case 1
89 case kCT_ITEMCLICK:
90 //---> Button 1: Select volume
91 if (parm1 == kButton1){
92 TGListTreeItem* item = fVolumesListTree->GetSelected();
93 if (item) {
94
95 TG4GuiVolume* volume=((TG4GuiVolume*) item->GetUserData());
96 G4LogicalVolume* lvolume = volume->GetLogicalVolume();
97
98 if ( lvolume ) {
99 G4cout << "The selected logical volume name is "
100 << lvolume->GetName() << G4endl;
101 };
102 };
103 };
104
105 //---> Button 3: Draw Volume
106 if (parm1 == kButton3){
107 TGListTreeItem* item = fVolumesListTree->GetSelected();
108 if (item){
109 DrawSelectedVolume(item);};
110 };
111
112 break;
113
114 //-->case 2
115 case kCT_ITEMDBLCLICK:
116 if (parm1 == kButton1) {
117 if (fVolumesListTree->GetSelected() != 0) {
118 gClient->NeedRedraw(fVolumesListTree);
119 };
120 };
121 break;
122 //-->default for GET_SUBMSG
123 default:
124 break;
125 }
126
127 return kTRUE;
8d68ee9f 128}
129
130void TG4ListTreeFrame::DrawSelectedVolume(TGListTreeItem* item)
131{
132//---> draw the volume belonging to the item
133
134 TG4GuiVolume* volume=((TG4GuiVolume*) item->GetUserData());
135 G4LogicalVolume* lvolume = volume->GetLogicalVolume();
136//-------->>>>>>inserted part for getting parent and number of daughters
137 TGListTreeItem* iParent = item -> GetParent();
138 G4int noDght, ii;
139 G4int icopy = 0;
140 G4String parentName, lName;
141
142 if (iParent) {
143
144 TG4GuiVolume* vParent = ((TG4GuiVolume*) iParent->GetUserData());
145 G4LogicalVolume* lvParent = vParent->GetLogicalVolume();
146 parentName = lvParent->GetName();
147 noDght = lvParent->GetNoDaughters();
148//------>>>> end of getting parent and number of daughters
149
150 //------->>>>inserted for getting no on copies
151 ii = 0;
152 while ( ii < noDght){
153 if ( lvParent->GetDaughter(ii)->GetLogicalVolume() == lvolume )
154 icopy++;
155
156 ii++;
157 };
158 //------>>>> end of getting no of copies
159
160 lName = lvolume->GetName();
161 }
162//------->>>>> case of iParent = 0
163 else {
164 lName = "ALIC";
165 icopy = 1;
166 };
167
168 G4cout << "For logical volume " << lName << " "
169 << "the number of copies is :! " << icopy << endl;
170//------> looping over number of copies
171 ii=0;
172 while ( ii < icopy) {
173 G4String lCommand = "/vis/scene/add/volume " ;
174 lCommand += lName;
175 lCommand += " ";
176 TG4Globals::AppendNumberToString( lCommand, ii);
177 lCommand += " -1";
178 G4cout << "!!!!ADD VOLUME COMMAND IS!!!! " << lCommand << G4endl;
179 G4UImanager::GetUIpointer()->ApplyCommand( lCommand );
180 G4UImanager::GetUIpointer()->ApplyCommand(
181 "/control/execute vis_cont.mac");
182 ii++;
183 };
184
185}
208c9539 186
187