diff options
Diffstat (limited to 'Src/Wasabi/api/wnd/wndclass/framewnd.h')
-rw-r--r-- | Src/Wasabi/api/wnd/wndclass/framewnd.h | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wnd/wndclass/framewnd.h b/Src/Wasabi/api/wnd/wndclass/framewnd.h new file mode 100644 index 00000000..506426e6 --- /dev/null +++ b/Src/Wasabi/api/wnd/wndclass/framewnd.h @@ -0,0 +1,124 @@ +//NONPORTABLE +#ifndef _FRAMEWND_H +#define _FRAMEWND_H + +#include <bfc/common.h> +#include <api/wnd/wndclass/labelwnd.h> +#include <tataki/bitmap/autobitmap.h> + +#define MAXCHILD 2 // this had better never not be 2 + +typedef enum { + DIVIDER_HORIZONTAL, DIVIDER_VERTICAL, DIVIDER_UNDEFINED = -1 +} FrameWndDividerType; +enum { SDP_FROMLEFT, SDP_FROMRIGHT }; +#define SDP_FROMTOP SDP_FROMLEFT +#define SDP_FROMBOTTOM SDP_FROMRIGHT + +typedef enum { + FRAMEWND_SQUISH, + FRAMEWND_COVER +} FrameWndSlideMode; + +#define SIZERWIDTH 8 + +// this window holds other basewnd derived classes +#define FRAMEWND_PARENT LabelWnd +class FrameWnd : public FRAMEWND_PARENT { +public: + FrameWnd(); + virtual ~FrameWnd(); + + virtual int onInit(); + + virtual int getCursorType(int x, int y); + + virtual int onPaint(Canvas *canvas); + virtual int onResize(); + + virtual int onLeftButtonDown(int x, int y); + virtual int onMouseMove(int x, int y); // only called when mouse captured + virtual int onLeftButtonUp(int x, int y); + + virtual int childNotify(ifc_window *which, int msg, intptr_t param1, intptr_t param2); + +// virtual int forceFocus(); + + // unique to this class + int setChildren(BaseWnd *child1, BaseWnd *child2=NULL); + int setChildrenRootWnd(ifc_window *child1, ifc_window *child2=NULL); + ifc_window *enumChild(int which); + // horizontal or vertical? + void setDividerType(FrameWndDividerType type); + FrameWndDividerType getDividerType(); + // where is the divider? + int setDividerPos(int from, int pos); + // this version doesn't check the cfg file for last position + int setDividerPosNoCfg(int from, int pos); + void getDividerPos(int *from, int *pos); + + int setResizeable(int is); + void setMinWidth(int min); + void setMaxWidth(int max); + void setSnap(int snap); + + virtual int onGetFocus(); + virtual int onDeferredCallback(intptr_t p1, intptr_t p2); + + // cover or squish + void setSlideMode(FrameWndSlideMode mode); + FrameWndSlideMode getSlideMode(); + + virtual void onResizeChildren(RECT leftr, RECT rightr); + + // drag and drops are forwarded into windowshaded windows + virtual int dragEnter(ifc_window *sourceWnd); + virtual int dragOver(int x, int y, ifc_window *sourceWnd); + virtual int dragLeave(ifc_window *sourceWnd); + virtual int dragDrop(ifc_window *sourceWnd, int x, int y); + +protected: + int convertPropToPix(int prop); + int ConvertPixToProp(); + + void windowshade(int which, int shaded); + ifc_window *getWindowShadedChild(); + + void Set_v_bitmap(const wchar_t *new_v_bitmap); + void Set_v_grabber(const wchar_t *new_v_grabber); + +private: + int _setChildren(ifc_window *child1, ifc_window *child2, BaseWnd *child1b, BaseWnd *child2b); + int nchild; + BaseWnd *children[MAXCHILD]; + ifc_window *rwchildren[MAXCHILD]; + int hidey[MAXCHILD]; + int windowshaded[MAXCHILD]; + + FrameWndDividerType vert; + + int resizeable; + FrameWndSlideMode slidemode; + + int divideside; + int pullbarpos; // 0..65536 + int prevpullbarpos; + int minwidth, maxwidth; + int maxpixels; + boolean noMaxRestriction; + int minpixels; + int snapoffsetx, snapoffsety; + int SNAP; + RECT sizerRect; + + AutoSkinBitmap h_bitmap, v_bitmap, h_grabber, v_grabber, ws_bitmap; + int resizing; +}; + +#define PULLBAR_FULL 65536L +#define PULLBAR_HALF (PULLBAR_FULL/2) +#define PULLBAR_QUARTER (PULLBAR_FULL/4) +#define PULLBAR_THREEQUARTER (PULLBAR_FULL-PULLBAR_QUARTER) +#define PULLBAR_EIGHTH (PULLBAR_FULL/8) + +#endif |