blob: ba6cab2c228c4302026d5a29a53069bb8596d558 [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",
22 (TCHAR *) "Time connected",
23 (TCHAR *) "Status"
Constantin Kaplinsky729598c2006-05-25 05:12:25 +000024 };
25 InitLVColumns(IDC_LIST_CONNECTIONS, handle, 120, 3, ColumnsStrings,
26 LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM,
27 LVS_EX_FULLROWSELECT, LVCFMT_LEFT);
28 SendCommand(4, -1);
29}
30
31bool ControlPanel::onCommand(int cmd)
32{
33 switch (cmd) {
34 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;
40 case IDC_KILL_ALL:
41 {
42 SendCommand(2, -1);
43 return false;
44 }
45 case IDC_KILL_SEL_CLIENT:
46 {
47 SendCommand(3, 3);
48 return false;
49 }
50 case IDC_VIEW_ONLY:
51 {
52 SendCommand(3, 1);
53 return false;
54 }
55 case IDC_FULL_CONTROL:
56 {
57 SendCommand(3, 0);
58 return false;
59 }
60 case IDC_STOP_UPDATE:
61 {
62 stop_updating = true;
63 EndDialog(handle, 0);
64 return false;
65 }
66 case IDC_DISABLE_CLIENTS:
67 {
68 ListConnStatus.setDisable(isItemChecked(IDC_DISABLE_CLIENTS));
69 SendCommand(3, -1);
70 return false;
71 }
72 }
73 return false;
74
75}
76
77void ControlPanel::UpdateListView(rfb::ListConnInfo* LCInfo)
78{
79 getSelConnInfo();
80 DeleteAllLVItem(IDC_LIST_CONNECTIONS, handle);
81 setItemChecked(IDC_DISABLE_CLIENTS, LCInfo->getDisable());
82
83 if(LCInfo->Empty())
84 return;
85
86 ListConn.Copy(LCInfo);
87
88 char* ItemString[3];
89 int i = 0;
90
91 for (ListConn.iBegin(); !ListConn.iEnd(); ListConn.iNext()) {
92 ListConn.iGetCharInfo(ItemString);
Adam Tkac8517ea52009-10-08 11:49:12 +000093 InsertLVItem(IDC_LIST_CONNECTIONS, handle, i, (TCHAR **) ItemString, 3);
Constantin Kaplinsky729598c2006-05-25 05:12:25 +000094 for (ListSelConn.iBegin(); !ListSelConn.iEnd(); ListSelConn.iNext()) {
95 if (ListSelConn.iGetConn() == ListConn.iGetConn())
96 SelectLVItem(IDC_LIST_CONNECTIONS, handle, i);
97 }
98 i++;
99 }
100}
101
102BOOL ControlPanel::dialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
103{
104 switch (msg) {
105 case WM_INITDIALOG:
106 handle = hwnd;
107 initDialog();
108 return TRUE;
109 case WM_DESTROY:
110 if (stop_updating) {
111 stop_updating = false;
112 SendCommand(3, 2);
113 }
114 return TRUE;
115 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
128void ControlPanel::getSelConnInfo()
129{
130 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 }
138}
139
140void ControlPanel::SendCommand(DWORD command, int data)
141{
142 COPYDATASTRUCT copyData;
143 copyData.dwData = command;
Constantin Kaplinsky729598c2006-05-25 05:12:25 +0000144 getSelConnInfo();
145 if (data != -1) {
146 ListConnStatus.Copy(&ListSelConn);
147 ListConnStatus.setAllStatus(data);
148 ListConnStatus.setDisable(isItemChecked(IDC_DISABLE_CLIENTS));
Constantin Kaplinsky729598c2006-05-25 05:12:25 +0000149 } else {
150 ListConnStatus.Clear();
151 }
Pierre Ossmanb0a80472015-03-03 16:48:36 +0100152 copyData.cbData = 0;
153 copyData.lpData = &ListConnStatus;
Constantin Kaplinsky729598c2006-05-25 05:12:25 +0000154 SendMessage(m_hSTIcon, WM_COPYDATA, 0, (LPARAM)&copyData);
155}
156
157ControlPanel::~ControlPanel()
158{
159
160}