mirror of
https://github.com/kasmtech/KasmVNC.git
synced 2024-11-27 10:33:34 +01:00
161 lines
3.6 KiB
C++
161 lines
3.6 KiB
C++
// ControlPanel.cxx: implementation of the ControlPanel class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "ControlPanel.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
using namespace winvnc;
|
|
|
|
bool ControlPanel::showDialog()
|
|
{
|
|
return Dialog::showDialog(MAKEINTRESOURCE(IDD_CONTROL_PANEL), NULL);
|
|
}
|
|
|
|
void ControlPanel::initDialog()
|
|
{
|
|
TCHAR *ColumnsStrings[] = {
|
|
(TCHAR *) "IP address",
|
|
(TCHAR *) "Time connected",
|
|
(TCHAR *) "Status"
|
|
};
|
|
InitLVColumns(IDC_LIST_CONNECTIONS, handle, 120, 3, ColumnsStrings,
|
|
LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM,
|
|
LVS_EX_FULLROWSELECT, LVCFMT_LEFT);
|
|
SendCommand(4, -1);
|
|
}
|
|
|
|
bool ControlPanel::onCommand(int cmd)
|
|
{
|
|
switch (cmd) {
|
|
case IDC_PROPERTIES:
|
|
SendMessage(m_hSTIcon, WM_COMMAND, ID_OPTIONS, 0);
|
|
return false;
|
|
case IDC_ADD_CLIENT:
|
|
SendMessage(m_hSTIcon, WM_COMMAND, ID_CONNECT, 0);
|
|
return false;
|
|
case IDC_KILL_ALL:
|
|
{
|
|
SendCommand(2, -1);
|
|
return false;
|
|
}
|
|
case IDC_KILL_SEL_CLIENT:
|
|
{
|
|
SendCommand(3, 3);
|
|
return false;
|
|
}
|
|
case IDC_VIEW_ONLY:
|
|
{
|
|
SendCommand(3, 1);
|
|
return false;
|
|
}
|
|
case IDC_FULL_CONTROL:
|
|
{
|
|
SendCommand(3, 0);
|
|
return false;
|
|
}
|
|
case IDC_STOP_UPDATE:
|
|
{
|
|
stop_updating = true;
|
|
EndDialog(handle, 0);
|
|
return false;
|
|
}
|
|
case IDC_DISABLE_CLIENTS:
|
|
{
|
|
ListConnStatus.setDisable(isItemChecked(IDC_DISABLE_CLIENTS));
|
|
SendCommand(3, -1);
|
|
return false;
|
|
}
|
|
}
|
|
return false;
|
|
|
|
}
|
|
|
|
void ControlPanel::UpdateListView(rfb::ListConnInfo* LCInfo)
|
|
{
|
|
getSelConnInfo();
|
|
DeleteAllLVItem(IDC_LIST_CONNECTIONS, handle);
|
|
setItemChecked(IDC_DISABLE_CLIENTS, LCInfo->getDisable());
|
|
|
|
if(LCInfo->Empty())
|
|
return;
|
|
|
|
ListConn.Copy(LCInfo);
|
|
|
|
char* ItemString[3];
|
|
int i = 0;
|
|
|
|
for (ListConn.iBegin(); !ListConn.iEnd(); ListConn.iNext()) {
|
|
ListConn.iGetCharInfo(ItemString);
|
|
InsertLVItem(IDC_LIST_CONNECTIONS, handle, i, (TCHAR **) ItemString, 3);
|
|
for (ListSelConn.iBegin(); !ListSelConn.iEnd(); ListSelConn.iNext()) {
|
|
if (ListSelConn.iGetConn() == ListConn.iGetConn())
|
|
SelectLVItem(IDC_LIST_CONNECTIONS, handle, i);
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
|
|
BOOL ControlPanel::dialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
switch (msg) {
|
|
case WM_INITDIALOG:
|
|
handle = hwnd;
|
|
initDialog();
|
|
return TRUE;
|
|
case WM_DESTROY:
|
|
if (stop_updating) {
|
|
stop_updating = false;
|
|
SendCommand(3, 2);
|
|
}
|
|
return TRUE;
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wParam)) {
|
|
case IDCANCEL:
|
|
handle = NULL;
|
|
EndDialog(hwnd, 0);
|
|
return TRUE;
|
|
default:
|
|
return onCommand(LOWORD(wParam));
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void ControlPanel::getSelConnInfo()
|
|
{
|
|
int i = 0;
|
|
ListSelConn.Clear();
|
|
if(ListConn.Empty()) return;
|
|
for (ListConn.iBegin(); !ListConn.iEnd(); ListConn.iNext()) {
|
|
if (IsSelectedLVItem(IDC_LIST_CONNECTIONS, handle, i))
|
|
ListSelConn.iAdd(&ListConn);
|
|
i++;
|
|
}
|
|
}
|
|
|
|
void ControlPanel::SendCommand(DWORD command, int data)
|
|
{
|
|
COPYDATASTRUCT copyData;
|
|
copyData.dwData = command;
|
|
getSelConnInfo();
|
|
if (data != -1) {
|
|
ListConnStatus.Copy(&ListSelConn);
|
|
ListConnStatus.setAllStatus(data);
|
|
ListConnStatus.setDisable(isItemChecked(IDC_DISABLE_CLIENTS));
|
|
} else {
|
|
ListConnStatus.Clear();
|
|
}
|
|
copyData.cbData = 0;
|
|
copyData.lpData = &ListConnStatus;
|
|
SendMessage(m_hSTIcon, WM_COPYDATA, 0, (LPARAM)©Data);
|
|
}
|
|
|
|
ControlPanel::~ControlPanel()
|
|
{
|
|
|
|
}
|