aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wnd/wndclass/framewnd.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/wnd/wndclass/framewnd.h')
-rw-r--r--Src/Wasabi/api/wnd/wndclass/framewnd.h124
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