40 ClassImp(TGuiBldEditor);
 
   44 class TGuiBldBorderFrame : 
public TGVerticalFrame {
 
   47    enum  EBldBorderFrameMode { 
 
   48       kBldBorderNone, kBldBorderSunken,
 
   49       kBldBorderPlain, kBldBorderRaised, 
 
   53    TGuiBldEditor   *fEditor;
 
   55    TGButtonGroup   *fBtnGroup;
 
   56    TGColorSelect   *fBgndFrame;
 
   59    TGuiBldBorderFrame(
const TGWindow *p, TGuiBldEditor *editor);
 
   60    virtual ~TGuiBldBorderFrame() { }
 
   62    void  ChangeSelected(TGFrame*);
 
   68 TGuiBldBorderFrame::TGuiBldBorderFrame(
const TGWindow *p, TGuiBldEditor *editor) :
 
   69              TGVerticalFrame(p, 1, 1)
 
   75    SetCleanup(kDeepCleanup);
 
   77    fBtnGroup = 
new TGButtonGroup(
this, 
"Border Mode");
 
   79    TGRadioButton *frame299 = 
new TGRadioButton(fBtnGroup,
" Sunken",kBldBorderSunken);
 
   80    frame299->SetToolTipText(
"Set a sunken border of the frame");
 
   81    TGRadioButton *frame302 = 
new TGRadioButton(fBtnGroup,
" None",kBldBorderPlain);
 
   82    frame302->SetToolTipText(
"Set no border of the frame");
 
   83    TGRadioButton *frame305 = 
new TGRadioButton(fBtnGroup,
" Raised",kBldBorderRaised);
 
   84    frame305->SetToolTipText(
"Set a raised border of the frame");
 
   85    frame305->SetState(kButtonDown);
 
   86    TGCheckButton *check = 
new TGCheckButton(fBtnGroup,
" Double",kBldBorderDouble);
 
   87    check->SetToolTipText(
"Set double border of the frame");
 
   90    fBtnGroup->SetRadioButtonExclusive(kTRUE);
 
   91    AddFrame(fBtnGroup, 
new TGLayoutHints(kLHintsCenterX | kLHintsTop));
 
   92    fBtnGroup->Connect(
"Pressed(Int_t)", 
"TGuiBldEditor", fEditor, 
"UpdateBorder(Int_t)");
 
   93    check->Connect(
"Pressed()", 
"TGuiBldEditor", fEditor, 
"UpdateBorder(=4)");
 
   94    check->Connect(
"Released()", 
"TGuiBldEditor", fEditor, 
"UpdateBorder(=5)");
 
   96    TGCompositeFrame *f = 
new TGGroupFrame(
this, 
"Palette");
 
   97    TGHorizontalFrame *hf = 
new TGHorizontalFrame(f ,1, 1);
 
   98    fBgndFrame = 
new TGColorSelect(hf, 0, 1);
 
   99    fBgndFrame->SetEditDisabled();
 
  100    fBgndFrame->SetColor(GetDefaultFrameBackground());
 
  101    fBgndFrame->Connect(
"ColorSelected(Pixel_t)", 
"TGuiBldEditor", fEditor,
 
  102                        "UpdateBackground(Pixel_t)");
 
  103    hf->AddFrame(fBgndFrame, 
new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 2, 2, 2));
 
  104    hf->AddFrame(
new TGLabel(hf, 
"Backgrnd"), 
new TGLayoutHints(kLHintsTop | 
 
  105                 kLHintsLeft, 2, 2, 2, 2));
 
  106    f->AddFrame(hf, 
new TGLayoutHints(kLHintsCenterX | kLHintsTop, 2, 2, 2, 2));
 
  107    AddFrame(f, 
new TGLayoutHints(kLHintsCenterX | kLHintsTop));
 
  113 void TGuiBldBorderFrame::ChangeSelected(TGFrame *frame)
 
  121    UInt_t opt = fSelected->GetOptions();
 
  123    fBtnGroup->SetButton(kBldBorderDouble, opt & kDoubleBorder);
 
  124    fBtnGroup->SetButton(kBldBorderSunken, opt & kSunkenFrame);
 
  125    fBtnGroup->SetButton(kBldBorderRaised, opt & kRaisedFrame);
 
  126    fBtnGroup->SetButton(kBldBorderPlain, !(opt & kRaisedFrame) && !(opt & kSunkenFrame));
 
  129       TQObject::Disconnect(fBgndFrame);
 
  130       fBgndFrame->SetColor(fSelected->GetBackground());
 
  131       fBgndFrame->Connect(
"ColorSelected(Pixel_t)", 
"TGuiBldEditor", fEditor, 
"UpdateBackground(Pixel_t)");
 
  139 TGuiBldEditor::TGuiBldEditor(
const TGWindow *p) : TGVerticalFrame(p, 1, 1)
 
  141    TGHorizontalFrame *hf;
 
  144    SetCleanup(kDeepCleanup);
 
  146    fNameFrame  = 
new TGuiBldNameFrame(
this, 
this);
 
  147    AddFrame(fNameFrame,  
new TGLayoutHints(kLHintsNormal | kLHintsExpandX,5,5,2,2));
 
  149    TGHSplitter *splitter = 
new TGHSplitter(
this,100,5);
 
  150    AddFrame(splitter, 
new TGLayoutHints(kLHintsTop | kLHintsExpandX,0,0,5,5));
 
  151    splitter->SetFrame(fNameFrame, kTRUE);
 
  154    hf = 
new TGHorizontalFrame(
this);
 
  155    hf->AddFrame(
new TGLabel(hf, 
"Composite Frame Layout"), 
 
  156                 new TGLayoutHints(kLHintsLeft | kLHintsTop, 2, 2, 2, 2));
 
  157    hf->AddFrame(
new TGHorizontal3DLine(hf), 
new TGLayoutHints(kLHintsTop | 
 
  158                 kLHintsExpandX, 2, 2, 2, 2));
 
  159    AddFrame(hf, 
new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 2, 2, 2));
 
  161    vf = 
new TGVerticalFrame(
this);
 
  162    fLayoutLabel = 
new TGLabel(vf, 
"Automatic Layout Disabled");
 
  163    vf->AddFrame(fLayoutLabel, 
new TGLayoutHints(kLHintsCenterX | kLHintsTop,
 
  166    fLayoutButton = 
new TGTextButton(vf,
"    Enable layout    ");
 
  167    fLayoutButton->SetEnabled(kFALSE);
 
  168    vf->AddFrame(fLayoutButton, 
new TGLayoutHints(kLHintsCenterX | kLHintsTop,
 
  171    AddFrame(vf, 
new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 2, 2, 2));
 
  173    AddFrame(
new TGHorizontal3DLine(
this), 
new TGLayoutHints(kLHintsTop | 
 
  174             kLHintsExpandX, 2, 2, 2, 2));
 
  176    fLayoutButton->Connect(
"Clicked()", 
"TGuiBldEditor", 
this, 
"SwitchLayout()");
 
  177    fLayoutButton->SetToolTipText(
"If layout is on, all the frame \nelements get layouted automatically.");
 
  181    fTab = 
new TGTab(
this, 80, 40);
 
  182    AddFrame(fTab, 
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 2, 2, 2, 2));
 
  183    fTablay = fTab->AddTab(
"Layout");
 
  184    TGCompositeFrame *tabcont = fTab->AddTab(
"Style");
 
  186    fTab->Connect(
"Selected(Int_t)", 
"TGuiBldEditor", 
this, 
"TabSelected(Int_t)");
 
  188    fHintsFrame = 
new TGuiBldHintsEditor(fTablay, 
this);
 
  189    fTablay->AddFrame(fHintsFrame, 
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,
 
  192    fGeomFrame = 
new TGuiBldGeometryFrame(fTablay, 
this);
 
  193    fTablay->AddFrame(fGeomFrame, 
new TGLayoutHints(kLHintsTop | kLHintsExpandX,
 
  198    fPositionFrame = 
new TGGroupFrame(fTablay, 
"Position");
 
  200    hf = 
new TGHorizontalFrame(fPositionFrame);
 
  202    vf = 
new TGVerticalFrame(hf);
 
  203    vf->SetLayoutManager(
new TGTableLayout(vf, 2, 2));
 
  205    vf->AddFrame(
new TGLabel(vf, 
" X "), 
new TGTableLayoutHints(0, 1, 0, 1,
 
  206                 kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
 
  207    fXpos = 
new TGNumberEntry(vf, 0.0, 4, -1, (TGNumberFormat::EStyle)5);
 
  208    vf->AddFrame(fXpos, 
new TGTableLayoutHints(1, 2, 0, 1, kLHintsCenterY | 
 
  209                 kLHintsLeft, 2, 2, 2, 2));
 
  211    vf->AddFrame(
new TGLabel(vf, 
" Y "), 
new TGTableLayoutHints(0, 1, 1, 2,
 
  212                 kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
 
  213    fYpos = 
new TGNumberEntry(vf, 0.0, 4, -1, (TGNumberFormat::EStyle)5);
 
  214    vf->AddFrame(fYpos, 
new TGTableLayoutHints(1, 2, 1, 2, kLHintsCenterY | 
 
  215                 kLHintsLeft, 2, 2, 2, 2));
 
  217    hf->AddFrame(vf, 
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY));
 
  219    vf = 
new TGVerticalFrame(hf);
 
  220    vf->SetLayoutManager(
new TGTableLayout(vf, 3, 3));
 
  222    TGTextButton *fTextButton6366 = 
new TGTextButton(vf, 
"^", -1, 
 
  223                 TGButton::GetDefaultGC()(), 
 
  224                 TGTextButton::GetDefaultFontStruct(),
 
  225                 kRaisedFrame | kDoubleBorder | kFixedSize);
 
  226    fTextButton6366->Resize(20,20);
 
  227    vf->AddFrame(fTextButton6366, 
new TGTableLayoutHints(1, 2, 0, 1,
 
  228                 kLHintsLeft | kLHintsTop, 1, 1, 1, 1));
 
  230    TGTextButton *fTextButton6367 = 
new TGTextButton(vf, 
"v", -1, 
 
  231                 TGButton::GetDefaultGC()(), 
 
  232                 TGTextButton::GetDefaultFontStruct(),
 
  233                 kRaisedFrame | kDoubleBorder | kFixedSize);
 
  234    fTextButton6367->Resize(20,20);
 
  235    vf->AddFrame(fTextButton6367, 
new TGTableLayoutHints(1, 2, 2, 3,
 
  236                 kLHintsLeft | kLHintsTop, 1, 1, 1, 1));
 
  238    TGTextButton *fTextButton6364 = 
new TGTextButton(vf, 
"<", -1, 
 
  239                 TGButton::GetDefaultGC()(), 
 
  240                 TGTextButton::GetDefaultFontStruct(),
 
  241                 kRaisedFrame | kDoubleBorder | kFixedSize);
 
  242    fTextButton6364->Resize(20,20);
 
  243    vf->AddFrame(fTextButton6364, 
new TGTableLayoutHints(0, 1, 1, 2,
 
  244                 kLHintsLeft | kLHintsTop, 1, 1, 1, 1));
 
  246    TGTextButton *fTextButton6365 = 
new TGTextButton(vf, 
">", -1, 
 
  247                 TGButton::GetDefaultGC()(), 
 
  248                 TGTextButton::GetDefaultFontStruct(),
 
  249                 kRaisedFrame | kDoubleBorder | kFixedSize);
 
  250    fTextButton6365->Resize(20,20);
 
  251    vf->AddFrame(fTextButton6365, 
new TGTableLayoutHints(2, 3, 1, 2,
 
  252                 kLHintsLeft | kLHintsTop, 1, 1, 1, 1));
 
  254    hf->AddFrame(vf, 
new TGLayoutHints(kLHintsCenterX | kLHintsCenterY));
 
  256    fPositionFrame->AddFrame(hf, 
new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
 
  258    fTablay->AddFrame(fPositionFrame, 
new TGLayoutHints(kLHintsTop | kLHintsExpandX));
 
  260    fXpos->Connect(
"ValueSet(Long_t)", 
"TGuiBldHintsEditor", fHintsFrame, 
"SetPosition()");
 
  261    fYpos->Connect(
"ValueSet(Long_t)", 
"TGuiBldHintsEditor", fHintsFrame, 
"SetPosition()");
 
  263    fTextButton6364->Connect(
"Clicked()", 
"TGNumberEntry", fXpos, 
"IncreaseNumber(TGNumberFormat::EStepSize=0,-1)");
 
  264    fTextButton6364->Connect(
"Clicked()", 
"TGuiBldHintsEditor", fHintsFrame, 
"SetPosition()");
 
  265    fTextButton6365->Connect(
"Clicked()", 
"TGNumberEntry", fXpos, 
"IncreaseNumber()");
 
  266    fTextButton6365->Connect(
"Clicked()", 
"TGuiBldHintsEditor", fHintsFrame, 
"SetPosition()");
 
  267    fTextButton6366->Connect(
"Clicked()", 
"TGNumberEntry", fYpos, 
"IncreaseNumber(TGNumberFormat::EStepSize=0,-1)");
 
  268    fTextButton6366->Connect(
"Clicked()", 
"TGuiBldHintsEditor", fHintsFrame, 
"SetPosition()");
 
  269    fTextButton6367->Connect(
"Clicked()", 
"TGNumberEntry", fYpos, 
"IncreaseNumber()");
 
  270    fTextButton6367->Connect(
"Clicked()", 
"TGuiBldHintsEditor", fHintsFrame, 
"SetPosition()");
 
  274    fBorderFrame = 
new TGuiBldBorderFrame(tabcont, 
this);
 
  275    tabcont->AddFrame(fBorderFrame, 
new TGLayoutHints(kLHintsExpandX, 2, 2, 2, 2));
 
  278    SetWindowName(
"Frame Property Editor");
 
  287 TGuiBldEditor::~TGuiBldEditor()
 
  294 void TGuiBldEditor::RemoveFrame(TGFrame *frame)
 
  296    fNameFrame->RemoveFrame(frame);
 
  302 void TGuiBldEditor::TabSelected(Int_t 
id)
 
  304    if (
id == fLayoutId) {
 
  312 void TGuiBldEditor::Hide()
 
  320 void TGuiBldEditor::ChangeSelected(TGFrame *frame)
 
  322    TGTabElement *tab = fTab->GetTabTab(fLayoutId);
 
  325       fNameFrame->ChangeSelected(0);
 
  328          tab->SetEnabled(kFALSE);
 
  329          fClient->NeedRedraw(tab);
 
  335    TGWindow *parent = (TGWindow*)fSelected->GetParent();
 
  337    fNameFrame->ChangeSelected(fSelected);
 
  339    Bool_t enable_layout = kFALSE;
 
  340    enable_layout |= parent && !(parent->GetEditDisabled() & kEditDisableLayout);
 
  341    enable_layout |= !(fSelected->GetEditDisabled() & kEditDisableLayout);
 
  342    enable_layout |= parent && (parent->InheritsFrom(TGCompositeFrame::Class()) &&
 
  343                      !((TGCompositeFrame*)parent)->IsLayoutBroken());
 
  344    enable_layout |= (fSelected->InheritsFrom(TGCompositeFrame::Class()) &&
 
  345                      !((TGCompositeFrame*)fSelected)->IsLayoutBroken());
 
  348       fHintsFrame->ChangeSelected(fSelected);
 
  351          tab->SetEnabled(kTRUE);
 
  352          fClient->NeedRedraw(tab);
 
  355       fHintsFrame->ChangeSelected(0);
 
  359          tab->SetEnabled(kFALSE);
 
  360          fClient->NeedRedraw(tab);
 
  364    if ((frame->InheritsFrom(TGHorizontalFrame::Class())) ||
 
  365        (frame->InheritsFrom(TGVerticalFrame::Class())) ||
 
  366        (frame->InheritsFrom(TGGroupFrame::Class())) ) {
 
  368       fLayoutButton->SetEnabled(kTRUE);
 
  369       if (fSelected->IsLayoutBroken()) {
 
  370          fLayoutButton->SetText(
"    Enable layout    ");
 
  371          fLayoutLabel->SetText(
"Automatic layout disabled");
 
  373             fTablay->ShowFrame(fGeomFrame);
 
  374             fTablay->ShowFrame(fPositionFrame);
 
  375             fTablay->HideFrame(fHintsFrame);
 
  378          fLayoutButton->SetText(
"    Disable layout    ");
 
  379          fLayoutLabel->SetText(
"Automatic layout enabled");
 
  381             fTablay->HideFrame(fGeomFrame);
 
  382             fTablay->HideFrame(fPositionFrame);
 
  383             fTablay->ShowFrame(fHintsFrame);
 
  388       fLayoutButton->SetEnabled(kFALSE);
 
  389       TGFrame *parentf = (TGFrame*)frame->GetParent();
 
  390       if (parentf->IsLayoutBroken()) {
 
  391          fLayoutButton->SetText(
"    Enable layout    ");
 
  392          fLayoutLabel->SetText(
"Automatic layout disabled");
 
  393          fTablay->ShowFrame(fGeomFrame);
 
  394          fTablay->ShowFrame(fPositionFrame);
 
  395          fTablay->HideFrame(fHintsFrame);
 
  397          fLayoutButton->SetText(
"    Disable layout    ");
 
  398          fLayoutLabel->SetText(
"Automatic layout enabled");
 
  399          fTablay->HideFrame(fGeomFrame);
 
  400          fTablay->HideFrame(fPositionFrame);
 
  401          fTablay->ShowFrame(fHintsFrame);
 
  405    fYpos->SetIntNumber(frame->GetY());
 
  406    fXpos->SetIntNumber(frame->GetX());
 
  408    if (fBorderFrame) fBorderFrame->ChangeSelected(fSelected);
 
  409    if (fGeomFrame) fGeomFrame->ChangeSelected(fSelected);
 
  411    Emit(
"ChangeSelected(TGFrame*)", (
long)fSelected);
 
  419 void TGuiBldEditor::UpdateSelected(TGFrame *frame)
 
  421    Emit(
"UpdateSelected(TGFrame*)", (
long)frame);
 
  427 void TGuiBldEditor::UpdateBorder(Int_t b)
 
  429    if (!fSelected) 
return;
 
  431    UInt_t opt = fSelected->GetOptions();
 
  435          opt &= ~kRaisedFrame;
 
  439          opt &= ~kSunkenFrame;
 
  440          opt &= ~kRaisedFrame;
 
  443          opt &= ~kSunkenFrame;
 
  447          opt |= kDoubleBorder;
 
  450          opt &= ~kDoubleBorder;
 
  455    fSelected->ChangeOptions(opt);
 
  456    fClient->NeedRedraw(fSelected, kTRUE);
 
  462 void TGuiBldEditor::UpdateBackground(Pixel_t col)
 
  464    if (!fSelected) 
return;
 
  466    fSelected->SetBackgroundColor(col);
 
  467    fClient->NeedRedraw(fSelected, kTRUE);
 
  473 void TGuiBldEditor::UpdateForeground(Pixel_t col)
 
  475    if (!fSelected) 
return;
 
  477    fSelected->SetForegroundColor(col);
 
  478    fClient->NeedRedraw(fSelected, kTRUE);
 
  484 void TGuiBldEditor::Reset()
 
  488    TGTabElement *tab = fTab->GetTabTab(fLayoutId);
 
  491       tab->SetEnabled(kFALSE);
 
  499 void TGuiBldEditor::SwitchLayout()
 
  502       fLayoutButton->SetText(
"    Enable layout    ");
 
  503       fLayoutButton->SetEnabled(kFALSE);
 
  504       fLayoutLabel->SetText(
"Automatic layout disabled");
 
  506          fTablay->ShowFrame(fGeomFrame);
 
  507          fTablay->ShowFrame(fPositionFrame);
 
  508          fTablay->HideFrame(fHintsFrame);
 
  513    TRootGuiBuilder *builder = (TRootGuiBuilder*)TRootGuiBuilder::Instance();
 
  514    TGFrame *frame = fSelected;
 
  515    TGCompositeFrame *cf = fNameFrame->GetMdi(frame);
 
  518    if (frame->IsLayoutBroken()) {
 
  520       builder->GetManager()->SetEditable(kFALSE);
 
  521       new TGMsgBox(gClient->GetDefaultRoot(), builder, 
"Layout change",
 
  522                    "Enabling layout will automatically align and resize all the icons. \n Do you really want to layout them?",
 
  523                    kMBIconExclamation, kMBOk | kMBCancel, &retval);
 
  525       cf->SetEditable(kTRUE);
 
  527       builder->GetManager()->SelectFrame(frame);
 
  528       frame->SetEditable(kTRUE);
 
  530       if (retval == kMBOk) {
 
  531          frame->SetLayoutBroken(kFALSE);
 
  533          fLayoutButton->SetText(
"    Disable layout    ");
 
  534          fLayoutLabel->SetText(
"Automatic layout enabled");
 
  536             fTablay->HideFrame(fGeomFrame);
 
  537             fTablay->HideFrame(fPositionFrame);
 
  538             fTablay->ShowFrame(fHintsFrame);
 
  539             fTablay->Resize(fHintsFrame->GetWidth(),fHintsFrame->GetHeight());
 
  544       frame->SetLayoutBroken(kTRUE);
 
  545       fLayoutButton->SetText(
"    Enable layout    ");
 
  546       fLayoutLabel->SetText(
"Automatic layout disabled");
 
  548          fTablay->ShowFrame(fGeomFrame);
 
  549          fTablay->ShowFrame(fPositionFrame);
 
  550          fTablay->HideFrame(fHintsFrame);
 
  553    fClient->NeedRedraw(frame, kTRUE);
 
  554    if (fTablay) fClient->NeedRedraw(fTablay, kTRUE);