Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TGuiBldEditor.cxx
Go to the documentation of this file.
1 // @(#)root/guibuilder:$Id$
2 // Author: Valeriy Onuchin 12/09/04
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 //////////////////////////////////////////////////////////////////////////
13 // //
14 // TGuiBldEditor - the property editor //
15 // //
16 //////////////////////////////////////////////////////////////////////////
17 
18 #include "TGuiBldEditor.h"
19 #include "TRootGuiBuilder.h"
20 #include "TGuiBldHintsEditor.h"
21 #include "TGuiBldNameFrame.h"
22 #include "TGuiBldGeometryFrame.h"
23 #include "TGResourcePool.h"
24 #include "TGTab.h"
25 #include "TGLabel.h"
26 #include "TGButtonGroup.h"
27 #include "TGNumberEntry.h"
28 #include "TG3DLine.h"
29 #include "TGColorSelect.h"
30 #include "TGColorDialog.h"
31 #include "TGCanvas.h"
32 #include "TGListTree.h"
33 #include "TGuiBldDragManager.h"
34 #include "TGMsgBox.h"
35 #include "TGIcon.h"
36 #include "TGFrame.h"
37 #include "TGSplitter.h"
38 #include "TGTableLayout.h"
39 
40 ClassImp(TGuiBldEditor);
41 
42 
43 ////////////////////////////////////////////////////////////////////////////////
44 class TGuiBldBorderFrame : public TGVerticalFrame {
45 
46 private:
47  enum EBldBorderFrameMode {
48  kBldBorderNone, kBldBorderSunken,
49  kBldBorderPlain, kBldBorderRaised,
50  kBldBorderDouble };
51 
52 private:
53  TGuiBldEditor *fEditor;
54  TGFrame *fSelected;
55  TGButtonGroup *fBtnGroup;
56  TGColorSelect *fBgndFrame;
57 
58 public:
59  TGuiBldBorderFrame(const TGWindow *p, TGuiBldEditor *editor);
60  virtual ~TGuiBldBorderFrame() { }
61 
62  void ChangeSelected(TGFrame*);
63 };
64 
65 ////////////////////////////////////////////////////////////////////////////////
66 /// Constructor.
67 
68 TGuiBldBorderFrame::TGuiBldBorderFrame(const TGWindow *p, TGuiBldEditor *editor) :
69  TGVerticalFrame(p, 1, 1)
70 {
71  fEditor = editor;
72  fEditDisabled = 1;
73  fBgndFrame = 0;
74 
75  SetCleanup(kDeepCleanup);
76 
77  fBtnGroup = new TGButtonGroup(this, "Border Mode");
78 
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");
88  //TQObject::Disconnect(check);
89 
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)");
95 
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));
108 }
109 
110 ////////////////////////////////////////////////////////////////////////////////
111 /// Perform actions when selected frame was changed.
112 
113 void TGuiBldBorderFrame::ChangeSelected(TGFrame *frame)
114 {
115  fSelected = frame;
116 
117  if (!frame) {
118  return;
119  }
120 
121  UInt_t opt = fSelected->GetOptions();
122 
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));
127 
128  if (fBgndFrame) {
129  TQObject::Disconnect(fBgndFrame);
130  fBgndFrame->SetColor(fSelected->GetBackground());
131  fBgndFrame->Connect("ColorSelected(Pixel_t)", "TGuiBldEditor", fEditor, "UpdateBackground(Pixel_t)");
132  }
133 }
134 
135 ////////////////////////////////////////////////////////////////////////////////
136 ////////////////////////////////////////////////////////////////////////////////
137 /// Constructor.
138 
139 TGuiBldEditor::TGuiBldEditor(const TGWindow *p) : TGVerticalFrame(p, 1, 1)
140 {
141  TGHorizontalFrame *hf;
142  TGVerticalFrame *vf;
143  fSelected = 0;
144  SetCleanup(kDeepCleanup);
145 
146  fNameFrame = new TGuiBldNameFrame(this, this);
147  AddFrame(fNameFrame, new TGLayoutHints(kLHintsNormal | kLHintsExpandX,5,5,2,2));
148 
149  TGHSplitter *splitter = new TGHSplitter(this,100,5);
150  AddFrame(splitter, new TGLayoutHints(kLHintsTop | kLHintsExpandX,0,0,5,5));
151  splitter->SetFrame(fNameFrame, kTRUE);
152 
153  //------------frame with layout switch
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));
160 
161  vf = new TGVerticalFrame(this);
162  fLayoutLabel = new TGLabel(vf, "Automatic Layout Disabled");
163  vf->AddFrame(fLayoutLabel, new TGLayoutHints(kLHintsCenterX | kLHintsTop,
164  2, 2, 2, 2));
165 
166  fLayoutButton = new TGTextButton(vf," Enable layout ");
167  fLayoutButton->SetEnabled(kFALSE);
168  vf->AddFrame(fLayoutButton, new TGLayoutHints(kLHintsCenterX | kLHintsTop,
169  2, 2, 2, 2));
170 
171  AddFrame(vf, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 2, 2, 2));
172 
173  AddFrame(new TGHorizontal3DLine(this), new TGLayoutHints(kLHintsTop |
174  kLHintsExpandX, 2, 2, 2, 2));
175 
176  fLayoutButton->Connect("Clicked()", "TGuiBldEditor", this, "SwitchLayout()");
177  fLayoutButton->SetToolTipText("If layout is on, all the frame \nelements get layouted automatically.");
178 
179  //-----------------------------
180 
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");
185  fLayoutId = 1; // 2nd tab
186  fTab->Connect("Selected(Int_t)", "TGuiBldEditor", this, "TabSelected(Int_t)");
187 
188  fHintsFrame = new TGuiBldHintsEditor(fTablay, this);
189  fTablay->AddFrame(fHintsFrame, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,
190  2, 2, 2, 2));
191 
192  fGeomFrame = new TGuiBldGeometryFrame(fTablay, this);
193  fTablay->AddFrame(fGeomFrame, new TGLayoutHints(kLHintsTop | kLHintsExpandX,
194  2, 2, 2, 2));
195 
196  //----------------Position X,Y boxes---------------
197 
198  fPositionFrame = new TGGroupFrame(fTablay, "Position");
199 
200  hf = new TGHorizontalFrame(fPositionFrame);
201 
202  vf = new TGVerticalFrame(hf);
203  vf->SetLayoutManager(new TGTableLayout(vf, 2, 2));
204 
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));
210 
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));
216 
217  hf->AddFrame(vf, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY));
218 
219  vf = new TGVerticalFrame(hf);
220  vf->SetLayoutManager(new TGTableLayout(vf, 3, 3));
221 
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));
229 
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));
237 
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));
245 
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));
253 
254  hf->AddFrame(vf, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY));
255 
256  fPositionFrame->AddFrame(hf, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
257 
258  fTablay->AddFrame(fPositionFrame, new TGLayoutHints(kLHintsTop | kLHintsExpandX));
259 
260  fXpos->Connect("ValueSet(Long_t)", "TGuiBldHintsEditor", fHintsFrame, "SetPosition()");
261  fYpos->Connect("ValueSet(Long_t)", "TGuiBldHintsEditor", fHintsFrame, "SetPosition()");
262 
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()");
271 
272  //----------------------------------------------------
273 
274  fBorderFrame = new TGuiBldBorderFrame(tabcont, this);
275  tabcont->AddFrame(fBorderFrame, new TGLayoutHints(kLHintsExpandX, 2, 2, 2, 2));
276 
277  MapSubwindows();
278  SetWindowName("Frame Property Editor");
279  SetEditDisabled(1);
280 
281  fEmbedded = kFALSE;
282 }
283 
284 ////////////////////////////////////////////////////////////////////////////////
285 /// Destructor.
286 
287 TGuiBldEditor::~TGuiBldEditor()
288 {
289 }
290 
291 ////////////////////////////////////////////////////////////////////////////////
292 /// Remove a frame.
293 
294 void TGuiBldEditor::RemoveFrame(TGFrame *frame)
295 {
296  fNameFrame->RemoveFrame(frame);
297 }
298 
299 ////////////////////////////////////////////////////////////////////////////////
300 /// Handle selected.
301 
302 void TGuiBldEditor::TabSelected(Int_t id)
303 {
304  if (id == fLayoutId) {
305  //printf("%d\n", fSelected);
306  }
307 }
308 
309 ////////////////////////////////////////////////////////////////////////////////
310 /// Hide editor.
311 
312 void TGuiBldEditor::Hide()
313 {
314  UnmapWindow();
315 }
316 
317 ////////////////////////////////////////////////////////////////////////////////
318 /// Change selected frame.
319 
320 void TGuiBldEditor::ChangeSelected(TGFrame *frame)
321 {
322  TGTabElement *tab = fTab->GetTabTab(fLayoutId);
323 
324  if (!frame) {
325  fNameFrame->ChangeSelected(0);
326  //fTab->SetTab(0);
327  if (tab) {
328  tab->SetEnabled(kFALSE);
329  fClient->NeedRedraw(tab);
330  }
331  return;
332  }
333 
334  fSelected = frame;
335  TGWindow *parent = (TGWindow*)fSelected->GetParent();
336 
337  fNameFrame->ChangeSelected(fSelected);
338 
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());
346 
347  if (enable_layout) {
348  fHintsFrame->ChangeSelected(fSelected);
349 
350  if (tab) {
351  tab->SetEnabled(kTRUE);
352  fClient->NeedRedraw(tab);
353  }
354  } else {
355  fHintsFrame->ChangeSelected(0);
356 
357  if (tab) {
358  fTab->SetTab(0);
359  tab->SetEnabled(kFALSE);
360  fClient->NeedRedraw(tab);
361  }
362  }
363 
364  if ((frame->InheritsFrom(TGHorizontalFrame::Class())) ||
365  (frame->InheritsFrom(TGVerticalFrame::Class())) ||
366  (frame->InheritsFrom(TGGroupFrame::Class())) ) {
367 
368  fLayoutButton->SetEnabled(kTRUE);
369  if (fSelected->IsLayoutBroken()) {
370  fLayoutButton->SetText(" Enable layout ");
371  fLayoutLabel->SetText("Automatic layout disabled");
372  if (fTablay) {
373  fTablay->ShowFrame(fGeomFrame);
374  fTablay->ShowFrame(fPositionFrame);
375  fTablay->HideFrame(fHintsFrame);
376  }
377  } else {
378  fLayoutButton->SetText(" Disable layout ");
379  fLayoutLabel->SetText("Automatic layout enabled");
380  if (fTablay) {
381  fTablay->HideFrame(fGeomFrame);
382  fTablay->HideFrame(fPositionFrame);
383  fTablay->ShowFrame(fHintsFrame);
384  }
385  }
386  }
387  else {
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);
396  } else {
397  fLayoutButton->SetText(" Disable layout ");
398  fLayoutLabel->SetText("Automatic layout enabled");
399  fTablay->HideFrame(fGeomFrame);
400  fTablay->HideFrame(fPositionFrame);
401  fTablay->ShowFrame(fHintsFrame);
402  }
403  }
404 
405  fYpos->SetIntNumber(frame->GetY());
406  fXpos->SetIntNumber(frame->GetX());
407 
408  if (fBorderFrame) fBorderFrame->ChangeSelected(fSelected);
409  if (fGeomFrame) fGeomFrame->ChangeSelected(fSelected);
410 
411  Emit("ChangeSelected(TGFrame*)", (long)fSelected);
412 
413  MapRaised();
414 }
415 
416 ////////////////////////////////////////////////////////////////////////////////
417 /// Update selected frame.
418 
419 void TGuiBldEditor::UpdateSelected(TGFrame *frame)
420 {
421  Emit("UpdateSelected(TGFrame*)", (long)frame);
422 }
423 
424 ////////////////////////////////////////////////////////////////////////////////
425 /// Update border of selected frame.
426 
427 void TGuiBldEditor::UpdateBorder(Int_t b)
428 {
429  if (!fSelected) return;
430 
431  UInt_t opt = fSelected->GetOptions();
432 
433  switch (b) {
434  case 1:
435  opt &= ~kRaisedFrame;
436  opt |= kSunkenFrame;
437  break;
438  case 2:
439  opt &= ~kSunkenFrame;
440  opt &= ~kRaisedFrame;
441  break;
442  case 3:
443  opt &= ~kSunkenFrame;
444  opt |= kRaisedFrame;
445  break;
446  case 4:
447  opt |= kDoubleBorder;
448  break;
449  case 5:
450  opt &= ~kDoubleBorder;
451  break;
452  default:
453  return;
454  }
455  fSelected->ChangeOptions(opt);
456  fClient->NeedRedraw(fSelected, kTRUE);
457 }
458 
459 ////////////////////////////////////////////////////////////////////////////////
460 /// Update background.
461 
462 void TGuiBldEditor::UpdateBackground(Pixel_t col)
463 {
464  if (!fSelected) return;
465 
466  fSelected->SetBackgroundColor(col);
467  fClient->NeedRedraw(fSelected, kTRUE);
468 }
469 
470 ////////////////////////////////////////////////////////////////////////////////
471 /// Update foreground.
472 
473 void TGuiBldEditor::UpdateForeground(Pixel_t col)
474 {
475  if (!fSelected) return;
476 
477  fSelected->SetForegroundColor(col);
478  fClient->NeedRedraw(fSelected, kTRUE);
479 }
480 
481 ////////////////////////////////////////////////////////////////////////////////
482 /// Reset the editor.
483 
484 void TGuiBldEditor::Reset()
485 {
486  fSelected = 0;
487  fNameFrame->Reset();
488  TGTabElement *tab = fTab->GetTabTab(fLayoutId);
489  if (tab) {
490  fTab->SetTab(0);
491  tab->SetEnabled(kFALSE);
492  }
493 }
494 
495 ////////////////////////////////////////////////////////////////////////////////
496 /// Popup dialog to set layout of editted frame off. If layout is on, all
497 /// the elements in the frame get layouted automatically.
498 
499 void TGuiBldEditor::SwitchLayout()
500 {
501  if (!fSelected) {
502  fLayoutButton->SetText(" Enable layout ");
503  fLayoutButton->SetEnabled(kFALSE);
504  fLayoutLabel->SetText("Automatic layout disabled");
505  if (fTablay) {
506  fTablay->ShowFrame(fGeomFrame);
507  fTablay->ShowFrame(fPositionFrame);
508  fTablay->HideFrame(fHintsFrame);
509  }
510  return;
511  }
512 
513  TRootGuiBuilder *builder = (TRootGuiBuilder*)TRootGuiBuilder::Instance();
514  TGFrame *frame = fSelected;
515  TGCompositeFrame *cf = fNameFrame->GetMdi(frame);
516  if (cf == 0)
517  return;
518  if (frame->IsLayoutBroken()) {
519  Int_t retval;
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);
524 
525  cf->SetEditable(kTRUE);
526  // hack against selecting the message box itself
527  builder->GetManager()->SelectFrame(frame);
528  frame->SetEditable(kTRUE);
529 
530  if (retval == kMBOk) {
531  frame->SetLayoutBroken(kFALSE);
532  frame->Layout();
533  fLayoutButton->SetText(" Disable layout ");
534  fLayoutLabel->SetText("Automatic layout enabled");
535  if (fTablay) {
536  fTablay->HideFrame(fGeomFrame);
537  fTablay->HideFrame(fPositionFrame);
538  fTablay->ShowFrame(fHintsFrame);
539  fTablay->Resize(fHintsFrame->GetWidth(),fHintsFrame->GetHeight());
540  }
541  }
542  } else {
543  //set layout off - without dialog, because nothing "bad" can happen
544  frame->SetLayoutBroken(kTRUE);
545  fLayoutButton->SetText(" Enable layout ");
546  fLayoutLabel->SetText("Automatic layout disabled");
547  if (fTablay) {
548  fTablay->ShowFrame(fGeomFrame);
549  fTablay->ShowFrame(fPositionFrame);
550  fTablay->HideFrame(fHintsFrame);
551  }
552  }
553  fClient->NeedRedraw(frame, kTRUE);
554  if (fTablay) fClient->NeedRedraw(fTablay, kTRUE);
555 }
556 
557 
558