summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Kümmerlin <jonas@kuemmerlin.eu>2020-04-29 11:31:02 +0200
committerJonas Kümmerlin <jonas@kuemmerlin.eu>2020-04-29 11:31:02 +0200
commite40fa1cd91cff58be6e7c91273789eb838ebe611 (patch)
tree478e8076407e66b50a4a323afd1cbe7ffd7d5978
parentff2992cd89491957543667e91fa1fd4373c004d9 (diff)
widget factory: move to tabbed interface
-rw-r--r--alf/alf.h26
-rw-r--r--alf/alflabel.cpp12
-rw-r--r--alf/alfpanel.cpp45
-rw-r--r--alf/alfpriv.h3
-rw-r--r--widgetfactory.cpp538
5 files changed, 430 insertions, 194 deletions
diff --git a/alf/alf.h b/alf/alf.h
index 037f478..faeb177 100644
--- a/alf/alf.h
+++ b/alf/alf.h
@@ -21,12 +21,20 @@ typedef struct {
} ALFWindowVTable;
typedef struct {
- void (*create)(void * /*closure*/, HWND /*panel*/);
+ void (*attachvtbl)(void * /*closure*/, HWND /*panel*/);
void (*destroy)(void * /*closure*/, HWND /*panel*/);
LRESULT (*message)(void * /*closure*/, HWND, UINT, WPARAM, LPARAM);
+ LRESULT (*command)(void * /*closure*/, HWND /*window*/, WORD /*notificationcode*/, WORD /*sourceid*/, HWND /*control*/);
+ LRESULT (*notify)(void * /*closure*/, HWND /*window*/, WPARAM /*sourceid*/, NMHDR *);
void (*paint)(void * /*closure*/, HWND, HDC, RECT * /*rcPaint*/);
+ void (*windowposchanged)(void * /*closure*/, HWND, WINDOWPOS *);
} ALFPanelVTable;
+typedef struct {
+ const ALFPanelVTable *vtbl;
+ void *closure;
+} ALFPanelSetVtblParams;
+
// layout flags
#define ALF_LAYOUT_SIZE_FIXED 0x00
#define ALF_LAYOUT_SIZE_QUERY 0x01
@@ -111,6 +119,8 @@ typedef struct {
#define ALF_WM_NTBK_GETFLAGS (ALF_WM__BASE + 201)
#define ALF_WM_NTBK_SETFLAGS (ALF_WM__BASE + 202)
+#define ALF_WM_USER (ALF_WM__BASE + 300)
+
typedef DWORD ALFColor;
#define ALF_COLOR_TRANSPARENT ((ALFColor)-1)
@@ -180,6 +190,12 @@ ALF_DefWindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
HWND
ALF_AddLabel(HWND win, WORD id, int x, int y, const TCHAR *text);
+DWORD
+ALF_LabelStyle(HWND hwndLabel);
+
+void
+ALF_LabelSetStyle(HWND hwndLabel, DWORD style);
+
HWND
ALF_AddEdit(HWND win, WORD id, int x, int y, const TCHAR *text);
@@ -328,6 +344,11 @@ ALF_LayoutColumnExpandNumerator(HWND parent, int colno);
BOOL
ALF_LayoutSetColumnExpandNumerator(HWND parent, int colno, int expand);
+
+void
+ALF_FillRect(HDC dc, const RECT *rc, ALFColor color);
+
+
// combo box
HWND
@@ -370,6 +391,9 @@ ALF_Panel_SetVTable(HWND panel, const ALFPanelVTable *vtbl, void *closure);
LRESULT
ALF_Panel_DefWindowProc(HWND panel, UINT msg, WPARAM wparam, LPARAM lparam);
+void
+ALF_Panel_DefPaint(HWND panel, HDC hDC, RECT *rcPaint);
+
// tab control
HWND
ALF_AddNotebook(HWND parent, WORD id, int x, int y);
diff --git a/alf/alflabel.cpp b/alf/alflabel.cpp
index 13c86ae..87d5baa 100644
--- a/alf/alflabel.cpp
+++ b/alf/alflabel.cpp
@@ -338,3 +338,15 @@ ALF_RegisterLabelClass(void)
_alf_labelClass = MAKEINTATOM(classatom);
}
+
+DWORD
+ALF_LabelStyle(HWND hwndLabel)
+{
+ return (DWORD)SendMessage(hwndLabel, ALF_WM_LBL_GETSTYLE, 0, 0);
+}
+
+void
+ALF_LabelSetStyle(HWND hwndLabel, DWORD style)
+{
+ SendMessage(hwndLabel, ALF_WM_LBL_SETSTYLE, 0, (LPARAM)style);
+}
diff --git a/alf/alfpanel.cpp b/alf/alfpanel.cpp
index 965264e..2f2ee68 100644
--- a/alf/alfpanel.cpp
+++ b/alf/alfpanel.cpp
@@ -21,21 +21,38 @@ ALF_Panel_ClearPriv(ALFPanelPriv *priv)
}
static void
+ALF_Panel_InternalDefPaint(ALFPanelPriv *priv, HWND hwnd, HDC dc, RECT *r)
+{
+ if (priv->layout.bgcolor == ALF_COLOR_TRANSPARENT) {
+ ALF_Compat_DrawThemeParentBackground(hwnd, dc, r);
+ } else {
+ ALF_FillRect(dc, r, priv->layout.bgcolor);
+ }
+}
+
+
+void
+ALF_Panel_DefPaint(HWND panel, HDC hDC, RECT *rcPaint)
+{
+ ALFPanelPriv *priv = (ALFPanelPriv*)GetWindowLongPtr(panel, 0);
+ ALF_Panel_InternalDefPaint(priv, panel, hDC, rcPaint);
+}
+
+static void
ALF_Panel_Paint(ALFPanelPriv *priv, HWND hwnd, HDC dc, RECT *r)
{
if (priv->vtbl && priv->vtbl->paint) {
priv->vtbl->paint(priv->closure, hwnd, dc, r);
- } else if (priv->layout.bgcolor == ALF_COLOR_TRANSPARENT) {
- ALF_Compat_DrawThemeParentBackground(hwnd, dc, r);
} else {
- ALF_FillRect(dc, r, priv->layout.bgcolor);
+ ALF_Panel_InternalDefPaint(priv, hwnd, dc, r);
}
}
void
ALF_Panel_SetVTable(HWND panel, const ALFPanelVTable *vtbl, void *closure)
{
- SendMessage(panel, ALF_WM_PANEL_SETVTABLE, (WPARAM)vtbl, (LPARAM)closure);
+ ALFPanelSetVtblParams p = { vtbl, closure };
+ SendMessage(panel, ALF_WM_PANEL_SETVTABLE, 0, (LPARAM)&p);
}
LRESULT
@@ -43,11 +60,6 @@ ALF_Panel_DefWindowProc(HWND window, UINT msg, WPARAM wparam, LPARAM lparam)
{
ALFPanelPriv *priv = (ALFPanelPriv *)GetWindowLongPtr(window, 0);
- if (msg == WM_CREATE) {
- if (priv->vtbl && priv->vtbl->create)
- priv->vtbl->create(priv->closure, window);
- }
-
if (msg == WM_DESTROY) {
if (priv->vtbl && priv->vtbl->destroy)
priv->vtbl->destroy(priv->closure, window);
@@ -57,10 +69,6 @@ ALF_Panel_DefWindowProc(HWND window, UINT msg, WPARAM wparam, LPARAM lparam)
return TRUE;
}
- if (msg == WM_SETTEXT) {
- InvalidateRect(window, NULL, TRUE);
- }
-
if (msg == WM_PRINTCLIENT) {
RECT r = { 0, 0, 0, 0 };
GetClientRect(window, &r);
@@ -82,8 +90,15 @@ ALF_Panel_DefWindowProc(HWND window, UINT msg, WPARAM wparam, LPARAM lparam)
}
if (msg == ALF_WM_PANEL_SETVTABLE) {
- priv->vtbl = (const ALFPanelVTable *)wparam;
- priv->closure = (void *)lparam;
+ const ALFPanelSetVtblParams *params = (const ALFPanelSetVtblParams *)lparam;
+ if (!params)
+ return FALSE;
+
+ priv->vtbl = params->vtbl;
+ priv->closure = params->closure;
+ if (priv->vtbl->attachvtbl) {
+ priv->vtbl->attachvtbl(priv->closure, window);
+ }
return TRUE;
}
diff --git a/alf/alfpriv.h b/alf/alfpriv.h
index c2ab557..2c79fcd 100644
--- a/alf/alfpriv.h
+++ b/alf/alfpriv.h
@@ -49,6 +49,3 @@ ALF_BuildUniqueNameW(WCHAR *buf, const WCHAR *prefix, ULONG_PTR uniquifier);
BOOL
ALF_ShouldMessageBubble(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
-
-void
-ALF_FillRect(HDC dc, const RECT *rc, ALFColor color);
diff --git a/widgetfactory.cpp b/widgetfactory.cpp
index de7efe2..2273806 100644
--- a/widgetfactory.cpp
+++ b/widgetfactory.cpp
@@ -1,31 +1,23 @@
#include "alf/alf.h"
enum {
- ID_LBLHELLO,
- ID_LBL2,
- ID_LBL3,
- ID_ED1,
- ID_B1,
- ID_B2,
- ID_B3,
- ID_B4,
ID_COMBO1,
- ID_LBL4,
ID_COMBO2,
- ID_LBL5,
- ID_LBL6,
- ID_BC1,
- ID_BC2,
- ID_BC3,
- ID_BC4,
- ID_BC5,
+ ID_LBLCOMBOTEXT,
+ ID_BTNCOMBOCLEAR,
ID_NOTEBOOK,
+ ID_HELLO,
ID_B_TABBGSOLID,
ID_B_TABBGTEXTURE,
IDM_FILE,
IDM_FILE_CLOSE,
IDM_HELP,
IDM_HELP_ABOUT,
+ IDM_BACKGROUND,
+ IDM_BACKGROUND_INHERIT,
+ IDM_BACKGROUND_GRADIENT,
+ IDM_BACKGROUND_GREEN,
+ IDM_BACKGROUND_BLUE,
ID__MAX
};
@@ -36,35 +28,15 @@ static HBRUSH white;
BOOL (WINAPI *fnGradientFill)(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG) = NULL;
-LRESULT
-handleMessage(void *closure, HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
-{
- (void)closure;
+enum PanelBackgroundMode {
+ BG_INHERIT,
+ BG_GRADIENT,
+ BG_SOLID_GREEN,
+ BG_SOLID_BLUE
+};
- if (msg == WM_CTLCOLORSTATIC) {
- WORD id = (WORD)GetDlgCtrlID((HWND)lparam);
- HDC hdcStatic = (HDC)wparam;
- if (id == ID_LBLHELLO) {
- SetTextColor(hdcStatic, RGB(0,0,0));
- SetBkColor(hdcStatic, RGB(255,0,0));
- return (LRESULT)red;
- } else if (id == ID_LBL2) {
- SetTextColor(hdcStatic, RGB(0,0,0));
- SetBkColor(hdcStatic, RGB(0,255,0));
- return (LRESULT)green;
- } /*else if (id == ID_LBL3) {
- SetTextColor(hdcStatic, RGB(255,255,255));
- SetBkColor(hdcStatic, RGB(0,0,255));
- return (LRESULT)blue;
- } else {
- SetTextColor(hdcStatic, RGB(0,0,0));
- SetBkColor(hdcStatic, RGB(255,255,255));
- return (LRESULT)white;
- }*/
- }
+#define FM_PANEL_SET_BGMODE (ALF_WM_USER + 1)
- return ALF_DefWindowProc(hwnd, msg, wparam, lparam);
-}
static LRESULT
handleCommand(void *closure, HWND window, WORD notificationcode, WORD sourceid, HWND control)
@@ -74,25 +46,17 @@ handleCommand(void *closure, HWND window, WORD notificationcode, WORD sourceid,
if (notificationcode == CBN_SELCHANGE && sourceid == ID_COMBO2) {
TCHAR *text = ALF_ComboBoxCurrentText(control);
- ALF_SetWidgetText(window, ID_LBL6, text);
+ ALF_SetWidgetText(window, ID_LBLCOMBOTEXT, text);
ALF_Free(text);
}
- if (control != NULL && sourceid == ID_B4) {
+ if (control != NULL && sourceid == ID_BTNCOMBOCLEAR) {
HWND combo = ALF_WidgetHwndById(window, ID_COMBO2);
ALF_ComboBoxSetCurrentIndex(combo, -1);
}
- if (sourceid == ID_B2) {
+ if (sourceid == ID_HELLO) {
MessageBox(window, TEXT("Hello World!"), TEXT("Hello"), MB_ICONASTERISK|MB_OK);
}
- if (control != NULL && sourceid == ID_B3) {
- ALFColor oldcolor = ALF_BackgroundColor(window);
- if (oldcolor == ALF_COLOR_TRANSPARENT) {
- ALF_SetBackgroundColor(window, ALF_COLOR_SYS(COLOR_BTNFACE));
- } else {
- ALF_SetBackgroundColor(window, ALF_COLOR_TRANSPARENT);
- }
- }
if (control != NULL && sourceid == ID_B_TABBGSOLID) {
HWND nb = ALF_WidgetHwndById(window, ID_NOTEBOOK);
ALF_NotebookAddFlag(nb, ALF_NOTEBOOK_SOLID_TAB_BACKGROUND);
@@ -106,19 +70,45 @@ handleCommand(void *closure, HWND window, WORD notificationcode, WORD sourceid,
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;
}
-static void
-handlePaint(void *closure, HWND window, HDC dc, RECT *rcPaint)
-{
- (void)closure;
+/* common stuff */
+typedef struct {
+ DWORD bgmode;
+} CommonPanelPriv;
- ALFColor color = ALF_BackgroundColor(window);
+static void commonPanelPaint(void *closure, HWND hwndPanel, HDC dc, RECT *rcPaint)
+{
+ CommonPanelPriv *priv = (CommonPanelPriv *)closure;
- if (color == ALF_COLOR_TRANSPARENT) {
+ if (priv->bgmode == BG_GRADIENT) {
RECT rcClient;
- GetClientRect(window, &rcClient);
+ GetClientRect(hwndPanel, &rcClient);
if (fnGradientFill) {
TRIVERTEX vertex[6];
@@ -192,125 +182,106 @@ handlePaint(void *closure, HWND window, HDC dc, RECT *rcPaint)
}
}
} else {
- if (rcPaint) {
- SetBkColor(dc, ALF_ColorToGdi(color));
- ExtTextOut(dc, 0, 0, ETO_OPAQUE, rcPaint, TEXT(""), 0, NULL);
- } else {
- RECT rcClient;
- GetClientRect(window, &rcClient);
-
- SetBkColor(dc, ALF_ColorToGdi(color));
- ExtTextOut(dc, 0, 0, ETO_OPAQUE, &rcClient, TEXT(""), 0, NULL);
- }
- }
-}
-
-static void handleWindowPosChanged(void *closure, HWND window, WINDOWPOS *pos)
-{
- (void)closure;
-
- if (!(pos->flags & SWP_NOSIZE)) {
- ALFColor bgcolor = ALF_BackgroundColor(window);
-
- if (bgcolor == ALF_COLOR_TRANSPARENT)
- ALF_InvalidateBackground(window);
+ ALF_Panel_DefPaint(hwndPanel, dc, rcPaint);
}
}
-int CALLBACK
-#ifdef UNICODE
-wWinMain
-#else
-WinMain
-#endif
-(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
+static LRESULT
+commonPanelMessage(void *closure, HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
- (void)hPrevInstance;
- (void)lpCmdLine;
- (void)nCmdShow;
-
- ALF_SetDpiAwareness(ALF_DPI_AWARENESS_PER_MONITOR_AWARE_V2);
-
- red = CreateSolidBrush(RGB(255,0,0));
- green = CreateSolidBrush(RGB(0,255,0));
- blue = CreateSolidBrush(RGB(0,0,255));
- white = CreateSolidBrush(RGB(255,255,255));
-
- if (LOBYTE(LOWORD(GetVersion())) >= 4) {
- HMODULE hMsimg32 = LoadLibraryA("msimg32.dll");
- if (hMsimg32) {
- *((void**)&fnGradientFill) = (void*)GetProcAddress(hMsimg32, "GradientFill");
+ CommonPanelPriv *priv = (CommonPanelPriv *)closure;
+
+ if (msg == FM_PANEL_SET_BGMODE) {
+ priv->bgmode = (DWORD)lparam;
+
+ switch (priv->bgmode) {
+ case BG_INHERIT:
+ ALF_AddWidgetLayoutFlag(GetParent(hwnd), hwnd, ALF_LAYOUT_INHERITBGCOLOR);
+ ALF_InvalidateBackground(hwnd);
+ break;
+ case BG_GRADIENT:
+ ALF_SetBackgroundColor(hwnd, ALF_COLOR_TRANSPARENT);
+ ALF_InvalidateBackground(hwnd);
+ break;
+ case BG_SOLID_BLUE:
+ ALF_SetBackgroundColor(hwnd, ALF_COLOR_RGB(0, 0, 255));
+ break;
+ case BG_SOLID_GREEN:
+ ALF_SetBackgroundColor(hwnd, ALF_COLOR_RGB(0, 255, 0));
+ break;
}
+ return TRUE;
}
- ALFWindowClassParams cparams;
- ZeroMemory(&cparams, sizeof(cparams));
-
- //cparams.className = TEXT("DummyClass");
- cparams.vtbl.message = handleMessage;
- cparams.vtbl.command = handleCommand;
- cparams.vtbl.paint = handlePaint;
- cparams.vtbl.windowposchanged = handleWindowPosChanged;
-
- ALF_Initialize();
-
- LPCTSTR clazz = ALF_RegisterWindowClass(hInstance, &cparams);
- if (!clazz)
- MessageBox(0, TEXT("couldn't create window class!"), 0, MB_ICONHAND|MB_OK);
-
- HWND win = ALF_InstantiateWindow(hInstance, clazz, NULL, NULL);
- if (!win)
- MessageBox(0, TEXT("couldn't create main window!"), 0, MB_ICONHAND|MB_OK);
-
- ALF_AddLabel(win, ID_LBL2, 1, 0, TEXT("Hello, 2!\nblub"));
-
- HWND hwndLabel = CreateWindow(
- TEXT("STATIC"),
- TEXT("Hello World!"),
- WS_CHILD | WS_VISIBLE | SS_LEFT,
- 0, 0, 50, 25,
- win,
- (HMENU)ID_LBLHELLO,
- hInstance,
- NULL);
- ALF_AddWidget(win, 0, 0, hwndLabel, 5000, 1000, ALF_LAYOUT_INHERITFONT);
+ if (msg == WM_SIZE && priv->bgmode == BG_GRADIENT) {
+ ALF_InvalidateBackground(hwnd);
+ }
- ALF_AddLabel(win, ID_LBL3, 0, 1, TEXT("Good Morning my &Angel!"));
+ return ALF_Panel_DefWindowProc(hwnd, msg, wparam, lparam);
+}
- ALF_AddEdit(win, ID_ED1, 1, 1, TEXT("Happy Birthday!"));
+static void
+commonPanelDestroy(void *closure, HWND window)
+{
+ (void)window;
+ ALF_Free(closure);
+}
- ALF_AddButton(win, ID_B1, 3, 1, TEXT("&Go Go Go!"));
- ALF_AddButton(win, ID_B2, 0, 2, TEXT("Oh m&y god,\r\nwho the hell cares?"));
+/* button panel */
- ALF_AddLabel(win, ID_LBL4, 0, 3, TEXT("&Editable Combo Box:"));
- HWND hwndCombo1 = ALF_AddEditableComboBox(win, ID_COMBO1, 1, 3, TEXT("Hello!"));
- ALF_AddButton(win, ID_B3, 3, 3, TEXT("Change Background"));
+static void
+buttonPanelAttach(void *closure, HWND panel)
+{
+ (void)closure;
- ALF_ComboBoxInsertString(hwndCombo1, 0, TEXT("Hello World!"));
- ALF_ComboBoxInsertString(hwndCombo1, -1, TEXT("Goodbye World!"));
- ALF_ComboBoxInsertString(hwndCombo1, 1, TEXT("The quick brown fox jumps over the lazy dog"));
+ ALF_AddLabel(panel, (WORD)-1, 0, 2, TEXT("normal"));
+ ALF_AddLabel(panel, (WORD)-1, 0, 4, TEXT("disabled"));
+ ALF_AddLabel(panel, (WORD)-1, 2, 0, TEXT("ALF"));
+ ALF_AddLabel(panel, (WORD)-1, 4, 0, TEXT("native"));
+ ALF_AddLabel(panel, (WORD)-1, 0, 6, TEXT("layout dummy"));
- ALF_AddLabel(win, ID_LBL5, 0, 4, TEXT("Selection-Only Combo Box:"));
- HWND hwndCombo2 = ALF_AddSelectionOnlyComboBox(win, ID_COMBO2, 1, 4);
- ALF_AddButton(win, ID_B4, 3, 4, TEXT("Lol"));
+ ALF_AddButton(panel, ID_HELLO, 2, 2, TEXT("&Hello, World!"));
+ HWND bDisabled = ALF_AddButton(panel, (WORD)-1, 2, 4, TEXT("Hello, World!"));
+ EnableWindow(bDisabled, FALSE);
- /*HWND b4 = ALF_WidgetAtLayoutPosition(win, 2, 4);
- ALF_SetWidgetLayoutSize(win, b4, 6427, 0);*/
+ HWND hwndNb1 = CreateWindowEx(0,
+ TEXT("BUTTON"),
+ TEXT("H&ello, World!"),
+ WS_CHILD | WS_TABSTOP | WS_VISIBLE | BS_PUSHBUTTON,
+ 0, 0, 100, 100,
+ panel,
+ (HMENU)(WORD)-1,
+ (HINSTANCE)GetModuleHandle(NULL),
+ NULL);
+ HWND hwndNb2 = CreateWindowEx(0,
+ TEXT("BUTTON"),
+ TEXT("Hello, World!"),
+ WS_CHILD | WS_TABSTOP | WS_VISIBLE | BS_PUSHBUTTON,
+ 0, 0, 100, 100,
+ panel,
+ (HMENU)(WORD)-1,
+ (HINSTANCE)GetModuleHandle(NULL),
+ NULL);
+ EnableWindow(hwndNb2, FALSE);
- ALF_ComboBoxAddString(hwndCombo2, TEXT("Hello World!"));
- ALF_ComboBoxAddString(hwndCombo2, TEXT("Goodbye World!"));
- ALF_ComboBoxAddString(hwndCombo2, TEXT("The quick brown fox jumps over the lazy dog"));
+ ALF_AddWidget(panel, 4, 2, hwndNb1, 0, 0, ALF_LAYOUT_INHERITFONT | ALF_LAYOUT_TRANSPARENTBG);
+ ALF_AddWidget(panel, 4, 4, hwndNb2, 0, 0, ALF_LAYOUT_INHERITFONT | ALF_LAYOUT_TRANSPARENTBG);
- HWND hwndLbl6 = ALF_AddLabel(win, ID_LBL6, 0, 5, TEXT("[ComboBox2 value]"));
- ALF_SetBackgroundColor(hwndLbl6, ALF_COLOR_RGB(0, 0, 255));
- ALF_SetTextColor(hwndLbl6, ALF_COLOR_RGB(255, 255, 255));
+ ALF_AddButton(panel, (WORD)-1, 4, 6, TEXT("Hello, World!"));
- ALF_AddCheckbox(win, (WORD)-1, 1, 5, TEXT("Some Checkbox with a very very really very very long text"));
+ ALF_AddButton(panel, (WORD)-1, 4, 8, TEXT("Multiline\r\nButton"));
- //ALF_AddWidgetLayoutFlag(win, ALF_WidgetHwndById(win, ID_LBL6), ALF_VEXPAND);
- //ALF_AddWidgetLayoutFlag(win, ALF_WidgetHwndById(win, ID_B1), ALF_HEXPAND);
+ ALF_LayoutSetRowMinSize(panel, 1, 825);
+ ALF_LayoutSetRowMinSize(panel, 3, 825);
+ ALF_LayoutSetRowMinSize(panel, 5, 825);
+ ALF_LayoutSetRowMinSize(panel, 7, 825);
+ ALF_LayoutSetColumnMinSize(panel, 1, 825);
+ ALF_LayoutSetColumnMinSize(panel, 3, 825);
+ ALF_LayoutSetColumnExpandNumerator(panel, 9, 1);
+ ALF_LayoutSetRowExpandNumerator(panel, 9, 1);
- HWND panel = ALF_AddPanel(win, (WORD)-1, 1, 2);
+ // TODO: recreate old button box
+ /*HWND panel = ALF_AddPanel(win, (WORD)-1, 1, 2);
ALF_AddButton(panel, ID_BC1, 0, 0, TEXT("1"));
ALF_AddButton(panel, ID_BC2, 1, 0, TEXT("2"));
ALF_AddButton(panel, ID_BC3, 2, 0, TEXT("3"));
@@ -337,11 +308,129 @@ WinMain
NULL);
EnableWindow(hwndBc5, FALSE);
ALF_AddWidget(panel, 3, 0, hwndBc4, 1000, 0, ALF_LAYOUT_INHERITFONT);
- ALF_AddWidget(panel, 4, 0, hwndBc5, 1000, 0, ALF_LAYOUT_INHERITFONT);
+ ALF_AddWidget(panel, 4, 0, hwndBc5, 1000, 0, ALF_LAYOUT_INHERITFONT);*/
+}
+
+static ALFPanelVTable buttonPanelVtbl = {
+ buttonPanelAttach,
+ commonPanelDestroy,
+ commonPanelMessage,
+ NULL,
+ NULL,
+ commonPanelPaint,
+ NULL
+};
+
+static void
+buttonPanelAddToNotebook(HWND hwndNotebook)
+{
+ HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Buttons"));
+ CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1);
+ ALF_Panel_SetVTable(panel, &buttonPanelVtbl, priv);
+}
+
+/* label panel */
+
+static void
+labelPanelAttach(void *closure, HWND panel)
+{
+ (void)closure;
+
+ ALF_AddLabel(panel, (WORD)-1, 0, 2, TEXT("N&ormal"));
+ HWND l = ALF_AddLabel(panel, (WORD)-1, 0, 4, TEXT("Disabled"));
+ EnableWindow(l, FALSE);
+
+ ALF_AddEdit(panel, (WORD)-1, 3, 2, TEXT("Baseline Comparison"));
+ l = ALF_AddLabel(panel, (WORD)-1, 3, 4, TEXT("Left Comparison"));
+ ALF_LabelSetStyle(l, ALF_LABEL_ALIGN_LEFT_LIKE_EDIT | ALF_LABEL_ALIGN_TOP);
+
+ l = ALF_AddLabel(panel, (WORD)-1, 0, 6, TEXT("Colored"));
+ ALF_SetBackgroundColor(l, ALF_COLOR_RGB(0, 0, 255));
+ ALF_SetTextColor(l, ALF_COLOR_RGB(255, 255, 255));
+
+ // TODO: demo right, center, bottom alignment
+}
+
+static ALFPanelVTable labelPanelVtbl = {
+ labelPanelAttach,
+ commonPanelDestroy,
+ commonPanelMessage,
+ NULL,
+ NULL,
+ commonPanelPaint,
+ NULL
+};
+
+static void
+labelPanelAddToNotebook(HWND hwndNotebook)
+{
+ HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Label"));
+ CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1);
+ ALF_Panel_SetVTable(panel, &labelPanelVtbl, priv);
+}
+
+/* combo box panel */
+
+static void
+comboPanelAttach(void *closure, HWND panel)
+{
+ (void)closure;
+
+ ALF_AddLabel(panel, (WORD)-1, 0, 2, TEXT("&Editable Combo Box:"));
+ HWND hwndCombo1 = ALF_AddEditableComboBox(panel, ID_COMBO1, 2, 2, TEXT("Hello!"));
+
+ ALF_ComboBoxInsertString(hwndCombo1, 0, TEXT("Hello World!"));
+ ALF_ComboBoxInsertString(hwndCombo1, -1, TEXT("Goodbye World!"));
+ ALF_ComboBoxInsertString(hwndCombo1, 1, TEXT("The quick brown fox jumps over the lazy dog"));
+
+ ALF_AddLabel(panel, (WORD)-1, 0, 4, TEXT("Selection-Only Combo Box:"));
+ HWND hwndCombo2 = ALF_AddSelectionOnlyComboBox(panel, ID_COMBO2, 2, 4);
+ ALF_AddButton(panel, ID_BTNCOMBOCLEAR, 4, 4, TEXT("Clear"));
+
+ ALF_ComboBoxAddString(hwndCombo2, TEXT("Hello World!"));
+ ALF_ComboBoxAddString(hwndCombo2, TEXT("Goodbye World!"));
+ ALF_ComboBoxAddString(hwndCombo2, TEXT("The quick brown fox jumps over the lazy dog"));
+
+ ALF_AddLabel(panel, ID_LBLCOMBOTEXT, 2, 6, TEXT("[ComboBox2 value]"));
+
+ ALF_ComboBoxSetText(hwndCombo2, TEXT("Goodbye World!"));
+
+ ALF_LayoutSetRowMinSize(panel, 1, 825);
+ ALF_LayoutSetRowMinSize(panel, 3, 825);
+ ALF_LayoutSetRowMinSize(panel, 5, 825);
+ ALF_LayoutSetRowMinSize(panel, 7, 825);
+ ALF_LayoutSetColumnMinSize(panel, 1, 825);
+ ALF_LayoutSetColumnMinSize(panel, 3, 825);
+ ALF_LayoutSetColumnExpandNumerator(panel, 2, 1);
+ ALF_LayoutSetRowExpandNumerator(panel, 9, 1);
+}
- EnableWindow(ALF_WidgetHwndById(win, ID_BC2), FALSE);
+static ALFPanelVTable comboPanelVtbl = {
+ comboPanelAttach,
+ commonPanelDestroy,
+ commonPanelMessage,
+ NULL,
+ NULL,
+ commonPanelPaint,
+ NULL
+};
- HWND hwndTab = ALF_AddNotebook(win, ID_NOTEBOOK, 1, 7);
+static void
+comboPanelAddToNotebook(HWND hwndNotebook)
+{
+ HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Combo Box"));
+ CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1);
+ ALF_Panel_SetVTable(panel, &comboPanelVtbl, priv);
+}
+
+/* notebook panel */
+
+static void
+notebookPanelAttach(void *closure, HWND panel)
+{
+ (void)closure;
+
+ HWND hwndTab = ALF_AddNotebook(panel, (WORD)-1, 0, 0);
HWND hwndTabPanel0 = ALF_NotebookAddTab(hwndTab, TEXT("Notebook Debug"));
HWND hwndTabPanel1 = ALF_NotebookAddTab(hwndTab, TEXT("Tab 1"));
HWND hwndTabPanel2 = ALF_NotebookAddTab(hwndTab, TEXT("Tab 2"));
@@ -359,41 +448,140 @@ WinMain
ALF_AddLabel(hwndTabPanel2, (WORD)-1, 0, 0, TEXT("Goodbye, &World!"));
ALF_AddEdit(hwndTabPanel2, (WORD)-1, 1, 0, TEXT("lol"));
- ALF_LayoutSetRowExpandNumerator(win, 7, 1);
-
ALF_AddLabel(hwndTabPanel1, (WORD)-1, 0, 1, TEXT("Blabla"));
ALF_LayoutSetRowExpandNumerator(hwndTabPanel1, 1, 1);
ALF_AddLabel(hwndTabPanel1, (WORD)-1, 0, 2, TEXT("No 3"));
ALF_AddEdit(hwndTabPanel1, (WORD)-1, 0, 3, TEXT("Dummy"));
ALF_SetText(hwndTabPanel2, TEXT("Panel Text Demo Test Test Test"));
+}
- HWND l = ALF_AddLabel(win, (WORD)-1, 3, 7, TEXT("Hello There"));
- SendMessage(l, ALF_WM_LBL_SETSTYLE, 0, ALF_LABEL_ALIGN_HCENTER | ALF_LABEL_ALIGN_VCENTER);
+static ALFPanelVTable notebookPanelVtbl = {
+ notebookPanelAttach,
+ commonPanelDestroy,
+ commonPanelMessage,
+ NULL,
+ NULL,
+ commonPanelPaint,
+ NULL
+};
- ALF_SetDefaultButton(win, ID_B2);
+static void
+notebookPanelAddToNotebook(HWND hwndNotebook)
+{
+ HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Notebook"));
+ CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1);
+ ALF_Panel_SetVTable(panel, &notebookPanelVtbl, priv);
+}
- ALF_ComboBoxSetText(hwndCombo2, TEXT("Goodbye World!"));
+/* checkbox panel */
+
+static void
+checkboxPanelAttach(void *closure, HWND panel)
+{
+ (void)closure;
+
+ ALF_AddCheckbox(panel, (WORD)-1, 1, 2, TEXT("Some Checkbox with a very very really very very long text"));
+
+ HWND l = ALF_AddLabel(panel, (WORD)-1, 1, 4, TEXT("Width checker"));
+ ALF_SetBackgroundColor(l, ALF_COLOR_RGB(0, 0, 255));
+ ALF_SetTextColor(l, ALF_COLOR_RGB(255, 255, 255));
+
+ ALF_LayoutSetRowMinSize(panel, 1, 825);
+ ALF_LayoutSetRowMinSize(panel, 3, 825);
+ ALF_LayoutSetColumnExpandNumerator(panel, 9, 1);
+ ALF_LayoutSetRowExpandNumerator(panel, 9, 1);
+}
+
+static ALFPanelVTable checkboxPanelVtbl = {
+ checkboxPanelAttach,
+ commonPanelDestroy,
+ commonPanelMessage,
+ NULL,
+ NULL,
+ commonPanelPaint,
+ NULL
+};
+
+static void
+checkboxPanelAddToNotebook(HWND hwndNotebook)
+{
+ HWND panel = ALF_NotebookAddTab(hwndNotebook, TEXT("Checkbox"));
+ CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1);
+ ALF_Panel_SetVTable(panel, &checkboxPanelVtbl, priv);
+}
+
+int CALLBACK
+#ifdef UNICODE
+wWinMain
+#else
+WinMain
+#endif
+(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
+{
+ (void)hPrevInstance;
+ (void)lpCmdLine;
+ (void)nCmdShow;
+
+ ALF_SetDpiAwareness(ALF_DPI_AWARENESS_PER_MONITOR_AWARE_V2);
+
+ red = CreateSolidBrush(RGB(255,0,0));
+ green = CreateSolidBrush(RGB(0,255,0));
+ blue = CreateSolidBrush(RGB(0,0,255));
+ white = CreateSolidBrush(RGB(255,255,255));
+
+ if (LOBYTE(LOWORD(GetVersion())) >= 4) {
+ HMODULE hMsimg32 = LoadLibraryA("msimg32.dll");
+ if (hMsimg32) {
+ *((void**)&fnGradientFill) = (void*)GetProcAddress(hMsimg32, "GradientFill");
+ }
+ }
- ALF_LayoutSetColumnMinSize(win, 2, 825);
- ALF_LayoutSetColumnExpandNumerator(win, 1, 4);
- ALF_LayoutSetColumnExpandNumerator(win, 3, 1);
+ ALFWindowClassParams cparams;
+ ZeroMemory(&cparams, sizeof(cparams));
- EnableWindow(ALF_WidgetHwndById(win, ID_LBL3), FALSE);
+ //cparams.className = TEXT("DummyClass");
+ cparams.vtbl.command = handleCommand;
+
+ ALF_Initialize();
+
+ LPCTSTR clazz = ALF_RegisterWindowClass(hInstance, &cparams);
+ if (!clazz)
+ MessageBox(0, TEXT("couldn't create window class!"), 0, MB_ICONHAND|MB_OK);
+
+ HWND win = ALF_InstantiateWindow(hInstance, clazz, NULL, NULL);
+ if (!win)
+ 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);
+
+ ALF_SetDefaultButton(win, ID_HELLO);
ALF_ResizeWindow(win, 1, 1);
HMENU mainmenu = CreateMenu();
HMENU filemenu = CreateMenu();
HMENU helpmenu = CreateMenu();
+ HMENU bgmenu = CreateMenu();
- AppendMenu(filemenu, MF_STRING, ID_B2, TEXT("Hello"));
+ AppendMenu(filemenu, MF_STRING, ID_HELLO, TEXT("Hello"));
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"));
+ AppendMenu(bgmenu, MF_STRING, IDM_BACKGROUND_INHERIT, TEXT("(Default)"));
+ AppendMenu(bgmenu, MF_STRING, IDM_BACKGROUND_GRADIENT, TEXT("Gradient"));
+ AppendMenu(bgmenu, MF_STRING, IDM_BACKGROUND_BLUE, TEXT("Blue"));
+ AppendMenu(bgmenu, MF_STRING, IDM_BACKGROUND_GREEN, TEXT("Green"));
+
AppendMenu(mainmenu, MF_POPUP, (UINT_PTR)filemenu, TEXT("&File"));
+ AppendMenu(mainmenu, MF_POPUP, (UINT_PTR)bgmenu, TEXT("Background"));
AppendMenu(mainmenu, MF_POPUP, (UINT_PTR)helpmenu, TEXT("&Help"));
SetMenu(win, mainmenu);