00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef FXDOCKBAR_H
00022 #define FXDOCKBAR_H
00023
00024 #ifndef FXPACKER_H
00025 #include "FXPacker.h"
00026 #endif
00027
00028 namespace FX {
00029
00030 class FXDockSite;
00031
00032
00041 class FXAPI FXDockBar : public FXPacker {
00042 FXDECLARE(FXDockBar)
00043 protected:
00044 FXComposite *drydock;
00045 FXComposite *wetdock;
00046 FXint gripx;
00047 FXint gripy;
00048 FXuchar allowed;
00049
00050
00051
00052 protected:
00053 FXDockBar();
00054 FXbool isAllowable(FXuint hints) const;
00055
00056 protected:
00057 enum {
00058 DRAG_NONE = 0,
00059 DRAG_TOP = 1,
00060 DRAG_BOTTOM = 2,
00061 DRAG_LEFT = 4,
00062 DRAG_RIGHT = 8,
00063 DRAG_TOPLEFT = (DRAG_TOP|DRAG_LEFT),
00064 DRAG_TOPRIGHT = (DRAG_TOP|DRAG_RIGHT),
00065 DRAG_BOTTOMLEFT = (DRAG_BOTTOM|DRAG_LEFT),
00066 DRAG_BOTTOMRIGHT = (DRAG_BOTTOM|DRAG_RIGHT)
00067 };
00068 private:
00069 FXDockBar(const FXDockBar&);
00070 FXDockBar &operator=(const FXDockBar&);
00071 public:
00072
00073
00074
00075
00076
00077 long onCmdUndock(FXObject*,FXSelector,void*);
00078 long onUpdUndock(FXObject*,FXSelector,void*);
00079 long onCmdDockTop(FXObject*,FXSelector,void*);
00080 long onUpdDockTop(FXObject*,FXSelector,void*);
00081 long onCmdDockBottom(FXObject*,FXSelector,void*);
00082 long onUpdDockBottom(FXObject*,FXSelector,void*);
00083 long onCmdDockLeft(FXObject*,FXSelector,void*);
00084 long onUpdDockLeft(FXObject*,FXSelector,void*);
00085 long onCmdDockRight(FXObject*,FXSelector,void*);
00086 long onUpdDockRight(FXObject*,FXSelector,void*);
00087 long onUpdDockFlip(FXObject*,FXSelector,void*);
00088 long onBeginDragGrip(FXObject*,FXSelector,void*);
00089 long onEndDragGrip(FXObject*,FXSelector,void*);
00090 long onDraggedGrip(FXObject*,FXSelector,void*);
00091 long onPopupMenu(FXObject*,FXSelector,void*);
00092 long onDockTimer(FXObject*,FXSelector,void*);
00093 public:
00094 enum {
00095 ID_DOCK_FLOAT=FXPacker::ID_LAST,
00096 ID_DOCK_TOP,
00097 ID_DOCK_BOTTOM,
00098 ID_DOCK_LEFT,
00099 ID_DOCK_RIGHT,
00100 ID_DOCK_FLIP,
00101 ID_TOOLBARGRIP,
00102 ID_TIMER,
00103 ID_LAST
00104 };
00105 public:
00106 enum {
00107 ALLOW_NOWHERE=0,
00108 ALLOW_TOP=1,
00109 ALLOW_BOTTOM=2,
00110 ALLOW_LEFT=4,
00111 ALLOW_RIGHT=8,
00112 ALLOW_HORIZONTAL=ALLOW_TOP|ALLOW_BOTTOM,
00113 ALLOW_VERTICAL=ALLOW_LEFT|ALLOW_RIGHT,
00114 ALLOW_EVERYWHERE=ALLOW_HORIZONTAL|ALLOW_VERTICAL
00115 };
00116 public:
00117
00127 FXDockBar(FXComposite* p,FXComposite* q,FXuint opts=LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=3,FXint pr=3,FXint pt=2,FXint pb=2,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING);
00128
00133 FXDockBar(FXComposite* p,FXuint opts,FXint x=0,FXint y=0,FXint w=0,FXint h=0,FXint pl=2,FXint pr=3,FXint pt=3,FXint pb=2,FXint hs=DEFAULT_SPACING,FXint vs=DEFAULT_SPACING);
00134
00136 FXbool isDocked() const;
00137
00141 FXbool insideDock(FXDockSite* docksite,FXint barx,FXint bary);
00142
00147 void setDryDock(FXComposite* dry);
00148
00153 void setWetDock(FXComposite* wet);
00154
00156 FXComposite* getDryDock() const { return drydock; }
00157
00159 FXComposite* getWetDock() const { return wetdock; }
00160
00162 FXDockSite* findDockAtSide(FXuint side=LAYOUT_SIDE_TOP);
00163
00165 FXDockSite* findDockNear(FXint rootx,FXint rooty);
00166
00172 virtual void dock(FXDockSite* docksite,FXWindow* other=NULL,FXbool notify=false);
00173
00178 virtual void dock(FXDockSite* docksite,FXint localx,FXint localy,FXbool notify);
00179
00185 virtual void undock(FXint rootx,FXint rooty,FXbool notify=false);
00186
00191 void allowedSides(FXuchar allow){ allowed=allow; }
00192
00196 FXuchar allowedSides() const { return allowed; }
00197
00199 virtual void save(FXStream& store) const;
00200
00202 virtual void load(FXStream& store);
00203
00205 virtual ~FXDockBar();
00206 };
00207
00208 }
00209
00210 #endif