blob: e668d91a755212238641c457165f9a1ecfa205ff [file] [log] [blame]
Oleg Sheikinf5049ad2005-07-01 12:41:15 +00001// ControlPanel.cxx: implementation of the ControlPanel class.
2//
3//////////////////////////////////////////////////////////////////////
4
5#include "ControlPanel.h"
6
7//////////////////////////////////////////////////////////////////////
8// Construction/Destruction
9//////////////////////////////////////////////////////////////////////
10
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000011using namespace winvnc;
12
13bool ControlPanel::showDialog()
14{
Oleg Sheikin14757372005-07-01 13:31:14 +000015 return Dialog::showDialog(MAKEINTRESOURCE(IDD_CONTROL_PANEL), NULL);
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000016}
17
18void ControlPanel::initDialog()
19{
Oleg Sheikin14757372005-07-01 13:31:14 +000020 TCHAR *ColumnsStrings[] = {
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000021 "IP address",
22 "Time connected",
23 "Status"
24 };
Oleg Sheikin14757372005-07-01 13:31:14 +000025 InitLVColumns(IDC_LIST_CONNECTIONS, handle, 120, 3, ColumnsStrings,
26 LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM,
27 LVS_EX_FULLROWSELECT, LVCFMT_LEFT);
Oleg Sheikin5c642e92005-12-22 20:57:58 +000028 SendCommand(3, -1);
29 setItemChecked(IDC_DISABLE_CLIENTS, ListConnStatus.getDisable());
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000030}
31
32bool ControlPanel::onCommand(int cmd)
33{
Oleg Sheikin14757372005-07-01 13:31:14 +000034 switch (cmd) {
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000035 case IDC_PROPERTIES:
36 SendMessage(m_hSTIcon, WM_COMMAND, ID_OPTIONS, 0);
37 return false;
38 case IDC_ADD_CLIENT:
39 SendMessage(m_hSTIcon, WM_COMMAND, ID_CONNECT, 0);
40 return false;
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000041 case IDC_KILL_ALL:
42 {
Oleg Sheikin4b0304f2005-12-09 10:59:12 +000043 SendCommand(2, -1);
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000044 return false;
45 }
Oleg Sheikin4b0304f2005-12-09 10:59:12 +000046 case IDC_KILL_SEL_CLIENT:
47 {
48 SendCommand(3, 3);
49 return false;
50 }
51 case IDC_VIEW_ONLY:
52 {
53 SendCommand(3, 1);
54 return false;
55 }
56 case IDC_FULL_CONTROL:
57 {
58 SendCommand(3, 0);
59 return false;
60 }
61 case IDC_STOP_UPDATE:
62 {
63 stop_updating = true;
64 EndDialog(handle, 0);
65 return false;
66 }
Oleg Sheikin5c642e92005-12-22 20:57:58 +000067 case IDC_DISABLE_CLIENTS:
68 {
69 ListConnStatus.setDisable(isItemChecked(IDC_DISABLE_CLIENTS));
70 SendCommand(3, -1);
71 return false;
72 }
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000073 }
74 return false;
Oleg Sheikin14757372005-07-01 13:31:14 +000075
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000076}
77
Oleg Sheikin641f7e52005-11-22 18:04:10 +000078void ControlPanel::UpdateListView(rfb::ListConnInfo* LCInfo)
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000079{
Oleg Sheikinff43bfd2005-12-07 08:02:52 +000080 getSelConnInfo();
Oleg Sheikin641f7e52005-11-22 18:04:10 +000081 DeleteAllLVItem(IDC_LIST_CONNECTIONS, handle);
Oleg Sheikinff43bfd2005-12-07 08:02:52 +000082
83 if(LCInfo->Empty())
84 return;
85
86 ListConn.Copy(LCInfo);
Oleg Sheikin641f7e52005-11-22 18:04:10 +000087
88 char* ItemString[3];
89 int i = 0;
90
Oleg Sheikinff43bfd2005-12-07 08:02:52 +000091 for (ListConn.iBegin(); !ListConn.iEnd(); ListConn.iNext()) {
92 ListConn.iGetCharInfo(ItemString);
Oleg Sheikin641f7e52005-11-22 18:04:10 +000093 InsertLVItem(IDC_LIST_CONNECTIONS, handle, i, ItemString, 3);
Oleg Sheikinff43bfd2005-12-07 08:02:52 +000094 for (ListSelConn.iBegin(); !ListSelConn.iEnd(); ListSelConn.iNext()) {
95 if (ListSelConn.iGetConn() == ListConn.iGetConn())
96 SelectLVItem(IDC_LIST_CONNECTIONS, handle, i);
97 }
Oleg Sheikin641f7e52005-11-22 18:04:10 +000098 i++;
99 }
Oleg Sheikinf5049ad2005-07-01 12:41:15 +0000100}
101
102BOOL ControlPanel::dialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
103{
Oleg Sheikin14757372005-07-01 13:31:14 +0000104 switch (msg) {
Oleg Sheikinf5049ad2005-07-01 12:41:15 +0000105 case WM_INITDIALOG:
106 handle = hwnd;
107 initDialog();
108 return TRUE;
Oleg Sheikin4b0304f2005-12-09 10:59:12 +0000109 case WM_DESTROY:
110 if (stop_updating) {
111 stop_updating = false;
112 SendCommand(3, 2);
113 }
Oleg Sheikin4b0304f2005-12-09 10:59:12 +0000114 return TRUE;
Oleg Sheikinf5049ad2005-07-01 12:41:15 +0000115 case WM_COMMAND:
116 switch (LOWORD(wParam)) {
117 case IDCANCEL:
118 handle = NULL;
119 EndDialog(hwnd, 0);
120 return TRUE;
121 default:
122 return onCommand(LOWORD(wParam));
123 }
124 }
125 return FALSE;
126}
127
Oleg Sheikinff43bfd2005-12-07 08:02:52 +0000128void ControlPanel::getSelConnInfo()
Oleg Sheikinf5049ad2005-07-01 12:41:15 +0000129{
Oleg Sheikinff43bfd2005-12-07 08:02:52 +0000130 int i = 0;
131 ListSelConn.Clear();
132 if(ListConn.Empty()) return;
133 for (ListConn.iBegin(); !ListConn.iEnd(); ListConn.iNext()) {
134 if (IsSelectedLVItem(IDC_LIST_CONNECTIONS, handle, i))
135 ListSelConn.iAdd(&ListConn);
136 i++;
137 }
Oleg Sheikinf5049ad2005-07-01 12:41:15 +0000138}
139
Oleg Sheikin4b0304f2005-12-09 10:59:12 +0000140void ControlPanel::SendCommand(DWORD command, int data)
141{
142 COPYDATASTRUCT copyData;
143 copyData.dwData = command;
144 copyData.lpData = 0;
Oleg Sheikin5c642e92005-12-22 20:57:58 +0000145 getSelConnInfo();
Oleg Sheikin4b0304f2005-12-09 10:59:12 +0000146 if (data != -1) {
Oleg Sheikin4b0304f2005-12-09 10:59:12 +0000147 ListConnStatus.Copy(&ListSelConn);
Oleg Sheikin5c642e92005-12-22 20:57:58 +0000148 ListConnStatus.setAllStatus(data);
Oleg Sheikin4b0304f2005-12-09 10:59:12 +0000149 copyData.cbData = (DWORD)&ListConnStatus;
150 } else {
Oleg Sheikin5c642e92005-12-22 20:57:58 +0000151 ListConnStatus.Clear();
Oleg Sheikin4b0304f2005-12-09 10:59:12 +0000152 }
Oleg Sheikin5c642e92005-12-22 20:57:58 +0000153 copyData.cbData = (DWORD)&ListConnStatus;
Oleg Sheikin4b0304f2005-12-09 10:59:12 +0000154 SendMessage(m_hSTIcon, WM_COPYDATA, 0, (LPARAM)&copyData);
155}
156
Oleg Sheikinf5049ad2005-07-01 12:41:15 +0000157ControlPanel::~ControlPanel()
158{
Oleg Sheikin14757372005-07-01 13:31:14 +0000159
Oleg Sheikinf5049ad2005-07-01 12:41:15 +0000160}