Logo ROOT   6.10/09
Reference Guide
TGMdiMainFrame.h
Go to the documentation of this file.
1 // @(#)root/gui:$Id$
2 // Author: Bertrand Bellenot 20/08/2004
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  This file is part of TGMdi, an extension to the xclass toolkit.
15  Copyright (C) 1998-2002 by Harald Radke, Hector Peraza.
16 
17  This application is free software; you can redistribute it and/or
18  modify it under the terms of the GNU Library General Public
19  License as published by the Free Software Foundation; either
20  version 2 of the License, or (at your option) any later version.
21 
22  This application is distributed in the hope that it will be useful,
23  but WITHOUT ANY WARRANTY; without even the implied warranty of
24  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
25  Library General Public License for more details.
26 
27  You should have received a copy of the GNU Library General Public
28  License along with this library; if not, write to the Free
29  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
30 
31 **************************************************************************/
32 
33 #ifndef ROOT_TGMdiMainFrame
34 #define ROOT_TGMdiMainFrame
35 
36 //////////////////////////////////////////////////////////////////////////
37 // //
38 // TGMdiMainFrame. //
39 // //
40 // This file contains the TGMdiMainFrame class. //
41 // //
42 //////////////////////////////////////////////////////////////////////////
43 
44 #include "TGCanvas.h"
45 #include "TGMenu.h"
46 #include "TGFont.h"
47 
48 
49 // MDI resizing modes
54 };
55 
56 // MDI hints, also used to identify titlebar buttons
57 enum EMdiHints {
58  kMdiClose = 4,
60  kMdiMove = 16,
61  kMdiSize = 32,
63  kMdiMaximize = 128,
64  kMdiHelp = 256,
65  kMdiMenu = 512,
68 };
69 
70 // window arrangement modes
75 };
76 
77 // geometry value masks for ConfigureWindow() call
82 };
83 
84 
85 class TGGC;
86 class TGMdiMenuBar;
87 class TGMdiContainer;
88 class TGMdiDecorFrame;
89 class TGMdiFrame;
90 
91 //----------------------------------------------------------------------
92 
94 
95 friend class TGMdiMainFrame;
96 
97 protected:
98  UInt_t fFrameId; // TGMdiFrameList Id
99  TGMdiDecorFrame *fDecor; // MDI decor frame
100  TGMdiFrameList *fPrev, *fNext; // pointers on previous and next TGMdiFrameList
101  TGMdiFrameList *fCyclePrev, *fCycleNext; // pointers on previous and next TGMdiFrameList
102 
103 public:
104  virtual ~TGMdiFrameList() { }
105 
106  UInt_t GetFrameId() const { return fFrameId; }
107  TGMdiDecorFrame *GetDecorFrame() const { return fDecor; }
108  TGMdiFrameList *GetPrev() const { return fPrev; }
109  TGMdiFrameList *GetNext() const { return fNext; }
112 
113  void SetFrameId(UInt_t id) { fFrameId = id; }
114  void SetDecorFrame(TGMdiDecorFrame *decor) { fDecor = decor; }
115  void SetPrev(TGMdiFrameList *prev) { fPrev = prev; }
116  void SetNext(TGMdiFrameList *next) { fNext = next; }
117  void SetCyclePrev(TGMdiFrameList *prev) { fCyclePrev = prev; }
118  void SetCycleNext(TGMdiFrameList *next) { fCycleNext = next; }
119 
120  ClassDef(TGMdiFrameList, 0) // MDI Frame list
121 };
122 
123 
125 
126 public:
127  Int_t fValueMask; // MDI hints mask
128  TGRectangle fClient, fDecoration, fIcon; // client, decoration and icon rectangles
129 
130  virtual ~TGMdiGeometry() { }
131 
132  ClassDef(TGMdiGeometry, 0) // MDI Geometry
133 };
134 
135 
136 //----------------------------------------------------------------------
137 
138 class TGMdiMainFrame : public TGCanvas {
139 
140 friend class TGMdiFrame;
141 
142 protected:
143  enum {
144  // the width of minimized windows, in "height" units
145  kMinimizedWidth = 5
146  };
147 
148  Int_t fCurrentX, fCurrentY, fResizeMode; // current MDI child XY position and resize mode
149  Int_t fArrangementMode; // MDI children arrangement mode
150  TGFont *fFontCurrent, *fFontNotCurrent; // fonts for active and inactive MDI children
151  Pixel_t fBackCurrent, fForeCurrent; // back and fore colors for active MDI children
152  Pixel_t fBackNotCurrent, fForeNotCurrent; // back and fore colors for inactive MDI children
153 
154  TGGC *fBoxGC; // GC used to draw resizing box (rectangle)
155 
156  Long_t fNumberOfFrames; // number of MDI child windows
157  TGMdiMenuBar *fMenuBar; // menu bar
158  TGFrame *fContainer; // MDI container
159  TGPopupMenu *fWinListMenu; // popup menu with list of MDI child windows
160  TGMdiFrameList *fChildren; // list of MDI child windows
161  TGMdiFrameList *fCurrent; // current list of MDI child windows
162 
163  void AddMdiFrame(TGMdiFrame *f);
164  Bool_t RemoveMdiFrame(TGMdiFrame *f);
165 
166  Bool_t SetCurrent(TGMdiFrameList *newcurrent);
169 
170  void UpdateWinListMenu();
171 
172 public:
173  TGMdiMainFrame(const TGWindow *p, TGMdiMenuBar *menu, Int_t w, Int_t h,
174  UInt_t options = 0,
176  virtual ~TGMdiMainFrame();
177 
178  virtual Bool_t HandleKey(Event_t *event);
179  virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
180 
181  virtual void Layout();
182 
183  virtual void FreeMove(TGMdiFrame *frame);
184  virtual void FreeSize(TGMdiFrame *frame);
185  virtual void Restore(TGMdiFrame *frame);
186  virtual void Maximize(TGMdiFrame *frame);
187  virtual void Minimize(TGMdiFrame *frame);
188  virtual Int_t Close(TGMdiFrame *frame);
189  virtual Int_t ContextHelp(TGMdiFrame *frame);
190  virtual void CloseAll();
191 
192  virtual void Cascade() { ArrangeFrames(kMdiCascade); }
193  virtual void TileHorizontal() { ArrangeFrames(kMdiTileHorizontal); }
194  virtual void TileVertical() { ArrangeFrames(kMdiTileVertical); }
195 
196  virtual void ArrangeFrames(Int_t mode);
197  virtual void ArrangeMinimized();
198 
199  virtual void CirculateUp();
200  virtual void CirculateDown();
201 
202  TGMdiFrame *GetCurrent() const;
203  TGMdiFrame *GetMdiFrame(UInt_t id) const;
204  TGFrame *GetContainer() const { return fContainer; }
205  Bool_t SetCurrent(UInt_t newcurrent);
206  Bool_t SetCurrent(TGMdiFrame *f); //*SIGNAL*
207 
208  TGPopupMenu *GetWinListMenu() const { return fWinListMenu; }
209  TGMdiMenuBar *GetMenu() const { return fMenuBar; }
210 
212  { return current ? fCurrent : fChildren; }
213  Long_t GetNumberOfFrames() const { return fNumberOfFrames; }
214 
215  void SetResizeMode(Int_t mode = kMdiDefaultResizeMode);
216  void UpdateMdiButtons();
217 
218  TGRectangle GetBBox() const;
219  TGRectangle GetMinimizedBBox() const;
220 
222  void ConfigureWindow(TGMdiFrame *f, TGMdiGeometry &geom);
223 
224  Bool_t IsMaximized(TGMdiFrame *f);
225  Bool_t IsMinimized(TGMdiFrame *f);
226 
227  virtual void FrameCreated(Int_t id) { Emit("FrameCreated(Int_t)", id); } //*SIGNAL*
228  virtual void FrameClosed(Int_t id) { Emit("FrameClosed(Int_t)", id); } //*SIGNAL*
229  virtual void FrameMaximized(Int_t id) { Emit("FrameMaximized(Int_t)", id); } //*SIGNAL*
230  virtual void FrameMinimized(Int_t id) { Emit("FrameMinimized(Int_t)", id); } //*SIGNAL*
231  virtual void FrameRestored(Int_t id) { Emit("FrameRestored(Int_t)", id); } //*SIGNAL*
232  virtual void FramesArranged(Int_t mode) { Emit("FramesArranged(Int_t)", mode); } //*SIGNAL*
233 
234  virtual void SavePrimitive(std::ostream &out, Option_t *option = "");
235 
236  ClassDef(TGMdiMainFrame, 0) // MDI main frame
237 };
238 
239 
240 //----------------------------------------------------------------------
241 
242 class TGMdiContainer : public TGFrame {
243 
244 protected:
245  const TGMdiMainFrame *fMain; // pointer to MDI main frame
246 
247 public:
249  UInt_t options = 0,
250  ULong_t back = GetDefaultFrameBackground());
251 
252  virtual Bool_t HandleConfigureNotify(Event_t *event);
253  virtual TGDimension GetDefaultSize() const;
254 
255  ClassDef(TGMdiContainer, 0) // MDI container
256 };
257 
258 #endif
TGMdiMenuBar * GetMenu() const
EMdiHints
TGPopupMenu * fWinListMenu
virtual void TileVertical()
void SetDecorFrame(TGMdiDecorFrame *decor)
virtual void TileHorizontal()
virtual Bool_t HandleKey(Event_t *)
Definition: TGFrame.h:387
const char Option_t
Definition: RtypesCore.h:62
TGRectangle fIcon
#define BIT(n)
Definition: Rtypes.h:75
virtual void FrameCreated(Int_t id)
TH1 * h
Definition: legend2.C:5
virtual void FrameRestored(Int_t id)
TGFrame * fContainer
virtual void FrameClosed(Int_t id)
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
void SetCycleNext(TGMdiFrameList *next)
TGMdiDecorFrame * fDecor
virtual ~TGMdiFrameList()
const TGMdiMainFrame * fMain
#define ClassDef(name, id)
Definition: Rtypes.h:297
ULong_t Pixel_t
Definition: GuiTypes.h:39
static Pixel_t GetDefaultFrameBackground()
Get default frame background.
Definition: TGFrame.cxx:665
TGMdiMenuBar * fMenuBar
void SetNext(TGMdiFrameList *next)
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a MDIframe as a C++ statement(s) on output stream out.
Definition: TGMdiFrame.cxx:190
void SetFrameId(UInt_t id)
TGMdiFrameList * fCurrent
virtual void FrameMinimized(Int_t id)
Long_t GetNumberOfFrames() const
virtual void FrameMaximized(Int_t id)
Pixel_t fForeNotCurrent
TGMdiFrameList * fChildren
Long_t fNumberOfFrames
TGMdiFrameList * GetCycleNext() const
void SetPrev(TGMdiFrameList *prev)
unsigned int UInt_t
Definition: RtypesCore.h:42
TGMdiFrameList * GetNext() const
EMdiResizingModes
TGMdiFrameList * GetCyclePrev() const
virtual Bool_t ProcessMessage(Long_t, Long_t, Long_t)
Definition: TGFrame.h:395
const Bool_t kFALSE
Definition: RtypesCore.h:92
TGPopupMenu * GetWinListMenu() const
long Long_t
Definition: RtypesCore.h:50
double f(double x)
Definition: TGFont.h:149
unsigned long ULong_t
Definition: RtypesCore.h:51
virtual void Cascade()
EMdiGeometryMask
TGFrame * GetContainer() const
TGMdiFrameList * fCyclePrev
TGMdiFrameList * fCycleNext
TGMdiFrameList * fPrev
RooCmdArg Layout(Double_t xmin, Double_t xmax=0.99, Double_t ymin=0.95)
TGMdiDecorFrame * GetDecorFrame() const
TGFont * fFontNotCurrent
UInt_t GetFrameId() const
TGMdiFrameList * fNext
void Emit(const char *signal, const T &arg)
Activate signal with single parameter.
Definition: TQObject.h:164
TGMdiFrameList * GetPrev() const
void SetCyclePrev(TGMdiFrameList *prev)
EMdiArrangementModes
Pixel_t fForeCurrent
friend class TGMdiMainFrame
Definition: TGGC.h:31
virtual void FramesArranged(Int_t mode)
TGMdiFrameList * GetWindowList(Int_t current=kFALSE) const
void GetWindowGeometry(NSObject< X11Window > *win, WindowAttributes_t *dst)
virtual ~TGMdiGeometry()