Added options and advanced options dialogs which should've been

part of an earlier checkin.  Also now saving and restoring
options that aren't in the configuration file to/from the
registry.
This commit is contained in:
crs
2003-03-17 22:32:10 +00:00
parent a7e2141ede
commit a5633b1971
11 changed files with 396 additions and 169 deletions

View File

@@ -16,6 +16,7 @@
#include "ProtocolTypes.h"
#include "CStringUtil.h"
#include "CArch.h"
#include "CArchMiscWindows.h"
#include "CAdvancedOptions.h"
#include "LaunchUtil.h"
#include "resource.h"
@@ -96,6 +97,28 @@ CAdvancedOptions::getCommandLine(bool isClient, const CString& serverName) const
void
CAdvancedOptions::init(HWND hwnd)
{
// get values from registry
HKEY key = CArchMiscWindows::openKey(HKEY_CURRENT_USER, getSettingsPath());
if (key != NULL) {
DWORD newPort = CArchMiscWindows::readValueInt(key, "port");
CString newName = CArchMiscWindows::readValueString(key, "name");
if (newPort != 0) {
m_port = static_cast<int>(newPort);
}
if (!newName.empty()) {
m_screenName = newName;
}
CArchMiscWindows::closeKey(key);
}
// now set GUI
doInit(hwnd);
}
void
CAdvancedOptions::doInit(HWND hwnd)
{
// set values in GUI
HWND child;
char buffer[20];
sprintf(buffer, "%d", m_port);
@@ -144,9 +167,28 @@ CAdvancedOptions::save(HWND hwnd)
m_screenName = name;
m_port = port;
// save values to registry
HKEY key = CArchMiscWindows::openKey(HKEY_CURRENT_USER, getSettingsPath());
if (key != NULL) {
CArchMiscWindows::setValue(key, "port", m_port);
CArchMiscWindows::setValue(key, "name", m_screenName);
CArchMiscWindows::closeKey(key);
}
return true;
}
void
CAdvancedOptions::setDefaults(HWND hwnd)
{
// restore defaults
m_screenName = ARCH->getHostName();
m_port = kDefaultPort;
// update GUI
doInit(hwnd);
}
BOOL
CAdvancedOptions::doDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM)
{
@@ -166,6 +208,10 @@ CAdvancedOptions::doDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM)
case IDCANCEL:
EndDialog(hwnd, 0);
return TRUE;
case IDC_ADVANCED_DEFAULTS:
setDefaults(hwnd);
return TRUE;
}
break;

View File

@@ -55,7 +55,9 @@ public:
private:
void init(HWND hwnd);
void doInit(HWND hwnd);
bool save(HWND hwnd);
void setDefaults(HWND hwnd);
// message handling
BOOL doDlgProc(HWND, UINT, WPARAM, LPARAM);

View File

@@ -214,3 +214,15 @@ saveConfig(const CConfig& config, bool sysOnly)
return false;
}
const TCHAR* const*
getSettingsPath()
{
static const TCHAR* s_keyNames[] = {
TEXT("Software"),
TEXT("Synergy"),
TEXT("Synergy"),
NULL
};
return s_keyNames;
}

View File

@@ -50,4 +50,6 @@ CString getAppPath(const CString& appName);
bool loadConfig(CConfig& config);
bool saveConfig(const CConfig& config, bool sysOnly);
const TCHAR* const* getSettingsPath();
#endif

View File

@@ -19,6 +19,7 @@
#include "CLog.h"
#include "CStringUtil.h"
#include "CArch.h"
#include "CArchMiscWindows.h"
#include "Version.h"
#include "stdvector.h"
#include "resource.h"
@@ -703,12 +704,39 @@ initMainWindow(HWND hwnd)
ARG->m_oldConfig = ARG->m_config;
enableSaveControls(hwnd);
// get settings from registry
bool isServer = configLoaded;
int debugLevel = s_defaultDebug;
CString server;
HKEY key = CArchMiscWindows::openKey(HKEY_CURRENT_USER, getSettingsPath());
if (key != NULL) {
if (isServer && CArchMiscWindows::hasValue(key, "isServer")) {
isServer = (CArchMiscWindows::readValueInt(key, "isServer") != 0);
}
if (CArchMiscWindows::hasValue(key, "debug")) {
debugLevel = static_cast<int>(
CArchMiscWindows::readValueInt(key, "debug"));
if (debugLevel < 0) {
debugLevel = 0;
}
else if (debugLevel > CLog::kDEBUG2) {
debugLevel = CLog::kDEBUG2;
}
}
server = CArchMiscWindows::readValueString(key, "server");
CArchMiscWindows::closeKey(key);
}
// choose client/server radio buttons
HWND child;
child = getItem(hwnd, IDC_MAIN_CLIENT_RADIO);
setItemChecked(child, !configLoaded);
setItemChecked(child, !isServer);
child = getItem(hwnd, IDC_MAIN_SERVER_RADIO);
setItemChecked(child, configLoaded);
setItemChecked(child, isServer);
// set server name
child = getItem(hwnd, IDC_MAIN_CLIENT_SERVER_NAME_EDIT);
setWindowText(child, server);
// if config is loaded then initialize server controls
if (configLoaded) {
@@ -728,13 +756,31 @@ initMainWindow(HWND hwnd)
sizeof(s_debugName[0]); ++i) {
SendMessage(child, CB_ADDSTRING, 0, (LPARAM)s_debugName[i][0]);
}
SendMessage(child, CB_SETCURSEL, s_defaultDebug, 0);
SendMessage(child, CB_SETCURSEL, debugLevel, 0);
// update neighbor combo boxes
enableMainWindowControls(hwnd);
updateNeighbors(hwnd);
}
static
void
saveMainWindow(HWND hwnd)
{
HKEY key = CArchMiscWindows::openKey(HKEY_CURRENT_USER, getSettingsPath());
if (key != NULL) {
HWND child;
child = getItem(hwnd, IDC_MAIN_CLIENT_SERVER_NAME_EDIT);
CArchMiscWindows::setValue(key, "server", getWindowText(child));
child = getItem(hwnd, IDC_MAIN_DEBUG);
CArchMiscWindows::setValue(key, "debug",
SendMessage(child, CB_GETCURSEL, 0, 0));
CArchMiscWindows::setValue(key, "isServer",
isClientChecked(hwnd) ? 0 : 1);
CArchMiscWindows::closeKey(key);
}
}
static
BOOL CALLBACK
addDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
@@ -1128,16 +1174,16 @@ WinMain(HINSTANCE instance, HINSTANCE, LPSTR, int nCmdShow)
RegisterClassEx(&classInfo);
// create main window
HWND m_mainWindow = CreateDialog(s_instance,
HWND mainWindow = CreateDialog(s_instance,
MAKEINTRESOURCE(IDD_MAIN), 0, NULL);
// prep windows
initMainWindow(m_mainWindow);
s_globalOptions = new CGlobalOptions(m_mainWindow, &ARG->m_config);
s_advancedOptions = new CAdvancedOptions(m_mainWindow, &ARG->m_config);
initMainWindow(mainWindow);
s_globalOptions = new CGlobalOptions(mainWindow, &ARG->m_config);
s_advancedOptions = new CAdvancedOptions(mainWindow, &ARG->m_config);
// show window
ShowWindow(m_mainWindow, nCmdShow);
ShowWindow(mainWindow, nCmdShow);
// main loop
MSG msg;
@@ -1154,7 +1200,7 @@ WinMain(HINSTANCE instance, HINSTANCE, LPSTR, int nCmdShow)
break;
default:
if (!IsDialogMessage(m_mainWindow, &msg)) {
if (!IsDialogMessage(mainWindow, &msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
@@ -1162,5 +1208,8 @@ WinMain(HINSTANCE instance, HINSTANCE, LPSTR, int nCmdShow)
}
} while (!done);
// save values to registry
saveMainWindow(mainWindow);
return msg.wParam;
}

View File

@@ -62,7 +62,7 @@ BEGIN
IDC_STATIC,7,7,286,19
GROUPBOX "",IDC_STATIC,7,29,286,31
GROUPBOX "",IDC_STATIC,7,67,286,103
GROUPBOX "Advanced Options",IDC_STATIC,7,177,286,56
GROUPBOX "Options",IDC_STATIC,7,177,286,56
CONTROL "&Client",IDC_MAIN_CLIENT_RADIO,"Button",
BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,11,29,33,10
CONTROL "Server",IDC_MAIN_SERVER_RADIO,"Button",
@@ -79,26 +79,23 @@ BEGIN
PUSHBUTTON "&Remove",IDC_MAIN_SERVER_REMOVE_BUTTON,12,150,50,14
LTEXT "&Layout:",IDC_MAIN_SERVER_LAYOUT_LABEL,138,79,24,8
LTEXT "Left:",IDC_MAIN_SERVER_LEFT_LABEL,144,93,15,8
COMBOBOX IDC_MAIN_SERVER_LEFT_COMBO,175,91,118,46,
COMBOBOX IDC_MAIN_SERVER_LEFT_COMBO,175,91,111,46,
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
LTEXT "Right:",IDC_MAIN_SERVER_RIGHT_LABEL,144,109,20,8
COMBOBOX IDC_MAIN_SERVER_RIGHT_COMBO,175,107,118,46,
COMBOBOX IDC_MAIN_SERVER_RIGHT_COMBO,175,107,112,46,
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
LTEXT "Above:",IDC_MAIN_SERVER_TOP_LABEL,144,125,24,8
COMBOBOX IDC_MAIN_SERVER_TOP_COMBO,175,123,118,46,
COMBOBOX IDC_MAIN_SERVER_TOP_COMBO,175,123,112,46,
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
LTEXT "Below:",IDC_MAIN_SERVER_BOTTOM_LABEL,144,141,22,8
COMBOBOX IDC_MAIN_SERVER_BOTTOM_COMBO,175,139,118,46,
COMBOBOX IDC_MAIN_SERVER_BOTTOM_COMBO,175,139,112,46,
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
LTEXT "Screen &Name:",IDC_STATIC,12,192,46,8
EDITTEXT IDC_MAIN_ADVANCED_NAME_EDIT,64,190,106,12,ES_AUTOHSCROLL
LTEXT "&Port:",IDC_STATIC,194,192,16,8
EDITTEXT IDC_MAIN_ADVANCED_PORT_EDIT,216,190,40,12,ES_AUTOHSCROLL |
ES_NUMBER
LTEXT "Automatic Startup:",IDC_STATIC,12,212,59,8
PUSHBUTTON "Con&figure...",IDC_MAIN_AUTOSTART,78,210,50,14
LTEXT "Test &Debug Level:",IDC_STATIC,151,212,60,8
COMBOBOX IDC_MAIN_DEBUG,216,210,61,60,CBS_DROPDOWNLIST |
PUSHBUTTON "&Options...",IDC_MAIN_OPTIONS,12,191,50,14
PUSHBUTTON "Adva&nced...",IDC_MAIN_ADVANCED,68,191,50,14
LTEXT "Automatic Startup:",IDC_STATIC,138,193,59,8
PUSHBUTTON "Con&figure...",IDC_MAIN_AUTOSTART,202,191,50,14
LTEXT "Test &Debug Level:",IDC_STATIC,12,216,60,8
COMBOBOX IDC_MAIN_DEBUG,78,213,61,60,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Sa&ve",IDC_MAIN_SAVE,75,241,50,14
DEFPUSHBUTTON "&Test",IDC_MAIN_TEST,131,241,50,14
@@ -157,6 +154,50 @@ BEGIN
IDC_STATIC,7,43,181,17
END
IDD_GLOBAL_OPTIONS DIALOG DISCARDABLE 0, 0, 207, 148
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Options"
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "It's easy to unintentionally switch screens when the pointer is near a screen's edge. Synergy can prevent switching until certain conditions are met to reduce unintentional switching.",
IDC_STATIC,7,7,191,26
LTEXT "Synergy can wait to switch until the cursor has been at a screen's edge for some amount of time.",
IDC_STATIC,7,37,193,16
CONTROL "Switch after waiting",IDC_GLOBAL_DELAY_CHECK,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,59,77,10
EDITTEXT IDC_GLOBAL_DELAY_TIME,112,58,45,12,ES_AUTOHSCROLL |
ES_NUMBER
LTEXT "ms",IDC_STATIC,159,60,10,8
LTEXT "Synergy can switch only when the cursor hits a screen edge twice within some amount of time.",
IDC_STATIC,7,77,193,16
CONTROL "Switch on double tap within",IDC_GLOBAL_TWO_TAP_CHECK,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,99,103,10
EDITTEXT IDC_GLOBAL_TWO_TAP_TIME,112,98,45,12,ES_AUTOHSCROLL |
ES_NUMBER
LTEXT "ms",IDC_STATIC,159,100,10,8
DEFPUSHBUTTON "OK",IDOK,94,127,50,14
PUSHBUTTON "Cancel",IDCANCEL,150,127,50,14
END
IDD_ADVANCED_OPTIONS DIALOG DISCARDABLE 0, 0, 230, 133
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Advanced Options"
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "Synergy normally uses this computer's name as its screen name. Enter another name here if you want to use a different screen name.",
IDC_STATIC,7,7,216,19
LTEXT "Screen &Name:",IDC_STATIC,7,34,46,8
EDITTEXT IDC_ADVANCED_NAME_EDIT,63,32,106,12,ES_AUTOHSCROLL
LTEXT "Synergy normally uses a particular network port number. Enter an alternative port here. (The server and all clients must use the same port number.)",
IDC_STATIC,7,56,216,26
LTEXT "&Port:",IDC_STATIC,7,90,16,8
EDITTEXT IDC_ADVANCED_PORT_EDIT,63,88,40,12,ES_AUTOHSCROLL |
ES_NUMBER
PUSHBUTTON "&Defaults",IDC_ADVANCED_DEFAULTS,7,112,50,14
DEFPUSHBUTTON "OK",IDOK,118,112,50,14
PUSHBUTTON "Cancel",IDCANCEL,173,112,50,14
END
/////////////////////////////////////////////////////////////////////////////
//
@@ -197,6 +238,22 @@ BEGIN
TOPMARGIN, 7
BOTTOMMARGIN, 182
END
IDD_GLOBAL_OPTIONS, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 200
TOPMARGIN, 7
BOTTOMMARGIN, 141
END
IDD_ADVANCED_OPTIONS, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 223
TOPMARGIN, 7
BOTTOMMARGIN, 126
END
END
#endif // APSTUDIO_INVOKED

View File

@@ -95,15 +95,16 @@
#define IDC_ADD_MOD_ALT 1045
#define IDC_ADD_MOD_META 1046
#define IDC_ADD_MOD_SUPER 1047
#define IDC_ADVANCED_DEFAULTS 1049
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
#define _APS_NEXT_RESOURCE_VALUE 108
#define _APS_NEXT_RESOURCE_VALUE 110
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1044
#define _APS_NEXT_CONTROL_VALUE 1050
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif