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);