aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wnd/wndclass/tabsheet.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/api/wnd/wndclass/tabsheet.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Wasabi/api/wnd/wndclass/tabsheet.h')
-rw-r--r--Src/Wasabi/api/wnd/wndclass/tabsheet.h268
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