aboutsummaryrefslogtreecommitdiff
path: root/Src/omBrowser/optionsUi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/omBrowser/optionsUi.cpp')
-rw-r--r--Src/omBrowser/optionsUi.cpp373
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