00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef ROOT_TGMdiMainFrame
00034 #define ROOT_TGMdiMainFrame
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 #ifndef ROOT_TGCanvas
00045 #include "TGCanvas.h"
00046 #endif
00047 #ifndef ROOT_TGMenu
00048 #include "TGMenu.h"
00049 #endif
00050 #ifndef ROOT_TGFont
00051 #include "TGFont.h"
00052 #endif
00053
00054
00055
00056 enum EMdiResizingModes {
00057 kMdiOpaque = 1,
00058 kMdiNonOpaque = 2,
00059 kMdiDefaultResizeMode = kMdiOpaque
00060 };
00061
00062
00063 enum EMdiHints {
00064 kMdiClose = 4,
00065 kMdiRestore = 8,
00066 kMdiMove = 16,
00067 kMdiSize = 32,
00068 kMdiMinimize = 64,
00069 kMdiMaximize = 128,
00070 kMdiHelp = 256,
00071 kMdiMenu = 512,
00072 kMdiDefaultHints = kMdiMenu | kMdiMinimize | kMdiRestore |
00073 kMdiMaximize | kMdiSize | kMdiClose
00074 };
00075
00076
00077 enum EMdiArrangementModes {
00078 kMdiTileHorizontal = 1,
00079 kMdiTileVertical = 2,
00080 kMdiCascade = 3
00081 };
00082
00083
00084 enum EMdiGeometryMask {
00085 kMdiClientGeometry = BIT(0),
00086 kMdiDecorGeometry = BIT(1),
00087 kMdiIconGeometry = BIT(2)
00088 };
00089
00090
00091 class TGGC;
00092 class TGMdiMenuBar;
00093 class TGMdiContainer;
00094 class TGMdiDecorFrame;
00095 class TGMdiFrame;
00096
00097
00098
00099 class TGMdiFrameList {
00100
00101 friend class TGMdiMainFrame;
00102
00103 protected:
00104 UInt_t fFrameId;
00105 TGMdiDecorFrame *fDecor;
00106 TGMdiFrameList *fPrev, *fNext;
00107 TGMdiFrameList *fCyclePrev, *fCycleNext;
00108
00109 public:
00110 virtual ~TGMdiFrameList() { }
00111
00112 UInt_t GetFrameId() const { return fFrameId; }
00113 TGMdiDecorFrame *GetDecorFrame() const { return fDecor; }
00114 TGMdiFrameList *GetPrev() const { return fPrev; }
00115 TGMdiFrameList *GetNext() const { return fNext; }
00116 TGMdiFrameList *GetCyclePrev() const { return fCyclePrev; }
00117 TGMdiFrameList *GetCycleNext() const { return fCycleNext; }
00118
00119 void SetFrameId(UInt_t id) { fFrameId = id; }
00120 void SetDecorFrame(TGMdiDecorFrame *decor) { fDecor = decor; }
00121 void SetPrev(TGMdiFrameList *prev) { fPrev = prev; }
00122 void SetNext(TGMdiFrameList *next) { fNext = next; }
00123 void SetCyclePrev(TGMdiFrameList *prev) { fCyclePrev = prev; }
00124 void SetCycleNext(TGMdiFrameList *next) { fCycleNext = next; }
00125
00126 ClassDef(TGMdiFrameList, 0)
00127 };
00128
00129
00130 class TGMdiGeometry {
00131
00132 public:
00133 Int_t fValueMask;
00134 TGRectangle fClient, fDecoration, fIcon;
00135
00136 virtual ~TGMdiGeometry() { }
00137
00138 ClassDef(TGMdiGeometry, 0)
00139 };
00140
00141
00142
00143
00144 class TGMdiMainFrame : public TGCanvas {
00145
00146 friend class TGMdiFrame;
00147
00148 protected:
00149 enum {
00150
00151 kMinimizedWidth = 5
00152 };
00153
00154 Int_t fCurrentX, fCurrentY, fResizeMode;
00155 Int_t fArrangementMode;
00156 TGFont *fFontCurrent, *fFontNotCurrent;
00157 Pixel_t fBackCurrent, fForeCurrent;
00158 Pixel_t fBackNotCurrent, fForeNotCurrent;
00159
00160 TGGC *fBoxGC;
00161
00162 Long_t fNumberOfFrames;
00163 TGMdiMenuBar *fMenuBar;
00164 TGFrame *fContainer;
00165 TGPopupMenu *fWinListMenu;
00166 TGMdiFrameList *fChildren;
00167 TGMdiFrameList *fCurrent;
00168
00169 void AddMdiFrame(TGMdiFrame *f);
00170 Bool_t RemoveMdiFrame(TGMdiFrame *f);
00171
00172 Bool_t SetCurrent(TGMdiFrameList *newcurrent);
00173 TGMdiDecorFrame *GetDecorFrame(UInt_t id) const;
00174 TGMdiDecorFrame *GetDecorFrame(TGMdiFrame *frame) const;
00175
00176 void UpdateWinListMenu();
00177
00178 public:
00179 TGMdiMainFrame(const TGWindow *p, TGMdiMenuBar *menu, Int_t w, Int_t h,
00180 UInt_t options = 0,
00181 Pixel_t back = GetDefaultFrameBackground());
00182 virtual ~TGMdiMainFrame();
00183
00184 virtual Bool_t HandleKey(Event_t *event);
00185 virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
00186
00187 virtual void Layout();
00188
00189 virtual void FreeMove(TGMdiFrame *frame);
00190 virtual void FreeSize(TGMdiFrame *frame);
00191 virtual void Restore(TGMdiFrame *frame);
00192 virtual void Maximize(TGMdiFrame *frame);
00193 virtual void Minimize(TGMdiFrame *frame);
00194 virtual Int_t Close(TGMdiFrame *frame);
00195 virtual Int_t ContextHelp(TGMdiFrame *frame);
00196 virtual void CloseAll();
00197
00198 virtual void Cascade() { ArrangeFrames(kMdiCascade); }
00199 virtual void TileHorizontal() { ArrangeFrames(kMdiTileHorizontal); }
00200 virtual void TileVertical() { ArrangeFrames(kMdiTileVertical); }
00201
00202 virtual void ArrangeFrames(Int_t mode);
00203 virtual void ArrangeMinimized();
00204
00205 virtual void CirculateUp();
00206 virtual void CirculateDown();
00207
00208 TGMdiFrame *GetCurrent() const;
00209 TGMdiFrame *GetMdiFrame(UInt_t id) const;
00210 TGFrame *GetContainer() const { return fContainer; }
00211 Bool_t SetCurrent(UInt_t newcurrent);
00212 Bool_t SetCurrent(TGMdiFrame *f);
00213
00214 TGPopupMenu *GetWinListMenu() const { return fWinListMenu; }
00215 TGMdiMenuBar *GetMenu() const { return fMenuBar; }
00216
00217 TGMdiFrameList *GetWindowList(Int_t current = kFALSE) const
00218 { return current ? fCurrent : fChildren; }
00219 Long_t GetNumberOfFrames() const { return fNumberOfFrames; }
00220
00221 void SetResizeMode(Int_t mode = kMdiDefaultResizeMode);
00222
00223 TGRectangle GetBBox() const;
00224 TGRectangle GetMinimizedBBox() const;
00225
00226 TGMdiGeometry GetWindowGeometry(TGMdiFrame *f) const;
00227 void ConfigureWindow(TGMdiFrame *f, TGMdiGeometry &geom);
00228
00229 Bool_t IsMaximized(TGMdiFrame *f);
00230 Bool_t IsMinimized(TGMdiFrame *f);
00231
00232 virtual void FrameCreated(Int_t id) { Emit("FrameCreated(Int_t)", id); }
00233 virtual void FrameClosed(Int_t id) { Emit("FrameClosed(Int_t)", id); }
00234 virtual void FrameMaximized(Int_t id) { Emit("FrameMaximized(Int_t)", id); }
00235 virtual void FrameMinimized(Int_t id) { Emit("FrameMinimized(Int_t)", id); }
00236 virtual void FrameRestored(Int_t id) { Emit("FrameRestored(Int_t)", id); }
00237 virtual void FramesArranged(Int_t mode) { Emit("FramesArranged(Int_t)", mode); }
00238
00239 virtual void SavePrimitive(ostream &out, Option_t *option = "");
00240
00241 ClassDef(TGMdiMainFrame, 0)
00242 };
00243
00244
00245
00246
00247 class TGMdiContainer : public TGFrame {
00248
00249 protected:
00250 const TGMdiMainFrame *fMain;
00251
00252 public:
00253 TGMdiContainer(const TGMdiMainFrame *p, Int_t w, Int_t h,
00254 UInt_t options = 0,
00255 ULong_t back = GetDefaultFrameBackground());
00256
00257 virtual Bool_t HandleConfigureNotify(Event_t *event);
00258 virtual TGDimension GetDefaultSize() const;
00259
00260 ClassDef(TGMdiContainer, 0)
00261 };
00262
00263 #endif