winamp/Src/Wasabi/api/wnd/wndclass/framewnd.h
2024-09-24 14:54:57 +02:00

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