blob: 72831e55ae76684311cb494a581562fa781e6b43 [file] [log] [blame]
Constantin Kaplinsky729598c2006-05-25 05:12:25 +00001// ControlPanel.cxx: implementation of the ControlPanel class.
2//
3//////////////////////////////////////////////////////////////////////
4
5#include "ControlPanel.h"
6
7//////////////////////////////////////////////////////////////////////
8// Construction/Destruction
9//////////////////////////////////////////////////////////////////////
10
11using namespace winvnc;
12
13bool ControlPanel::showDialog()
14{
15 return Dialog::showDialog(MAKEINTRESOURCE(IDD_CONTROL_PANEL), NULL);
16}
17
18void ControlPanel::initDialog()
19{
20 TCHAR *ColumnsStrings[] = {
Adam Tkac8517ea52009-10-08 11:49:12 +000021 (TCHAR *) "IP address",
Adam Tkac8517ea52009-10-08 11:49:12 +000022 (TCHAR *) "Status"
Constantin Kaplinsky729598c2006-05-25 05:12:25 +000023 };
Pierre Ossman025326d2018-10-08 16:03:01 +020024 InitLVColumns(IDC_LIST_CONNECTIONS, handle, 120, 2, ColumnsStrings,
Constantin Kaplinsky729598c2006-05-25 05:12:25 +000025 LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM,
26 LVS_EX_FULLROWSELECT, LVCFMT_LEFT);
27 SendCommand(4, -1);
28}
29
30bool ControlPanel::onCommand(int cmd)
31{
32 switch (cmd) {
33 case IDC_PROPERTIES:
34 SendMessage(m_hSTIcon, WM_COMMAND, ID_OPTIONS, 0);
35 return false;
36 case IDC_ADD_CLIENT:
37 SendMessage(m_hSTIcon, WM_COMMAND, ID_CONNECT, 0);
38 return false;
39 case IDC_KILL_ALL:
40 {
41 SendCommand(2, -1);
42 return false;
43 }
44 case IDC_KILL_SEL_CLIENT:
45 {
46 SendCommand(3, 3);
47 return false;
48 }
49 case IDC_VIEW_ONLY:
50 {
51 SendCommand(3, 1);
52 return false;
53 }
54 case IDC_FULL_CONTROL:
55 {
56 SendCommand(3, 0);
57 return false;
58 }
59 case IDC_STOP_UPDATE:
60 {
61 stop_updating = true;
62 EndDialog(handle, 0);
63 return false;
64 }
65 case IDC_DISABLE_CLIENTS:
66 {
67 ListConnStatus.setDisable(isItemChecked(IDC_DISABLE_CLIENTS));
68 SendCommand(3, -1);
69 return false;
70 }
71 }
72 return false;
73
74}
75
Pierre Ossman025326d2018-10-08 16:03:01 +020076void ControlPanel::UpdateListView(ListConnInfo* LCInfo)
Constantin Kaplinsky729598c2006-05-25 05:12:25 +000077{
78 getSelConnInfo();
79 DeleteAllLVItem(IDC_LIST_CONNECTIONS, handle);
80 setItemChecked(IDC_DISABLE_CLIENTS, LCInfo->getDisable());
81
82 if(LCInfo->Empty())
83 return;
84
85 ListConn.Copy(LCInfo);
86
Pierre Ossman025326d2018-10-08 16:03:01 +020087 char* ItemString[2];
Constantin Kaplinsky729598c2006-05-25 05:12:25 +000088 int i = 0;
89
90 for (ListConn.iBegin(); !ListConn.iEnd(); ListConn.iNext()) {
91 ListConn.iGetCharInfo(ItemString);
Pierre Ossman025326d2018-10-08 16:03:01 +020092 InsertLVItem(IDC_LIST_CONNECTIONS, handle, i, (TCHAR **) ItemString, 2);
Constantin Kaplinsky729598c2006-05-25 05:12:25 +000093 for (ListSelConn.iBegin(); !ListSelConn.iEnd(); ListSelConn.iNext()) {
94 if (ListSelConn.iGetConn() == ListConn.iGetConn())
95 SelectLVItem(IDC_LIST_CONNECTIONS, handle, i);
96 }
97 i++;
98 }
99}
100
101BOOL ControlPanel::dialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
102{
103 switch (msg) {
104 case WM_INITDIALOG:
105 handle = hwnd;
106 initDialog();
107 return TRUE;
108 case WM_DESTROY:
109 if (stop_updating) {
110 stop_updating = false;
111 SendCommand(3, 2);
112 }
113 return TRUE;
114 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
127void ControlPanel::getSelConnInfo()
128{
129 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 }
137}
138
139void ControlPanel::SendCommand(DWORD command, int data)
140{
141 COPYDATASTRUCT copyData;
142 copyData.dwData = command;
Pierre Ossman8526e482018-11-09 17:14:57 +0100143 copyData.cbData = 0;
144 copyData.lpData = 0;
Constantin Kaplinsky729598c2006-05-25 05:12:25 +0000145 getSelConnInfo();
146 if (data != -1) {
147 ListConnStatus.Copy(&ListSelConn);
148 ListConnStatus.setAllStatus(data);
149 ListConnStatus.setDisable(isItemChecked(IDC_DISABLE_CLIENTS));
Constantin Kaplinsky729598c2006-05-25 05:12:25 +0000150 } else {
151 ListConnStatus.Clear();
152 }
Constantin Kaplinsky729598c2006-05-25 05:12:25 +0000153 SendMessage(m_hSTIcon, WM_COPYDATA, 0, (LPARAM)&copyData);
154}
155
156ControlPanel::~ControlPanel()
157{
158
159}