TGuiBldHintsEditor.cxx

Go to the documentation of this file.
00001 // @(#)root/guibuilder:$Id: TGuiBldHintsEditor.cxx 30063 2009-09-08 12:15:59Z bellenot $
00002 // Author: Valeriy Onuchin   12/09/04
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 #include "TGuiBldHintsEditor.h"
00013 #include "TGuiBldHintsButton.h"
00014 #include "TGNumberEntry.h"
00015 #include "TGuiBldEditor.h"
00016 #include "TGLabel.h"
00017 #include "TG3DLine.h"
00018 #include "TGuiBldNameFrame.h"
00019 #include "TGuiBldGeometryFrame.h"
00020 #include "TRootGuiBuilder.h"
00021 #include "TGTableLayout.h"
00022 
00023 //_____________________________________________________________________________
00024 //
00025 // TGuiBldHintsEditor
00026 //
00027 // Editor of widget's layout hints used by the ROOT GUI builder.
00028 //_____________________________________________________________________________
00029 
00030 ClassImp(TGuiBldHintsEditor)
00031 
00032 ////////////////////////////////////////////////////////////////////////////////
00033 class TGuiBldHintsManager : public TGVerticalFrame {
00034 
00035 public:
00036    TGuiBldEditor  *fEditor;
00037    TGNumberEntry  *fColumns;
00038    TGNumberEntry  *fRows;
00039    TGuiBldHintsEditor *fHints;
00040    TGMatrixLayout *fMatrix;
00041 
00042    UInt_t  fPadTop;      // save values
00043    UInt_t  fPadBottom;   //
00044    UInt_t  fPadLeft;     //
00045    UInt_t  fPadRight;    //
00046 
00047 public:
00048    TGuiBldHintsManager(const TGWindow *p, TGuiBldEditor *editor, TGuiBldHintsEditor *hints);
00049    virtual ~TGuiBldHintsManager() { }
00050    void ChangeSelected(TGFrame *frame);
00051 };
00052 
00053 //______________________________________________________________________________
00054 TGuiBldHintsManager::TGuiBldHintsManager(const TGWindow *p, TGuiBldEditor *e,
00055                                           TGuiBldHintsEditor *hints) :
00056                      TGVerticalFrame(p, 1, 1), fEditor(e), fHints(hints)
00057 {
00058    // Constructor.
00059 
00060    fEditDisabled = kEditDisable;
00061    SetCleanup(kDeepCleanup);
00062    fRows = 0;
00063    fColumns = 0;
00064 
00065    //-----check button to layout subframes was moved to HintsEditor to be generalized ------
00066 
00067    // "Matrix layout" group frame
00068    TGGroupFrame *fGroupFrame4066 = new TGGroupFrame(this, "Matrix layout");
00069    TGHorizontalFrame *f = new TGHorizontalFrame(fGroupFrame4066);
00070 
00071    f->AddFrame(new TGLabel(f," Cols "), new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
00072    fColumns = new TGNumberEntry(f,0.0,4,-1,(TGNumberFormat::EStyle)5);
00073    f->AddFrame(fColumns, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
00074 
00075    f->AddFrame(new TGLabel(f," Rows "), new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
00076    fRows = new TGNumberEntry(f,0.0,4,-1,(TGNumberFormat::EStyle)5);
00077    f->AddFrame(fRows, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
00078 
00079    fGroupFrame4066->AddFrame(f, new TGLayoutHints(kLHintsExpandX | kLHintsCenterY, 2, 2, 2, 2));
00080 
00081    TGTextButton *fAppButton = new TGTextButton(fGroupFrame4066, " Apply ");
00082    fGroupFrame4066->AddFrame(fAppButton, new TGLayoutHints(kLHintsExpandX | kLHintsCenterY, 5, 5, 2, 2));
00083 
00084    AddFrame(fGroupFrame4066, new TGLayoutHints(kLHintsTop | kLHintsExpandX));
00085 
00086    fAppButton->Connect("Clicked()", "TGuiBldHintsEditor", fHints, "MatrixLayout()");
00087    //fRows->Connect("ValueSet(Long_t)", "TGuiBldHintsEditor", fHints, "MatrixLayout()");
00088    //fColumns->Connect("ValueSet(Long_t)", "TGuiBldHintsEditor", fHints, "MatrixLayout()");
00089    fRows->GetNumberEntry()->Connect("ReturnPressed()", "TGuiBldHintsEditor", fHints, "MatrixLayout()");
00090    fColumns->GetNumberEntry()->Connect("ReturnPressed()", "TGuiBldHintsEditor", fHints, "MatrixLayout()");
00091    fRows->SetLimits(TGNumberFormat::kNELLimitMin, 1);
00092    fColumns->SetLimits(TGNumberFormat::kNELLimitMin, 1);
00093 
00094    fPadTop = 2;
00095    fPadBottom = 2;
00096    fPadLeft = 2;
00097    fPadRight = 2;
00098 
00099    MapSubwindows();
00100    Resize();
00101    MapWindow();
00102 }
00103 
00104 //______________________________________________________________________________
00105 void TGuiBldHintsManager::ChangeSelected(TGFrame *frame)
00106 {
00107    // action whne selcted/grabbed frame was changed
00108 
00109    fMatrix = 0;
00110 
00111    if (!frame) {
00112       UnmapWindow();
00113       fHints->fLayButton->SetEnabled(kFALSE);
00114       fHints->fLayButton->SetDown(kFALSE);
00115       fRows->SetNumber(0);
00116       fColumns->SetNumber(0);
00117       return;
00118    }
00119 
00120    Bool_t enable = frame->InheritsFrom(TGCompositeFrame::Class()) &&
00121                    !(frame->GetEditDisabled() & kEditDisableLayout);
00122 
00123    if (!enable) {
00124       UnmapWindow();
00125       fHints->fLayButton->SetEnabled(kFALSE);
00126       fHints->fLayButton->SetDown(kFALSE);
00127       fRows->SetNumber(0);
00128       fColumns->SetNumber(0);
00129    } else {
00130       TGCompositeFrame *comp = (TGCompositeFrame*)frame;
00131       TGLayoutManager *lm = comp->GetLayoutManager();
00132 
00133       if (!lm) {
00134          return;
00135       }
00136       Int_t n = comp->GetList()->GetEntries();
00137 
00138       MapWindow();
00139       fHints->fLayButton->SetEnabled(kTRUE);
00140       fHints->fLayButton->SetDown(kFALSE);
00141 
00142       if (lm->IsA() == TGVerticalLayout::Class()) {
00143          fRows->SetNumber(n);
00144          fColumns->SetNumber(1);
00145       } else if (lm->IsA() == TGHorizontalLayout::Class()) {
00146          fColumns->SetNumber(n);
00147          fRows->SetNumber(1);
00148       } else if (lm->IsA() == TGMatrixLayout::Class()) {
00149          fMatrix = (TGMatrixLayout*)lm;
00150 
00151          fColumns->SetNumber(fMatrix->fColumns);
00152          fRows->SetNumber(fMatrix->fRows);
00153       }
00154    }
00155    DoRedraw();
00156 }
00157 
00158 ///////////////////////////////////////////////////////////////////////////////
00159 //______________________________________________________________________________
00160 TGuiBldHintsEditor::TGuiBldHintsEditor(const TGWindow *p, TGuiBldEditor *e) :
00161                      TGVerticalFrame(p, 1, 1), fEditor(e)
00162 {
00163    // ctor.
00164 
00165    SetCleanup(kDeepCleanup);
00166 
00167    fBuilder = (TRootGuiBuilder*)TRootGuiBuilder::Instance();
00168 
00169    TGVerticalFrame *frame3 = new TGVerticalFrame(this,262,18,kVerticalFrame);
00170 
00171    // horizontal frame - layout subframes (token from matrix layout)
00172    TGHorizontalFrame *framez399 = new TGHorizontalFrame(frame3,123,40,kHorizontalFrame);
00173    fLayButton = new TGCheckButton(framez399,"");
00174    framez399->AddFrame(fLayButton, new TGLayoutHints(kLHintsLeft | kLHintsTop,0,1,2,2));
00175    TGLabel *framez401 = new TGLabel(framez399,"Layout subframes");
00176    framez399->AddFrame(framez401, new TGLayoutHints(kLHintsLeft | kLHintsCenterX | kLHintsTop,1,1,2,2));
00177 
00178    frame3->AddFrame(framez399, new TGLayoutHints(kLHintsLeft | kLHintsCenterX | kLHintsTop,1,1,1,1));
00179 
00180    fLayButton->Connect("Toggled(Bool_t)", "TGuiBldHintsEditor", this, "LayoutSubframes(Bool_t)");
00181 
00182    //--------layout hints in new layout---------------------------------------
00183 
00184    // "Padding" group frame
00185    fPaddingFrame = new TGGroupFrame(frame3, "Padding");
00186    fPaddingFrame->SetLayoutManager(new TGTableLayout(fPaddingFrame, 2, 4));
00187    
00188    fPaddingFrame->AddFrame(new TGLabel(fPaddingFrame,"Top "), 
00189                            new TGTableLayoutHints(0, 1, 0, 1, 
00190                            kLHintsRight | kLHintsCenterY, 0, 2, 2, 2));
00191    fPadTop = new TGNumberEntry(fPaddingFrame,0.0,4,-1,(TGNumberFormat::EStyle) 5);
00192    fPaddingFrame->AddFrame(fPadTop, new TGTableLayoutHints(1, 2, 0, 1,
00193                            kLHintsLeft | kLHintsCenterY, 0, 0, 2, 2));
00194 
00195    fPaddingFrame->AddFrame(new TGLabel(fPaddingFrame," Left "),
00196                            new TGTableLayoutHints(2, 3, 0, 1, 
00197                            kLHintsRight | kLHintsCenterY, 2, 2, 2, 2));
00198    fPadLeft = new TGNumberEntry(fPaddingFrame,0.0,4,-1,(TGNumberFormat::EStyle) 5);
00199    fPaddingFrame->AddFrame(fPadLeft, new TGTableLayoutHints(3, 4, 0, 1,
00200                            kLHintsLeft | kLHintsCenterY, 0, 0, 2, 2));
00201 
00202    fPaddingFrame->AddFrame(new TGLabel(fPaddingFrame,"Bottom "),
00203                            new TGTableLayoutHints(0, 1, 1, 2, 
00204                            kLHintsRight | kLHintsCenterY, 0, 2, 2, 2));
00205    fPadBottom = new TGNumberEntry(fPaddingFrame,0.0,4,-1,(TGNumberFormat::EStyle) 5);
00206    fPaddingFrame->AddFrame(fPadBottom, new TGTableLayoutHints(1, 2, 1, 2,
00207                            kLHintsLeft | kLHintsCenterY, 0, 0, 2, 2));
00208 
00209    fPaddingFrame->AddFrame(new TGLabel(fPaddingFrame," Right "),
00210                            new TGTableLayoutHints(2, 3, 1, 2, 
00211                            kLHintsRight | kLHintsCenterY, 2, 2, 2, 2));
00212    fPadRight = new TGNumberEntry(fPaddingFrame,0.0,4,-1,(TGNumberFormat::EStyle) 5);
00213    fPaddingFrame->AddFrame(fPadRight, new TGTableLayoutHints(3, 4, 1, 2,
00214                            kLHintsLeft | kLHintsCenterY, 0, 0, 2, 2));
00215 
00216    frame3->AddFrame(fPaddingFrame, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 2, 2, 2));
00217 
00218    // "Layout" group frame
00219    fHintsFrame = new TGGroupFrame(frame3,"Layout");
00220 
00221    fHintsFrame->SetLayoutManager(new TGTableLayout(fHintsFrame, 4, 2));
00222 
00223    fCbTop = new TGCheckButton(fHintsFrame, "Top");
00224    fHintsFrame->AddFrame(fCbTop, new TGTableLayoutHints(0, 1, 0, 1,
00225                          kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2));
00226 
00227    fCbBottom = new TGCheckButton(fHintsFrame, "Bottom");
00228    fHintsFrame->AddFrame(fCbBottom, new TGTableLayoutHints(0, 1, 1, 2,
00229                          kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2));
00230 
00231    fCbLeft = new TGCheckButton(fHintsFrame, "Left");
00232    fHintsFrame->AddFrame(fCbLeft, new TGTableLayoutHints(0, 1, 2, 3,
00233                          kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2));
00234 
00235    fCbRight = new TGCheckButton(fHintsFrame, "Right");
00236    fHintsFrame->AddFrame(fCbRight, new TGTableLayoutHints(0, 1, 3, 4,
00237                          kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2));
00238 
00239    fCbCenterX = new TGCheckButton(fHintsFrame, "Center in X");
00240    fHintsFrame->AddFrame(fCbCenterX, new TGTableLayoutHints(1, 2, 0, 1,
00241                          kLHintsLeft | kLHintsCenterY, 9, 2, 2, 2));
00242 
00243    fCbCenterY = new TGCheckButton(fHintsFrame, "Center in Y");
00244    fHintsFrame->AddFrame(fCbCenterY, new TGTableLayoutHints(1, 2, 1, 2,
00245                          kLHintsLeft | kLHintsCenterY, 9, 2, 2, 2));
00246 
00247    fCbExpandX = new TGCheckButton(fHintsFrame, "Expand in X");
00248    fHintsFrame->AddFrame(fCbExpandX, new TGTableLayoutHints(1, 2, 2, 3,
00249                          kLHintsLeft | kLHintsCenterY, 9, 2, 2, 2));
00250 
00251    fCbExpandY = new TGCheckButton(fHintsFrame, "Expand in Y");
00252    fHintsFrame->AddFrame(fCbExpandY, new TGTableLayoutHints(1, 2, 3, 4,
00253                          kLHintsLeft | kLHintsCenterY, 9, 2, 2, 2));
00254 
00255    frame3->AddFrame(fHintsFrame, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 2, 2, 2));
00256 
00257    fHintsManager = new TGuiBldHintsManager(frame3, e, this);
00258    frame3->AddFrame(fHintsManager, new TGLayoutHints(kLHintsBottom | kLHintsExpandX,2,2,2,2));
00259    fHintsManager->UnmapWindow();
00260    AddFrame(frame3);
00261 
00262    SetEditDisabled(1);
00263    Resize();
00264    MapSubwindows();
00265    MapWindow();
00266 
00267    fCbTop->Connect("Clicked()", "TGButton", fCbBottom, "SetDown(=kFALSE)");
00268    fCbBottom->Connect("Clicked()",  "TGButton", fCbTop, "SetDown(=kFALSE)");
00269    fCbRight->Connect("Clicked()",  "TGButton", fCbLeft, "SetDown(=kFALSE)");
00270    fCbLeft->Connect("Clicked()",  "TGButton", fCbRight, "SetDown(=kFALSE)");
00271 
00272    fCbTop->Connect("Clicked()", "TGuiBldHintsEditor", this, "UpdateState()");
00273    fCbBottom->Connect("Clicked()", "TGuiBldHintsEditor", this, "UpdateState()");
00274    fCbRight->Connect("Clicked()", "TGuiBldHintsEditor", this, "UpdateState()");
00275    fCbLeft->Connect("Clicked()", "TGuiBldHintsEditor", this, "UpdateState()");
00276    fCbExpandX->Connect("Clicked()", "TGuiBldHintsEditor", this, "UpdateState()");
00277    fCbCenterX->Connect("Clicked()", "TGuiBldHintsEditor", this, "UpdateState()");
00278    fCbExpandY->Connect("Clicked()", "TGuiBldHintsEditor", this, "UpdateState()");
00279    fCbCenterY->Connect("Clicked()", "TGuiBldHintsEditor", this, "UpdateState()");
00280 
00281    fPadTop->Connect("ValueSet(Long_t)", "TGuiBldHintsEditor", this, "UpdateState()");
00282    fPadLeft->Connect("ValueSet(Long_t)", "TGuiBldHintsEditor", this, "UpdateState()");
00283    fPadRight->Connect("ValueSet(Long_t)", "TGuiBldHintsEditor", this, "UpdateState()");
00284    fPadBottom->Connect("ValueSet(Long_t)", "TGuiBldHintsEditor", this, "UpdateState()");
00285 
00286    fPadTop->GetNumberEntry()->Connect("ReturnPressed()", "TGuiBldHintsEditor", this, "UpdateState()");
00287    fPadLeft->GetNumberEntry()->Connect("ReturnPressed()", "TGuiBldHintsEditor", this, "UpdateState()");
00288    fPadRight->GetNumberEntry()->Connect("ReturnPressed()", "TGuiBldHintsEditor", this, "UpdateState()");
00289    fPadBottom->GetNumberEntry()->Connect("ReturnPressed()", "TGuiBldHintsEditor", this, "UpdateState()");
00290 }
00291 
00292 
00293 //______________________________________________________________________________
00294 void  TGuiBldHintsEditor::ChangeSelected(TGFrame *frame)
00295 {
00296    // Change selected
00297 
00298    if (!frame) {
00299       return;
00300    }
00301    TGFrameElement *fe = frame->GetFrameElement();
00302 
00303    if (!fe) {
00304       return;
00305    }
00306 
00307    fHintsManager->ChangeSelected(frame);
00308 
00309    ULong_t lh = fe->fLayout->GetLayoutHints();
00310 
00311    fCbCenterX->SetEnabled(kTRUE);
00312    fCbCenterY->SetEnabled(kTRUE);
00313    fCbExpandX->SetEnabled(!(frame->GetEditDisabled() & kEditDisableWidth));
00314    fCbExpandY->SetEnabled(!(frame->GetEditDisabled() & kEditDisableHeight));
00315    fClient->NeedRedraw(fCbExpandX);
00316    fClient->NeedRedraw(fCbExpandY);
00317 
00318    fCbTop->SetEnabled(kTRUE);
00319    fCbRight->SetEnabled(kTRUE);
00320    fCbLeft->SetEnabled(kTRUE);
00321    fCbBottom->SetEnabled(kTRUE);
00322 
00323    fCbCenterX->SetDown(lh & kLHintsCenterX);
00324    fCbCenterY->SetDown(lh & kLHintsCenterY);
00325    fCbExpandX->SetDown(lh & kLHintsExpandX);
00326    fCbExpandY->SetDown(lh & kLHintsExpandY);
00327 
00328    fCbTop->SetDown(lh & kLHintsTop);
00329    fCbRight->SetDown(lh & kLHintsRight);
00330    fCbLeft->SetDown(lh & kLHintsLeft);
00331    fCbBottom->SetDown(lh & kLHintsBottom);
00332 
00333    fPadTop->SetIntNumber(fe->fLayout->GetPadTop());
00334    fPadLeft->SetIntNumber(fe->fLayout->GetPadLeft());
00335    fPadRight->SetIntNumber(fe->fLayout->GetPadRight());
00336    fPadBottom->SetIntNumber(fe->fLayout->GetPadBottom());
00337 }
00338 
00339 //______________________________________________________________________________
00340 void TGuiBldHintsEditor::UpdateState()
00341 {
00342    // Update state
00343 
00344    TGFrame *frame = fEditor->GetSelected();
00345 
00346    if (!frame) {
00347       return;
00348    }
00349 
00350    TGFrameElement *fe = frame->GetFrameElement();
00351 
00352    if (!fe) {
00353       return;
00354    }
00355 
00356    if (fLayButton->IsDown() &&
00357        ((gTQSender == fPadTop) || (gTQSender == fPadBottom) ||
00358        (gTQSender == fPadLeft) || (gTQSender == fPadRight))) {
00359       SetMatrixSep();
00360       return;
00361    }
00362 
00363    ULong_t lh = fe->fLayout->GetLayoutHints();
00364 
00365    if (fCbCenterX->IsDown()) {
00366       lh |= kLHintsCenterX;
00367    } else {
00368       lh &= ~kLHintsCenterX;
00369    }
00370 
00371    if (fCbCenterY->IsDown()) {
00372       lh |= kLHintsCenterY;
00373    } else {
00374       lh &= ~kLHintsCenterY;
00375    }
00376 
00377    if (fCbExpandX->IsDown()) {
00378       lh |= kLHintsExpandX;
00379    } else {
00380       lh &= ~kLHintsExpandX;
00381    }
00382 
00383    if (fCbExpandY->IsDown()) {
00384       lh |= kLHintsExpandY;
00385    } else {
00386       lh &= ~kLHintsExpandY;
00387    }
00388 
00389    if (fCbTop->IsDown()) {
00390       lh |= kLHintsTop;
00391       lh &= ~kLHintsBottom;
00392    } else {
00393       lh &= ~kLHintsTop;
00394    }
00395 
00396    if (fCbBottom->IsDown()) {
00397       lh |= kLHintsBottom;
00398       lh &= ~kLHintsTop;
00399    } else {
00400       lh &= ~kLHintsBottom;
00401    }
00402 
00403    if (fCbRight->IsDown()) {
00404       lh |= kLHintsRight;
00405       lh &= ~kLHintsLeft;
00406    } else {
00407       lh &= ~kLHintsRight;
00408    }
00409 
00410    if (fCbLeft->IsDown()) {
00411       lh |= kLHintsLeft;
00412       lh &= ~kLHintsRight;
00413    } else {
00414       lh &= ~kLHintsLeft;
00415    }
00416 
00417    if (fPadLeft->GetIntNumber() >=0) {
00418      fe->fLayout->SetPadLeft(fPadLeft->GetIntNumber());
00419    }
00420    if (fPadRight->GetIntNumber() >=0) {
00421      fe->fLayout->SetPadRight(fPadRight->GetIntNumber());
00422    }
00423    if (fPadTop->GetIntNumber() >=0) {
00424      fe->fLayout->SetPadTop(fPadTop->GetIntNumber());
00425    }
00426    if (fPadBottom->GetIntNumber() >=0) {
00427      fe->fLayout->SetPadBottom(fPadBottom->GetIntNumber());
00428    }
00429 
00430    if (fe->fLayout->References() > 1) {
00431       TGLayoutHints *lh2 = new TGLayoutHints(*fe->fLayout);
00432       fe->fLayout->RemoveReference();
00433       lh2->AddReference();
00434       fe->fLayout = lh2;
00435    } else {
00436       fe->fLayout->SetLayoutHints(lh);
00437    }
00438 
00439    fEditor->UpdateSelected(frame);
00440 }
00441 
00442 //______________________________________________________________________________
00443 void TGuiBldHintsEditor::SetPosition()
00444 {
00445    // Set the position of selected frame when adjusted by the right panel input.
00446 
00447    if (!fEditor) {
00448       return;
00449    }
00450    TGFrame *frame = fEditor->GetSelected();
00451 
00452    if (!frame) {
00453       //fNameFrame->Reset();
00454       return;
00455    }
00456 
00457    if ((fEditor->GetXPos() >= 0) && (fEditor->GetYPos() >= 0)) {
00458       frame->MoveResize(fEditor->GetXPos(), fEditor->GetYPos(),
00459                         frame->GetWidth(), frame->GetHeight());
00460       fClient->NeedRedraw(frame, kTRUE);
00461       TGWindow *root = (TGWindow*)fClient->GetRoot();
00462       fClient->NeedRedraw(root, kTRUE);
00463       if (fBuilder) {
00464          fClient->NeedRedraw(fBuilder, kTRUE);
00465       }
00466    } else {
00467       fEditor->SetYPos(frame->GetY());
00468       fEditor->SetXPos(frame->GetX());
00469    }
00470 }
00471 
00472 
00473 //______________________________________________________________________________
00474 void TGuiBldHintsEditor::LayoutSubframes(Bool_t on)
00475 {
00476    // Layout subframes.
00477 
00478    if (!fEditor) {
00479       return;
00480    }
00481    TGFrame *frame = fEditor->GetSelected();
00482 
00483    if (!frame) {
00484       //fNameFrame->Reset();
00485       return;
00486    }
00487 
00488    TGFrameElement *fe = frame->GetFrameElement();
00489 
00490    if (!fe) {
00491       //fNameFrame->Reset();
00492       return;
00493    }
00494 
00495    Bool_t enable = frame->InheritsFrom(TGCompositeFrame::Class()) &&
00496                    !(frame->GetEditDisabled() & kEditDisableLayout);
00497 
00498    if (!on) {
00499       fPadTop->SetIntNumber(fHintsManager->fPadTop);
00500       fPadBottom->SetIntNumber(fHintsManager->fPadBottom);
00501       fPadLeft->SetIntNumber(fHintsManager->fPadLeft);
00502       fPadRight->SetIntNumber(fHintsManager->fPadRight);
00503 
00504       ChangeSelected(frame);
00505       return;
00506    }
00507    if (!enable) {
00508       return;
00509    }
00510 
00511    TGCompositeFrame *comp = (TGCompositeFrame*)frame;
00512    fHintsManager->fRows->SetState(kTRUE);
00513    fHintsManager->fColumns->SetState(kTRUE);
00514    comp->SetLayoutBroken(kFALSE);
00515 
00516    if (!fHintsManager->fMatrix) {
00517       if (!(frame->GetParent()->GetEditDisabled() & kEditDisableLayout)) {
00518          //comp->Resize();
00519          comp->Layout();
00520       } else {
00521          if (comp->GetLayoutManager()) {
00522             comp->GetLayoutManager()->Layout();
00523          } else {
00524             comp->Layout();
00525          }
00526       }
00527       return;
00528    }
00529 
00530    MatrixLayout();
00531 
00532 }
00533 
00534 //______________________________________________________________________________
00535 void TGuiBldHintsEditor::SetMatrixSep()
00536 {
00537    // Set matrix layout separator.
00538 
00539    TGFrame *frame = fEditor->GetSelected();
00540 
00541    if (!frame) {
00542       //fNameFrame->Reset();
00543       return;
00544    }
00545 
00546    TGFrameElement *fe = frame->GetFrameElement();
00547 
00548    if (!fe) {
00549       //fNameFrame->Reset();
00550       return;
00551    }
00552 
00553    Bool_t enable = frame->InheritsFrom(TGCompositeFrame::Class()) &&
00554                    !(frame->GetEditDisabled() & kEditDisableLayout) &&
00555                     ((TGCompositeFrame*)frame)->GetLayoutManager() &&
00556                     ((TGCompositeFrame*)frame)->GetLayoutManager()->InheritsFrom(TGMatrixLayout::Class());
00557 
00558    if (!enable) {
00559       return;
00560    }
00561 
00562    TGNumberEntry *ne = (TGNumberEntry*)gTQSender;
00563    UInt_t sep = ne->GetIntNumber();
00564 
00565    fPadTop->SetIntNumber(sep);
00566    fPadLeft->SetIntNumber(sep);
00567    fPadRight->SetIntNumber(sep);
00568    fPadBottom->SetIntNumber(sep);
00569    fLayButton->SetDown(kTRUE);
00570 
00571    fHintsManager->fMatrix->fSep = sep;
00572    frame->SetLayoutBroken(kFALSE);
00573 
00574    if (!(frame->GetParent()->GetEditDisabled() & kEditDisableLayout)) {
00575       frame->Resize();
00576    } else {
00577       fHintsManager->fMatrix->Layout();
00578    }
00579    fClient->NeedRedraw(frame, kTRUE);
00580 }
00581 
00582 //______________________________________________________________________________
00583 void TGuiBldHintsEditor::MatrixLayout()
00584 {
00585    // Apply matrix layout.
00586 
00587    TGFrame *frame = fEditor->GetSelected();
00588 
00589    if (!frame) {
00590       //fNameFrame->Reset();
00591       return;
00592    }
00593 
00594    TGFrameElement *fe = frame->GetFrameElement();
00595 
00596    if (!fe) {
00597       //fNameFrame->Reset();
00598       return;
00599    }
00600 
00601    Bool_t enable = frame->InheritsFrom(TGCompositeFrame::Class()) &&
00602                    !(frame->GetEditDisabled() & kEditDisableLayout);
00603 
00604    if (!enable) {
00605       return;
00606    }
00607 
00608    TGCompositeFrame *comp = (TGCompositeFrame*)frame;
00609 
00610    UInt_t rows = fHintsManager->fRows->GetIntNumber();
00611    UInt_t cols = fHintsManager->fColumns->GetIntNumber();
00612    UInt_t sep = fPadTop->GetIntNumber();
00613 
00614    fCbCenterX->SetEnabled(kFALSE);
00615    fCbCenterY->SetEnabled(kFALSE);
00616    fCbExpandX->SetEnabled(kFALSE);
00617    fCbExpandY->SetEnabled(kFALSE);
00618 
00619    fCbTop->SetEnabled(kFALSE);
00620    fCbRight->SetEnabled(kFALSE);
00621    fCbLeft->SetEnabled(kFALSE);
00622    fCbBottom->SetEnabled(kFALSE);
00623 
00624    fHintsManager->fPadTop = fPadTop->GetIntNumber();
00625    fHintsManager->fPadBottom = fPadBottom->GetIntNumber();
00626    fHintsManager->fPadLeft = fPadLeft->GetIntNumber();
00627    fHintsManager->fPadRight = fPadRight->GetIntNumber();
00628 
00629    fPadTop->SetIntNumber(sep);
00630    fPadLeft->SetIntNumber(sep);
00631    fPadRight->SetIntNumber(sep);
00632    fPadBottom->SetIntNumber(sep);
00633 
00634    fHintsManager->fRows->SetState(kTRUE);
00635    fHintsManager->fColumns->SetState(kTRUE);
00636 
00637    comp->SetLayoutBroken(kFALSE);
00638 
00639    fHintsManager->fMatrix = new TGMatrixLayout(comp, rows, cols, sep, 0);
00640    comp->SetLayoutManager(fHintsManager->fMatrix);
00641 
00642    if (!(comp->GetParent()->GetEditDisabled() & kEditDisableLayout)) {
00643       comp->Layout(); //resize?
00644    } else {
00645       fHintsManager->fMatrix->Layout();
00646    }
00647    fClient->NeedRedraw(comp, kTRUE);
00648 }

Generated on Tue Jul 5 14:22:14 2011 for ROOT_528-00b_version by  doxygen 1.5.1