Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members

FXMDIChild.h

00001 /******************************************************************************** 00002 * * 00003 * M u l t i p l e D o c u m e n t C h i l d W i n d o w * 00004 * * 00005 ********************************************************************************* 00006 * Copyright (C) 1998,2005 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: FXMDIChild.h,v 1.40 2005/01/16 16:06:06 fox Exp $ * 00023 ********************************************************************************/ 00024 #ifndef FXMDICHILD_H 00025 #define FXMDICHILD_H 00026 00027 #ifndef FXCOMPOSITE_H 00028 #include "FXComposite.h" 00029 #endif 00030 00031 namespace FX { 00032 00033 00034 class FXMDIClient; 00035 class FXMenuButton; 00036 class FXButton; 00037 class FXFont; 00038 00039 00040 /// MDI Child Window styles 00041 enum { 00042 MDI_NORMAL = 0, /// Normal display mode 00043 MDI_MAXIMIZED = 0x00001000, /// Window appears maximized 00044 MDI_MINIMIZED = 0x00002000, /// Window is iconified or minimized 00045 MDI_TRACKING = 0x00004000 /// Track continuously during dragging 00046 }; 00047 00048 00049 00050 /** 00051 * The MDI child window contains the application work area in a Multiple Document 00052 * Interface application. GUI Controls are connected to the MDI child via delegation 00053 * through the MDI client, which forwards messages it receives to the active MDI child. 00054 * The MDI child itself tries to further delegate messages to its single content window, 00055 * and if not handled there, to its target object. 00056 * When the MDI child is maximized, it sends a SEL_MAXIMIZE message; when the MDI 00057 * child is minimized, it sends a SEL_MINIMIZE message. When it is restored, it 00058 * sends a SEL_RESTORE message to its target. The MDI child also notifies its 00059 * target when it becomes the active MDI child, via the SEL_SELECTED message. 00060 * The void* in the SEL_SELECTED message refers to the previously active MDI child, 00061 * if any. When an MDI child ceases to be the active one, a SEL_DESELECTED message 00062 * is sent. The void* in the SEL_DESELECTED message refers to the newly activated 00063 * MDI child, if any. Thus, interception of SEL_SELECTED and SEL_DESELECTED allows 00064 * the target object to determine whether the user switched between MDI windows of 00065 * the same document (target) or between MDI windows belonging to the same document. 00066 * When the MDI child is closed, it sends a SEL_CLOSE message to its target. 00067 * The target has an opportunity to object to the closing; if the MDI child should 00068 * not be closed, it should return 1 (objection). If the MDI child should be closed, 00069 * the target can either just return 0 or simply not handle the SEL_CLOSE message. 00070 * The SEL_UPDATE message can be used to modify the MDI child's title (via 00071 * ID_SETSTRINGVALUE), and window icon (via ID_SETICONVALUE). 00072 */ 00073 class FXAPI FXMDIChild : public FXComposite { 00074 FXDECLARE(FXMDIChild) 00075 protected: 00076 FXString title; // Window title 00077 FXMenuButton *windowbtn; // Window button 00078 FXButton *minimizebtn; // Minimize button 00079 FXButton *restorebtn; // Restore button 00080 FXButton *maximizebtn; // Maximize buton 00081 FXButton *deletebtn; // Close button 00082 FXFont *font; // Title font 00083 FXColor baseColor; // Colors 00084 FXColor hiliteColor; 00085 FXColor shadowColor; 00086 FXColor borderColor; 00087 FXColor titleColor; 00088 FXColor titleBackColor; 00089 FXint iconPosX; // Saved icon position 00090 FXint iconPosY; 00091 FXint iconWidth; 00092 FXint iconHeight; 00093 FXint normalPosX; // Saved normal position 00094 FXint normalPosY; 00095 FXint normalWidth; 00096 FXint normalHeight; 00097 FXint spotx; // Grab-spot of mouse on window 00098 FXint spoty; 00099 FXint xoff; // Mouse offset to add 00100 FXint yoff; 00101 FXint newx; // New location of window 00102 FXint newy; 00103 FXint neww; 00104 FXint newh; 00105 FXuchar mode; // Dragging mode 00106 protected: 00107 FXMDIChild(); 00108 void drawRubberBox(FXint x,FXint y,FXint w,FXint h); 00109 void animateRectangles(FXint ox,FXint oy,FXint ow,FXint oh,FXint nx,FXint ny,FXint nw,FXint nh); 00110 FXuchar where(FXint x,FXint y); 00111 void changeCursor(FXint x,FXint y); 00112 void revertCursor(); 00113 protected: 00114 enum { 00115 DRAG_NONE = 0, 00116 DRAG_TOP = 1, 00117 DRAG_BOTTOM = 2, 00118 DRAG_LEFT = 4, 00119 DRAG_RIGHT = 8, 00120 DRAG_TOPLEFT = (DRAG_TOP|DRAG_LEFT), 00121 DRAG_TOPRIGHT = (DRAG_TOP|DRAG_RIGHT), 00122 DRAG_BOTTOMLEFT = (DRAG_BOTTOM|DRAG_LEFT), 00123 DRAG_BOTTOMRIGHT = (DRAG_BOTTOM|DRAG_RIGHT), 00124 DRAG_INVERTED = 16, 00125 DRAG_TITLE = 32 00126 }; 00127 private: 00128 FXMDIChild(const FXMDIChild&); 00129 FXMDIChild &operator=(const FXMDIChild&); 00130 public: 00131 long onPaint(FXObject*,FXSelector,void*); 00132 long onFocusSelf(FXObject*,FXSelector,void*); 00133 long onFocusIn(FXObject*,FXSelector,void*); 00134 long onFocusOut(FXObject*,FXSelector,void*); 00135 long onRightBtnPress(FXObject*,FXSelector,void*); 00136 long onRightBtnRelease(FXObject*,FXSelector,void*); 00137 long onLeftBtnPress(FXObject*,FXSelector,void*); 00138 long onLeftBtnRelease(FXObject*,FXSelector,void*); 00139 long onMiddleBtnPress(FXObject*,FXSelector,void*); 00140 long onMiddleBtnRelease(FXObject*,FXSelector,void*); 00141 long onMotion(FXObject*,FXSelector,void*); 00142 long onSelected(FXObject*,FXSelector,void*); 00143 long onDeselected(FXObject*,FXSelector,void*); 00144 long onCmdClose(FXObject*,FXSelector,void*); 00145 long onUpdClose(FXObject*,FXSelector,void*); 00146 long onCmdRestore(FXObject*,FXSelector,void*); 00147 long onUpdRestore(FXObject*,FXSelector,void*); 00148 long onUpdMaximize(FXObject*,FXSelector,void*); 00149 long onUpdMinimize(FXObject*,FXSelector,void*); 00150 long onCmdMaximize(FXObject*,FXSelector,void*); 00151 long onCmdMinimize(FXObject*,FXSelector,void*); 00152 long onUpdWindow(FXObject*,FXSelector,void*); 00153 long onUpdMenuRestore(FXObject*,FXSelector,void*); 00154 long onUpdMenuMinimize(FXObject*,FXSelector,void*); 00155 long onUpdMenuClose(FXObject*,FXSelector,void*); 00156 long onUpdMenuWindow(FXObject*,FXSelector,void*); 00157 long onCmdSetStringValue(FXObject*,FXSelector,void*); 00158 long onCmdGetStringValue(FXObject*,FXSelector,void*); 00159 long onCmdSetIconValue(FXObject*,FXSelector,void*); 00160 long onCmdGetIconValue(FXObject*,FXSelector,void*); 00161 virtual long onDefault(FXObject*,FXSelector,void*); 00162 public: 00163 00164 /// Construct MDI Child window with given name and icon 00165 FXMDIChild(FXMDIClient* p,const FXString& name,FXIcon* ic=NULL,FXPopup* pup=NULL,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); 00166 00167 /// Create window 00168 virtual void create(); 00169 00170 /// Detach window 00171 virtual void detach(); 00172 00173 /// Perform layout 00174 virtual void layout(); 00175 00176 /// Return the default width of this window 00177 virtual FXint getDefaultWidth(); 00178 00179 /// Return the default height of this window 00180 virtual FXint getDefaultHeight(); 00181 00182 /// Move the focus to this window 00183 virtual void setFocus(); 00184 00185 /// MDI Child can receive focus 00186 virtual FXbool canFocus() const; 00187 00188 /// Move this window to the specified position in the parent's coordinates 00189 virtual void move(FXint x,FXint y); 00190 00191 /// Resize this window to the specified width and height 00192 virtual void resize(FXint w,FXint h); 00193 00194 /// Move and resize this window in the parent's coordinates 00195 virtual void position(FXint x,FXint y,FXint w,FXint h); 00196 00197 /// Change normal (restored) position 00198 void setNormalX(FXint x){ normalPosX=x; } 00199 void setNormalY(FXint y){ normalPosY=y; } 00200 void setNormalWidth(FXint w){ normalWidth=w; } 00201 void setNormalHeight(FXint h){ normalHeight=h; } 00202 00203 /// Return normal (restored) position 00204 FXint getNormalX() const { return normalPosX; } 00205 FXint getNormalY() const { return normalPosY; } 00206 FXint getNormalWidth() const { return normalWidth; } 00207 FXint getNormalHeight() const { return normalHeight; } 00208 00209 /// Change iconified position 00210 void setIconX(FXint x){ iconPosX=x; } 00211 void setIconY(FXint y){ iconPosY=y; } 00212 void setIconWidth(FXint w){ iconWidth=w; } 00213 void setIconHeight(FXint h){ iconHeight=h; } 00214 00215 /// Return iconified position 00216 FXint getIconX() const { return iconPosX; } 00217 FXint getIconY() const { return iconPosY; } 00218 FXint getIconWidth() const { return iconWidth; } 00219 FXint getIconHeight() const { return iconHeight; } 00220 00221 /// Return content window 00222 FXWindow *contentWindow() const; 00223 00224 /// Change MDI Child's title 00225 void setTitle(const FXString& name); 00226 00227 /// Get current title 00228 FXString getTitle() const { return title; } 00229 00230 /// Get colors 00231 FXColor getHiliteColor() const { return hiliteColor; } 00232 FXColor getShadowColor() const { return shadowColor; } 00233 FXColor getBaseColor() const { return baseColor; } 00234 FXColor getBorderColor() const { return borderColor; } 00235 FXColor getTitleColor () const { return titleColor; } 00236 FXColor getTitleBackColor() const { return titleBackColor; } 00237 00238 /// Change colors 00239 void setHiliteColor(FXColor clr); 00240 void setShadowColor(FXColor clr); 00241 void setBaseColor(FXColor clr); 00242 void setBorderColor(FXColor clr); 00243 void setTitleColor(FXColor clr); 00244 void setTitleBackColor(FXColor clr); 00245 00246 /// Maximize MDI window, return TRUE if maximized 00247 virtual FXbool maximize(FXbool notify=FALSE); 00248 00249 /// Minimize/iconify MDI window, return TRUE if minimized 00250 virtual FXbool minimize(FXbool notify=FALSE); 00251 00252 /// Restore MDI window to normal, return TRUE if restored 00253 virtual FXbool restore(FXbool notify=FALSE); 00254 00255 /// Close MDI window, return TRUE if actually closed 00256 virtual FXbool close(FXbool notify=FALSE); 00257 00258 /// Return TRUE if maximized 00259 FXbool isMaximized() const; 00260 00261 /// Return TRUE if minimized 00262 FXbool isMinimized() const; 00263 00264 /// Get window icon 00265 FXIcon *getIcon() const; 00266 00267 /// Set window icon 00268 void setIcon(FXIcon* icon); 00269 00270 /// Get window menu 00271 FXPopup* getMenu() const; 00272 00273 /// Set window menu 00274 void setMenu(FXPopup* menu); 00275 00276 /// Set tracking instead of just outline 00277 void setTracking(FXbool tracking=TRUE); 00278 00279 /// Return true if tracking 00280 FXbool getTracking() const; 00281 00282 /// Set title font 00283 void setFont(FXFont *fnt); 00284 00285 /// Get title font 00286 FXFont* getFont() const { return font; } 00287 00288 /// Save to stream 00289 virtual void save(FXStream& store) const; 00290 00291 /// Load from stream 00292 virtual void load(FXStream& store); 00293 00294 /// Destroy 00295 virtual ~FXMDIChild(); 00296 }; 00297 00298 } 00299 00300 #endif

Copyright © 1997-2005 Jeroen van der Zijp