diff options
Diffstat (limited to 'Src/omBrowser/optionsUi.cpp')
-rw-r--r-- | Src/omBrowser/optionsUi.cpp | 373 |
1 files changed, 373 insertions, 0 deletions
diff --git a/Src/omBrowser/optionsUi.cpp b/Src/omBrowser/optionsUi.cpp new file mode 100644 index 00000000..c0dd4f5a --- /dev/null +++ b/Src/omBrowser/optionsUi.cpp @@ -0,0 +1,373 @@ +#include "main.h" +#include "./options.h" +#include "./resource.h" + +#include "./obj_ombrowser.h" +#include "./ifc_omconfig.h" +#include "./ifc_omtoolbarconfig.h" +#include "./ifc_omstatusbarconfig.h" + +#include <windows.h> +#include <commctrl.h> +#include <shlwapi.h> +#include <strsafe.h> + +#define TOOLBAR_TOPDOCK 0 +#define TOOLBAR_BOTTOMDOCK 1 + +#define BOOL2HRESULT(__result) ((FALSE != (__result)) ? S_OK : S_FALSE) + +static INT_PTR CALLBACK OptionsUI_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + +HWND CALLBACK OptionsUI_CreatePage(HWND hParent, UINT style) +{ + return Plugin_CreateDialogParam(MAKEINTRESOURCE(IDD_OPTIONS_UI), hParent, OptionsUI_DialogProc, 0L); +} + +static INT OptionsUI_GetLocationIndex(HWND hwnd, UINT locationId) +{ + HWND hControl = GetDlgItem(hwnd, IDC_TOOLBAR_LOCATION); + if (NULL == hControl) return CB_ERR; + + INT count = (INT)SendMessage(hControl, CB_GETCOUNT, 0, 0L); + for (INT i = 0; i < count; i++) + { + if (locationId == (UINT)SendMessage(hControl, CB_GETITEMDATA, i, 0L)) + return i; + } + return CB_ERR; +} + +static void OptionsUI_UpdateToolbarLocation(HWND hwnd, HRESULT bottomLocation) +{ + HWND hControl = GetDlgItem(hwnd, IDC_TOOLBAR_LOCATION); + if (NULL == hControl) return; + + if (FAILED(bottomLocation)) + { + EnableWindow(hControl, FALSE); + } + else + { + INT iIndex = OptionsUI_GetLocationIndex(hwnd, (S_OK == bottomLocation) ? TOOLBAR_BOTTOMDOCK : TOOLBAR_TOPDOCK); + if (CB_ERR != iIndex) + SendMessage(hControl, CB_SETCURSEL, iIndex, 0L); + + EnableWindow(hControl, TRUE); + } +} + +static void OptionsUI_UpdateToolbarAutoHide(HWND hwnd, HRESULT autoHide) +{ + Options_SetCheckbox(hwnd, IDC_TOOLBAR_AUTOHIDE, autoHide); +} + +static void OptionsUI_UpdateToolbarTabStop(HWND hwnd, HRESULT tabStop) +{ + Options_SetCheckbox(hwnd, IDC_TOOLBAR_TABSTOP, tabStop); +} + +static void OptionsUI_UpdateToolbarForceAddress(HWND hwnd, HRESULT enabled) +{ + Options_SetCheckbox(hwnd, IDC_TOOLBAR_FORCEADDRESS, enabled); +} + +static void OptionsUI_UpdateToolbarFancyAddress(HWND hwnd, HRESULT enabled) +{ + Options_SetCheckbox(hwnd, IDC_TOOLBAR_FANCYADDRESS, enabled); +} + +static void OptionsUI_UpdateStatusbarEnabled(HWND hwnd, HRESULT enabled) +{ + Options_SetCheckbox(hwnd, IDC_STATUSBAR_ENABLED, enabled); +} + +static INT_PTR OptionsUI_OnInitDialog(HWND hwnd, HWND hFocus, LPARAM param) +{ + WCHAR szBuffer[512] = {0}; + Plugin_LoadString(IDS_OPTIONS_UI, szBuffer, ARRAYSIZE(szBuffer)); + SetWindowText(hwnd, szBuffer); + + HWND hControl = GetDlgItem(hwnd, IDC_TOOLBAR_LOCATION); + if (NULL != hControl) + { + INT iItem; + + Plugin_LoadString(IDS_TOOLBAR_TOPDOCK, szBuffer, ARRAYSIZE(szBuffer)); + iItem = (INT)(INT_PTR)SendMessage(hControl, CB_ADDSTRING, 0, (LPARAM)szBuffer); + if (CB_ERR != iItem) + SendMessage(hControl, CB_SETITEMDATA, (WPARAM)iItem, (LPARAM)TOOLBAR_TOPDOCK); + + Plugin_LoadString(IDS_TOOLBAR_BOTTOMDOCK, szBuffer, ARRAYSIZE(szBuffer)); + iItem = (INT)(INT_PTR)SendMessage(hControl, CB_ADDSTRING, 0, (LPARAM)szBuffer); + if (CB_ERR != iItem) + SendMessage(hControl, CB_SETITEMDATA, (WPARAM)iItem, (LPARAM)TOOLBAR_BOTTOMDOCK); + } + + + HWND hParent = GetParent(hwnd); + + obj_ombrowser *browserManager; + if (FALSE == SendMessage(hParent, BOM_GETBROWSER, 0, (LPARAM)&browserManager)) + browserManager = NULL; + + ifc_omtoolbarconfig *toolbarConfig; + + if (NULL != browserManager && + SUCCEEDED(browserManager->GetConfig(&IFC_OmToolbarConfig, (void**)&toolbarConfig))) + { + OptionsUI_UpdateToolbarLocation(hwnd, toolbarConfig->GetBottomDockEnabled()); + OptionsUI_UpdateToolbarAutoHide(hwnd, toolbarConfig->GetAutoHideEnabled()); + OptionsUI_UpdateToolbarTabStop(hwnd, toolbarConfig->GetTabStopEnabled()); + OptionsUI_UpdateToolbarForceAddress(hwnd, toolbarConfig->GetForceAddressbarEnabled()); + OptionsUI_UpdateToolbarFancyAddress(hwnd, toolbarConfig->GetFancyAddressbarEnabled()); + + toolbarConfig->Release(); + } + else + { + OptionsUI_UpdateToolbarLocation(hwnd, E_FAIL); + OptionsUI_UpdateToolbarAutoHide(hwnd, E_FAIL); + OptionsUI_UpdateToolbarTabStop(hwnd, E_FAIL); + } + + ifc_omstatusbarconfig *statusbarConfig; + + if (NULL != browserManager && + SUCCEEDED(browserManager->GetConfig(&IFC_OmStatusbarConfig, (void**)&statusbarConfig))) + { + OptionsUI_UpdateStatusbarEnabled(hwnd, statusbarConfig->GetEnabled()); + statusbarConfig->Release(); + } + else + { + OptionsUI_UpdateStatusbarEnabled(hwnd, E_FAIL); + } + + if (NULL != browserManager) + browserManager->Release(); + + return 0; +} + +static void OptionsUI_OnDestroy(HWND hwnd) +{ +} + +static void OptionsUI_OnWindowPosChanged(HWND hwnd, WINDOWPOS *pwp) +{ +} + +static void OptionsUI_OnToolbarLocation(HWND hwnd) +{ + HWND hControl = GetDlgItem(hwnd, IDC_TOOLBAR_LOCATION); + if (NULL == hControl) return; + + HWND hParent = GetParent(hwnd); + if (NULL == hParent) return; + + INT iIndex = (INT)SendMessage(hControl, CB_GETCURSEL, 0, 0L); + if (CB_ERR == iIndex) return; + + INT dockType = (INT)SendMessage(hControl, CB_GETITEMDATA, iIndex, 0L); + if (TOOLBAR_TOPDOCK != dockType && TOOLBAR_BOTTOMDOCK != dockType) + return; + + obj_ombrowser *browserManager; + if (FALSE != SendMessage(hParent, BOM_GETBROWSER, 0, (LPARAM)&browserManager)) + { + ifc_omtoolbarconfig *toolbarConfig; + if (SUCCEEDED(browserManager->GetConfig(&IFC_OmToolbarConfig, (void**)&toolbarConfig))) + { + toolbarConfig->EnableBottomDock(TOOLBAR_BOTTOMDOCK == dockType); + toolbarConfig->Release(); + } + browserManager->Release(); + } +} + +static void OptionsUI_OnToolbarAutoHide(HWND hwnd) +{ + HWND hControl = GetDlgItem(hwnd, IDC_TOOLBAR_AUTOHIDE); + if (NULL == hControl) return; + + HWND hParent = GetParent(hwnd); + if (NULL == hParent) return; + + BOOL checked = (BST_CHECKED == (UINT)SendMessage(hControl, BM_GETCHECK, 0, 0L)); + + obj_ombrowser *browserManager; + if (FALSE != SendMessage(hParent, BOM_GETBROWSER, 0, (LPARAM)&browserManager)) + { + ifc_omtoolbarconfig *toolbarConfig; + if (SUCCEEDED(browserManager->GetConfig(&IFC_OmToolbarConfig, (void**)&toolbarConfig))) + { + toolbarConfig->EnableAutoHide(checked); + toolbarConfig->Release(); + } + browserManager->Release(); + } +} + +static void OptionsUI_OnToolbarTabstop(HWND hwnd) +{ + HWND hControl = GetDlgItem(hwnd, IDC_TOOLBAR_TABSTOP); + if (NULL == hControl) return; + + HWND hParent = GetParent(hwnd); + if (NULL == hParent) return; + + BOOL checked = (BST_CHECKED == (UINT)SendMessage(hControl, BM_GETCHECK, 0, 0L)); + + obj_ombrowser *browserManager; + if (FALSE != SendMessage(hParent, BOM_GETBROWSER, 0, (LPARAM)&browserManager)) + { + ifc_omtoolbarconfig *toolbarConfig; + if (SUCCEEDED(browserManager->GetConfig(&IFC_OmToolbarConfig, (void**)&toolbarConfig))) + { + toolbarConfig->EnableTabStop(checked); + toolbarConfig->Release(); + } + browserManager->Release(); + } +} + +static void OptionsUI_OnToolbarForceAddress(HWND hwnd) +{ + HWND hControl = GetDlgItem(hwnd, IDC_TOOLBAR_FORCEADDRESS); + if (NULL == hControl) return; + + HWND hParent = GetParent(hwnd); + if (NULL == hParent) return; + + BOOL checked = (BST_CHECKED == (UINT)SendMessage(hControl, BM_GETCHECK, 0, 0L)); + + obj_ombrowser *browserManager; + if (FALSE != SendMessage(hParent, BOM_GETBROWSER, 0, (LPARAM)&browserManager)) + { + ifc_omtoolbarconfig *toolbarConfig; + if (SUCCEEDED(browserManager->GetConfig(&IFC_OmToolbarConfig, (void**)&toolbarConfig))) + { + toolbarConfig->EnableForceAddressbar(checked); + toolbarConfig->Release(); + } + browserManager->Release(); + } +} + +static void OptionsUI_OnToolbarFancyAddress(HWND hwnd) +{ + HWND hControl = GetDlgItem(hwnd, IDC_TOOLBAR_FANCYADDRESS); + if (NULL == hControl) return; + + HWND hParent = GetParent(hwnd); + if (NULL == hParent) return; + + BOOL checked = (BST_CHECKED == (UINT)SendMessage(hControl, BM_GETCHECK, 0, 0L)); + + obj_ombrowser *browserManager; + if (FALSE != SendMessage(hParent, BOM_GETBROWSER, 0, (LPARAM)&browserManager)) + { + ifc_omtoolbarconfig *toolbarConfig; + if (SUCCEEDED(browserManager->GetConfig(&IFC_OmToolbarConfig, (void**)&toolbarConfig))) + { + toolbarConfig->EnableFancyAddressbar(checked); + toolbarConfig->Release(); + } + browserManager->Release(); + } +} + +static void OptionsUI_OnStatusbarEnabled(HWND hwnd) +{ + HWND hControl = GetDlgItem(hwnd, IDC_STATUSBAR_ENABLED); + if (NULL == hControl) return; + + HWND hParent = GetParent(hwnd); + if (NULL == hParent) return; + + BOOL checked = (BST_CHECKED == (UINT)SendMessage(hControl, BM_GETCHECK, 0, 0L)); + + obj_ombrowser *browserManager; + if (FALSE != SendMessage(hParent, BOM_GETBROWSER, 0, (LPARAM)&browserManager)) + { + ifc_omstatusbarconfig *statusbarConfig; + if (SUCCEEDED(browserManager->GetConfig(&IFC_OmStatusbarConfig, (void**)&statusbarConfig))) + { + statusbarConfig->EnableStatusbar(checked); + statusbarConfig->Release(); + } + browserManager->Release(); + } +} + +static void OptionsUI_OnCommand(HWND hwnd, INT commandId, INT eventId, HWND hControl) +{ + switch(commandId) + { + case IDC_TOOLBAR_LOCATION: + if (CBN_SELCHANGE == eventId) + OptionsUI_OnToolbarLocation(hwnd); + break; + case IDC_TOOLBAR_AUTOHIDE: + if (BN_CLICKED == eventId) + OptionsUI_OnToolbarAutoHide(hwnd); + break; + case IDC_TOOLBAR_TABSTOP: + if (BN_CLICKED == eventId) + OptionsUI_OnToolbarTabstop(hwnd); + break; + case IDC_TOOLBAR_FORCEADDRESS: + if (BN_CLICKED == eventId) + OptionsUI_OnToolbarForceAddress(hwnd); + break; + case IDC_TOOLBAR_FANCYADDRESS: + if (BN_CLICKED == eventId) + OptionsUI_OnToolbarFancyAddress(hwnd); + break; + case IDC_STATUSBAR_ENABLED: + if (BN_CLICKED == eventId) + OptionsUI_OnStatusbarEnabled(hwnd); + break; + } +} + +static void OptionsUI_OnConfigChanged(HWND hwnd, BOMCONFIGCHANGED *configData) +{ + if (NULL == configData || NULL == configData->configUid) + return; + + if (IsEqualIID(IFC_OmToolbarConfig, *configData->configUid)) + { + switch(configData->valueId) + { + case CFGID_TOOLBAR_BOTTOMDOCK: OptionsUI_UpdateToolbarLocation(hwnd, BOOL2HRESULT(configData->value)); break; + case CFGID_TOOLBAR_AUTOHIDE: OptionsUI_UpdateToolbarAutoHide(hwnd, BOOL2HRESULT(configData->value)); break; + case CFGID_TOOLBAR_TABSTOP: OptionsUI_UpdateToolbarTabStop(hwnd, BOOL2HRESULT(configData->value)); break; + case CFGID_TOOLBAR_FORCEADDRESS: OptionsUI_UpdateToolbarForceAddress(hwnd, BOOL2HRESULT(configData->value)); break; + case CFGID_TOOLBAR_FANCYADDRESS: OptionsUI_UpdateToolbarFancyAddress(hwnd, BOOL2HRESULT(configData->value)); break; + } + } + else if (IsEqualIID(IFC_OmStatusbarConfig, *configData->configUid)) + { + switch(configData->valueId) + { + case CFGID_STATUSBAR_ENABLED: OptionsUI_UpdateStatusbarEnabled(hwnd, BOOL2HRESULT(configData->value)); break; + } + } +} + + +static INT_PTR CALLBACK OptionsUI_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch(uMsg) + { + case WM_INITDIALOG: return OptionsUI_OnInitDialog(hwnd, (HWND)wParam, lParam); + case WM_DESTROY: OptionsUI_OnDestroy(hwnd); return 0; + case WM_WINDOWPOSCHANGED: OptionsUI_OnWindowPosChanged(hwnd, (WINDOWPOS*)lParam); return TRUE; + case WM_COMMAND: OptionsUI_OnCommand(hwnd, LOWORD(wParam), HIWORD(wParam), (HWND)lParam); return TRUE; + + case BOM_CONFIGCHANGED: OptionsUI_OnConfigChanged(hwnd, (BOMCONFIGCHANGED*)lParam); return TRUE; + } + return 0; +}
\ No newline at end of file |