diff options
Diffstat (limited to 'widgetfactory.cpp')
| -rw-r--r-- | widgetfactory.cpp | 115 |
1 files changed, 113 insertions, 2 deletions
diff --git a/widgetfactory.cpp b/widgetfactory.cpp index b2c3396..12c08d9 100644 --- a/widgetfactory.cpp +++ b/widgetfactory.cpp @@ -11,6 +11,7 @@ enum { PANE_GROUPBOX, PANE_ICONVIEW, PANE_SPINBOX, + PANE_PROGRESS, PANE__MAX }; @@ -22,7 +23,8 @@ static const TCHAR *g_paneLabels[PANE__MAX] = { TEXT("Checkbox"), //PANE_CHECKBOX, TEXT("GroupBox"), //PANE_GROUPBOX, TEXT("Icon View"), //PANE_ICONVIEW, - TEXT("Spin Box") //PANE_SPINBOX + TEXT("Spin Box"), //PANE_SPINBOX + TEXT("Progress") //PANE_PROGRESS }; enum { @@ -34,6 +36,14 @@ enum { ID_HELLO, ID_SPINBOX, ID_SPINBOXOUT, + ID_PROGRESS_SPINBOX, + ID_PROGRESS_BAR, + ID_PROGRESS_GAUGE, + ID_PROGRESS_NATIVE_BAR, + ID_PROGRESS_NORMAL, + ID_PROGRESS_PAUSED, + ID_PROGRESS_ERROR, + ID_PROGRESS_INDETERMINATE, IDM_FILE, IDM_FILE_CLOSE, IDM_HELP, @@ -868,6 +878,105 @@ spinboxPanelInit(HWND panel) ALF_Panel_SetVTable(panel, &spinboxPanelVtbl, priv); } +/* progress panel */ + +static LRESULT +progressPanelCommand(void *closure, HWND panel, WORD notificationcode, WORD sourceid, HWND control) +{ + (void)closure; + + if (notificationcode == EN_CHANGE && sourceid == ID_PROGRESS_SPINBOX) { + ALF_Progress_SetValue(ALF_ControlHwndById(panel, ID_PROGRESS_BAR), (int)ALF_SpinBox_Pos(control)); + ALF_Progress_SetValue(ALF_ControlHwndById(panel, ID_PROGRESS_NATIVE_BAR), (int)ALF_SpinBox_Pos(control)); + ALF_Progress_SetValue(ALF_ControlHwndById(panel, ID_PROGRESS_GAUGE), (int)ALF_SpinBox_Pos(control)); + + TCHAR buf[4]; + wsprintf(buf, TEXT("%d"), (int)ALF_SpinBox_Pos(control)); + ALF_SetText(ALF_ControlHwndById(panel, ID_PROGRESS_GAUGE), buf); + + return 1; + } + + if (notificationcode == BN_CLICKED) { + if (sourceid == ID_PROGRESS_NORMAL) { + ALF_Progress_SetState(ALF_ControlHwndById(panel, ID_PROGRESS_BAR), ALF_PROGRESS_STATE_NORMAL); + ALF_Progress_SetState(ALF_ControlHwndById(panel, ID_PROGRESS_NATIVE_BAR), ALF_PROGRESS_STATE_NORMAL); + ALF_Progress_SetState(ALF_ControlHwndById(panel, ID_PROGRESS_GAUGE), ALF_PROGRESS_STATE_NORMAL); + } + if (sourceid == ID_PROGRESS_PAUSED) { + ALF_Progress_SetState(ALF_ControlHwndById(panel, ID_PROGRESS_BAR), ALF_PROGRESS_STATE_PAUSED); + ALF_Progress_SetState(ALF_ControlHwndById(panel, ID_PROGRESS_NATIVE_BAR), ALF_PROGRESS_STATE_PAUSED); + ALF_Progress_SetState(ALF_ControlHwndById(panel, ID_PROGRESS_GAUGE), ALF_PROGRESS_STATE_PAUSED); + } + if (sourceid == ID_PROGRESS_ERROR) { + ALF_Progress_SetState(ALF_ControlHwndById(panel, ID_PROGRESS_BAR), ALF_PROGRESS_STATE_ERROR); + ALF_Progress_SetState(ALF_ControlHwndById(panel, ID_PROGRESS_NATIVE_BAR), ALF_PROGRESS_STATE_ERROR); + ALF_Progress_SetState(ALF_ControlHwndById(panel, ID_PROGRESS_GAUGE), ALF_PROGRESS_STATE_ERROR); + } + if (sourceid == ID_PROGRESS_INDETERMINATE) { + ALF_Progress_SetState(ALF_ControlHwndById(panel, ID_PROGRESS_BAR), ALF_PROGRESS_STATE_INDETERMINATE); + ALF_Progress_SetState(ALF_ControlHwndById(panel, ID_PROGRESS_NATIVE_BAR), ALF_PROGRESS_STATE_INDETERMINATE); + ALF_Progress_SetState(ALF_ControlHwndById(panel, ID_PROGRESS_GAUGE), ALF_PROGRESS_STATE_INDETERMINATE); + } + + return 1; + } + + return 0; +} + +static void +progressPanelAttach(void *closure, HWND panel) +{ + (void)closure; + + HWND bar = ALF_AddProgressBar(panel, ID_PROGRESS_BAR, 1, 1); + ALF_Progress_SetRange(bar, -50, 50); + HWND native = ALF_AddNativeProgressBar(panel, ID_PROGRESS_NATIVE_BAR, 1, 3); + ALF_Progress_SetRange(native, -50, 50); + HWND gauge = ALF_AddProgressGauge(panel, ID_PROGRESS_GAUGE, 1, 5); + ALF_Progress_SetRange(gauge, -50, 50); + ALF_AddNumericSpinBox(panel, ID_PROGRESS_SPINBOX, 1, 7, 12, -50, 50); + + ALF_AddNativeButton(panel, ID_PROGRESS_NORMAL, 1, 9, TEXT("Normal")); + ALF_AddNativeButton(panel, ID_PROGRESS_PAUSED, 1, 11, TEXT("Paused")); + ALF_AddNativeButton(panel, ID_PROGRESS_ERROR, 1, 13, TEXT("Error")); + ALF_AddNativeButton(panel, ID_PROGRESS_INDETERMINATE, 1, 15, TEXT("Indeterminate")); + + ALF_Layout_SetRowMinSize(panel, 0, 825); + ALF_Layout_SetRowMinSize(panel, 2, 825); + ALF_Layout_SetRowMinSize(panel, 4, 825); + ALF_Layout_SetRowMinSize(panel, 6, 825); + ALF_Layout_SetRowMinSize(panel, 8, 825); + ALF_Layout_SetRowMinSize(panel, 10, 825); + ALF_Layout_SetRowMinSize(panel, 12, 825); + ALF_Layout_SetRowMinSize(panel, 14, 825); + ALF_Layout_SetRowMinSize(panel, 16, 825); + ALF_Layout_SetColumnMinSize(panel, 0, 825); + ALF_Layout_SetColumnMinSize(panel, 2, 525); + ALF_Layout_SetColumnMinSize(panel, 4, 825); + ALF_Layout_SetRowExpandNumerator(panel, 16, 1); + ALF_Layout_SetColumnExpandNumerator(panel, 1, 1); + ALF_Layout_SetColumnExpandNumerator(panel, 3, 1); +} + +static ALFPanelVTable progressPanelVtbl = { + progressPanelAttach, + commonPanelDestroy, + commonPanelMessage, + progressPanelCommand, + NULL, + commonPanelPaint, + NULL +}; + +static void +progressPanelInit(HWND panel) +{ + CommonPanelPriv *priv = ALF_New(CommonPanelPriv, 1); + ALF_Panel_SetVTable(panel, &progressPanelVtbl, priv); +} + void (*g_paneInitTable[PANE__MAX])(HWND) = { buttonPanelInit, //PANE_BUTTONS labelPanelInit, //PANE_LABEL, @@ -876,7 +985,8 @@ void (*g_paneInitTable[PANE__MAX])(HWND) = { checkboxPanelInit, //PANE_CHECKBOX, groupboxPanelInit, //PANE_GROUPBOX, iconviewPanelInit, //PANE_ICONVIEW, - spinboxPanelInit //PANE_SPINBOX + spinboxPanelInit, //PANE_SPINBOX + progressPanelInit //PANE_PROGRESS }; static void @@ -1156,6 +1266,7 @@ WinMain addPaneToNotebook(hwndNtbk, PANE_GROUPBOX); addPaneToNotebook(hwndNtbk, PANE_ICONVIEW); addPaneToNotebook(hwndNtbk, PANE_SPINBOX); + addPaneToNotebook(hwndNtbk, PANE_PROGRESS); ALF_AddNativeButton(win, ID_HELLO, 1, 3, TEXT("&Hello World!")); ALF_AddNativeButton(win, (WORD)-1, 3, 3, TEXT("Goodbye, World")); |
