37 ClassImp(TGuiBldNameFrame);
42 TGuiBldNameFrame::TGuiBldNameFrame(
const TGWindow *p, TGuiBldEditor *editor) :
43 TGCompositeFrame(p, 1, 1)
46 fBuilder = (TRootGuiBuilder*)TRootGuiBuilder::Instance();
47 fManager = fBuilder->GetManager();
48 fEditDisabled = kEditDisable;
49 SetCleanup(kDeepCleanup);
51 TGFrame *fSelected = fEditor->GetSelected();
52 if (fSelected) frame = fSelected;
54 TGVerticalFrame *cf =
new TGVerticalFrame(
this, 180, 400);
57 TGHorizontalFrame *f =
new TGHorizontalFrame(cf);
58 f->AddFrame(
new TGLabel(f,
"MDI Frame content"),
59 new TGLayoutHints(kLHintsLeft, 0, 1, 0, 0));
60 f->AddFrame(
new TGHorizontal3DLine(f),
new TGLayoutHints(kLHintsExpandX,
62 cf->AddFrame(f,
new TGLayoutHints(kLHintsTop | kLHintsExpandX));
64 fCanvas =
new TGCanvas(cf, 180, 110);
65 fListTree =
new TGListTree(fCanvas, 0);
66 fCanvas->MapSubwindows();
67 cf->AddFrame(fCanvas,
new TGLayoutHints(kLHintsExpandY | kLHintsExpandX));
70 fTitleFrame =
new TGHorizontalFrame(cf, 100, 30);
71 fTitleFrame->AddFrame(
new TGLabel(fTitleFrame,
"Variable name"),
72 new TGLayoutHints(kLHintsLeft | kLHintsCenterY ,
74 fTitleFrame->AddFrame(
new TGHorizontal3DLine(fTitleFrame),
75 new TGLayoutHints(kLHintsCenterY | kLHintsExpandX,
77 cf->AddFrame(fTitleFrame,
new TGLayoutHints(kLHintsExpandX | kLHintsTop));
81 name = frame->ClassName();
83 fLabel =
new TGLabel(cf, name.Data());
84 cf->AddFrame(fLabel,
new TGLayoutHints(kLHintsCenterX, 1, 1, 0, 0));
86 TGCompositeFrame *sub =
new TGHorizontalFrame(cf, 100, 30);
87 fFrameName =
new TGTextEntry(sub, frame ? frame->GetName() :
"noname");
88 fFrameName->SetAlignment(kTextLeft);
89 fFrameName->Resize(120, fFrameName->GetHeight());
90 sub->AddFrame(fFrameName,
new TGLayoutHints(kLHintsTop | kLHintsCenterX,
92 fFrameName->SetEnabled(kTRUE);
94 TGTextButton *btn =
new TGTextButton(sub,
" Set Name ");
95 sub->AddFrame(btn,
new TGLayoutHints(kLHintsTop));
96 cf->AddFrame(sub,
new TGLayoutHints(kLHintsTop | kLHintsCenterX,
99 AddFrame(cf,
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
101 btn->Connect(
"Clicked()",
"TGuiBldNameFrame",
this,
"UpdateName()");
102 btn->SetToolTipText(
"Set variable name");
103 fListTree->Connect(
"Clicked(TGListTreeItem*, Int_t)",
"TGuiBldNameFrame",
104 this,
"SelectFrameByItem(TGListTreeItem*, Int_t)");
110 void TGuiBldNameFrame::DoRedraw()
114 TGCompositeFrame::DoRedraw();
120 void TGuiBldNameFrame::Reset()
122 fFrameName->SetText(
"");
130 void TGuiBldNameFrame::ChangeSelected(TGFrame *frame)
132 fFrameName->Disconnect();
139 TString name = frame->ClassName();
141 fLabel->SetText(name.Data());
142 fFrameName->SetText(frame->GetName());
145 TGCompositeFrame *main = GetMdi(frame);
148 if (!fListTree->GetFirstItem())
150 else if ((fListTree->GetFirstItem()->GetUserData()) != main) {
153 while (fListTree->GetFirstItem()) {
154 fListTree->DeleteItem(fListTree->GetFirstItem());
163 TGListTreeItem *item = 0;
164 fListTree->OpenItem(fListTree->GetFirstItem());
165 item = fListTree->FindItemByObj(fListTree->GetFirstItem(), frame);
167 fListTree->HighlightItem(item);
168 while (item->GetParent()) {
169 item = item->GetParent();
170 item->SetOpen(kTRUE);
173 fClient->NeedRedraw(fListTree, kTRUE);
174 fClient->NeedRedraw(fCanvas, kTRUE);
181 void TGuiBldNameFrame::UpdateName()
183 TGFrame *frame = fEditor->GetSelected();
184 TString ch = fFrameName->GetText();
190 if (FindItemByName(fListTree, ch, fListTree->GetFirstItem())) {
191 fBuilder->UpdateStatusBar(
"Variable name already exists.");
192 TGCompositeFrame *cf = (TGCompositeFrame*)frame->GetParent();
194 fBuilder->GetManager()->SetEditable(kFALSE);
195 new TGMsgBox(fClient->GetDefaultRoot(), fBuilder,
196 "Name conflict",
"Variable name already exists.",
197 kMBIconExclamation, kMBOk, &retval);
198 cf->SetEditable(kTRUE);
200 fBuilder->GetManager()->SelectFrame(frame);
201 frame->SetEditable(kTRUE);
204 fBuilder->UpdateStatusBar(
"Variable name changed.");
209 while (fListTree->GetFirstItem()) {
210 fListTree->DeleteItem(fListTree->GetFirstItem());
213 TGCompositeFrame *main = GetMdi(frame);
216 fClient->NeedRedraw(fListTree, kTRUE);
217 fClient->NeedRedraw(fFrameName);
224 TGCompositeFrame *TGuiBldNameFrame::GetMdi(TGFrame *frame)
228 while (p && (p != fClient->GetDefaultRoot()) ) {
229 if (p->InheritsFrom(TGMdiFrame::Class())) {
230 return (TGCompositeFrame*)p;
232 else if (p->InheritsFrom(TGMainFrame::Class())) {
233 return (TGCompositeFrame*)p;
235 p = (TGFrame*)p->GetParent();
243 void TGuiBldNameFrame::MapItems(TGCompositeFrame *main)
249 TList *list = main->GetList();
250 TGFrameElement *el = 0;
253 while ((el = (TGFrameElement *) next())) {
256 if (main->InheritsFrom(TGMdiFrame::Class()) ||
257 main->InheritsFrom(TGMainFrame::Class())) {
261 if (!fListTree->FindChildByData(0, main)) {
263 fListTree->AddItem(0, main->GetName(), main);
266 fListTree->AddItem(fListTree->FindChildByData(0, main),
267 el->fFrame->GetName(), el->fFrame);
272 TGListTreeItem *result = 0;
273 TGFrame *par = (TGFrame*)el->fFrame->GetParent();
274 result = fListTree->FindItemByObj(fListTree->GetFirstItem(), par);
276 fListTree->AddItem(result, el->fFrame->GetName(), el->fFrame);
279 if ( (el->fFrame->InheritsFrom(TGCompositeFrame::Class())) &&
280 (!(el->fFrame->InheritsFrom(TGMdiFrame::Class()))) ) {
282 main = (TGCompositeFrame*)(el->fFrame);
292 Bool_t TGuiBldNameFrame::CheckItems(TGCompositeFrame *main)
294 TList *list = main->GetList();
296 TGFrameElement *el = 0;
297 TGListTreeItem *item = 0;
300 TGListTreeItem *par = 0;
302 while ((el = (TGFrameElement *) next())) {
303 if (el && (el->fFrame)) {
304 item = fListTree->FindItemByObj(fListTree->GetFirstItem(),
307 f = (TGFrame*)el->fFrame->GetParent();
309 par = fListTree->FindItemByObj(fListTree->GetFirstItem(), f);
311 fListTree->AddItem(par, el->fFrame->GetName(), el->fFrame);
315 else if (item->GetParent() && item->GetParent()->GetUserData() !=
316 el->fFrame->GetParent()) {
317 f = (TGFrame*)el->fFrame->GetParent();
319 par = fListTree->FindItemByObj(fListTree->GetFirstItem(), f);
321 fListTree->Reparent(item, par);
325 if (el->fFrame->InheritsFrom(TGCompositeFrame::Class())) {
326 CheckItems((TGCompositeFrame*)el->fFrame);
336 void TGuiBldNameFrame::RemoveFrame(TGFrame *frame)
338 TGListTreeItem *item;
339 item = fListTree->FindItemByObj(fListTree->GetFirstItem(), frame);
341 fListTree->DeleteItem(item);
348 TGListTreeItem *TGuiBldNameFrame::FindItemByName(TGListTree *tree,
350 TGListTreeItem *item)
352 TGListTreeItem *fitem;
354 if (!strcmp(item->GetText(), name)) {
358 if (item->GetFirstChild()) {
359 fitem = FindItemByName(tree, name, item->GetFirstChild());
360 if (fitem)
return fitem;
362 return FindItemByName(tree, name, item->GetNextSibling());
371 void TGuiBldNameFrame::SelectFrameByItem(TGListTreeItem* item, Int_t)
373 TGFrame *frame = (TGFrame*)item->GetUserData();
375 ((TGFrame*)frame->GetParent())->SetEditable(kTRUE);
376 fManager->SelectFrame(frame);
377 frame->SetEditable(kTRUE);
378 fClient->NeedRedraw(frame);