blob: 1f693063ae8faf4504f636701f703526ce4ebda6 [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
11//using namespace rfb_win32;
12using namespace winvnc;
13
14bool ControlPanel::showDialog()
15{
Oleg Sheikin14757372005-07-01 13:31:14 +000016 return Dialog::showDialog(MAKEINTRESOURCE(IDD_CONTROL_PANEL), NULL);
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000017}
18
19void ControlPanel::initDialog()
20{
Oleg Sheikin14757372005-07-01 13:31:14 +000021 TCHAR *ColumnsStrings[] = {
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000022 "IP address",
23 "Time connected",
24 "Status"
25 };
Oleg Sheikin14757372005-07-01 13:31:14 +000026 InitLVColumns(IDC_LIST_CONNECTIONS, handle, 120, 3, ColumnsStrings,
27 LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM,
28 LVS_EX_FULLROWSELECT, LVCFMT_LEFT);
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000029}
30
31bool ControlPanel::onCommand(int cmd)
32{
Oleg Sheikin14757372005-07-01 13:31:14 +000033 switch (cmd) {
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000034 case IDC_PROPERTIES:
35 SendMessage(m_hSTIcon, WM_COMMAND, ID_OPTIONS, 0);
36 return false;
37 case IDC_ADD_CLIENT:
38 SendMessage(m_hSTIcon, WM_COMMAND, ID_CONNECT, 0);
39 return false;
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000040 case IDC_KILL_ALL:
41 {
Oleg Sheikin4b0304f2005-12-09 10:59:12 +000042 SendCommand(2, -1);
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000043 return false;
44 }
45 case IDC_DISABLE_CLIENTS:
46 {
47
48 return false;
49 }
Oleg Sheikin4b0304f2005-12-09 10:59:12 +000050 case IDC_KILL_SEL_CLIENT:
51 {
52 SendCommand(3, 3);
53 return false;
54 }
55 case IDC_VIEW_ONLY:
56 {
57 SendCommand(3, 1);
58 return false;
59 }
60 case IDC_FULL_CONTROL:
61 {
62 SendCommand(3, 0);
63 return false;
64 }
65 case IDC_STOP_UPDATE:
66 {
67 stop_updating = true;
68 EndDialog(handle, 0);
69 return false;
70 }
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000071 }
72 return false;
Oleg Sheikin14757372005-07-01 13:31:14 +000073
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000074}
75
Oleg Sheikin641f7e52005-11-22 18:04:10 +000076void ControlPanel::UpdateListView(rfb::ListConnInfo* LCInfo)
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000077{
Oleg Sheikinff43bfd2005-12-07 08:02:52 +000078 getSelConnInfo();
Oleg Sheikin641f7e52005-11-22 18:04:10 +000079 DeleteAllLVItem(IDC_LIST_CONNECTIONS, handle);
Oleg Sheikinff43bfd2005-12-07 08:02:52 +000080
81 if(LCInfo->Empty())
82 return;
83
84 ListConn.Copy(LCInfo);
Oleg Sheikin641f7e52005-11-22 18:04:10 +000085
86 char* ItemString[3];
87 int i = 0;
88
Oleg Sheikinff43bfd2005-12-07 08:02:52 +000089 for (ListConn.iBegin(); !ListConn.iEnd(); ListConn.iNext()) {
90 ListConn.iGetCharInfo(ItemString);
Oleg Sheikin641f7e52005-11-22 18:04:10 +000091 InsertLVItem(IDC_LIST_CONNECTIONS, handle, i, ItemString, 3);
Oleg Sheikinff43bfd2005-12-07 08:02:52 +000092 for (ListSelConn.iBegin(); !ListSelConn.iEnd(); ListSelConn.iNext()) {
93 if (ListSelConn.iGetConn() == ListConn.iGetConn())
94 SelectLVItem(IDC_LIST_CONNECTIONS, handle, i);
95 }
Oleg Sheikin641f7e52005-11-22 18:04:10 +000096 i++;
97 }
Oleg Sheikinf5049ad2005-07-01 12:41:15 +000098}
99
100BOOL ControlPanel::dialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
101{
Oleg Sheikin14757372005-07-01 13:31:14 +0000102 switch (msg) {
Oleg Sheikinf5049ad2005-07-01 12:41:15 +0000103 case WM_INITDIALOG:
104 handle = hwnd;
105 initDialog();
106 return TRUE;
Oleg Sheikin4b0304f2005-12-09 10:59:12 +0000107 case WM_DESTROY:
108 if (stop_updating) {
109 stop_updating = false;
110 SendCommand(3, 2);
111 }
112 initDialog();
113 return TRUE;
Oleg Sheikinf5049ad2005-07-01 12:41:15 +0000114 case WM_COMMAND:
115 switch (LOWORD(wParam)) {
116 case IDCANCEL:
117 handle = NULL;
118 EndDialog(hwnd, 0);
119 return TRUE;
120 default:
121 return onCommand(LOWORD(wParam));
122 }
123 }
124 return FALSE;
125}
126
Oleg Sheikinff43bfd2005-12-07 08:02:52 +0000127void ControlPanel::getSelConnInfo()
Oleg Sheikinf5049ad2005-07-01 12:41:15 +0000128{
Oleg Sheikinff43bfd2005-12-07 08:02:52 +0000129 int i = 0;
130 ListSelConn.Clear();
131 if(ListConn.Empty()) return;
132 for (ListConn.iBegin(); !ListConn.iEnd(); ListConn.iNext()) {
133 if (IsSelectedLVItem(IDC_LIST_CONNECTIONS, handle, i))
134 ListSelConn.iAdd(&ListConn);
135 i++;
136 }
Oleg Sheikinf5049ad2005-07-01 12:41:15 +0000137}
138
Oleg Sheikin4b0304f2005-12-09 10:59:12 +0000139void ControlPanel::SendCommand(DWORD command, int data)
140{
141 COPYDATASTRUCT copyData;
142 copyData.dwData = command;
143 copyData.lpData = 0;
144 if (data != -1) {
145 getSelConnInfo();
146 ListConnStatus.Copy(&ListSelConn);
147 for (ListConnStatus.iBegin(); !ListConnStatus.iEnd(); ListConnStatus.iNext())
148 ListConnStatus.iSetStatus(data);
149 copyData.cbData = (DWORD)&ListConnStatus;
150 } else {
151 copyData.cbData = 0;
152 }
153 SendMessage(m_hSTIcon, WM_COPYDATA, 0, (LPARAM)&copyData);
154}
155
Oleg Sheikinf5049ad2005-07-01 12:41:15 +0000156ControlPanel::~ControlPanel()
157{
Oleg Sheikin14757372005-07-01 13:31:14 +0000158
Oleg Sheikinf5049ad2005-07-01 12:41:15 +0000159}