Logo ROOT   6.21/01
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
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);
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); }
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 
209  TGMdiMenuBar *GetMenu() const { return fMenuBar; }
210 
212  { return current ? fCurrent : fChildren; }
214 
216  void UpdateMdiButtons();
217 
218  TGRectangle GetBBox() const;
220 
223 
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,
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
virtual void CloseAll()
Close all MDI child windows.
EMdiHints
TGPopupMenu * fWinListMenu
virtual void FreeSize(TGMdiFrame *frame)
Allow to resize MDI child window mdiframe.
virtual void TileVertical()
void SetDecorFrame(TGMdiDecorFrame *decor)
virtual void TileHorizontal()
virtual Int_t Close(TGMdiFrame *frame)
Close MDI child window mdiframe.
const char Option_t
Definition: RtypesCore.h:62
virtual Int_t ContextHelp(TGMdiFrame *frame)
Calls Help() method of MDI child window mdiframe.
TGRectangle fIcon
virtual void Minimize(TGMdiFrame *frame)
Minimize MDI child window mdiframe.
virtual void Maximize(TGMdiFrame *frame)
Maximize MDI child window mdiframe.
#define BIT(n)
Definition: Rtypes.h:83
virtual void FrameCreated(Int_t id)
Pixel_t fBackCurrent
void AddMdiFrame(TGMdiFrame *f)
Add new MDI child window.
TGRectangle GetMinimizedBBox() const
Return minimized box (rectangle) for current MDI child.
virtual Bool_t HandleConfigureNotify(Event_t *event)
Handle configure notify events for MDI container.
Bool_t RemoveMdiFrame(TGMdiFrame *f)
Remove MDI child window.
virtual void FrameRestored(Int_t id)
TGFrame * fContainer
TGRectangle fClient
virtual void FrameClosed(Int_t id)
#define f(i)
Definition: RSha256.hxx:104
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
void SetCycleNext(TGMdiFrameList *next)
TGMdiDecorFrame * fDecor
virtual void ArrangeMinimized()
This is an attempt to an "smart" minimized window re-arrangement.
virtual ~TGMdiFrameList()
Bool_t IsMaximized(TGMdiFrame *f)
Check if MDI child window f is maximized;.
const TGMdiMainFrame * fMain
virtual void Restore(TGMdiFrame *frame)
Restore size of MDI child window mdiframe.
Pixel_t fBackNotCurrent
virtual ~TGMdiMainFrame()
MDI main frame destructor.
#define ClassDef(name, id)
Definition: Rtypes.h:326
TGMdiGeometry GetWindowGeometry(TGMdiFrame *f) const
Get MDI geometry of MDI child window f.
ULong_t Pixel_t
Definition: GuiTypes.h:39
static Pixel_t GetDefaultFrameBackground()
Get default frame background.
Definition: TGFrame.cxx:665
virtual TGDimension GetDefaultSize() const
Return dimension of MDI container.
TGMdiMenuBar * fMenuBar
void UpdateWinListMenu()
Update MDI menu entries with current list of MDI child windows.
void SetNext(TGMdiFrameList *next)
virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
Process messages MDI main frame.
TGMdiDecorFrame * GetDecorFrame(UInt_t id) const
Return decor frame of MDI child window (by id).
virtual void FreeMove(TGMdiFrame *frame)
Allow to move MDI child window mdiframe.
void SetFrameId(UInt_t id)
XFontStruct * id
Definition: TGX11.cxx:108
TGMdiContainer(const TGMdiMainFrame *p, Int_t w, Int_t h, UInt_t options=0, ULong_t back=GetDefaultFrameBackground())
TGMdiContainer constructor.
void UpdateMdiButtons()
Update the status of MDI buttons in the decor frame of all children.
Bool_t IsMinimized(TGMdiFrame *f)
Check if MDI child window f is minimized;.
TGMdiFrameList * fCurrent
virtual Bool_t HandleKey(Event_t *event)
Handle keyboards events into MDI main frame.
virtual void FrameMinimized(Int_t id)
Long_t GetNumberOfFrames() const
virtual void FrameMaximized(Int_t id)
Pixel_t fForeNotCurrent
virtual void CirculateUp()
Bring the lowest window to the top.
TGMdiFrameList * fChildren
Long_t fNumberOfFrames
TGMdiFrameList * GetCycleNext() const
TGMdiFrame * GetCurrent() const
Return pointer on current (active) MDI child window.
Bool_t SetCurrent(TGMdiFrameList *newcurrent)
Set current (active) MDI child window (by frame list).
void SetPrev(TGMdiFrameList *prev)
unsigned int UInt_t
Definition: RtypesCore.h:42
TGMdiMainFrame(const TGWindow *p, TGMdiMenuBar *menu, Int_t w, Int_t h, UInt_t options=0, Pixel_t back=GetDefaultFrameBackground())
Create a MDI main frame.
TGRectangle fDecoration
TGMdiFrameList * GetNext() const
EMdiResizingModes
TGMdiFrameList * GetCyclePrev() const
virtual void Layout()
Recalculates the postion and the size of all MDI child windows.
void ConfigureWindow(TGMdiFrame *f, TGMdiGeometry &geom)
Set MDI geometry for MDI child window f.
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a MDI main frame as a C++ statement(s) on output stream out.
TGRectangle GetBBox() const
Return resizing box (rectangle) for current MDI child.
#define h(i)
Definition: RSha256.hxx:106
const Bool_t kFALSE
Definition: RtypesCore.h:88
virtual void CirculateDown()
Send the highest window to the bottom.
TGPopupMenu * GetWinListMenu() const
long Long_t
Definition: RtypesCore.h:50
Definition: TGFont.h:149
unsigned long ULong_t
Definition: RtypesCore.h:51
virtual void Cascade()
EMdiGeometryMask
void SetResizeMode(Int_t mode=kMdiDefaultResizeMode)
Set MDI windows resize mode (opaque or transparent).
TGFrame * GetContainer() const
TGMdiFrameList * fCyclePrev
TGMdiFrameList * fCycleNext
TGMdiFrameList * fPrev
TGFont * fFontCurrent
TGMdiFrame * GetMdiFrame(UInt_t id) const
Return frame of MDI child window (by id).
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
Definition: TGGC.h:31
virtual void FramesArranged(Int_t mode)
TGMdiFrameList * GetWindowList(Int_t current=kFALSE) const
virtual ~TGMdiGeometry()
virtual void ArrangeFrames(Int_t mode)
Automatic repositionning and resizing of every MDI child window.