184 lines
3.8 KiB
C++
184 lines
3.8 KiB
C++
/*
|
|
* synergy -- mouse and keyboard sharing utility
|
|
* Copyright (C) 2002 Chris Schoeneman
|
|
*
|
|
* This package is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* found in the file COPYING that should have accompanied this file.
|
|
*
|
|
* This package is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#include "CConfig.h"
|
|
#include "ProtocolTypes.h"
|
|
#include "CStringUtil.h"
|
|
#include "CArch.h"
|
|
#include "CAdvancedOptions.h"
|
|
#include "LaunchUtil.h"
|
|
#include "resource.h"
|
|
|
|
//
|
|
// CAdvancedOptions
|
|
//
|
|
|
|
CAdvancedOptions* CAdvancedOptions::s_singleton = NULL;
|
|
|
|
CAdvancedOptions::CAdvancedOptions(HWND parent, CConfig* config) :
|
|
m_parent(parent),
|
|
m_config(config),
|
|
m_isClient(false),
|
|
m_screenName(ARCH->getHostName()),
|
|
m_port(kDefaultPort)
|
|
{
|
|
assert(s_singleton == NULL);
|
|
s_singleton = this;
|
|
}
|
|
|
|
CAdvancedOptions::~CAdvancedOptions()
|
|
{
|
|
s_singleton = NULL;
|
|
}
|
|
|
|
void
|
|
CAdvancedOptions::doModal(bool isClient)
|
|
{
|
|
// save state
|
|
m_isClient = isClient;
|
|
|
|
// do dialog
|
|
DialogBoxParam(s_instance, MAKEINTRESOURCE(IDD_ADVANCED_OPTIONS),
|
|
m_parent, dlgProc, (LPARAM)this);
|
|
}
|
|
|
|
CString
|
|
CAdvancedOptions::getScreenName() const
|
|
{
|
|
return m_screenName;
|
|
}
|
|
|
|
int
|
|
CAdvancedOptions::getPort() const
|
|
{
|
|
return m_port;
|
|
}
|
|
|
|
CString
|
|
CAdvancedOptions::getCommandLine(bool isClient, const CString& serverName) const
|
|
{
|
|
CString cmdLine;
|
|
|
|
// screen name
|
|
if (!m_screenName.empty()) {
|
|
cmdLine += " --name ";
|
|
cmdLine += m_screenName;
|
|
}
|
|
|
|
// port
|
|
char portString[20];
|
|
sprintf(portString, "%d", m_port);
|
|
if (isClient) {
|
|
cmdLine += " ";
|
|
cmdLine += serverName;
|
|
cmdLine += ":";
|
|
cmdLine += portString;
|
|
}
|
|
else {
|
|
cmdLine += " --address :";
|
|
cmdLine += portString;
|
|
}
|
|
|
|
return cmdLine;
|
|
}
|
|
|
|
void
|
|
CAdvancedOptions::init(HWND hwnd)
|
|
{
|
|
HWND child;
|
|
char buffer[20];
|
|
sprintf(buffer, "%d", m_port);
|
|
child = getItem(hwnd, IDC_ADVANCED_PORT_EDIT);
|
|
SendMessage(child, WM_SETTEXT, 0, (LPARAM)buffer);
|
|
|
|
child = getItem(hwnd, IDC_ADVANCED_NAME_EDIT);
|
|
SendMessage(child, WM_SETTEXT, 0, (LPARAM)m_screenName.c_str());
|
|
}
|
|
|
|
bool
|
|
CAdvancedOptions::save(HWND hwnd)
|
|
{
|
|
HWND child = getItem(hwnd, IDC_ADVANCED_NAME_EDIT);
|
|
CString name = getWindowText(child);
|
|
if (!m_config->isValidScreenName(name)) {
|
|
showError(hwnd, CStringUtil::format(
|
|
getString(IDS_INVALID_SCREEN_NAME).c_str(),
|
|
name.c_str()));
|
|
SetFocus(child);
|
|
return false;
|
|
}
|
|
if (!m_isClient && !m_config->isScreen(name)) {
|
|
showError(hwnd, CStringUtil::format(
|
|
getString(IDS_UNKNOWN_SCREEN_NAME).c_str(),
|
|
name.c_str()));
|
|
SetFocus(child);
|
|
return false;
|
|
}
|
|
|
|
// get and verify port
|
|
child = getItem(hwnd, IDC_ADVANCED_PORT_EDIT);
|
|
CString portString = getWindowText(child);
|
|
int port = atoi(portString.c_str());
|
|
if (port < 1 || port > 65535) {
|
|
CString defaultPortString = CStringUtil::print("%d", kDefaultPort);
|
|
showError(hwnd, CStringUtil::format(
|
|
getString(IDS_INVALID_PORT).c_str(),
|
|
portString.c_str(),
|
|
defaultPortString.c_str()));
|
|
SetFocus(child);
|
|
return false;
|
|
}
|
|
|
|
// save state
|
|
m_screenName = name;
|
|
m_port = port;
|
|
|
|
return true;
|
|
}
|
|
|
|
BOOL
|
|
CAdvancedOptions::doDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM)
|
|
{
|
|
switch (message) {
|
|
case WM_INITDIALOG:
|
|
init(hwnd);
|
|
return TRUE;
|
|
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wParam)) {
|
|
case IDOK:
|
|
if (save(hwnd)) {
|
|
EndDialog(hwnd, 0);
|
|
}
|
|
return TRUE;
|
|
|
|
case IDCANCEL:
|
|
EndDialog(hwnd, 0);
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CALLBACK
|
|
CAdvancedOptions::dlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
return s_singleton->doDlgProc(hwnd, message, wParam, lParam);
|
|
}
|