![]() |
Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members
![]() |
00001 /******************************************************************************** 00002 * * 00003 * M u l t i p l e D o c u m e n t C l i e n t W i n d o w * 00004 * * 00005 ********************************************************************************* 00006 * Copyright (C) 1998,2002 by Jeroen van der Zijp. All Rights Reserved. * 00007 ********************************************************************************* 00008 * This library is free software; you can redistribute it and/or * 00009 * modify it under the terms of the GNU Lesser General Public * 00010 * License as published by the Free Software Foundation; either * 00011 * version 2.1 of the License, or (at your option) any later version. * 00012 * * 00013 * This library is distributed in the hope that it will be useful, * 00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 00016 * Lesser General Public License for more details. * 00017 * * 00018 * You should have received a copy of the GNU Lesser General Public * 00019 * License along with this library; if not, write to the Free Software * 00020 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * 00021 ********************************************************************************* 00022 * $Id: FXMDIClient.h,v 1.18 2002/01/18 22:42:53 jeroen Exp $ * 00023 ********************************************************************************/ 00024 #ifndef FXMDICLIENT_H 00025 #define FXMDICLIENT_H 00026 00027 #ifndef FXSCROLLAREA_H 00028 #include "FXScrollArea.h" 00029 #endif 00030 00031 00032 00033 class FXMDIChild; 00034 00035 00036 /** 00037 * The MDI client window manages a number of MDI child windows in 00038 * a multiple-document interface (MDI) application. 00039 * MDI child windows usually receive messages from the GUI through 00040 * delegation via the MDI client, i.e. the MDI client window is set as 00041 * the target for most GUI commands; the MDI client filters out a few messages 00042 * and forwards all other messages to the active MDI child. 00043 * MDI client can arrange the MDI child windows in various ways:- 00044 * it may maximize one of the MDI child windows, arrange them side-by-side, 00045 * cascade them, or iconify them. 00046 * MDI child windows are notified about changes in the active MDI child 00047 * window by the MDI client. 00048 */ 00049 class FXAPI FXMDIClient : public FXScrollArea { 00050 FXDECLARE(FXMDIClient) 00051 friend class FXMDIChild; 00052 protected: 00053 FXint cascadex; // Cascade offset X 00054 FXint cascadey; // Cascade offset Y 00055 FXint xmin; // Space taken up by all children 00056 FXint xmax; 00057 FXint ymin; 00058 FXint ymax; 00059 private: 00060 FXMDIChild *mdifirst; 00061 FXMDIChild *mdilast; 00062 FXMDIChild *active; 00063 protected: 00064 FXMDIClient(); 00065 void recompute(); 00066 virtual void layout(); 00067 private: 00068 FXMDIClient(const FXMDIClient&); 00069 FXMDIClient &operator=(const FXMDIClient&); 00070 public: 00071 long onChanged(FXObject*,FXSelector,void*); 00072 long onCmdActivateNext(FXObject*,FXSelector,void*); 00073 long onCmdActivatePrev(FXObject*,FXSelector,void*); 00074 long onCmdTileHorizontal(FXObject*,FXSelector,void*); 00075 long onCmdTileVertical(FXObject*,FXSelector,void*); 00076 long onCmdCascade(FXObject*,FXSelector,void*); 00077 long onUpdActivateNext(FXObject*,FXSelector,void*); 00078 long onUpdActivatePrev(FXObject*,FXSelector,void*); 00079 long onUpdTileVertical(FXObject*,FXSelector,void*); 00080 long onUpdTileHorizontal(FXObject*,FXSelector,void*); 00081 long onUpdCascade(FXObject*,FXSelector,void*); 00082 long onUpdClose(FXObject*,FXSelector,void*); 00083 long onUpdMenuClose(FXObject*,FXSelector,void*); 00084 long onUpdRestore(FXObject*,FXSelector,void*); 00085 long onUpdMenuRestore(FXObject*,FXSelector,void*); 00086 long onUpdMinimize(FXObject*,FXSelector,void*); 00087 long onUpdMenuMinimize(FXObject*,FXSelector,void*); 00088 long onUpdMaximize(FXObject*,FXSelector,void*); 00089 long onUpdMenuWindow(FXObject*,FXSelector,void*); 00090 long onCmdCloseDocument(FXObject*,FXSelector,void*); 00091 long onCmdCloseAllDocuments(FXObject*,FXSelector,void*); 00092 long onUpdCloseDocument(FXObject*,FXSelector,void*); 00093 long onUpdCloseAllDocuments(FXObject*,FXSelector,void*); 00094 long onCmdWindowSelect(FXObject*,FXSelector,void*); 00095 long onUpdWindowSelect(FXObject*,FXSelector,void*); 00096 long onUpdAnyWindows(FXObject*,FXSelector,void*); 00097 virtual long onDefault(FXObject*,FXSelector,void*); 00098 public: 00099 enum { 00100 ID_MDI_ANY=65400, 00101 ID_MDI_1, 00102 ID_MDI_2, 00103 ID_MDI_3, 00104 ID_MDI_4, 00105 ID_MDI_5, 00106 ID_MDI_6, 00107 ID_MDI_7, 00108 ID_MDI_8, 00109 ID_MDI_9, 00110 ID_MDI_10, 00111 ID_LAST 00112 }; 00113 public: 00114 00115 /// Construct MDI Client window 00116 FXMDIClient(FXComposite* p,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); 00117 00118 /// Recalculate interior for scrollbars 00119 virtual void recalc(); 00120 00121 /// Move MDI Children around 00122 virtual void moveContents(FXint x,FXint y); 00123 00124 /// Get first MDI Child 00125 FXMDIChild* getMDIChildFirst() const { return mdifirst; } 00126 00127 /// Get last MDI Child 00128 FXMDIChild* getMDIChildLast() const { return mdilast; } 00129 00130 /// Pass message to all MDI Child windows 00131 long forallWindows(FXObject* sender,FXSelector sel,void* ptr); 00132 00133 /// Pass message to all MDI Child windows whose target is document 00134 long forallDocWindows(FXObject* document,FXObject* sender,FXSelector sel,void* ptr); 00135 00136 /// Recompute content width 00137 virtual FXint getContentWidth(); 00138 00139 /// Recompute content height 00140 virtual FXint getContentHeight(); 00141 00142 /// Get current active child; may be NULL! 00143 FXMDIChild* getActiveChild() const { return active; } 00144 00145 /// Set active MDI Child 00146 FXbool setActiveChild(FXMDIChild* child=NULL,FXbool notify=TRUE); 00147 00148 /// Change cascade offset X 00149 void setCascadeX(FXint off){ cascadex=off; } 00150 00151 /// Change cascade offset Y 00152 void setCascadeY(FXint off){ cascadey=off; } 00153 00154 /// Get cascade offset X 00155 FXint getCascadeX() const { return cascadex; } 00156 00157 /// Get cascade offset Y 00158 FXint getCascadeY() const { return cascadey; } 00159 00160 /// Save object to a stream 00161 virtual void save(FXStream& store) const; 00162 00163 /// Load object from a stream 00164 virtual void load(FXStream& store); 00165 00166 /// Destructor 00167 virtual ~FXMDIClient(); 00168 }; 00169 00170 00171 #endif