diff options
Diffstat (limited to 'Src/Wasabi/api/wnd/wndclass/tabsheet.h')
-rw-r--r-- | Src/Wasabi/api/wnd/wndclass/tabsheet.h | 268 |
1 files changed, 268 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wnd/wndclass/tabsheet.h b/Src/Wasabi/api/wnd/wndclass/tabsheet.h new file mode 100644 index 00000000..73426ec9 --- /dev/null +++ b/Src/Wasabi/api/wnd/wndclass/tabsheet.h @@ -0,0 +1,268 @@ +#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 |