summaryrefslogtreecommitdiff
path: root/widgetfactory.cpp
diff options
context:
space:
mode:
authorJonas Kümmerlin <jonas@kuemmerlin.eu>2020-05-09 15:31:34 +0200
committerJonas Kümmerlin <jonas@kuemmerlin.eu>2020-05-09 15:32:12 +0200
commit97fd5d9ba445dbac0deaef763dce1382a88211d9 (patch)
tree90cf926be783f67a744f47c11bb7866b88e965f0 /widgetfactory.cpp
parent77f3c00f226266a92587fce97f5b9bad38ab9fe2 (diff)
widget factory: table-based pane registry, allow adding tabs via menu
Diffstat (limited to 'widgetfactory.cpp')
-rw-r--r--widgetfactory.cpp202
1 files changed, 123 insertions, 79 deletions
diff --git a/widgetfactory.cpp b/widgetfactory.cpp
index 008fdb4..7299074 100644
--- a/widgetfactory.cpp
+++ b/widgetfactory.cpp
@@ -1,6 +1,25 @@
#include "alf/alf.h"
enum {
+ PANE_BUTTONS = 0,
+ PANE_LABEL,
+ PANE_COMBO,
+ PANE_NOTEBOOK,
+ PANE_CHECKBOX,
+ PANE_GROUPBOX,
+ PANE__MAX
+};
+
+static const TCHAR *g_paneLabels[PANE__MAX] = {
+ TEXT("Buttons"), //PANE_BUTTONS
+ TEXT("Label"), //PANE_LABEL,
+ TEXT("Combo Box"), //PANE_COMBO,
+ TEXT("Notebook"), //PANE_NOTEBOOK,
+ TEXT("Checkbox"), //PANE_CHECKBOX,
+ TEXT("GroupBox") //PANE_GROUPBOX
+};
+
+enum {
ID_COMBO1,
ID_COMBO2,
ID_LBLCOMBOTEXT,
@@ -18,7 +37,8 @@ enum {
IDM_BACKGROUND_GRADIENT,
IDM_BACKGROUND_GREEN,
IDM_BACKGROUND_BLUE,
- ID__MAX
+ IDM_PANES,
+ IDM_PANES__MAX = IDM_PANES + PANE__MAX
};
BOOL (WINAPI *fnGradientFill)(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG) = NULL;
@@ -32,66 +52,6 @@ enum PanelBackgroundMode {
#define FM_PANEL_SET_BGMODE (ALF_WM_USER + 1)
-
-static LRESULT
-handleCommand(void *closure, HWND window, WORD notificationcode, WORD sourceid, HWND control)
-{
- (void)closure;
-
- if (notificationcode == CBN_SELCHANGE && sourceid == ID_COMBO2) {
- TCHAR *text = ALF_ComboBoxCurrentText(control);
-
- ALF_SetWidgetText(window, ID_LBLCOMBOTEXT, text);
-
- ALF_Free(text);
- }
- if (control != NULL && sourceid == ID_BTNCOMBOCLEAR) {
- HWND combo = ALF_WidgetHwndById(window, ID_COMBO2);
- ALF_ComboBoxSetCurrentIndex(combo, -1);
- }
- if (sourceid == ID_HELLO) {
- MessageBox(window, TEXT("Hello World!"), TEXT("Hello"), MB_ICONASTERISK|MB_OK);
- }
- if (control != NULL && sourceid == ID_B_TABBGSOLID) {
- HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK);
- ALF_NotebookAddFlag(nb, ALF_NOTEBOOK_SOLID_TAB_BACKGROUND);
- }
- if (control != NULL && sourceid == ID_B_TABBGTEXTURE) {
- HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK);
- ALF_NotebookRemoveFlag(nb, ALF_NOTEBOOK_SOLID_TAB_BACKGROUND);
- }
-
- if (sourceid == IDM_FILE_CLOSE) {
- SendMessage(window, WM_CLOSE, 0, 0);
- }
-
- if (sourceid == IDM_BACKGROUND_BLUE) {
- HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK);
- HWND panel = ALF_NotebookSelectedPanel(nb);
- SendMessage(panel, FM_PANEL_SET_BGMODE, 0, (LPARAM)BG_SOLID_BLUE);
- }
-
- if (sourceid == IDM_BACKGROUND_GREEN) {
- HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK);
- HWND panel = ALF_NotebookSelectedPanel(nb);
- SendMessage(panel, FM_PANEL_SET_BGMODE, 0, (LPARAM)BG_SOLID_GREEN);
- }
-
- if (sourceid == IDM_BACKGROUND_INHERIT) {
- HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK);
- HWND panel = ALF_NotebookSelectedPanel(nb);
- SendMessage(panel, FM_PANEL_SET_BGMODE, 0, (LPARAM)BG_INHERIT);
- }
-
- if (sourceid == IDM_BACKGROUND_GRADIENT) {
- HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK);
- HWND panel = ALF_NotebookSelectedPanel(nb);
- SendMessage(panel, FM_PANEL_SET_BGMODE, 0, (LPARAM)BG_GRADIENT);
- }
-
- return 0;
-}
-
/* common stuff */
typedef struct {
DWORD bgmode;
@@ -401,9 +361,8 @@ static ALFPanelVTable buttonPanelVtbl = {
};
static void
-buttonPanelAddToNotebook(HWND hwndNotebook)
+buttonPanelInit(HWND panel)
{
- HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Buttons"));
CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1);
ALF_PanelSetVTable(panel, &buttonPanelVtbl, priv);
}
@@ -495,9 +454,8 @@ static ALFPanelVTable labelPanelVtbl = {
};
static void
-labelPanelAddToNotebook(HWND hwndNotebook)
+labelPanelInit(HWND panel)
{
- HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Label"));
CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1);
ALF_PanelSetVTable(panel, &labelPanelVtbl, priv);
}
@@ -549,9 +507,8 @@ static ALFPanelVTable comboPanelVtbl = {
};
static void
-comboPanelAddToNotebook(HWND hwndNotebook)
+comboPanelInit(HWND panel)
{
- HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Combo Box"));
CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1);
ALF_PanelSetVTable(panel, &comboPanelVtbl, priv);
}
@@ -600,9 +557,8 @@ static ALFPanelVTable notebookPanelVtbl = {
};
static void
-notebookPanelAddToNotebook(HWND hwndNotebook)
+notebookPanelInit(HWND panel)
{
- HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Notebook"));
CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1);
ALF_PanelSetVTable(panel, &notebookPanelVtbl, priv);
}
@@ -637,9 +593,8 @@ static ALFPanelVTable checkboxPanelVtbl = {
};
static void
-checkboxPanelAddToNotebook(HWND hwndNotebook)
+checkboxPanelInit(HWND panel)
{
- HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Checkbox"));
CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1);
ALF_PanelSetVTable(panel, &checkboxPanelVtbl, priv);
}
@@ -708,13 +663,94 @@ static ALFPanelVTable groupboxPanelVtbl = {
};
static void
-groupboxPanelAddToNotebook(HWND hwndNotebook)
+groupboxPanelInit(HWND panel)
{
- HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("GroupBox"));
CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1);
ALF_PanelSetVTable(panel, &groupboxPanelVtbl, priv);
}
+void (*g_paneInitTable[PANE__MAX])(HWND) = {
+ buttonPanelInit, //PANE_BUTTONS
+ labelPanelInit, //PANE_LABEL,
+ comboPanelInit, //PANE_COMBO,
+ notebookPanelInit, //PANE_NOTEBOOK,
+ checkboxPanelInit, //PANE_CHECKBOX,
+ groupboxPanelInit //PANE_GROUPBOX,
+};
+
+static void
+addPaneToNotebook(HWND hwndNotebook, int paneId)
+{
+ HWND panel = ALF_NotebookAddTab(hwndNotebook, g_paneLabels[paneId]);
+ g_paneInitTable[paneId](panel);
+}
+
+
+static LRESULT
+handleCommand(void *closure, HWND window, WORD notificationcode, WORD sourceid, HWND control)
+{
+ (void)closure;
+
+ if (notificationcode == CBN_SELCHANGE && sourceid == ID_COMBO2) {
+ TCHAR *text = ALF_ComboBoxCurrentText(control);
+
+ ALF_SetWidgetText(window, ID_LBLCOMBOTEXT, text);
+
+ ALF_Free(text);
+ }
+ if (control != NULL && sourceid == ID_BTNCOMBOCLEAR) {
+ HWND combo = ALF_WidgetHwndById(window, ID_COMBO2);
+ ALF_ComboBoxSetCurrentIndex(combo, -1);
+ }
+ if (sourceid == ID_HELLO) {
+ MessageBox(window, TEXT("Hello World!"), TEXT("Hello"), MB_ICONASTERISK|MB_OK);
+ }
+ if (control != NULL && sourceid == ID_B_TABBGSOLID) {
+ HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK);
+ ALF_NotebookAddFlag(nb, ALF_NOTEBOOK_SOLID_TAB_BACKGROUND);
+ }
+ if (control != NULL && sourceid == ID_B_TABBGTEXTURE) {
+ HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK);
+ ALF_NotebookRemoveFlag(nb, ALF_NOTEBOOK_SOLID_TAB_BACKGROUND);
+ }
+
+ if (sourceid == IDM_FILE_CLOSE) {
+ SendMessage(window, WM_CLOSE, 0, 0);
+ }
+
+ if (sourceid == IDM_BACKGROUND_BLUE) {
+ HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK);
+ HWND panel = ALF_NotebookSelectedPanel(nb);
+ SendMessage(panel, FM_PANEL_SET_BGMODE, 0, (LPARAM)BG_SOLID_BLUE);
+ }
+
+ if (sourceid == IDM_BACKGROUND_GREEN) {
+ HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK);
+ HWND panel = ALF_NotebookSelectedPanel(nb);
+ SendMessage(panel, FM_PANEL_SET_BGMODE, 0, (LPARAM)BG_SOLID_GREEN);
+ }
+
+ if (sourceid == IDM_BACKGROUND_INHERIT) {
+ HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK);
+ HWND panel = ALF_NotebookSelectedPanel(nb);
+ SendMessage(panel, FM_PANEL_SET_BGMODE, 0, (LPARAM)BG_INHERIT);
+ }
+
+ if (sourceid == IDM_BACKGROUND_GRADIENT) {
+ HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK);
+ HWND panel = ALF_NotebookSelectedPanel(nb);
+ SendMessage(panel, FM_PANEL_SET_BGMODE, 0, (LPARAM)BG_GRADIENT);
+ }
+
+ if (sourceid >= IDM_PANES && sourceid < IDM_PANES__MAX) {
+ int paneId = sourceid - IDM_PANES;
+ HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK);
+ addPaneToNotebook(nb, paneId);
+ }
+
+ return 0;
+}
+
int CALLBACK
#ifdef UNICODE
wWinMain
@@ -753,12 +789,13 @@ WinMain
MessageBox(0, TEXT("couldn't create main window!"), 0, MB_ICONHAND|MB_OK);
HWND hwndNtbk = ALF_AddNotebook(win, ID_NOTEBOOK, 0, 0);
- buttonPanelAddToNotebook(hwndNtbk);
- labelPanelAddToNotebook(hwndNtbk);
- comboPanelAddToNotebook(hwndNtbk);
- notebookPanelAddToNotebook(hwndNtbk);
- checkboxPanelAddToNotebook(hwndNtbk);
- groupboxPanelAddToNotebook(hwndNtbk);
+
+ addPaneToNotebook(hwndNtbk, PANE_BUTTONS);
+ addPaneToNotebook(hwndNtbk, PANE_LABEL);
+ addPaneToNotebook(hwndNtbk, PANE_CHECKBOX);
+ addPaneToNotebook(hwndNtbk, PANE_NOTEBOOK);
+ addPaneToNotebook(hwndNtbk, PANE_COMBO);
+ addPaneToNotebook(hwndNtbk, PANE_GROUPBOX);
ALF_SetDefaultButton(win, ID_HELLO);
@@ -766,11 +803,14 @@ WinMain
HMENU mainmenu = CreateMenu();
HMENU filemenu = CreateMenu();
+ HMENU newtabmn = CreateMenu();
HMENU helpmenu = CreateMenu();
HMENU bgmenu = CreateMenu();
AppendMenu(filemenu, MF_STRING, ID_HELLO, TEXT("Hello"));
AppendMenu(filemenu, MF_SEPARATOR, 0, 0);
+ AppendMenu(filemenu, MF_POPUP, (UINT_PTR)newtabmn, TEXT("New Tab"));
+ AppendMenu(filemenu, MF_SEPARATOR, 0, 0);
AppendMenu(filemenu, MF_STRING, IDM_FILE_CLOSE, TEXT("&Close\tAlt+F4"));
AppendMenu(helpmenu, MF_STRING, IDM_HELP_ABOUT, TEXT("&About"));
@@ -784,6 +824,10 @@ WinMain
AppendMenu(mainmenu, MF_POPUP, (UINT_PTR)bgmenu, TEXT("Background"));
AppendMenu(mainmenu, MF_POPUP, (UINT_PTR)helpmenu, TEXT("&Help"));
+ for (int i = 0; i < PANE__MAX; ++i) {
+ AppendMenu(newtabmn, MF_STRING, IDM_PANES + (UINT)i, g_paneLabels[i]);
+ }
+
SetMenu(win, mainmenu);
ALF_ShowModal(win);