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