winamp/Src/Wasabi/api/wnd/wndclass/tabsheet.h

269 lines
6.3 KiB
C
Raw Normal View History

2024-09-24 12:54:57 +00:00
#ifndef _TABSHEET_H
#define _TABSHEET_H
#include <api/skin/widgets/grouptgbutton.h>
#include <api/wnd/wndclass/buttwnd.h>
#include <bfc/common.h>
#include <api/wnd/wndclass/guiobjwnd.h>
#include <bfc/ptrlist.h>
class ButtonWnd;
class SkinBitmap;
class TabButtonBase;
class ButtBar;
class TabSheetBar;
#define TABSHEET_GROUPS -2
#define TABSHEET_NOTABS -3
#define TABSHEET_PARENT GuiObjectWnd
/**
class TabSheet
@short A TabSheet Control.
@author Nullsoft
@ver 1.0
@see
@cat SDK
*/
class TabSheet : public TABSHEET_PARENT
{
public:
/**
TabSheet constructor
@see ~TabSheet()
@param bbtype The type of button bar to use in the tabsheet.
*/
TabSheet(int bbtype=-1);
/**
TabSheet destructor
@see TabSheet()
*/
virtual ~TabSheet();
/**
TabSheet method onInit
@ret 1
*/
virtual int onInit();
/**
TabSheet method getClientRect
@param r A pointer to the RECT that will be filled.
*/
virtual void getClientRect(RECT *);
/**
TabSheet method onPaint
@ret 1
@param canvas The canvas upon which we'll paint ourself.
*/
virtual int onPaint(Canvas *canvas);
/**
TabSheet method onResize
@ret 1
*/
virtual int onResize();
/**
TabSheet method setButtonType .
@param type The button type.
*/
void setButtonType(int type);
/**
TabSheet method setTabRowMargin
@assert newmargin is non-negative
@param newmargin The new margin width in pixels.
*/
void setTabRowMargin(int pixels);
/**
TabSheet method addChild
@ret One less than the number of tabs
@param newchild A pointer to the new child window to add.
@param tip The tooltip for the button associated with this child.
*/
int addChild(BaseWnd *newchild, const wchar_t *tooltip=NULL);
/**
TabSheet method activateChild
@see addChild()
@see killChildren()
@ret None
@param newactive A pointer to the child window to render active.
*/
virtual void activateChild(BaseWnd *activechild);
/**
TabSheet method killChildren .
*/
virtual void killChildren();
/**
TabSheet method childNotify .
@ret Returns 1 when complete.
@param child The child that's being notified.
@param msg The message.
@param param1 Custom parameter 1.
@param param2 Custom parameter 2.
*/
virtual int childNotify(ifc_window *child, int msg,
intptr_t param1=0, intptr_t param2=0);
void setContentMarginLeft(int cm);
void setContentMarginTop(int cm);
void setContentMarginRight(int cm);
void setContentMarginBottom(int cm);
/**
TabSheet method enumChild
@ret The base window of the specified tab button, or NULL if there is none.
*/
BaseWnd *enumChild(int child);
/**
TabSheet method getNumChild
@ret The number of tabs
*/
int getNumChild();
BaseWnd *getActiveChild() { return active; }
virtual void onSetPage(int n) { lastpage = n; }
int getCurPage() { return lastpage; }
void setCurPage(int page);
int getNumPages() { return tabs.getNumItems(); }
void nextPage() { int n = getCurPage()+1; if (n >= getNumPages()) n = 0; setCurPage(n); }
void previousPage() { int n = getCurPage()-1; if (n < 0) n = getNumPages()-1; setCurPage(n); }
int onAction(const wchar_t *action, const wchar_t *param, int x, int y, intptr_t p1, intptr_t p2, void *data, size_t datalen, ifc_window *source);
protected:
/** TabSheet method enumButton
@ret The specified tab, or NULL if there is none. */
TabButtonBase *enumButton(int button);
public:
/**
TabSheet method setBackgroundBmp
@param name The name of the bitmap to use.
*/
#ifdef WASABI_COMPILE_IMGLDR
void setBackgroundBmp(const wchar_t *name); //FG
#endif
SkinBitmap *getBackgroundBitmap(); //FG
protected:
// you can set these in your constructor, they will be deleted for you
ButtonWnd *leftscroll, *rightscroll;
SkinBitmap *background;
private:
int tabrowheight, tabrowwidth, tabrowmargin;
PtrList<TabButtonBase> tabs;
ButtBar *bb;
TabSheetBar *tsb;
GuiObjectWnd *contentwnd;
int tilex, tilew;
BaseWnd *active;
int type;
int content_margin_left, content_margin_top, content_margin_right, content_margin_bottom;
int lastpage;
};
class TabButtonBase
{
public:
TabButtonBase(BaseWnd *linkWnd, TabSheet *par, const wchar_t *tip=NULL);
virtual ~TabButtonBase();
BaseWnd *getBaseWnd() const { return linked; }
void setNoDeleteLinked(int i) { nodeletelinked = i; }
virtual void btn_setHilite(int tf)=0;
virtual void btn_setText(const wchar_t *txt)=0;
protected:
BaseWnd *linked;
TabSheet *parent;
int nodeletelinked;
};
#define TABBUTTON_PARENT ButtonWnd
/**
Class TabButton
@short
@author Nullsoft
@ver 1.0
@see TabButtonBase
@cat SDK
*/
class TabButton : public TABBUTTON_PARENT, public TabButtonBase {
public:
/**
TabButton constructor
@assert The BaseWnd passed to this method must previously be linked.
@param linkwnd The window to associate with this button.
@param par A pointer to the parent tabsheet.
@param tip The tooltip for the window associated with this button.
*/
TabButton(BaseWnd *linkWnd, TabSheet *par, const wchar_t *tip=NULL) : TabButtonBase(linkWnd, par, tip)
{
if (tip != NULL)
setTip(tip);
}
/**
TabButton method onInit
@ret 1
*/
virtual int onInit();
/**
TabButton method onLeftPush .
@assert parent and linked both exist.
@param x The X position, of the mouse pointer, in the client screen.
@param y The Y position, of the mouse pointer, in the client screen.
*/
virtual void onLeftPush(int x, int y);
virtual void btn_setHilite(int tf);
virtual void btn_setText(const wchar_t *text);
};
#define GROUPTABBUTTON_PARENT GroupToggleButton
class GroupTabButton : public GROUPTABBUTTON_PARENT, public TabButtonBase {
public:
GroupTabButton(BaseWnd *linkWnd, TabSheet *par, const wchar_t *tip=NULL) : TabButtonBase(linkWnd, par, tip)
{
setGroups(L"wasabi.tabsheet.button.selected.group", L"wasabi.tabsheet.button.unselected.group");
}
virtual int wantFullClick() { return 0; }
virtual int wantAutoToggle() { return 0; }
virtual int onInit();
virtual void grouptoggle_onLeftPush();
virtual void btn_setHilite(int tf);
virtual void btn_setText(const wchar_t *text);
};
#endif