125 lines
3.2 KiB
C
125 lines
3.2 KiB
C
|
//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
|