30 ClassImp(TGuiBldHintsEditor);
33 class TGuiBldHintsManager :
public TGVerticalFrame {
36 TGuiBldEditor *fEditor;
37 TGNumberEntry *fColumns;
39 TGuiBldHintsEditor *fHints;
40 TGMatrixLayout *fMatrix;
48 TGuiBldHintsManager(
const TGWindow *p, TGuiBldEditor *editor, TGuiBldHintsEditor *hints);
49 virtual ~TGuiBldHintsManager() { }
50 void ChangeSelected(TGFrame *frame);
56 TGuiBldHintsManager::TGuiBldHintsManager(
const TGWindow *p, TGuiBldEditor *e,
57 TGuiBldHintsEditor *hints) :
58 TGVerticalFrame(p, 1, 1), fEditor(e), fHints(hints)
60 fEditDisabled = kEditDisable;
61 SetCleanup(kDeepCleanup);
68 TGGroupFrame *fGroupFrame4066 =
new TGGroupFrame(
this,
"Matrix layout");
69 TGHorizontalFrame *f =
new TGHorizontalFrame(fGroupFrame4066);
71 f->AddFrame(
new TGLabel(f,
" Cols "),
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
72 fColumns =
new TGNumberEntry(f,0.0,4,-1,(TGNumberFormat::EStyle)5);
73 f->AddFrame(fColumns,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
75 f->AddFrame(
new TGLabel(f,
" Rows "),
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
76 fRows =
new TGNumberEntry(f,0.0,4,-1,(TGNumberFormat::EStyle)5);
77 f->AddFrame(fRows,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
79 fGroupFrame4066->AddFrame(f,
new TGLayoutHints(kLHintsExpandX | kLHintsCenterY, 2, 2, 2, 2));
81 TGTextButton *fAppButton =
new TGTextButton(fGroupFrame4066,
" Apply ");
82 fGroupFrame4066->AddFrame(fAppButton,
new TGLayoutHints(kLHintsExpandX | kLHintsCenterY, 5, 5, 2, 2));
84 AddFrame(fGroupFrame4066,
new TGLayoutHints(kLHintsTop | kLHintsExpandX));
86 fAppButton->Connect(
"Clicked()",
"TGuiBldHintsEditor", fHints,
"MatrixLayout()");
89 fRows->GetNumberEntry()->Connect(
"ReturnPressed()",
"TGuiBldHintsEditor", fHints,
"MatrixLayout()");
90 fColumns->GetNumberEntry()->Connect(
"ReturnPressed()",
"TGuiBldHintsEditor", fHints,
"MatrixLayout()");
91 fRows->SetLimits(TGNumberFormat::kNELLimitMin, 1);
92 fColumns->SetLimits(TGNumberFormat::kNELLimitMin, 1);
107 void TGuiBldHintsManager::ChangeSelected(TGFrame *frame)
113 fHints->fLayButton->SetEnabled(kFALSE);
114 fHints->fLayButton->SetDown(kFALSE);
116 fColumns->SetNumber(0);
120 Bool_t enable = frame->InheritsFrom(TGCompositeFrame::Class()) &&
121 !(frame->GetEditDisabled() & kEditDisableLayout);
125 fHints->fLayButton->SetEnabled(kFALSE);
126 fHints->fLayButton->SetDown(kFALSE);
128 fColumns->SetNumber(0);
130 TGCompositeFrame *comp = (TGCompositeFrame*)frame;
131 TGLayoutManager *lm = comp->GetLayoutManager();
136 Int_t n = comp->GetList()->GetEntries();
139 fHints->fLayButton->SetEnabled(kTRUE);
140 fHints->fLayButton->SetDown(kFALSE);
142 if (lm->IsA() == TGVerticalLayout::Class()) {
144 fColumns->SetNumber(1);
145 }
else if (lm->IsA() == TGHorizontalLayout::Class()) {
146 fColumns->SetNumber(n);
148 }
else if (lm->IsA() == TGMatrixLayout::Class()) {
149 fMatrix = (TGMatrixLayout*)lm;
151 fColumns->SetNumber(fMatrix->fColumns);
152 fRows->SetNumber(fMatrix->fRows);
162 TGuiBldHintsEditor::TGuiBldHintsEditor(
const TGWindow *p, TGuiBldEditor *e) :
163 TGVerticalFrame(p, 1, 1), fEditor(e)
165 SetCleanup(kDeepCleanup);
167 fBuilder = (TRootGuiBuilder*)TRootGuiBuilder::Instance();
169 TGVerticalFrame *frame3 =
new TGVerticalFrame(
this,262,18,kVerticalFrame);
172 TGHorizontalFrame *framez399 =
new TGHorizontalFrame(frame3,123,40,kHorizontalFrame);
173 fLayButton =
new TGCheckButton(framez399,
"");
174 framez399->AddFrame(fLayButton,
new TGLayoutHints(kLHintsLeft | kLHintsTop,0,1,2,2));
175 TGLabel *framez401 =
new TGLabel(framez399,
"Layout subframes");
176 framez399->AddFrame(framez401,
new TGLayoutHints(kLHintsLeft | kLHintsCenterX | kLHintsTop,1,1,2,2));
178 frame3->AddFrame(framez399,
new TGLayoutHints(kLHintsLeft | kLHintsCenterX | kLHintsTop,1,1,1,1));
180 fLayButton->Connect(
"Toggled(Bool_t)",
"TGuiBldHintsEditor",
this,
"LayoutSubframes(Bool_t)");
185 fPaddingFrame =
new TGGroupFrame(frame3,
"Padding");
186 fPaddingFrame->SetLayoutManager(
new TGTableLayout(fPaddingFrame, 2, 4));
188 fPaddingFrame->AddFrame(
new TGLabel(fPaddingFrame,
"Top "),
189 new TGTableLayoutHints(0, 1, 0, 1,
190 kLHintsRight | kLHintsCenterY, 0, 2, 2, 2));
191 fPadTop =
new TGNumberEntry(fPaddingFrame,0.0,4,-1,(TGNumberFormat::EStyle) 5);
192 fPaddingFrame->AddFrame(fPadTop,
new TGTableLayoutHints(1, 2, 0, 1,
193 kLHintsLeft | kLHintsCenterY, 0, 0, 2, 2));
195 fPaddingFrame->AddFrame(
new TGLabel(fPaddingFrame,
" Left "),
196 new TGTableLayoutHints(2, 3, 0, 1,
197 kLHintsRight | kLHintsCenterY, 2, 2, 2, 2));
198 fPadLeft =
new TGNumberEntry(fPaddingFrame,0.0,4,-1,(TGNumberFormat::EStyle) 5);
199 fPaddingFrame->AddFrame(fPadLeft,
new TGTableLayoutHints(3, 4, 0, 1,
200 kLHintsLeft | kLHintsCenterY, 0, 0, 2, 2));
202 fPaddingFrame->AddFrame(
new TGLabel(fPaddingFrame,
"Bottom "),
203 new TGTableLayoutHints(0, 1, 1, 2,
204 kLHintsRight | kLHintsCenterY, 0, 2, 2, 2));
205 fPadBottom =
new TGNumberEntry(fPaddingFrame,0.0,4,-1,(TGNumberFormat::EStyle) 5);
206 fPaddingFrame->AddFrame(fPadBottom,
new TGTableLayoutHints(1, 2, 1, 2,
207 kLHintsLeft | kLHintsCenterY, 0, 0, 2, 2));
209 fPaddingFrame->AddFrame(
new TGLabel(fPaddingFrame,
" Right "),
210 new TGTableLayoutHints(2, 3, 1, 2,
211 kLHintsRight | kLHintsCenterY, 2, 2, 2, 2));
212 fPadRight =
new TGNumberEntry(fPaddingFrame,0.0,4,-1,(TGNumberFormat::EStyle) 5);
213 fPaddingFrame->AddFrame(fPadRight,
new TGTableLayoutHints(3, 4, 1, 2,
214 kLHintsLeft | kLHintsCenterY, 0, 0, 2, 2));
216 frame3->AddFrame(fPaddingFrame,
new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 2, 2, 2));
219 fHintsFrame =
new TGGroupFrame(frame3,
"Layout");
221 fHintsFrame->SetLayoutManager(
new TGTableLayout(fHintsFrame, 4, 2));
223 fCbTop =
new TGCheckButton(fHintsFrame,
"Top");
224 fHintsFrame->AddFrame(fCbTop,
new TGTableLayoutHints(0, 1, 0, 1,
225 kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2));
227 fCbBottom =
new TGCheckButton(fHintsFrame,
"Bottom");
228 fHintsFrame->AddFrame(fCbBottom,
new TGTableLayoutHints(0, 1, 1, 2,
229 kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2));
231 fCbLeft =
new TGCheckButton(fHintsFrame,
"Left");
232 fHintsFrame->AddFrame(fCbLeft,
new TGTableLayoutHints(0, 1, 2, 3,
233 kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2));
235 fCbRight =
new TGCheckButton(fHintsFrame,
"Right");
236 fHintsFrame->AddFrame(fCbRight,
new TGTableLayoutHints(0, 1, 3, 4,
237 kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2));
239 fCbCenterX =
new TGCheckButton(fHintsFrame,
"Center in X");
240 fHintsFrame->AddFrame(fCbCenterX,
new TGTableLayoutHints(1, 2, 0, 1,
241 kLHintsLeft | kLHintsCenterY, 9, 2, 2, 2));
243 fCbCenterY =
new TGCheckButton(fHintsFrame,
"Center in Y");
244 fHintsFrame->AddFrame(fCbCenterY,
new TGTableLayoutHints(1, 2, 1, 2,
245 kLHintsLeft | kLHintsCenterY, 9, 2, 2, 2));
247 fCbExpandX =
new TGCheckButton(fHintsFrame,
"Expand in X");
248 fHintsFrame->AddFrame(fCbExpandX,
new TGTableLayoutHints(1, 2, 2, 3,
249 kLHintsLeft | kLHintsCenterY, 9, 2, 2, 2));
251 fCbExpandY =
new TGCheckButton(fHintsFrame,
"Expand in Y");
252 fHintsFrame->AddFrame(fCbExpandY,
new TGTableLayoutHints(1, 2, 3, 4,
253 kLHintsLeft | kLHintsCenterY, 9, 2, 2, 2));
255 frame3->AddFrame(fHintsFrame,
new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 2, 2, 2));
257 fHintsManager =
new TGuiBldHintsManager(frame3, e,
this);
258 frame3->AddFrame(fHintsManager,
new TGLayoutHints(kLHintsBottom | kLHintsExpandX,2,2,2,2));
259 fHintsManager->UnmapWindow();
267 fCbTop->Connect(
"Clicked()",
"TGButton", fCbBottom,
"SetDown(=kFALSE)");
268 fCbBottom->Connect(
"Clicked()",
"TGButton", fCbTop,
"SetDown(=kFALSE)");
269 fCbRight->Connect(
"Clicked()",
"TGButton", fCbLeft,
"SetDown(=kFALSE)");
270 fCbLeft->Connect(
"Clicked()",
"TGButton", fCbRight,
"SetDown(=kFALSE)");
272 fCbTop->Connect(
"Clicked()",
"TGuiBldHintsEditor",
this,
"UpdateState()");
273 fCbBottom->Connect(
"Clicked()",
"TGuiBldHintsEditor",
this,
"UpdateState()");
274 fCbRight->Connect(
"Clicked()",
"TGuiBldHintsEditor",
this,
"UpdateState()");
275 fCbLeft->Connect(
"Clicked()",
"TGuiBldHintsEditor",
this,
"UpdateState()");
276 fCbExpandX->Connect(
"Clicked()",
"TGuiBldHintsEditor",
this,
"UpdateState()");
277 fCbCenterX->Connect(
"Clicked()",
"TGuiBldHintsEditor",
this,
"UpdateState()");
278 fCbExpandY->Connect(
"Clicked()",
"TGuiBldHintsEditor",
this,
"UpdateState()");
279 fCbCenterY->Connect(
"Clicked()",
"TGuiBldHintsEditor",
this,
"UpdateState()");
281 fPadTop->Connect(
"ValueSet(Long_t)",
"TGuiBldHintsEditor",
this,
"UpdateState()");
282 fPadLeft->Connect(
"ValueSet(Long_t)",
"TGuiBldHintsEditor",
this,
"UpdateState()");
283 fPadRight->Connect(
"ValueSet(Long_t)",
"TGuiBldHintsEditor",
this,
"UpdateState()");
284 fPadBottom->Connect(
"ValueSet(Long_t)",
"TGuiBldHintsEditor",
this,
"UpdateState()");
286 fPadTop->GetNumberEntry()->Connect(
"ReturnPressed()",
"TGuiBldHintsEditor",
this,
"UpdateState()");
287 fPadLeft->GetNumberEntry()->Connect(
"ReturnPressed()",
"TGuiBldHintsEditor",
this,
"UpdateState()");
288 fPadRight->GetNumberEntry()->Connect(
"ReturnPressed()",
"TGuiBldHintsEditor",
this,
"UpdateState()");
289 fPadBottom->GetNumberEntry()->Connect(
"ReturnPressed()",
"TGuiBldHintsEditor",
this,
"UpdateState()");
296 void TGuiBldHintsEditor::ChangeSelected(TGFrame *frame)
301 TGFrameElement *fe = frame->GetFrameElement();
307 fHintsManager->ChangeSelected(frame);
309 ULong_t lh = fe->fLayout->GetLayoutHints();
311 fCbCenterX->SetEnabled(kTRUE);
312 fCbCenterY->SetEnabled(kTRUE);
313 fCbExpandX->SetEnabled(!(frame->GetEditDisabled() & kEditDisableWidth));
314 fCbExpandY->SetEnabled(!(frame->GetEditDisabled() & kEditDisableHeight));
315 fClient->NeedRedraw(fCbExpandX);
316 fClient->NeedRedraw(fCbExpandY);
318 fCbTop->SetEnabled(kTRUE);
319 fCbRight->SetEnabled(kTRUE);
320 fCbLeft->SetEnabled(kTRUE);
321 fCbBottom->SetEnabled(kTRUE);
323 fCbCenterX->SetDown(lh & kLHintsCenterX);
324 fCbCenterY->SetDown(lh & kLHintsCenterY);
325 fCbExpandX->SetDown(lh & kLHintsExpandX);
326 fCbExpandY->SetDown(lh & kLHintsExpandY);
328 fCbTop->SetDown(lh & kLHintsTop);
329 fCbRight->SetDown(lh & kLHintsRight);
330 fCbLeft->SetDown(lh & kLHintsLeft);
331 fCbBottom->SetDown(lh & kLHintsBottom);
333 fPadTop->SetIntNumber(fe->fLayout->GetPadTop());
334 fPadLeft->SetIntNumber(fe->fLayout->GetPadLeft());
335 fPadRight->SetIntNumber(fe->fLayout->GetPadRight());
336 fPadBottom->SetIntNumber(fe->fLayout->GetPadBottom());
342 void TGuiBldHintsEditor::UpdateState()
344 TGFrame *frame = fEditor->GetSelected();
350 TGFrameElement *fe = frame->GetFrameElement();
356 if (fLayButton->IsDown() &&
357 ((gTQSender == fPadTop) || (gTQSender == fPadBottom) ||
358 (gTQSender == fPadLeft) || (gTQSender == fPadRight))) {
363 ULong_t lh = fe->fLayout->GetLayoutHints();
365 if (fCbCenterX->IsDown()) {
366 lh |= kLHintsCenterX;
368 lh &= ~kLHintsCenterX;
371 if (fCbCenterY->IsDown()) {
372 lh |= kLHintsCenterY;
374 lh &= ~kLHintsCenterY;
377 if (fCbExpandX->IsDown()) {
378 lh |= kLHintsExpandX;
380 lh &= ~kLHintsExpandX;
383 if (fCbExpandY->IsDown()) {
384 lh |= kLHintsExpandY;
386 lh &= ~kLHintsExpandY;
389 if (fCbTop->IsDown()) {
391 lh &= ~kLHintsBottom;
396 if (fCbBottom->IsDown()) {
400 lh &= ~kLHintsBottom;
403 if (fCbRight->IsDown()) {
410 if (fCbLeft->IsDown()) {
417 if (fPadLeft->GetIntNumber() >=0) {
418 fe->fLayout->SetPadLeft(fPadLeft->GetIntNumber());
420 if (fPadRight->GetIntNumber() >=0) {
421 fe->fLayout->SetPadRight(fPadRight->GetIntNumber());
423 if (fPadTop->GetIntNumber() >=0) {
424 fe->fLayout->SetPadTop(fPadTop->GetIntNumber());
426 if (fPadBottom->GetIntNumber() >=0) {
427 fe->fLayout->SetPadBottom(fPadBottom->GetIntNumber());
430 if (fe->fLayout->References() > 1) {
431 TGLayoutHints *lh2 =
new TGLayoutHints(*fe->fLayout);
432 fe->fLayout->RemoveReference();
436 fe->fLayout->SetLayoutHints(lh);
439 fEditor->UpdateSelected(frame);
445 void TGuiBldHintsEditor::SetPosition()
450 TGFrame *frame = fEditor->GetSelected();
457 if ((fEditor->GetXPos() >= 0) && (fEditor->GetYPos() >= 0)) {
458 frame->MoveResize(fEditor->GetXPos(), fEditor->GetYPos(),
459 frame->GetWidth(), frame->GetHeight());
460 fClient->NeedRedraw(frame, kTRUE);
461 TGWindow *root = (TGWindow*)fClient->GetRoot();
462 fClient->NeedRedraw(root, kTRUE);
464 fClient->NeedRedraw(fBuilder, kTRUE);
467 fEditor->SetYPos(frame->GetY());
468 fEditor->SetXPos(frame->GetX());
476 void TGuiBldHintsEditor::LayoutSubframes(Bool_t on)
481 TGFrame *frame = fEditor->GetSelected();
488 TGFrameElement *fe = frame->GetFrameElement();
495 Bool_t enable = frame->InheritsFrom(TGCompositeFrame::Class()) &&
496 !(frame->GetEditDisabled() & kEditDisableLayout);
499 fPadTop->SetIntNumber(fHintsManager->fPadTop);
500 fPadBottom->SetIntNumber(fHintsManager->fPadBottom);
501 fPadLeft->SetIntNumber(fHintsManager->fPadLeft);
502 fPadRight->SetIntNumber(fHintsManager->fPadRight);
504 ChangeSelected(frame);
511 TGCompositeFrame *comp = (TGCompositeFrame*)frame;
512 fHintsManager->fRows->SetState(kTRUE);
513 fHintsManager->fColumns->SetState(kTRUE);
514 comp->SetLayoutBroken(kFALSE);
516 if (!fHintsManager->fMatrix) {
517 if (!(frame->GetParent()->GetEditDisabled() & kEditDisableLayout)) {
521 if (comp->GetLayoutManager()) {
522 comp->GetLayoutManager()->Layout();
537 void TGuiBldHintsEditor::SetMatrixSep()
539 TGFrame *frame = fEditor->GetSelected();
546 TGFrameElement *fe = frame->GetFrameElement();
553 Bool_t enable = frame->InheritsFrom(TGCompositeFrame::Class()) &&
554 !(frame->GetEditDisabled() & kEditDisableLayout) &&
555 ((TGCompositeFrame*)frame)->GetLayoutManager() &&
556 ((TGCompositeFrame*)frame)->GetLayoutManager()->InheritsFrom(TGMatrixLayout::Class());
562 TGNumberEntry *ne = (TGNumberEntry*)gTQSender;
563 UInt_t sep = ne->GetIntNumber();
565 fPadTop->SetIntNumber(sep);
566 fPadLeft->SetIntNumber(sep);
567 fPadRight->SetIntNumber(sep);
568 fPadBottom->SetIntNumber(sep);
569 fLayButton->SetDown(kTRUE);
571 fHintsManager->fMatrix->fSep = sep;
572 frame->SetLayoutBroken(kFALSE);
574 if (!(frame->GetParent()->GetEditDisabled() & kEditDisableLayout)) {
577 fHintsManager->fMatrix->Layout();
579 fClient->NeedRedraw(frame, kTRUE);
585 void TGuiBldHintsEditor::MatrixLayout()
587 TGFrame *frame = fEditor->GetSelected();
594 TGFrameElement *fe = frame->GetFrameElement();
601 Bool_t enable = frame->InheritsFrom(TGCompositeFrame::Class()) &&
602 !(frame->GetEditDisabled() & kEditDisableLayout);
608 TGCompositeFrame *comp = (TGCompositeFrame*)frame;
610 UInt_t rows = fHintsManager->fRows->GetIntNumber();
611 UInt_t cols = fHintsManager->fColumns->GetIntNumber();
612 UInt_t sep = fPadTop->GetIntNumber();
614 fCbCenterX->SetEnabled(kFALSE);
615 fCbCenterY->SetEnabled(kFALSE);
616 fCbExpandX->SetEnabled(kFALSE);
617 fCbExpandY->SetEnabled(kFALSE);
619 fCbTop->SetEnabled(kFALSE);
620 fCbRight->SetEnabled(kFALSE);
621 fCbLeft->SetEnabled(kFALSE);
622 fCbBottom->SetEnabled(kFALSE);
624 fHintsManager->fPadTop = fPadTop->GetIntNumber();
625 fHintsManager->fPadBottom = fPadBottom->GetIntNumber();
626 fHintsManager->fPadLeft = fPadLeft->GetIntNumber();
627 fHintsManager->fPadRight = fPadRight->GetIntNumber();
629 fPadTop->SetIntNumber(sep);
630 fPadLeft->SetIntNumber(sep);
631 fPadRight->SetIntNumber(sep);
632 fPadBottom->SetIntNumber(sep);
634 fHintsManager->fRows->SetState(kTRUE);
635 fHintsManager->fColumns->SetState(kTRUE);
637 comp->SetLayoutBroken(kFALSE);
639 fHintsManager->fMatrix =
new TGMatrixLayout(comp, rows, cols, sep, 0);
640 comp->SetLayoutManager(fHintsManager->fMatrix);
642 if (!(comp->GetParent()->GetEditDisabled() & kEditDisableLayout)) {
645 fHintsManager->fMatrix->Layout();
647 fClient->NeedRedraw(comp, kTRUE);