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

FXWindow.h

00001 /********************************************************************************
00002 *                                                                               *
00003 *                            W i n d o w   O b j e c t                          *
00004 *                                                                               *
00005 *********************************************************************************
00006 * Copyright (C) 1997,2004 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: FXWindow.h,v 1.105 2004/02/08 17:17:34 fox Exp $                         *
00023 ********************************************************************************/
00024 #ifndef FXWINDOW_H
00025 #define FXWINDOW_H
00026 
00027 #ifndef FXDRAWABLE_H
00028 #include "FXDrawable.h"
00029 #endif
00030 
00031 
00032 namespace FX {
00033 
00034 
00035 /// Layout hints for child widgets
00036 enum {
00037   LAYOUT_NORMAL      = 0,                                   /// Default layout mode
00038   LAYOUT_SIDE_TOP    = 0,                                   /// Pack on top side (default)
00039   LAYOUT_SIDE_BOTTOM = 0x00000001,                          /// Pack on bottom side
00040   LAYOUT_SIDE_LEFT   = 0x00000002,                          /// Pack on left side
00041   LAYOUT_SIDE_RIGHT  = LAYOUT_SIDE_LEFT|LAYOUT_SIDE_BOTTOM, /// Pack on right side
00042   LAYOUT_FILL_COLUMN = 0x00000001,                          /// Matrix column is stretchable
00043   LAYOUT_FILL_ROW    = 0x00000002,                          /// Matrix row is stretchable
00044   LAYOUT_LEFT        = 0,                                   /// Stick on left (default)
00045   LAYOUT_RIGHT       = 0x00000004,                          /// Stick on right
00046   LAYOUT_CENTER_X    = 0x00000008,                          /// Center horizontally
00047   LAYOUT_FIX_X       = LAYOUT_RIGHT|LAYOUT_CENTER_X,        /// X fixed
00048   LAYOUT_TOP         = 0,                                   /// Stick on top (default)
00049   LAYOUT_BOTTOM      = 0x00000010,                          /// Stick on bottom
00050   LAYOUT_CENTER_Y    = 0x00000020,                          /// Center vertically
00051   LAYOUT_FIX_Y       = LAYOUT_BOTTOM|LAYOUT_CENTER_Y,       /// Y fixed
00052   LAYOUT_RESERVED_1  = 0x00000040,
00053   LAYOUT_RESERVED_2  = 0x00000080,
00054   LAYOUT_FIX_WIDTH   = 0x00000100,                          /// Width fixed
00055   LAYOUT_FIX_HEIGHT  = 0x00000200,                          /// height fixed
00056   LAYOUT_MIN_WIDTH   = 0,                                   /// Minimum width is the default
00057   LAYOUT_MIN_HEIGHT  = 0,                                   /// Minimum height is the default
00058   LAYOUT_FILL_X      = 0x00000400,                          /// Stretch or shrink horizontally
00059   LAYOUT_FILL_Y      = 0x00000800,                          /// Stretch or shrink vertically
00060   LAYOUT_FILL        = LAYOUT_FILL_X|LAYOUT_FILL_Y,         /// Stretch or shrink in both directions
00061   LAYOUT_EXPLICIT    = LAYOUT_FIX_X|LAYOUT_FIX_Y|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT   /// Explicit placement
00062   };
00063 
00064 
00065 /// Frame border appearance styles (for subclasses)
00066 enum {
00067   FRAME_NONE   = 0,                                     /// Default is no frame
00068   FRAME_SUNKEN = 0x00001000,                            /// Sunken border
00069   FRAME_RAISED = 0x00002000,                            /// Raised border
00070   FRAME_THICK  = 0x00004000,                            /// Thick border
00071   FRAME_GROOVE = FRAME_THICK,                           /// A groove or etched-in border
00072   FRAME_RIDGE  = FRAME_THICK|FRAME_RAISED|FRAME_SUNKEN, /// A ridge or embossed border
00073   FRAME_LINE   = FRAME_RAISED|FRAME_SUNKEN,             /// Simple line border
00074   FRAME_NORMAL = FRAME_SUNKEN|FRAME_THICK               /// Regular raised/thick border
00075   };
00076 
00077 
00078 /// Packing style (for packers)
00079 enum {
00080   PACK_NORMAL         = 0,              /// Default is each its own size
00081   PACK_UNIFORM_HEIGHT = 0x00008000,     /// Uniform height
00082   PACK_UNIFORM_WIDTH  = 0x00010000      /// Uniform width
00083   };
00084 
00085 
00086 class FXCursor;
00087 class FXAccelTable;
00088 class FXComposite;
00089 
00090 
00091 /// Base class for all windows
00092 class FXAPI FXWindow : public FXDrawable {
00093   FXDECLARE(FXWindow)
00094 private:
00095   FXWindow     *parent;                 // Parent Window
00096   FXWindow     *owner;                  // Owner Window
00097   FXWindow     *first;                  // First Child
00098   FXWindow     *last;                   // Last Child
00099   FXWindow     *next;                   // Next Sibling
00100   FXWindow     *prev;                   // Previous Sibling
00101   FXWindow     *focus;                  // Focus Child
00102   FXuint        wk;                     // Window Key
00103 protected:
00104   FXCursor     *defaultCursor;          // Normal Cursor
00105   FXCursor     *dragCursor;             // Cursor during drag
00106   FXAccelTable *accelTable;             // Accelerator table
00107   FXObject     *target;                 // Target object
00108   FXSelector    message;                // Message ID
00109   FXint         xpos;                   // Window X Position
00110   FXint         ypos;                   // Window Y Position
00111   FXColor       backColor;              // Window background color
00112   FXString      tag;                    // Help tag
00113   FXuint        flags;                  // Window state flags
00114   FXuint        options;                // Window options
00115 public:
00116 
00117   // Common DND types
00118   static FXDragType deleteType;         // Delete request
00119   static FXDragType textType;           // Ascii text request
00120   static FXDragType colorType;          // Color
00121   static FXDragType urilistType;        // URI List
00122   static const FXDragType stringType;   // Clipboard text type (pre-registered)
00123   static const FXDragType imageType;    // Clipboard image type (pre-registered)
00124 
00125 protected:
00126 #ifdef WIN32
00127   virtual FXID GetDC() const;
00128   virtual int ReleaseDC(FXID) const;
00129   virtual const char* GetClass() const;
00130 #else
00131   void addColormapWindows();
00132   void remColormapWindows();
00133 #endif
00134 
00135 protected:
00136   FXWindow();
00137   FXWindow(FXApp* a,FXVisual *vis);
00138   FXWindow(FXApp* a,FXWindow* own,FXuint opts,FXint x,FXint y,FXint w,FXint h);
00139   static FXWindow* findDefault(FXWindow* window);
00140   static FXWindow* findInitial(FXWindow* window);
00141   virtual FXbool doesOverrideRedirect() const;
00142 private:
00143   FXWindow(const FXWindow&);
00144   FXWindow& operator=(const FXWindow&);
00145 
00146 protected:
00147 
00148   // Window state flags
00149   enum {
00150     FLAG_SHOWN        = 0x00000001,     // Is shown
00151     FLAG_ENABLED      = 0x00000002,     // Able to receive input
00152     FLAG_UPDATE       = 0x00000004,     // Is subject to GUI update
00153     FLAG_DROPTARGET   = 0x00000008,     // Drop target
00154     FLAG_FOCUSED      = 0x00000010,     // Has focus
00155     FLAG_DIRTY        = 0x00000020,     // Needs layout
00156     FLAG_RECALC       = 0x00000040,     // Needs recalculation
00157     FLAG_TIP          = 0x00000080,     // Show tip
00158     FLAG_HELP         = 0x00000100,     // Show help
00159     FLAG_DEFAULT      = 0x00000200,     // Default widget
00160     FLAG_INITIAL      = 0x00000400,     // Initial widget
00161     FLAG_SHELL        = 0x00000800,     // Shell window
00162     FLAG_ACTIVE       = 0x00001000,     // Window is active
00163     FLAG_PRESSED      = 0x00002000,     // Button has been pressed
00164     FLAG_KEY          = 0x00004000,     // Keyboard key pressed
00165     FLAG_CARET        = 0x00008000,     // Caret is on
00166     FLAG_CHANGED      = 0x00010000,     // Window data changed
00167     FLAG_LASSO        = 0x00020000,     // Lasso mode
00168     FLAG_TRYDRAG      = 0x00040000,     // Tentative drag mode
00169     FLAG_DODRAG       = 0x00080000,     // Doing drag mode
00170     FLAG_SCROLLINSIDE = 0x00100000,     // Scroll only when inside
00171     FLAG_SCROLLING    = 0x00200000,     // Right mouse scrolling
00172     FLAG_OWNED        = 0x00400000      // Window handle owned by widget
00173     };
00174 
00175 public:
00176 
00177   // Message handlers
00178   long onPaint(FXObject*,FXSelector,void*);
00179   long onMap(FXObject*,FXSelector,void*);
00180   long onUnmap(FXObject*,FXSelector,void*);
00181   long onConfigure(FXObject*,FXSelector,void*);
00182   long onUpdate(FXObject*,FXSelector,void*);
00183   long onMotion(FXObject*,FXSelector,void*);
00184   long onMouseWheel(FXObject*,FXSelector,void*);
00185   long onEnter(FXObject*,FXSelector,void*);
00186   long onLeave(FXObject*,FXSelector,void*);
00187   long onLeftBtnPress(FXObject*,FXSelector,void*);
00188   long onLeftBtnRelease(FXObject*,FXSelector,void*);
00189   long onMiddleBtnPress(FXObject*,FXSelector,void*);
00190   long onMiddleBtnRelease(FXObject*,FXSelector,void*);
00191   long onRightBtnPress(FXObject*,FXSelector,void*);
00192   long onRightBtnRelease(FXObject*,FXSelector,void*);
00193   long onBeginDrag(FXObject*,FXSelector,void*);
00194   long onEndDrag(FXObject*,FXSelector,void*);
00195   long onDragged(FXObject*,FXSelector,void*);
00196   long onKeyPress(FXObject*,FXSelector,void*);
00197   long onKeyRelease(FXObject*,FXSelector,void*);
00198   long onUngrabbed(FXObject*,FXSelector,void*);
00199   long onDestroy(FXObject*,FXSelector,void*);
00200   long onFocusSelf(FXObject*,FXSelector,void*);
00201   long onFocusIn(FXObject*,FXSelector,void*);
00202   long onFocusOut(FXObject*,FXSelector,void*);
00203   long onSelectionLost(FXObject*,FXSelector,void*);
00204   long onSelectionGained(FXObject*,FXSelector,void*);
00205   long onSelectionRequest(FXObject*,FXSelector,void*);
00206   long onClipboardLost(FXObject*,FXSelector,void*);
00207   long onClipboardGained(FXObject*,FXSelector,void*);
00208   long onClipboardRequest(FXObject*,FXSelector,void*);
00209   long onDNDEnter(FXObject*,FXSelector,void*);
00210   long onDNDLeave(FXObject*,FXSelector,void*);
00211   long onDNDMotion(FXObject*,FXSelector,void*);
00212   long onDNDDrop(FXObject*,FXSelector,void*);
00213   long onDNDRequest(FXObject*,FXSelector,void*);
00214   long onCmdShow(FXObject*,FXSelector,void*);
00215   long onCmdHide(FXObject*,FXSelector,void*);
00216   long onUpdToggleShown(FXObject*,FXSelector,void*);
00217   long onCmdToggleShown(FXObject*,FXSelector,void*);
00218   long onCmdRaise(FXObject*,FXSelector,void*);
00219   long onCmdLower(FXObject*,FXSelector,void*);
00220   long onCmdEnable(FXObject*,FXSelector,void*);
00221   long onCmdDisable(FXObject*,FXSelector,void*);
00222   long onCmdUpdate(FXObject*,FXSelector,void*);
00223   long onUpdYes(FXObject*,FXSelector,void*);
00224   long onCmdDelete(FXObject*,FXSelector,void*);
00225 
00226 public:
00227 
00228   // Message ID's common to most Windows
00229   enum {
00230     ID_NONE,
00231     ID_HIDE,            // ID_HIDE+FALSE
00232     ID_SHOW,            // ID_HIDE+TRUE
00233     ID_TOGGLESHOWN,
00234     ID_LOWER,
00235     ID_RAISE,
00236     ID_DELETE,
00237     ID_DISABLE,         // ID_DISABLE+FALSE
00238     ID_ENABLE,          // ID_DISABLE+TRUE
00239     ID_UNCHECK,         // ID_UNCHECK+FALSE
00240     ID_CHECK,           // ID_UNCHECK+TRUE
00241     ID_UNKNOWN,         // ID_UNCHECK+MAYBE
00242     ID_UPDATE,
00243     ID_AUTOSCROLL,
00244     ID_TIPTIMER,
00245     ID_HSCROLLED,
00246     ID_VSCROLLED,
00247     ID_SETVALUE,
00248     ID_SETINTVALUE,
00249     ID_SETREALVALUE,
00250     ID_SETSTRINGVALUE,
00251     ID_SETICONVALUE,
00252     ID_SETINTRANGE,
00253     ID_SETREALRANGE,
00254     ID_GETINTVALUE,
00255     ID_GETREALVALUE,
00256     ID_GETSTRINGVALUE,
00257     ID_GETICONVALUE,
00258     ID_GETINTRANGE,
00259     ID_GETREALRANGE,
00260     ID_SETHELPSTRING,
00261     ID_GETHELPSTRING,
00262     ID_SETTIPSTRING,
00263     ID_GETTIPSTRING,
00264     ID_QUERY_TIP,
00265     ID_QUERY_HELP,
00266     ID_QUERY_MENU,
00267     ID_HOTKEY,
00268     ID_ACCEL,
00269     ID_UNPOST,
00270     ID_POST,
00271     ID_MDI_TILEHORIZONTAL,
00272     ID_MDI_TILEVERTICAL,
00273     ID_MDI_CASCADE,
00274     ID_MDI_MAXIMIZE,
00275     ID_MDI_MINIMIZE,
00276     ID_MDI_RESTORE,
00277     ID_MDI_CLOSE,
00278     ID_MDI_WINDOW,
00279     ID_MDI_MENUWINDOW,
00280     ID_MDI_MENUMINIMIZE,
00281     ID_MDI_MENURESTORE,
00282     ID_MDI_MENUCLOSE,
00283     ID_MDI_NEXT,
00284     ID_MDI_PREV,
00285     ID_LAST
00286     };
00287 
00288 public:
00289 
00290   // Common DND type names
00291   static const FXchar deleteTypeName[];
00292   static const FXchar textTypeName[];
00293   static const FXchar colorTypeName[];
00294   static const FXchar urilistTypeName[];
00295 
00296 public:
00297 
00298   /// Constructor
00299   FXWindow(FXComposite* p,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0);
00300 
00301   /// Return a pointer to the parent window
00302   FXWindow* getParent() const { return parent; }
00303 
00304   /// Return a pointer to the owner window
00305   FXWindow* getOwner() const { return owner; }
00306 
00307   /// Return a pointer to the shell window
00308   FXWindow* getShell() const;
00309 
00310   /// Return a pointer to the root window
00311   FXWindow* getRoot() const;
00312 
00313   /// Return a pointer to the next (sibling) window, if any
00314   FXWindow* getNext() const { return next; }
00315 
00316   /// Return a pointer to the previous (sibling) window , if any
00317   FXWindow* getPrev() const { return prev; }
00318 
00319   /// Return a pointer to this window's first child window , if any
00320   FXWindow* getFirst() const { return first; }
00321 
00322   /// Return a pointer to this window's last child window, if any
00323   FXWindow* getLast() const { return last; }
00324 
00325   /// Return a pointer to the currently focused child window
00326   FXWindow* getFocus() const { return focus; }
00327 
00328   /// Change window key
00329   void setKey(FXuint k){ wk=k; }
00330 
00331   /// Return window key
00332   FXuint getKey() const { return wk; }
00333 
00334   /// Set the message target object for this window
00335   void setTarget(FXObject *t){ target=t; }
00336 
00337   /// Get the message target object for this window, if any
00338   FXObject* getTarget() const { return target; }
00339 
00340   /// Set the message identifier for this window
00341   void setSelector(FXSelector sel){ message=sel; }
00342 
00343   /// Get the message identifier for this window
00344   FXSelector getSelector() const { return message; }
00345 
00346   /// Get this window's x-coordinate, in the parent's coordinate system
00347   FXint getX() const { return xpos; }
00348 
00349   /// Get this window's y-coordinate, in the parent's coordinate system
00350   FXint getY() const { return ypos; }
00351 
00352   /// Return the default width of this window
00353   virtual FXint getDefaultWidth();
00354 
00355   /// Return the default height of this window
00356   virtual FXint getDefaultHeight();
00357 
00358   /// Return width for given height
00359   virtual FXint getWidthForHeight(FXint givenheight);
00360 
00361   /// Return height for given width
00362   virtual FXint getHeightForWidth(FXint givenwidth);
00363 
00364   /// Set this window's x-coordinate, in the parent's coordinate system
00365   void setX(FXint x);
00366 
00367   /// Set this window's y-coordinate, in the parent's coordinate system
00368   void setY(FXint y);
00369 
00370   /// Set the window width
00371   void setWidth(FXint w);
00372 
00373   /// Set the window height
00374   void setHeight(FXint h);
00375 
00376   /// Set layout hints for this window
00377   void setLayoutHints(FXuint lout);
00378 
00379   /// Get layout hints for this window
00380   FXuint getLayoutHints() const;
00381 
00382   /// Return a pointer to the accelerator table
00383   FXAccelTable* getAccelTable() const { return accelTable; }
00384 
00385   /// Set the accelerator table
00386   void setAccelTable(FXAccelTable* acceltable){ accelTable=acceltable; }
00387 
00388   /// Add a hot key
00389   void addHotKey(FXHotKey code);
00390 
00391   /// Remove a hot key
00392   void remHotKey(FXHotKey code);
00393 
00394   /// Change help tag for this widget
00395   void setHelpTag(const FXString&  text){ tag=text; }
00396 
00397   /// Get the help tag for this widget
00398   FXString getHelpTag() const { return tag; }
00399 
00400   /// Return true if window is a shell window
00401   FXbool isShell() const;
00402 
00403   /// Return true if specified window is owned by this window
00404   FXbool isOwnerOf(const FXWindow* window) const;
00405 
00406   /// Return true if specified window is ancestor of this window
00407   FXbool isChildOf(const FXWindow* window) const;
00408 
00409   /// Return true if this window contains child in its subtree
00410   FXbool containsChild(const FXWindow* child) const;
00411 
00412   /// Return the child window at specified coordinates
00413   FXWindow* getChildAt(FXint x,FXint y) const;
00414 
00415   /// Return the number of child windows for this window
00416   FXint numChildren() const;
00417 
00418   /**
00419   * Return the index (starting from zero) of the specified child window,
00420   * or -1 if the window is not a child or NULL
00421   */
00422   FXint indexOfChild(const FXWindow *window) const;
00423 
00424   /**
00425   * Return the child window at specified index,
00426   * or NULL if the index is negative or out of range
00427   */
00428   FXWindow* childAtIndex(FXint index) const;
00429 
00430   /// Return the common ancestor of window a and window b
00431   static FXWindow* commonAncestor(FXWindow* a,FXWindow* b);
00432 
00433   /// Set the default cursor for this window
00434   void setDefaultCursor(FXCursor* cur);
00435 
00436   /// Return the default cursor for this window
00437   FXCursor* getDefaultCursor() const { return defaultCursor; }
00438 
00439   /// Set the drag cursor for this window
00440   void setDragCursor(FXCursor* cur);
00441 
00442   /// Return the drag cursor for this window
00443   FXCursor* getDragCursor() const { return dragCursor; }
00444 
00445   /// Return the cursor position and mouse button-state
00446   FXint getCursorPosition(FXint& x,FXint& y,FXuint& buttons) const;
00447 
00448   /// Warp the cursor to the new position
00449   FXint setCursorPosition(FXint x,FXint y);
00450 
00451   /// Return true if this window is able to receive mouse and keyboard events
00452   FXbool isEnabled() const;
00453 
00454   /// Return true if the window is active
00455   FXbool isActive() const;
00456 
00457   /// Return true if this window is a control capable of receiving the focus
00458   virtual FXbool canFocus() const;
00459 
00460   /// Return true if this window has the focus
00461   FXbool hasFocus() const;
00462 
00463   /// Move the focus to this window
00464   virtual void setFocus();
00465 
00466   /// Remove the focus from this window
00467   virtual void killFocus();
00468 
00469   /**
00470   * This changes the default window which responds to the Return
00471   * key in a dialog. If enable is TRUE, this window becomes the default
00472   * window; when enable is FALSE, this window will be no longer the
00473   * default window.  Finally, when enable is MAYBE, the default window
00474   * will revert to the initial default window.
00475   */
00476   virtual void setDefault(FXbool enable=TRUE);
00477 
00478   /// Return true if this is the default window
00479   FXbool isDefault() const;
00480 
00481   /// Make this window the initial default window
00482   void setInitial(FXbool enable=TRUE);
00483 
00484   /// Return true if this is the initial default window
00485   FXbool isInitial() const;
00486 
00487   /// Enable the window to receive mouse and keyboard events
00488   virtual void enable();
00489 
00490   /// Disable the window from receiving mouse and keyboard events
00491   virtual void disable();
00492 
00493   /// Create all of the server-side resources for this window
00494   virtual void create();
00495 
00496   /// Attach foreign window handle to this window
00497   virtual void attach(FXID w);
00498 
00499   /// Detach the server-side resources for this window
00500   virtual void detach();
00501 
00502   /// Destroy the server-side resources for this window
00503   virtual void destroy();
00504 
00505   /// Raise this window to the top of the stacking order
00506   virtual void raise();
00507 
00508   /// Lower this window to the bottom of the stacking order
00509   virtual void lower();
00510 
00511   /// Move this window to the specified position in the parent's coordinates
00512   virtual void move(FXint x,FXint y);
00513 
00514   /// Resize this window to the specified width and height
00515   virtual void resize(FXint w,FXint h);
00516 
00517   /// Move and resize this window in the parent's coordinates
00518   virtual void position(FXint x,FXint y,FXint w,FXint h);
00519 
00520   /// Mark this window's layout as dirty for later layout
00521   virtual void recalc();
00522 
00523   /// Perform layout immediately
00524   virtual void layout();
00525 
00526   /// Force a GUI update of this window and its children
00527   void forceRefresh();
00528 
00529   /// Change the parent for this window
00530   virtual void reparent(FXWindow* newparent);
00531 
00532   /// Scroll rectangle x,y,w,h by a shift of dx,dy
00533   void scroll(FXint x,FXint y,FXint w,FXint h,FXint dx,FXint dy) const;
00534 
00535   /// Mark the specified rectangle to be repainted later
00536   void update(FXint x,FXint y,FXint w,FXint h) const;
00537 
00538   /// Mark the entire window to be repainted later
00539   void update() const;
00540 
00541   /// If marked but not yet painted, paint the given rectangle now
00542   void repaint(FXint x,FXint y,FXint w,FXint h) const;
00543 
00544   /// If marked but not yet painted, paint the window now
00545   void repaint() const;
00546 
00547   /**
00548   * Grab the mouse to this window; future mouse events will be
00549   * reported to this window even while the cursor goes outside of this window
00550   */
00551   void grab();
00552 
00553   /// Release the mouse grab
00554   void ungrab();
00555 
00556   /// Return true if the window has been grabbed
00557   FXbool grabbed() const;
00558 
00559   /// Grab keyboard device
00560   void grabKeyboard();
00561 
00562   /// Ungrab keyboard device
00563   void ungrabKeyboard();
00564 
00565   /// Return true if active grab is in effect
00566   FXbool grabbedKeyboard() const;
00567 
00568   /// Show this window
00569   virtual void show();
00570 
00571   /// Hide this window
00572   virtual void hide();
00573 
00574   /// Return true if the window is shown
00575   FXbool shown() const;
00576 
00577   /// Return true if the window is composite
00578   virtual FXbool isComposite() const;
00579 
00580   /// Return true if the window is under the cursor
00581   FXbool underCursor() const;
00582 
00583   /// Return true if this window owns the primary selection
00584   FXbool hasSelection() const;
00585 
00586   /// Try to acquire the primary selection, given a list of drag types
00587   FXbool acquireSelection(const FXDragType *types,FXuint numtypes);
00588 
00589   /// Release the primary selection
00590   FXbool releaseSelection();
00591 
00592   /// Return true if this window owns the clipboard
00593   FXbool hasClipboard() const;
00594 
00595   /// Try to acquire the clipboard, given a list of drag types
00596   FXbool acquireClipboard(const FXDragType *types,FXuint numtypes);
00597 
00598   /// Release the clipboard
00599   FXbool releaseClipboard();
00600 
00601   /// Enable this window to receive drops
00602   void dropEnable();
00603 
00604   /// Disable this window from receiving drops
00605   void dropDisable();
00606 
00607   /// Return true if this window is able to receive drops
00608   FXbool isDropEnabled() const;
00609 
00610   /// Return true if a drag operaion has been initiated from this window
00611   FXbool isDragging() const;
00612 
00613   /// Initiate a drag operation with a list of previously registered drag types
00614   FXbool beginDrag(const FXDragType *types,FXuint numtypes);
00615 
00616   /**
00617   * When dragging, inform the drop-target of the new position and
00618   * the drag action
00619   */
00620   FXbool handleDrag(FXint x,FXint y,FXDragAction action=DRAG_COPY);
00621 
00622   /// Terminate the drag operation with or without actually dropping the data
00623   FXbool endDrag(FXbool drop=TRUE);
00624 
00625   /// Return true if this window is the target of a drop
00626   FXbool isDropTarget() const;
00627 
00628   /**
00629   * When being dragged over, indicate that no further SEL_DND_MOTION messages
00630   * are required while the cursor is inside the given rectangle
00631   */
00632   void setDragRectangle(FXint x,FXint y,FXint w,FXint h,FXbool wantupdates=TRUE) const;
00633 
00634   /**
00635   * When being dragged over, indicate we want to receive SEL_DND_MOTION messages
00636   * every time the cursor moves
00637   */
00638   void clearDragRectangle() const;
00639 
00640   /// When being dragged over, indicate acceptance or rejection of the dragged data
00641   void acceptDrop(FXDragAction action=DRAG_ACCEPT) const;
00642 
00643   /// The target accepted our drop
00644   FXDragAction didAccept() const;
00645 
00646   /// When being dragged over, inquire the drag types which are being offered
00647   FXbool inquireDNDTypes(FXDNDOrigin origin,FXDragType*& types,FXuint& numtypes) const;
00648 
00649   /// When being dragged over, return true if we are offered the given drag type
00650   FXbool offeredDNDType(FXDNDOrigin origin,FXDragType type) const;
00651 
00652   /// When being dragged over, return the drag action
00653   FXDragAction inquireDNDAction() const;
00654 
00655   /**
00656   * Set DND data; the array must be allocated with FXMALLOC and ownership is
00657   * transferred to the system
00658   */
00659   FXbool setDNDData(FXDNDOrigin origin,FXDragType type,FXuchar* data,FXuint size) const;
00660 
00661   /**
00662   * Get DND data; the caller becomes the owner of the array and must free it
00663   * with FXFREE
00664   */
00665   FXbool getDNDData(FXDNDOrigin origin,FXDragType type,FXuchar*& data,FXuint& size) const;
00666 
00667   /// Return true if window logically contains the given point
00668   virtual FXbool contains(FXint parentx,FXint parenty) const;
00669 
00670   /// Translate coordinates from fromwindow's coordinate space to this window's coordinate space
00671   void translateCoordinatesFrom(FXint& tox,FXint& toy,const FXWindow* fromwindow,FXint fromx,FXint fromy) const;
00672 
00673   /// Translate coordinates from this window's coordinate space to towindow's coordinate space
00674   void translateCoordinatesTo(FXint& tox,FXint& toy,const FXWindow* towindow,FXint fromx,FXint fromy) const;
00675 
00676   /// Set window background color
00677   virtual void setBackColor(FXColor clr);
00678 
00679   /// Get background color
00680   FXColor getBackColor() const { return backColor; }
00681 
00682   /// Relink this window before sibling in the window list
00683   void linkBefore(FXWindow* sibling);
00684 
00685   /// Relink this window after sibling in the window list
00686   void linkAfter(FXWindow* sibling);
00687 
00688   virtual FXbool doesSaveUnder() const;
00689 
00690   /// Save window to stream
00691   virtual void save(FXStream& store) const;
00692 
00693   /// Restore window from stream
00694   virtual void load(FXStream& store);
00695 
00696   /// Destroy window
00697   virtual ~FXWindow();
00698   };
00699 
00700 }
00701 
00702 #endif

Copyright © 1997-2004 Jeroen van der Zijp