summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opierdesktop/qtwin.cpp21
-rw-r--r--noncore/net/opierdesktop/qtwin.h6
2 files changed, 5 insertions, 22 deletions
diff --git a/noncore/net/opierdesktop/qtwin.cpp b/noncore/net/opierdesktop/qtwin.cpp
index 181d275..54a5a03 100644
--- a/noncore/net/opierdesktop/qtwin.cpp
+++ b/noncore/net/opierdesktop/qtwin.cpp
@@ -1,1064 +1,1049 @@
1/* 1/*
2 rdesktop: A Remote Desktop Protocol client. 2 rdesktop: A Remote Desktop Protocol client.
3 User interface services - X Window System 3 User interface services - X Window System
4 Copyright (C) Matthew Chapman 1999-2002 4 Copyright (C) Matthew Chapman 1999-2002
5 qt.cpp by Jay Sorg 5 qt.cpp by Jay Sorg
6 6
7 This program is free software; you can redistribute it and/or modify 7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by 8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or 9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version. 10 (at your option) any later version.
11 11
12 This program is distributed in the hope that it will be useful, 12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details. 15 GNU General Public License for more details.
16 16
17 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20*/ 20*/
21 21
22#include "rdesktop.h" 22#include "rdesktop.h"
23#include <qpe/qpeapplication.h> 23#include <qpe/qpeapplication.h>
24#include <qmainwindow.h> 24#include <qmainwindow.h>
25#include <qwidget.h> 25#include <qwidget.h>
26#include <qpainter.h> 26#include <qpainter.h>
27#include <qimage.h> 27#include <qimage.h>
28#include <qsocketnotifier.h> 28#include <qsocketnotifier.h>
29#include <qscrollview.h> 29#include <qscrollview.h>
30#include <qmessagebox.h> 30#include <qmessagebox.h>
31#include <qpushbutton.h> 31#include <qpushbutton.h>
32#include <qlineedit.h> 32#include <qlineedit.h>
33#include <qcombobox.h> 33#include <qcombobox.h>
34#include <qlabel.h> 34#include <qlabel.h>
35#include <qfile.h> 35#include <qfile.h>
36#include <qcheckbox.h> 36#include <qcheckbox.h>
37#include <qpopupmenu.h> 37#include <qpopupmenu.h>
38#include "qtwin.h" 38#include "qtwin.h"
39#include <stdlib.h> 39#include <stdlib.h>
40 40
41uint32 flags; 41uint32 flags;
42char server[64] = ""; 42char server[64] = "";
43char domain[16] = ""; 43char domain[16] = "";
44char password[16] = ""; 44char password[16] = "";
45char shell[128] = ""; 45char shell[128] = "";
46char directory[32] = ""; 46char directory[32] = "";
47 47
48extern int g_width; 48extern int g_width;
49extern int g_height; 49extern int g_height;
50extern int server_bpp; 50extern int server_bpp;
51extern BOOL fullscreen; 51extern BOOL fullscreen;
52extern char username[]; 52extern char username[];
53int global_sock; 53int global_sock;
54 54
55QSocketNotifier* SocketNotifier; 55QSocketNotifier* SocketNotifier;
56QPEApplication* App; 56QPEApplication* App;
57QMyMainWindow* MW; 57QMyMainWindow* MW;
58QMyScrollView* SV; 58QMyScrollView* SV;
59struct QColorMap 59struct QColorMap
60{ 60{
61 uint32 RGBColors[256]; 61 uint32 RGBColors[256];
62 int NumColors; 62 int NumColors;
63}; 63};
64QColorMap* CM; 64QColorMap* CM;
65uint8* BS; 65uint8* BS;
66int clipx; 66int clipx;
67int clipy; 67int clipy;
68int clipcx; 68int clipcx;
69int clipcy; 69int clipcy;
70 70
71struct bitmap 71struct bitmap
72{ 72{
73 int w; 73 int w;
74 int h; 74 int h;
75 uint8* data; 75 uint8* data;
76}; 76};
77 77
78BOOL owncolmap = False; 78BOOL owncolmap = False;
79 79
80//***************************************************************************** 80//*****************************************************************************
81void CleanString(QString* Item) 81void CleanString(QString* Item)
82{ 82{
83 int i; 83 int i;
84 84
85 i = Item->length() - 1; 85 i = Item->length() - 1;
86 while (i >= 0) 86 while (i >= 0)
87 { 87 {
88 if (Item->at(i) == 10 || Item->at(i) == 13) 88 if (Item->at(i) == 10 || Item->at(i) == 13)
89 Item->remove(i, 1); 89 Item->remove(i, 1);
90 i--; 90 i--;
91 } 91 }
92} 92}
93 93
94//***************************************************************************** 94//*****************************************************************************
95QMyDialog::QMyDialog(QWidget* parent) : QDialog(parent, "Settings", true) 95QMyDialog::QMyDialog(QWidget* parent) : QDialog(parent, "Settings", true)
96{ 96{
97 setCaption( tr( "Configuration" ) ); 97 setCaption( tr( "Configuration" ) );
98 int i, j; 98 int i, j;
99 char* home; 99 char* home;
100 char Text[256]; 100 char Text[256];
101 QString Line; 101 QString Line;
102 QString ItemName; 102 QString ItemName;
103 QString ItemValue; 103 QString ItemValue;
104 104
105 // resize dialog 105 // resize dialog
106 resize(230, 270); 106 resize(230, 270);
107 // main list box 107 // main list box
108 ListBox = new QListBox(this); 108 ListBox = new QListBox(this);
109 ListBox->move(10, 10); 109 ListBox->move(10, 10);
110 ListBox->resize(200, 100); 110 ListBox->resize(200, 100);
111 connect(ListBox, SIGNAL(selectionChanged()), this, SLOT(ListBoxChanged())); 111 connect(ListBox, SIGNAL(selectionChanged()), this, SLOT(ListBoxChanged()));
112 connect(ListBox, SIGNAL(selected(int)), this, SLOT(ListBoxSelected(int))); 112 connect(ListBox, SIGNAL(selected(int)), this, SLOT(ListBoxSelected(int)));
113 // server 113 // server
114 Label1 = new QLabel(this); 114 Label1 = new QLabel(this);
115 Label1->setText("Server Desc"); 115 Label1->setText("Server Desc");
116 Label1->move(10, 120); 116 Label1->move(10, 120);
117 Label1->resize(100, 20); 117 Label1->resize(100, 20);
118 ServerNameEdit = new QLineEdit(this); 118 ServerNameEdit = new QLineEdit(this);
119 ServerNameEdit->move(75, 120); 119 ServerNameEdit->move(75, 120);
120 ServerNameEdit->resize(100, 20); 120 ServerNameEdit->resize(100, 20);
121 // username 121 // username
122 Label2 = new QLabel(this); 122 Label2 = new QLabel(this);
123 Label2->setText("User Name"); 123 Label2->setText("User Name");
124 Label2->move(10, 150); 124 Label2->move(10, 150);
125 Label2->resize(100, 20); 125 Label2->resize(100, 20);
126 UserNameEdit = new QLineEdit(this); 126 UserNameEdit = new QLineEdit(this);
127 UserNameEdit->move(75, 150); 127 UserNameEdit->move(75, 150);
128 UserNameEdit->resize(100, 20); 128 UserNameEdit->resize(100, 20);
129 // ip 129 // ip
130 Label3 = new QLabel(this); 130 Label3 = new QLabel(this);
131 Label3->setText("Server IP"); 131 Label3->setText("Server IP");
132 Label3->move(10, 180); 132 Label3->move(10, 180);
133 Label3->resize(100, 20); 133 Label3->resize(100, 20);
134 IPEdit = new QLineEdit(this); 134 IPEdit = new QLineEdit(this);
135 IPEdit->move(75, 180); 135 IPEdit->move(75, 180);
136 IPEdit->resize(100, 20); 136 IPEdit->resize(100, 20);
137 // width and height 137 // width and height
138 WidthHeightBox = new QComboBox(this); 138 WidthHeightBox = new QComboBox(this);
139 WidthHeightBox->move(10, 210); 139 WidthHeightBox->move(10, 210);
140 WidthHeightBox->resize(100, 20); 140 WidthHeightBox->resize(100, 20);
141 WidthHeightBox->insertItem("240x320"); 141 WidthHeightBox->insertItem("240x320");
142 WidthHeightBox->insertItem("640x480"); 142 WidthHeightBox->insertItem("640x480");
143 WidthHeightBox->insertItem("800x600"); 143 WidthHeightBox->insertItem("800x600");
144 connect(WidthHeightBox, SIGNAL(activated(int)), this, SLOT(ComboChanged(int))); 144 connect(WidthHeightBox, SIGNAL(activated(int)), this, SLOT(ComboChanged(int)));
145 WidthHeightBox->setCurrentItem(1); 145 WidthHeightBox->setCurrentItem(1);
146 WidthEdit = new QLineEdit(this); 146 WidthEdit = new QLineEdit(this);
147 WidthEdit->move(110, 210); 147 WidthEdit->move(110, 210);
148 WidthEdit->resize(30, 20); 148 WidthEdit->resize(30, 20);
149 WidthEdit->setText("800"); 149 WidthEdit->setText("800");
150 HeightEdit = new QLineEdit(this); 150 HeightEdit = new QLineEdit(this);
151 HeightEdit->move(140, 210); 151 HeightEdit->move(140, 210);
152 HeightEdit->resize(30, 20); 152 HeightEdit->resize(30, 20);
153 HeightEdit->setText("600"); 153 HeightEdit->setText("600");
154 // add to list button 154 // add to list button
155 AddButton = new QPushButton(this); 155 AddButton = new QPushButton(this);
156 AddButton->move(180, 120); 156 AddButton->move(180, 120);
157 AddButton->resize(50, 20); 157 AddButton->resize(50, 20);
158 AddButton->setText("Add"); 158 AddButton->setText("Add");
159 connect(AddButton, SIGNAL(clicked()), this, SLOT(AddClicked())); 159 connect(AddButton, SIGNAL(clicked()), this, SLOT(AddClicked()));
160 // change list item button 160 // change list item button
161 EditButton = new QPushButton(this); 161 EditButton = new QPushButton(this);
162 EditButton->move(180, 140); 162 EditButton->move(180, 140);
163 EditButton->resize(50, 20); 163 EditButton->resize(50, 20);
164 EditButton->setText("Edit"); 164 EditButton->setText("Edit");
165 connect(EditButton, SIGNAL(clicked()), this, SLOT(EditClicked())); 165 connect(EditButton, SIGNAL(clicked()), this, SLOT(EditClicked()));
166 // save to file button 166 // save to file button
167 SaveButton = new QPushButton(this); 167 SaveButton = new QPushButton(this);
168 SaveButton->move(180, 160); 168 SaveButton->move(180, 160);
169 SaveButton->resize(50, 20); 169 SaveButton->resize(50, 20);
170 SaveButton->setText("Save"); 170 SaveButton->setText("Save");
171 connect(SaveButton, SIGNAL(clicked()), this, SLOT(SaveClicked())); 171 connect(SaveButton, SIGNAL(clicked()), this, SLOT(SaveClicked()));
172 // remove an item button 172 // remove an item button
173 RemoveButton = new QPushButton(this); 173 RemoveButton = new QPushButton(this);
174 RemoveButton->move(180, 180); 174 RemoveButton->move(180, 180);
175 RemoveButton->resize(50, 20); 175 RemoveButton->resize(50, 20);
176 RemoveButton->setText("Remove"); 176 RemoveButton->setText("Remove");
177 connect(RemoveButton, SIGNAL(clicked()), this, SLOT(RemoveClicked())); 177 connect(RemoveButton, SIGNAL(clicked()), this, SLOT(RemoveClicked()));
178 // full screen check box 178 // full screen check box
179 FullScreenCheckBox = new QCheckBox(this, "Full Screen"); 179 FullScreenCheckBox = new QCheckBox(this, "Full Screen");
180 FullScreenCheckBox->setText("Full Screen"); 180 FullScreenCheckBox->setText("Full Screen");
181 FullScreenCheckBox->move(10, 230); 181 FullScreenCheckBox->move(10, 230);
182 // ok button 182 // ok button
183 OKButton = new QPushButton(this);
184 OKButton->setText("OK");
185 OKButton->move(100, 240);
186 OKButton->resize(50, 20);
187 connect(OKButton, SIGNAL(clicked()), this, SLOT(OKClicked()));
188 // cancel button
189 CancelButton = new QPushButton(this);
190 CancelButton->setText("Cancel");
191 CancelButton->move(160, 240);
192 CancelButton->resize(50, 20);
193 connect(CancelButton, SIGNAL(clicked()), this, SLOT(CancelClicked()));
194 183
195 for (i = 0; i < 10; i++) 184 for (i = 0; i < 10; i++)
196 { 185 {
197 ConnectionList[i] = new QMyConnectionItem; 186 ConnectionList[i] = new QMyConnectionItem;
198 ConnectionList[i]->ServerName = ""; 187 ConnectionList[i]->ServerName = "";
199 ConnectionList[i]->UserName = ""; 188 ConnectionList[i]->UserName = "";
200 ConnectionList[i]->ServerIP = ""; 189 ConnectionList[i]->ServerIP = "";
201 ConnectionList[i]->Width = 0; 190 ConnectionList[i]->Width = 0;
202 ConnectionList[i]->Height = 0; 191 ConnectionList[i]->Height = 0;
203 ConnectionList[i]->FullScreen = 0; 192 ConnectionList[i]->FullScreen = 0;
204 } 193 }
205 home = getenv("HOME"); 194 home = getenv("HOME");
206 if (home != NULL) 195 if (home != NULL)
207 { 196 {
208 sprintf(Text, "%s/rdesktop.ini", home); 197 sprintf(Text, "%s/rdesktop.ini", home);
209 QFile* File = new QFile(Text); 198 QFile* File = new QFile(Text);
210 if (File->open(IO_ReadOnly)) 199 if (File->open(IO_ReadOnly))
211 { 200 {
212 i = -1; 201 i = -1;
213 while (!File->atEnd()) 202 while (!File->atEnd())
214 { 203 {
215 File->readLine(Line, 255); 204 File->readLine(Line, 255);
216 j = Line.find("="); 205 j = Line.find("=");
217 if (j > 0) 206 if (j > 0)
218 { 207 {
219 ItemName = Line.mid(0, j); 208 ItemName = Line.mid(0, j);
220 CleanString(&ItemName); 209 CleanString(&ItemName);
221 ItemValue = Line.mid(j + 1); 210 ItemValue = Line.mid(j + 1);
222 CleanString(&ItemValue); 211 CleanString(&ItemValue);
223 if (ItemName == "Server") 212 if (ItemName == "Server")
224 { 213 {
225 i++; 214 i++;
226 ConnectionList[i]->ServerName = ItemValue; 215 ConnectionList[i]->ServerName = ItemValue;
227 ListBox->insertItem(ItemValue); 216 ListBox->insertItem(ItemValue);
228 } 217 }
229 else if (ItemName == "UserName") 218 else if (ItemName == "UserName")
230 ConnectionList[i]->UserName = ItemValue; 219 ConnectionList[i]->UserName = ItemValue;
231 else if (ItemName == "Width") 220 else if (ItemName == "Width")
232 ConnectionList[i]->Width = ItemValue.toInt(); 221 ConnectionList[i]->Width = ItemValue.toInt();
233 else if (ItemName == "Height") 222 else if (ItemName == "Height")
234 ConnectionList[i]->Height = ItemValue.toInt(); 223 ConnectionList[i]->Height = ItemValue.toInt();
235 else if (ItemName == "IP") 224 else if (ItemName == "IP")
236 ConnectionList[i]->ServerIP = ItemValue; 225 ConnectionList[i]->ServerIP = ItemValue;
237 else if (ItemName == "FullScreen") 226 else if (ItemName == "FullScreen")
238 ConnectionList[i]->FullScreen = (ItemValue != "0"); 227 ConnectionList[i]->FullScreen = (ItemValue != "0");
239 } 228 }
240 } 229 }
241 } 230 }
242 delete File; 231 delete File;
243 } 232 }
244} 233}
245 234
246//***************************************************************************** 235//*****************************************************************************
247QMyDialog::~QMyDialog() 236QMyDialog::~QMyDialog()
248{ 237{
249 QMyConnectionItem* Item; 238 QMyConnectionItem* Item;
250 int i; 239 int i;
251 240
252 for (i = 0; i < 10; i++) 241 for (i = 0; i < 10; i++)
253 { 242 {
254 Item = ConnectionList[i]; 243 Item = ConnectionList[i];
255 delete Item; 244 delete Item;
256 } 245 }
257} 246}
258 247
259//***************************************************************************** 248//*****************************************************************************
260void QMyDialog::ComboChanged(int index) 249void QMyDialog::ComboChanged(int index)
261{ 250{
262 if (index == 0) 251 if (index == 0)
263 { 252 {
264 WidthEdit->setText("240"); 253 WidthEdit->setText("240");
265 HeightEdit->setText("320"); 254 HeightEdit->setText("320");
266 } 255 }
267 if (index == 1) 256 if (index == 1)
268 { 257 {
269 WidthEdit->setText("640"); 258 WidthEdit->setText("640");
270 HeightEdit->setText("480"); 259 HeightEdit->setText("480");
271 } 260 }
272 else if (index == 2) 261 else if (index == 2)
273 { 262 {
274 WidthEdit->setText("800"); 263 WidthEdit->setText("800");
275 HeightEdit->setText("600"); 264 HeightEdit->setText("600");
276 } 265 }
277} 266}
278 267
279//***************************************************************************** 268//*****************************************************************************
280void QMyDialog::OKClicked() 269void QMyDialog::accept()
281{ 270{
282 ServerName = ServerNameEdit->text(); 271 ServerName = ServerNameEdit->text();
283 UserName = UserNameEdit->text(); 272 UserName = UserNameEdit->text();
284 Width = WidthEdit->text().toInt(); 273 Width = WidthEdit->text().toInt();
285 Height = HeightEdit->text().toInt(); 274 Height = HeightEdit->text().toInt();
286 ServerIP = IPEdit->text(); 275 ServerIP = IPEdit->text();
287 FullScreen = FullScreenCheckBox->isChecked(); 276 FullScreen = FullScreenCheckBox->isChecked();
288 done(1);
289}
290 277
291//***************************************************************************** 278 QDialog::accept();
292void QMyDialog::CancelClicked()
293{
294 done(0);
295} 279}
296 280
281
297//***************************************************************************** 282//*****************************************************************************
298void QMyDialog::AddClicked() 283void QMyDialog::AddClicked()
299{ 284{
300 int i; 285 int i;
301 QMyConnectionItem* Item; 286 QMyConnectionItem* Item;
302 287
303 i = ListBox->count(); 288 i = ListBox->count();
304 if (i < 10) 289 if (i < 10)
305 { 290 {
306 ListBox->insertItem(ServerNameEdit->text()); 291 ListBox->insertItem(ServerNameEdit->text());
307 Item = ConnectionList[i]; 292 Item = ConnectionList[i];
308 Item->ServerName = ServerNameEdit->text(); 293 Item->ServerName = ServerNameEdit->text();
309 Item->UserName = UserNameEdit->text(); 294 Item->UserName = UserNameEdit->text();
310 Item->Width = WidthEdit->text().toInt(); 295 Item->Width = WidthEdit->text().toInt();
311 Item->Height = HeightEdit->text().toInt(); 296 Item->Height = HeightEdit->text().toInt();
312 Item->ServerIP = IPEdit->text(); 297 Item->ServerIP = IPEdit->text();
313 Item->FullScreen = FullScreenCheckBox->isChecked(); 298 Item->FullScreen = FullScreenCheckBox->isChecked();
314 } 299 }
315} 300}
316 301
317//***************************************************************************** 302//*****************************************************************************
318void QMyDialog::EditClicked() 303void QMyDialog::EditClicked()
319{ 304{
320 int i; 305 int i;
321 QMyConnectionItem* Item; 306 QMyConnectionItem* Item;
322 307
323 i = ListBox->currentItem(); 308 i = ListBox->currentItem();
324 if (i >= 0) 309 if (i >= 0)
325 { 310 {
326 Item = ConnectionList[i]; 311 Item = ConnectionList[i];
327 Item->ServerName = ServerNameEdit->text(); 312 Item->ServerName = ServerNameEdit->text();
328 Item->UserName = UserNameEdit->text(); 313 Item->UserName = UserNameEdit->text();
329 Item->Width = WidthEdit->text().toInt(); 314 Item->Width = WidthEdit->text().toInt();
330 Item->Height = HeightEdit->text().toInt(); 315 Item->Height = HeightEdit->text().toInt();
331 Item->ServerIP = IPEdit->text(); 316 Item->ServerIP = IPEdit->text();
332 Item->FullScreen = FullScreenCheckBox->isChecked(); 317 Item->FullScreen = FullScreenCheckBox->isChecked();
333 ListBox->changeItem(ServerNameEdit->text(), i); 318 ListBox->changeItem(ServerNameEdit->text(), i);
334 } 319 }
335} 320}
336 321
337//***************************************************************************** 322//*****************************************************************************
338void WriteString(QFile* File, QString* Line) 323void WriteString(QFile* File, QString* Line)
339{ 324{
340 File->writeBlock((const char*)(*Line), Line->length()); 325 File->writeBlock((const char*)(*Line), Line->length());
341} 326}
342 327
343//***************************************************************************** 328//*****************************************************************************
344void QMyDialog::SaveClicked() 329void QMyDialog::SaveClicked()
345{ 330{
346 int i, j; 331 int i, j;
347 QMyConnectionItem* Item; 332 QMyConnectionItem* Item;
348 QString Line; 333 QString Line;
349 char* home; 334 char* home;
350 char Text[256]; 335 char Text[256];
351 QFile* File; 336 QFile* File;
352 337
353 home = getenv("HOME"); 338 home = getenv("HOME");
354 if (home != NULL) 339 if (home != NULL)
355 { 340 {
356 sprintf(Text, "%s/rdesktop.ini", home); 341 sprintf(Text, "%s/rdesktop.ini", home);
357 File = new QFile(Text); 342 File = new QFile(Text);
358 if (File->open(IO_Truncate | IO_ReadWrite)) 343 if (File->open(IO_Truncate | IO_ReadWrite))
359 { 344 {
360 i = ListBox->count(); 345 i = ListBox->count();
361 for (j = 0; j < i; j++) 346 for (j = 0; j < i; j++)
362 { 347 {
363 Item = ConnectionList[j]; 348 Item = ConnectionList[j];
364 Line = "Server="; 349 Line = "Server=";
365 Line += Item->ServerName; 350 Line += Item->ServerName;
366 Line += (char)10; 351 Line += (char)10;
367 WriteString(File, &Line); 352 WriteString(File, &Line);
368 Line = "UserName="; 353 Line = "UserName=";
369 Line += Item->UserName; 354 Line += Item->UserName;
370 Line += (char)10; 355 Line += (char)10;
371 WriteString(File, &Line); 356 WriteString(File, &Line);
372 Line = "Width="; 357 Line = "Width=";
373 sprintf(Text, "%d", Item->Width); 358 sprintf(Text, "%d", Item->Width);
374 Line += Text; 359 Line += Text;
375 Line += (char)10; 360 Line += (char)10;
376 WriteString(File, &Line); 361 WriteString(File, &Line);
377 Line = "Height="; 362 Line = "Height=";
378 sprintf(Text, "%d", Item->Height); 363 sprintf(Text, "%d", Item->Height);
379 Line += Text; 364 Line += Text;
380 Line += (char)10; 365 Line += (char)10;
381 WriteString(File, &Line); 366 WriteString(File, &Line);
382 Line = "IP="; 367 Line = "IP=";
383 Line += Item->ServerIP; 368 Line += Item->ServerIP;
384 Line += (char)10; 369 Line += (char)10;
385 WriteString(File, &Line); 370 WriteString(File, &Line);
386 Line = "FullScreen="; 371 Line = "FullScreen=";
387 if (Item->FullScreen) 372 if (Item->FullScreen)
388 Line += "1"; 373 Line += "1";
389 else 374 else
390 Line += "0"; 375 Line += "0";
391 Line += (char)10; 376 Line += (char)10;
392 WriteString(File, &Line); 377 WriteString(File, &Line);
393 } 378 }
394 } 379 }
395 File->flush(); 380 File->flush();
396 File->close(); 381 File->close();
397 delete File; 382 delete File;
398 } 383 }
399} 384}
400 385
401//***************************************************************************** 386//*****************************************************************************
402void QMyDialog::RemoveClicked() 387void QMyDialog::RemoveClicked()
403{ 388{
404 int i, j, c; 389 int i, j, c;
405 QMyConnectionItem* Item1; 390 QMyConnectionItem* Item1;
406 QMyConnectionItem* Item2; 391 QMyConnectionItem* Item2;
407 392
408 i = ListBox->currentItem(); 393 i = ListBox->currentItem();
409 if (i >= 0) 394 if (i >= 0)
410 { 395 {
411 c = ListBox->count(); 396 c = ListBox->count();
412 for (j = i; j < c - 1; j++) 397 for (j = i; j < c - 1; j++)
413 { 398 {
414 Item1 = ConnectionList[i]; 399 Item1 = ConnectionList[i];
415 Item2 = ConnectionList[i + 1]; 400 Item2 = ConnectionList[i + 1];
416 Item1->ServerName = Item2->ServerName; 401 Item1->ServerName = Item2->ServerName;
417 Item1->UserName = Item2->UserName; 402 Item1->UserName = Item2->UserName;
418 Item1->Width = Item2->Width; 403 Item1->Width = Item2->Width;
419 Item1->Height = Item2->Height; 404 Item1->Height = Item2->Height;
420 Item1->ServerIP = Item2->ServerIP; 405 Item1->ServerIP = Item2->ServerIP;
421 Item1->FullScreen = Item2->FullScreen; 406 Item1->FullScreen = Item2->FullScreen;
422 } 407 }
423 ListBox->removeItem(i); 408 ListBox->removeItem(i);
424 } 409 }
425} 410}
426 411
427//***************************************************************************** 412//*****************************************************************************
428void QMyDialog::ListBoxChanged() 413void QMyDialog::ListBoxChanged()
429{ 414{
430 int i; 415 int i;
431 QMyConnectionItem* Item; 416 QMyConnectionItem* Item;
432 char Text[100]; 417 char Text[100];
433 418
434 i = ListBox->currentItem(); 419 i = ListBox->currentItem();
435 if (i >= 0 && i < 10) 420 if (i >= 0 && i < 10)
436 { 421 {
437 Item = ConnectionList[i]; 422 Item = ConnectionList[i];
438 ServerNameEdit->setText(Item->ServerName); 423 ServerNameEdit->setText(Item->ServerName);
439 UserNameEdit->setText(Item->UserName); 424 UserNameEdit->setText(Item->UserName);
440 sprintf(Text, "%d", Item->Width); 425 sprintf(Text, "%d", Item->Width);
441 WidthEdit->setText(Text); 426 WidthEdit->setText(Text);
442 sprintf(Text, "%d", Item->Height); 427 sprintf(Text, "%d", Item->Height);
443 HeightEdit->setText(Text); 428 HeightEdit->setText(Text);
444 IPEdit->setText(Item->ServerIP); 429 IPEdit->setText(Item->ServerIP);
445 FullScreenCheckBox->setChecked(Item->FullScreen != 0); 430 FullScreenCheckBox->setChecked(Item->FullScreen != 0);
446 } 431 }
447} 432}
448 433
449//***************************************************************************** 434//*****************************************************************************
450void QMyDialog::ListBoxSelected(int /*index*/) 435void QMyDialog::ListBoxSelected(int /*index*/)
451{ 436{
452} 437}
453 438
454//***************************************************************************** 439//*****************************************************************************
455void GetScanCode(QKeyEvent* e, int* ScanCode, int* code) 440void GetScanCode(QKeyEvent* e, int* ScanCode, int* code)
456{ 441{
457 int key; 442 int key;
458 int mod; 443 int mod;
459 int ascii; 444 int ascii;
460 445
461 key = e->key(); 446 key = e->key();
462 mod = e->state(); 447 mod = e->state();
463 ascii = e->ascii(); 448 ascii = e->ascii();
464 449
465 *ScanCode = 0; 450 *ScanCode = 0;
466 *code = mod; // 8 shift, 16 control, 32 alt 451 *code = mod; // 8 shift, 16 control, 32 alt
467 452
468 switch (key) 453 switch (key)
469 { 454 {
470 case 4096: // esc 455 case 4096: // esc
471 case 4097: // tab 456 case 4097: // tab
472 case 4099: // backspace 457 case 4099: // backspace
473 case 4100: // enter 458 case 4100: // enter
474 case 4101: // enter 459 case 4101: // enter
475 case 4103: // delete 460 case 4103: // delete
476 ascii = 0; 461 ascii = 0;
477 } 462 }
478 463
479 if (ascii == 0) 464 if (ascii == 0)
480 { 465 {
481 switch (key) 466 switch (key)
482 { 467 {
483 case 4096: *ScanCode = 0x01; break; // esc 468 case 4096: *ScanCode = 0x01; break; // esc
484 case 4097: *ScanCode = 0x0f; break; // tab 469 case 4097: *ScanCode = 0x0f; break; // tab
485 case 4099: *ScanCode = 0x0e; break; // backspace 470 case 4099: *ScanCode = 0x0e; break; // backspace
486 case 4100: *ScanCode = 0x1c; break; // enter 471 case 4100: *ScanCode = 0x1c; break; // enter
487 case 4101: *ScanCode = 0x1c; break; // enter 472 case 4101: *ScanCode = 0x1c; break; // enter
488 case 4112: *ScanCode = 0xc7; break; // home 473 case 4112: *ScanCode = 0xc7; break; // home
489 case 4113: *ScanCode = 0xcf; break; // end 474 case 4113: *ScanCode = 0xcf; break; // end
490 case 4102: *ScanCode = 0xd2; break; // insert 475 case 4102: *ScanCode = 0xd2; break; // insert
491 case 4103: *ScanCode = 0xd3; break; // delete 476 case 4103: *ScanCode = 0xd3; break; // delete
492 case 4118: *ScanCode = 0xc9; break; // page up 477 case 4118: *ScanCode = 0xc9; break; // page up
493 case 4119: *ScanCode = 0xd1; break; // page down 478 case 4119: *ScanCode = 0xd1; break; // page down
494 case 4117: *ScanCode = 0xd0; break; // down arrow 479 case 4117: *ScanCode = 0xd0; break; // down arrow
495 case 4115: *ScanCode = 0xc8; break; // up arrow 480 case 4115: *ScanCode = 0xc8; break; // up arrow
496 case 4114: *ScanCode = 0xcb; break; // left arrow 481 case 4114: *ScanCode = 0xcb; break; // left arrow
497 case 4116: *ScanCode = 0xcd; break; // right arrow 482 case 4116: *ScanCode = 0xcd; break; // right arrow
498 case 4128: *ScanCode = 0x2a; break; // shift 483 case 4128: *ScanCode = 0x2a; break; // shift
499 case 4131: *ScanCode = 0x38; break; // alt 484 case 4131: *ScanCode = 0x38; break; // alt
500 case 4129: *ScanCode = 0x1d; break; // ctrl 485 case 4129: *ScanCode = 0x1d; break; // ctrl
501 } 486 }
502 if (*ScanCode != 0) 487 if (*ScanCode != 0)
503 return; 488 return;
504 } 489 }
505 490
506 switch (ascii) 491 switch (ascii)
507 { 492 {
508 // first row 493 // first row
509 case 'q': *ScanCode = 0x10; break; 494 case 'q': *ScanCode = 0x10; break;
510 case 'Q': *ScanCode = 0x10; *code |= 8; break; 495 case 'Q': *ScanCode = 0x10; *code |= 8; break;
511 case '1': *ScanCode = 0x02; break; 496 case '1': *ScanCode = 0x02; break;
512 case 'w': *ScanCode = 0x11; break; 497 case 'w': *ScanCode = 0x11; break;
513 case 'W': *ScanCode = 0x11; *code |= 8; break; 498 case 'W': *ScanCode = 0x11; *code |= 8; break;
514 case '2': *ScanCode = 0x03; break; 499 case '2': *ScanCode = 0x03; break;
515 case 'e': *ScanCode = 0x12; break; 500 case 'e': *ScanCode = 0x12; break;
516 case 'E': *ScanCode = 0x12; *code |= 8; break; 501 case 'E': *ScanCode = 0x12; *code |= 8; break;
517 case '3': *ScanCode = 0x04; break; 502 case '3': *ScanCode = 0x04; break;
518 case 'r': *ScanCode = 0x13; break; 503 case 'r': *ScanCode = 0x13; break;
519 case 'R': *ScanCode = 0x13; *code |= 8; break; 504 case 'R': *ScanCode = 0x13; *code |= 8; break;
520 case '4': *ScanCode = 0x05; break; 505 case '4': *ScanCode = 0x05; break;
521 case 't': *ScanCode = 0x14; break; 506 case 't': *ScanCode = 0x14; break;
522 case 'T': *ScanCode = 0x14; *code |= 8; break; 507 case 'T': *ScanCode = 0x14; *code |= 8; break;
523 case '5': *ScanCode = 0x06; break; 508 case '5': *ScanCode = 0x06; break;
524 case 'y': *ScanCode = 0x15; break; 509 case 'y': *ScanCode = 0x15; break;
525 case 'Y': *ScanCode = 0x15; *code |= 8; break; 510 case 'Y': *ScanCode = 0x15; *code |= 8; break;
526 case '6': *ScanCode = 0x07; break; 511 case '6': *ScanCode = 0x07; break;
527 case 'u': *ScanCode = 0x16; break; 512 case 'u': *ScanCode = 0x16; break;
528 case 'U': *ScanCode = 0x16; *code |= 8; break; 513 case 'U': *ScanCode = 0x16; *code |= 8; break;
529 case '7': *ScanCode = 0x08; break; 514 case '7': *ScanCode = 0x08; break;
530 case 'i': *ScanCode = 0x17; break; 515 case 'i': *ScanCode = 0x17; break;
531 case 'I': *ScanCode = 0x17; *code |= 8; break; 516 case 'I': *ScanCode = 0x17; *code |= 8; break;
532 case '8': *ScanCode = 0x09; break; 517 case '8': *ScanCode = 0x09; break;
533 case 'o': *ScanCode = 0x18; break; 518 case 'o': *ScanCode = 0x18; break;
534 case 'O': *ScanCode = 0x18; *code |= 8; break; 519 case 'O': *ScanCode = 0x18; *code |= 8; break;
535 case '9': *ScanCode = 0x0a; break; 520 case '9': *ScanCode = 0x0a; break;
536 case 'p': *ScanCode = 0x19; break; 521 case 'p': *ScanCode = 0x19; break;
537 case 'P': *ScanCode = 0x19; *code |= 8; break; 522 case 'P': *ScanCode = 0x19; *code |= 8; break;
538 case '0': *ScanCode = 0x0b; break; 523 case '0': *ScanCode = 0x0b; break;
539 // second row 524 // second row
540 case 'a': *ScanCode = 0x1e; break; 525 case 'a': *ScanCode = 0x1e; break;
541 case 'A': *ScanCode = 0x1e; *code |= 8; break; 526 case 'A': *ScanCode = 0x1e; *code |= 8; break;
542 case '!': *ScanCode = 0x02; *code |= 8; break; 527 case '!': *ScanCode = 0x02; *code |= 8; break;
543 case 's': *ScanCode = 0x1f; break; 528 case 's': *ScanCode = 0x1f; break;
544 case 'S': *ScanCode = 0x1f; *code |= 8; break; 529 case 'S': *ScanCode = 0x1f; *code |= 8; break;
545 case '@': *ScanCode = 0x03; *code |= 8; break; 530 case '@': *ScanCode = 0x03; *code |= 8; break;
546 case 'd': *ScanCode = 0x20; break; 531 case 'd': *ScanCode = 0x20; break;
547 case 'D': *ScanCode = 0x20; *code |= 8; break; 532 case 'D': *ScanCode = 0x20; *code |= 8; break;
548 case '#': *ScanCode = 0x04; *code |= 8; break; 533 case '#': *ScanCode = 0x04; *code |= 8; break;
549 case 'f': *ScanCode = 0x21; break; 534 case 'f': *ScanCode = 0x21; break;
550 case 'F': *ScanCode = 0x21; *code |= 8; break; 535 case 'F': *ScanCode = 0x21; *code |= 8; break;
551 case '$': *ScanCode = 0x05; *code |= 8; break; 536 case '$': *ScanCode = 0x05; *code |= 8; break;
552 case 'g': *ScanCode = 0x22; break; 537 case 'g': *ScanCode = 0x22; break;
553 case 'G': *ScanCode = 0x22; *code |= 8; break; 538 case 'G': *ScanCode = 0x22; *code |= 8; break;
554 case '%': *ScanCode = 0x06; *code |= 8; break; 539 case '%': *ScanCode = 0x06; *code |= 8; break;
555 case 'h': *ScanCode = 0x23; break; 540 case 'h': *ScanCode = 0x23; break;
556 case 'H': *ScanCode = 0x23; *code |= 8; break; 541 case 'H': *ScanCode = 0x23; *code |= 8; break;
557 case '_': *ScanCode = 0x0c; *code |= 8; break; 542 case '_': *ScanCode = 0x0c; *code |= 8; break;
558 case 'j': *ScanCode = 0x24; break; 543 case 'j': *ScanCode = 0x24; break;
559 case 'J': *ScanCode = 0x24; *code |= 8; break; 544 case 'J': *ScanCode = 0x24; *code |= 8; break;
560 case '&': *ScanCode = 0x08; *code |= 8; break; 545 case '&': *ScanCode = 0x08; *code |= 8; break;
561 case 'k': *ScanCode = 0x25; break; 546 case 'k': *ScanCode = 0x25; break;
562 case 'K': *ScanCode = 0x25; *code |= 8; break; 547 case 'K': *ScanCode = 0x25; *code |= 8; break;
563 case '*': *ScanCode = 0x09; *code |= 8; break; 548 case '*': *ScanCode = 0x09; *code |= 8; break;
564 case 'l': *ScanCode = 0x26; break; 549 case 'l': *ScanCode = 0x26; break;
565 case 'L': *ScanCode = 0x26; *code |= 8; break; 550 case 'L': *ScanCode = 0x26; *code |= 8; break;
566 case '(': *ScanCode = 0x0a; *code |= 8; break; 551 case '(': *ScanCode = 0x0a; *code |= 8; break;
567// case 8: *ScanCode = 0x0e; break; // backspace 552// case 8: *ScanCode = 0x0e; break; // backspace
568 // third row 553 // third row
569 case 'z': *ScanCode = 0x2c; break; 554 case 'z': *ScanCode = 0x2c; break;
570 case 'Z': *ScanCode = 0x2c; *code |= 8; break; 555 case 'Z': *ScanCode = 0x2c; *code |= 8; break;
571 case 'x': *ScanCode = 0x2d; break; 556 case 'x': *ScanCode = 0x2d; break;
572 case 'X': *ScanCode = 0x2d; *code |= 8; break; 557 case 'X': *ScanCode = 0x2d; *code |= 8; break;
573 case 'c': *ScanCode = 0x2e; break; 558 case 'c': *ScanCode = 0x2e; break;
574 case 'C': *ScanCode = 0x2e; *code |= 8; break; 559 case 'C': *ScanCode = 0x2e; *code |= 8; break;
575 case 'v': *ScanCode = 0x2f; break; 560 case 'v': *ScanCode = 0x2f; break;
576 case 'V': *ScanCode = 0x2f; *code |= 8; break; 561 case 'V': *ScanCode = 0x2f; *code |= 8; break;
577 case 'b': *ScanCode = 0x30; break; 562 case 'b': *ScanCode = 0x30; break;
578 case 'B': *ScanCode = 0x30; *code |= 8; break; 563 case 'B': *ScanCode = 0x30; *code |= 8; break;
579 case '-': *ScanCode = 0x0c; break; 564 case '-': *ScanCode = 0x0c; break;
580 case 'n': *ScanCode = 0x31; break; 565 case 'n': *ScanCode = 0x31; break;
581 case 'N': *ScanCode = 0x31; *code |= 8; break; 566 case 'N': *ScanCode = 0x31; *code |= 8; break;
582 case '+': *ScanCode = 0x0d; *code |= 8; break; 567 case '+': *ScanCode = 0x0d; *code |= 8; break;
583 case 'm': *ScanCode = 0x32; break; 568 case 'm': *ScanCode = 0x32; break;
584 case 'M': *ScanCode = 0x32; *code |= 8; break; 569 case 'M': *ScanCode = 0x32; *code |= 8; break;
585 case '=': *ScanCode = 0x0d; break; 570 case '=': *ScanCode = 0x0d; break;
586 case ',': *ScanCode = 0x33; break; 571 case ',': *ScanCode = 0x33; break;
587 case ';': *ScanCode = 0x27; break; 572 case ';': *ScanCode = 0x27; break;
588 case ')': *ScanCode = 0x0b; *code |= 8; break; 573 case ')': *ScanCode = 0x0b; *code |= 8; break;
589 // fourth row 574 // fourth row
590// case 9: *ScanCode = 0x0f; break; // tab 575// case 9: *ScanCode = 0x0f; break; // tab
591 case '/': *ScanCode = 0x35; break; 576 case '/': *ScanCode = 0x35; break;
592 case '?': *ScanCode = 0x35; *code |= 8; break; 577 case '?': *ScanCode = 0x35; *code |= 8; break;
593 case ' ': *ScanCode = 0x39; break; 578 case ' ': *ScanCode = 0x39; break;
594 case '\'': *ScanCode = 0x28; break; 579 case '\'': *ScanCode = 0x28; break;
595 case '"': *ScanCode = 0x28; *code |= 8; break; 580 case '"': *ScanCode = 0x28; *code |= 8; break;
596 case '~': *ScanCode = 0x29; *code |= 8; break; 581 case '~': *ScanCode = 0x29; *code |= 8; break;
597 case '.': *ScanCode = 0x34; break; 582 case '.': *ScanCode = 0x34; break;
598 case ':': *ScanCode = 0x27; *code |= 8; break; 583 case ':': *ScanCode = 0x27; *code |= 8; break;
599 case '<': *ScanCode = 0x33; *code |= 8; break; 584 case '<': *ScanCode = 0x33; *code |= 8; break;
600// case 13: *ScanCode = 0x1c; break; // enter 585// case 13: *ScanCode = 0x1c; break; // enter
601 case '>': *ScanCode = 0x34; *code |= 8; break; 586 case '>': *ScanCode = 0x34; *code |= 8; break;
602 // others 587 // others
603// case 27: *ScanCode = 0x01; break; // esc 588// case 27: *ScanCode = 0x01; break; // esc
604 case '`': *ScanCode = 0x29; break; 589 case '`': *ScanCode = 0x29; break;
605 case '^': *ScanCode = 0x07; *code |= 8; break; 590 case '^': *ScanCode = 0x07; *code |= 8; break;
606 case '[': *ScanCode = 0x1a; break; 591 case '[': *ScanCode = 0x1a; break;
607 case '{': *ScanCode = 0x1a; *code |= 8; break; 592 case '{': *ScanCode = 0x1a; *code |= 8; break;
608 case ']': *ScanCode = 0x1b; break; 593 case ']': *ScanCode = 0x1b; break;
609 case '}': *ScanCode = 0x1b; *code |= 8; break; 594 case '}': *ScanCode = 0x1b; *code |= 8; break;
610 case '\\': *ScanCode = 0x2b; break; 595 case '\\': *ScanCode = 0x2b; break;
611 case '|': *ScanCode = 0x2b; *code |= 8; break; 596 case '|': *ScanCode = 0x2b; *code |= 8; break;
612 // ctrl keys 597 // ctrl keys
613 case 1: *ScanCode = 0x1e; *code |= 16; break; // a 598 case 1: *ScanCode = 0x1e; *code |= 16; break; // a
614 case 2: *ScanCode = 0x30; *code |= 16; break; // b 599 case 2: *ScanCode = 0x30; *code |= 16; break; // b
615 } 600 }
616 601
617 if (*ScanCode == 0 && key < 3000) 602 if (*ScanCode == 0 && key < 3000)
618 printf("unknown key %d mod %d ascii %d\n", key, mod, ascii); 603 printf("unknown key %d mod %d ascii %d\n", key, mod, ascii);
619 604
620} 605}
621 606
622//***************************************************************************** 607//*****************************************************************************
623QMyScrollView::QMyScrollView() : QScrollView() 608QMyScrollView::QMyScrollView() : QScrollView()
624{ 609{
625} 610}
626 611
627//***************************************************************************** 612//*****************************************************************************
628QMyScrollView::~QMyScrollView() 613QMyScrollView::~QMyScrollView()
629{ 614{
630} 615}
631 616
632//***************************************************************************** 617//*****************************************************************************
633void QMyScrollView::keyPressEvent(QKeyEvent* e) 618void QMyScrollView::keyPressEvent(QKeyEvent* e)
634{ 619{
635 int ScanCode, code; 620 int ScanCode, code;
636 GetScanCode(e, &ScanCode, &code); 621 GetScanCode(e, &ScanCode, &code);
637 if (ScanCode != 0) 622 if (ScanCode != 0)
638 { 623 {
639 if (code & 8) // send shift 624 if (code & 8) // send shift
640 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x2a, 0); 625 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x2a, 0);
641 if (code & 16) // send control 626 if (code & 16) // send control
642 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x1d, 0); 627 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x1d, 0);
643 if (code & 32) // send alt 628 if (code & 32) // send alt
644 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x38, 0); 629 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x38, 0);
645 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYPRESS, ScanCode, 0); 630 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYPRESS, ScanCode, 0);
646 e->accept(); 631 e->accept();
647 } 632 }
648} 633}
649 634
650//***************************************************************************** 635//*****************************************************************************
651void QMyScrollView::keyReleaseEvent(QKeyEvent* e) 636void QMyScrollView::keyReleaseEvent(QKeyEvent* e)
652{ 637{
653 int ScanCode, code; 638 int ScanCode, code;
654 GetScanCode(e, &ScanCode, &code); 639 GetScanCode(e, &ScanCode, &code);
655 if (ScanCode != 0) 640 if (ScanCode != 0)
656 { 641 {
657 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, ScanCode, 0); 642 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, ScanCode, 0);
658 if (code & 8) // send shift 643 if (code & 8) // send shift
659 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x2a, 0); 644 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x2a, 0);
660 if (code & 16) // send control 645 if (code & 16) // send control
661 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x1d, 0); 646 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x1d, 0);
662 if (code & 32) // send alt 647 if (code & 32) // send alt
663 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x38, 0); 648 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x38, 0);
664 e->accept(); 649 e->accept();
665 } 650 }
666} 651}
667 652
668//***************************************************************************** 653//*****************************************************************************
669void QMyScrollView::showEvent(QShowEvent* e) 654void QMyScrollView::showEvent(QShowEvent* e)
670{ 655{
671 QScrollView::showEvent(e); 656 QScrollView::showEvent(e);
672} 657}
673 658
674//***************************************************************************** 659//*****************************************************************************
675void QMyScrollView::show() 660void QMyScrollView::show()
676{ 661{
677 QScrollView::show(); 662 QScrollView::show();
678} 663}
679 664
680//***************************************************************************** 665//*****************************************************************************
681void QMyScrollView::polish() 666void QMyScrollView::polish()
682{ 667{
683 QScrollView::polish(); 668 QScrollView::polish();
684} 669}
685 670
686//***************************************************************************** 671//*****************************************************************************
687void QMyScrollView::timerEvent(QTimerEvent* e) 672void QMyScrollView::timerEvent(QTimerEvent* e)
688{ 673{
689 QScrollView::timerEvent(e); 674 QScrollView::timerEvent(e);
690 killTimer(timer_id); 675 killTimer(timer_id);
691 QMyDialog* d; 676 QMyDialog* d;
692 QWidget* Desktop; 677 QWidget* Desktop;
693 int dw; 678 int dw;
694 int dh; 679 int dh;
695 680
696 d = new QMyDialog(this); 681 d = new QMyDialog(this);
697 if (d->exec() == 1) // ok clicked 682 if (d->exec() == 1) // ok clicked
698 { 683 {
699 flags = RDP_LOGON_NORMAL; 684 flags = RDP_LOGON_NORMAL;
700 g_width = d->Width; 685 g_width = d->Width;
701 g_height = d->Height; 686 g_height = d->Height;
702 fullscreen = d->FullScreen; 687 fullscreen = d->FullScreen;
703 sprintf(server, "%s", (const char*)d->ServerIP); 688 sprintf(server, "%s", (const char*)d->ServerIP);
704 sprintf(username, "%s", (const char*)d->UserName); 689 sprintf(username, "%s", (const char*)d->UserName);
705 if (!rdp_connect(server, flags, domain, password, shell, directory)) 690 if (!rdp_connect(server, flags, domain, password, shell, directory))
706 { 691 {
707 delete d; 692 delete d;
708 SV->close(); 693 SV->close();
709 return; 694 return;
710 } 695 }
711 BS = (uint8*)xmalloc(g_width * g_height); 696 BS = (uint8*)xmalloc(g_width * g_height);
712 memset(BS, 0, g_width * g_height); 697 memset(BS, 0, g_width * g_height);
713 clipx = 0; 698 clipx = 0;
714 clipy = 0; 699 clipy = 0;
715 clipcx = g_width; 700 clipcx = g_width;
716 clipcy = g_height; 701 clipcy = g_height;
717 CM = (QColorMap*)xmalloc(sizeof(struct QColorMap)); 702 CM = (QColorMap*)xmalloc(sizeof(struct QColorMap));
718 memset(CM, 0, sizeof(struct QColorMap)); 703 memset(CM, 0, sizeof(struct QColorMap));
719 CM->NumColors = 256; 704 CM->NumColors = 256;
720 MW = new QMyMainWindow(); 705 MW = new QMyMainWindow();
721 MW->resize(g_width, g_height); 706 MW->resize(g_width, g_height);
722 MW->show(); 707 MW->show();
723 SV->addChild(MW); 708 SV->addChild(MW);
724 MW->setMouseTracking(true); 709 MW->setMouseTracking(true);
725 SocketNotifier = new QSocketNotifier(global_sock, QSocketNotifier::Read, MW); 710 SocketNotifier = new QSocketNotifier(global_sock, QSocketNotifier::Read, MW);
726 MW->connect(SocketNotifier, SIGNAL(activated(int)), MW, SLOT(dataReceived())); 711 MW->connect(SocketNotifier, SIGNAL(activated(int)), MW, SLOT(dataReceived()));
727 if (fullscreen) 712 if (fullscreen)
728 { 713 {
729 Desktop = App->desktop(); 714 Desktop = App->desktop();
730 dw = Desktop->width(); 715 dw = Desktop->width();
731 dh = Desktop->height(); 716 dh = Desktop->height();
732 if (dw == g_width && dh == g_height) 717 if (dw == g_width && dh == g_height)
733 MW->resize(g_width - 4, g_height - 4); 718 MW->resize(g_width - 4, g_height - 4);
734 SV->showFullScreen(); 719 SV->showFullScreen();
735 } 720 }
736 delete d; 721 delete d;
737 } 722 }
738 else // cancel clicked 723 else // cancel clicked
739 { 724 {
740 delete d; 725 delete d;
741 SV->close(); 726 SV->close();
742 } 727 }
743} 728}
744 729
745//***************************************************************************** 730//*****************************************************************************
746QMyMainWindow::QMyMainWindow() : QWidget(SV->viewport()) 731QMyMainWindow::QMyMainWindow() : QWidget(SV->viewport())
747{ 732{
748 PopupMenu = new QPopupMenu(this); 733 PopupMenu = new QPopupMenu(this);
749 PopupMenu->insertItem("Right click", 1, 0); 734 PopupMenu->insertItem("Right click", 1, 0);
750 PopupMenu->insertItem("Toggle fullscreen", 2, 1); 735 PopupMenu->insertItem("Toggle fullscreen", 2, 1);
751 PopupMenu->insertItem("Reset keyboard", 3, 2); 736 PopupMenu->insertItem("Reset keyboard", 3, 2);
752 PopupMenu->insertItem("Double click", 4, 3); 737 PopupMenu->insertItem("Double click", 4, 3);
753 connect(PopupMenu, SIGNAL(activated(int)), this, SLOT(MemuClicked(int))); 738 connect(PopupMenu, SIGNAL(activated(int)), this, SLOT(MemuClicked(int)));
754} 739}
755 740
756//***************************************************************************** 741//*****************************************************************************
757QMyMainWindow::~QMyMainWindow() 742QMyMainWindow::~QMyMainWindow()
758{ 743{
759 delete PopupMenu; 744 delete PopupMenu;
760} 745}
761 746
762//***************************************************************************** 747//*****************************************************************************
763void QMyMainWindow::timerEvent(QTimerEvent* e) 748void QMyMainWindow::timerEvent(QTimerEvent* e)
764{ 749{
765 QWidget::timerEvent(e); 750 QWidget::timerEvent(e);
766 if (e->timerId() == timer_id) 751 if (e->timerId() == timer_id)
767 { 752 {
768 // send mouse up 753 // send mouse up
769 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1, mx, my); 754 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1, mx, my);
770 // if in fullscreen, take it out or the menu won't work 755 // if in fullscreen, take it out or the menu won't work
771 if (fullscreen) 756 if (fullscreen)
772 { 757 {
773 fullscreen = 0; 758 fullscreen = 0;
774 SV->showNormal(); 759 SV->showNormal();
775 SV->showMaximized(); 760 SV->showMaximized();
776 } 761 }
777 else 762 else
778 PopupMenu->popup(mapToGlobal(QPoint(mx, my))); 763 PopupMenu->popup(mapToGlobal(QPoint(mx, my)));
779 } 764 }
780 killTimer(timer_id); 765 killTimer(timer_id);
781} 766}
782 767
783//***************************************************************************** 768//*****************************************************************************
784void QMyMainWindow::MemuClicked(int MenuID) 769void QMyMainWindow::MemuClicked(int MenuID)
785{ 770{
786 QWidget* Desktop; 771 QWidget* Desktop;
787 int dw; 772 int dw;
788 int dh; 773 int dh;
789 774
790 if (MenuID == 1) // right click 775 if (MenuID == 1) // right click
791 { 776 {
792 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON2, mx, my); 777 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON2, mx, my);
793 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON2, mx, my); 778 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON2, mx, my);
794 } 779 }
795 else if (MenuID == 2) // toggle full screen 780 else if (MenuID == 2) // toggle full screen
796 { 781 {
797 fullscreen = ~fullscreen; 782 fullscreen = ~fullscreen;
798 if (fullscreen) 783 if (fullscreen)
799 { 784 {
800 Desktop = App->desktop(); 785 Desktop = App->desktop();
801 dw = Desktop->width(); 786 dw = Desktop->width();
802 dh = Desktop->height(); 787 dh = Desktop->height();
803 if (dw == g_width && dh == g_height) 788 if (dw == g_width && dh == g_height)
804 MW->resize(g_width - 4, g_height - 4); 789 MW->resize(g_width - 4, g_height - 4);
805 SV->showFullScreen(); 790 SV->showFullScreen();
806 } 791 }
807 else 792 else
808 { 793 {
809 SV->showNormal(); 794 SV->showNormal();
810 SV->showMaximized(); 795 SV->showMaximized();
811 MW->resize(g_width, g_height); 796 MW->resize(g_width, g_height);
812 } 797 }
813 } 798 }
814 else if (MenuID == 3) // reset keyboard 799 else if (MenuID == 3) // reset keyboard
815 { 800 {
816 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x2a, 0); // shift 801 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x2a, 0); // shift
817 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x1d, 0); // control 802 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x1d, 0); // control
818 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x38, 0); // alt 803 rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x38, 0); // alt
819 } 804 }
820 else if (MenuID == 4) // double click 805 else if (MenuID == 4) // double click
821 { 806 {
822 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON1, mx, my); 807 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON1, mx, my);
823 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1, mx, my); 808 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1, mx, my);
824 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON1, mx, my); 809 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON1, mx, my);
825 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1, mx, my); 810 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1, mx, my);
826 } 811 }
827} 812}
828 813
829//***************************************************************************** 814//*****************************************************************************
830void QMyMainWindow::mouseMoveEvent(QMouseEvent* e) 815void QMyMainWindow::mouseMoveEvent(QMouseEvent* e)
831{ 816{
832 int x; 817 int x;
833 int y; 818 int y;
834 819
835 x = e->x(); 820 x = e->x();
836 y = e->y(); 821 y = e->y();
837 822
838 if (timer_id) 823 if (timer_id)
839 { 824 {
840 x = x - mx; 825 x = x - mx;
841 y = y - my; 826 y = y - my;
842 if (x < -10 || x > 10 || y < -10 || y > 10) 827 if (x < -10 || x > 10 || y < -10 || y > 10)
843 { 828 {
844 killTimer(timer_id); 829 killTimer(timer_id);
845 timer_id = 0; 830 timer_id = 0;
846 } 831 }
847 } 832 }
848 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_MOVE, e->x(), e->y()); 833 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_MOVE, e->x(), e->y());
849} 834}
850 835
851//***************************************************************************** 836//*****************************************************************************
852void QMyMainWindow::mousePressEvent(QMouseEvent* e) 837void QMyMainWindow::mousePressEvent(QMouseEvent* e)
853{ 838{
854 timer_id = startTimer(1000); 839 timer_id = startTimer(1000);
855 mx = e->x(); 840 mx = e->x();
856 my = e->y(); 841 my = e->y();
857 if (e->button() == LeftButton) 842 if (e->button() == LeftButton)
858 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON1, e->x(), e->y()); 843 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON1, e->x(), e->y());
859 else if (e->button() == RightButton) 844 else if (e->button() == RightButton)
860 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON2, e->x(), e->y()); 845 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON2, e->x(), e->y());
861 else if (e->button() == MidButton) 846 else if (e->button() == MidButton)
862 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON3, e->x(), e->y()); 847 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_DOWN | MOUSE_FLAG_BUTTON3, e->x(), e->y());
863} 848}
864 849
865//***************************************************************************** 850//*****************************************************************************
866void QMyMainWindow::mouseReleaseEvent(QMouseEvent* e) 851void QMyMainWindow::mouseReleaseEvent(QMouseEvent* e)
867{ 852{
868 killTimer(timer_id); 853 killTimer(timer_id);
869 timer_id = 0; 854 timer_id = 0;
870 if (e->button() == LeftButton) 855 if (e->button() == LeftButton)
871 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1, e->x(), e->y()); 856 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1, e->x(), e->y());
872 else if (e->button() == RightButton) 857 else if (e->button() == RightButton)
873 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON2, e->x(), e->y()); 858 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON2, e->x(), e->y());
874 else if (e->button() == MidButton) 859 else if (e->button() == MidButton)
875 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON3, e->x(), e->y()); 860 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON3, e->x(), e->y());
876} 861}
877 862
878//***************************************************************************** 863//*****************************************************************************
879void QMyMainWindow::wheelEvent(QWheelEvent* e) 864void QMyMainWindow::wheelEvent(QWheelEvent* e)
880{ 865{
881 if (e->delta() > 0) 866 if (e->delta() > 0)
882 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON4, e->x(), e->y()); 867 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON4, e->x(), e->y());
883 else if (e->delta() < 0) 868 else if (e->delta() < 0)
884 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON5, e->x(), e->y()); 869 rdp_send_input(0, RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON5, e->x(), e->y());
885} 870}
886 871
887#define NOT(x) (255-(x)) 872#define NOT(x) (255-(x))
888 873
889//***************************************************************************** 874//*****************************************************************************
890uint8 rop(int rop, uint8 src, uint8 dst) 875uint8 rop(int rop, uint8 src, uint8 dst)
891{ 876{
892 switch (rop) 877 switch (rop)
893 { 878 {
894 case 0x0: return 0; 879 case 0x0: return 0;
895 case 0x1: return NOT (src | dst); 880 case 0x1: return NOT (src | dst);
896 case 0x2: return NOT (src) & dst; 881 case 0x2: return NOT (src) & dst;
897 case 0x3: return NOT (src); 882 case 0x3: return NOT (src);
898 case 0x4: return src & NOT (dst); 883 case 0x4: return src & NOT (dst);
899 case 0x5: return NOT (dst); 884 case 0x5: return NOT (dst);
900 case 0x6: return src ^ dst; 885 case 0x6: return src ^ dst;
901 case 0x7: return NOT (src & dst); 886 case 0x7: return NOT (src & dst);
902 case 0x8: return src & dst; 887 case 0x8: return src & dst;
903 case 0x9: return NOT (src) ^ dst; 888 case 0x9: return NOT (src) ^ dst;
904 case 0xa: return dst; 889 case 0xa: return dst;
905 case 0xb: return NOT (src) | dst; 890 case 0xb: return NOT (src) | dst;
906 case 0xc: return src; 891 case 0xc: return src;
907 case 0xd: return src | NOT (dst); 892 case 0xd: return src | NOT (dst);
908 case 0xe: return src | dst; 893 case 0xe: return src | dst;
909 case 0xf: return NOT (0); 894 case 0xf: return NOT (0);
910 } 895 }
911 return dst; 896 return dst;
912} 897}
913 898
914//***************************************************************************** 899//*****************************************************************************
915uint8 get_pixel(int x, int y) 900uint8 get_pixel(int x, int y)
916{ 901{
917 if (x >= 0 && x < g_width && y >= 0 && y < g_height) 902 if (x >= 0 && x < g_width && y >= 0 && y < g_height)
918 return BS[y * g_width + x]; 903 return BS[y * g_width + x];
919 else 904 else
920 return 0; 905 return 0;
921} 906}
922 907
923//***************************************************************************** 908//*****************************************************************************
924void set_pixel(int x, int y, uint8 pixel, int op = 0xc) 909void set_pixel(int x, int y, uint8 pixel, int op = 0xc)
925{ 910{
926 if (x >= clipx && x < (clipx + clipcx) && y >= clipy && y < (clipy + clipcy)) 911 if (x >= clipx && x < (clipx + clipcx) && y >= clipy && y < (clipy + clipcy))
927 if (x >= 0 && x < g_width && y >= 0 && y < g_height) 912 if (x >= 0 && x < g_width && y >= 0 && y < g_height)
928 if (op == 0xc) 913 if (op == 0xc)
929 BS[y * g_width + x] = pixel; 914 BS[y * g_width + x] = pixel;
930 else 915 else
931 BS[y * g_width + x] = rop(op, pixel, BS[y * g_width + x]); 916 BS[y * g_width + x] = rop(op, pixel, BS[y * g_width + x]);
932} 917}
933 918
934//****************************************************************************** 919//******************************************************************************
935// adjust coordinates for cliping rect 920// adjust coordinates for cliping rect
936bool WarpCoords(int* x, int* y, int* cx, int* cy, int* srcx, int* srcy) 921bool WarpCoords(int* x, int* y, int* cx, int* cy, int* srcx, int* srcy)
937{ 922{
938 int dx, dy; 923 int dx, dy;
939 QRect InRect(*x, *y, *cx, *cy); 924 QRect InRect(*x, *y, *cx, *cy);
940 QRect OutRect; 925 QRect OutRect;
941 QRect CRect(clipx, clipy, clipcx, clipcy); 926 QRect CRect(clipx, clipy, clipcx, clipcy);
942 OutRect = InRect.intersect(CRect); 927 OutRect = InRect.intersect(CRect);
943 if (OutRect.isEmpty()) 928 if (OutRect.isEmpty())
944 return false; 929 return false;
945 dx = OutRect.x() - InRect.x(); 930 dx = OutRect.x() - InRect.x();
946 dy = OutRect.y() - InRect.y(); 931 dy = OutRect.y() - InRect.y();
947 *x = OutRect.x(); 932 *x = OutRect.x();
948 *y = OutRect.y(); 933 *y = OutRect.y();
949 *cx = OutRect.width(); 934 *cx = OutRect.width();
950 *cy = OutRect.height(); 935 *cy = OutRect.height();
951 if (srcx != NULL) 936 if (srcx != NULL)
952 *srcx = *srcx + dx; 937 *srcx = *srcx + dx;
953 if (srcy != NULL) 938 if (srcy != NULL)
954 *srcy = *srcy + dy; 939 *srcy = *srcy + dy;
955 return true; 940 return true;
956} 941}
957 942
958//***************************************************************************** 943//*****************************************************************************
959void QMyMainWindow::paintEvent(QPaintEvent* pe) 944void QMyMainWindow::paintEvent(QPaintEvent* pe)
960{ 945{
961 QImage* Image; 946 QImage* Image;
962 QPainter* Painter; 947 QPainter* Painter;
963 QRect Rect; 948 QRect Rect;
964 int i, j, w, h, l, t; 949 int i, j, w, h, l, t;
965 uint8* data; 950 uint8* data;
966 951
967 if (!testWFlags(WRepaintNoErase)) 952 if (!testWFlags(WRepaintNoErase))
968 setWFlags(WRepaintNoErase); 953 setWFlags(WRepaintNoErase);
969 if (CM != NULL) 954 if (CM != NULL)
970 { 955 {
971 Rect = pe->rect(); 956 Rect = pe->rect();
972 l = Rect.left(); 957 l = Rect.left();
973 t = Rect.top(); 958 t = Rect.top();
974 w = Rect.width(); 959 w = Rect.width();
975 h = Rect.height(); 960 h = Rect.height();
976 if (w > 0 && h > 0 && CM->NumColors > 0) 961 if (w > 0 && h > 0 && CM->NumColors > 0)
977 { 962 {
978 data = (uint8*)xmalloc(w * h); 963 data = (uint8*)xmalloc(w * h);
979 for (i = 0; i < h; i++) 964 for (i = 0; i < h; i++)
980 for (j = 0; j < w; j++) 965 for (j = 0; j < w; j++)
981 data[i * w + j] = get_pixel(l + j, t + i); 966 data[i * w + j] = get_pixel(l + j, t + i);
982 Image = new QImage(data, w, h, 8,(QRgb*)CM->RGBColors, CM->NumColors, QImage::IgnoreEndian); 967 Image = new QImage(data, w, h, 8,(QRgb*)CM->RGBColors, CM->NumColors, QImage::IgnoreEndian);
983 Painter = new QPainter(this); 968 Painter = new QPainter(this);
984 Painter->drawImage(l, t, *Image, 0, 0, w, h); 969 Painter->drawImage(l, t, *Image, 0, 0, w, h);
985 xfree(data); 970 xfree(data);
986 delete Painter; 971 delete Painter;
987 delete Image; 972 delete Image;
988 } 973 }
989 } 974 }
990} 975}
991 976
992//***************************************************************************** 977//*****************************************************************************
993void QMyMainWindow::closeEvent(QCloseEvent* e) 978void QMyMainWindow::closeEvent(QCloseEvent* e)
994{ 979{
995 e->accept(); 980 e->accept();
996} 981}
997 982
998//***************************************************************************** 983//*****************************************************************************
999void QMyMainWindow::dataReceived() 984void QMyMainWindow::dataReceived()
1000{ 985{
1001 if (rdp_main_loop()) 986 if (rdp_main_loop())
1002 return; 987 return;
1003 else 988 else
1004 SV->close(); 989 SV->close();
1005} 990}
1006 991
1007//***************************************************************************** 992//*****************************************************************************
1008void redraw(int x, int y, int cx, int cy) 993void redraw(int x, int y, int cx, int cy)
1009{ 994{
1010 if (WarpCoords(&x, &y, &cx, &cy, NULL, NULL)) 995 if (WarpCoords(&x, &y, &cx, &cy, NULL, NULL))
1011 { 996 {
1012 MW->update(x, y, cx, cy); 997 MW->update(x, y, cx, cy);
1013 } 998 }
1014} 999}
1015 1000
1016/* 1001/*
1017BOOL ui_init(void) 1002BOOL ui_init(void)
1018{ 1003{
1019 QWidget* d; 1004 QWidget* d;
1020 1005
1021 CM = NULL; 1006 CM = NULL;
1022 BS = NULL; 1007 BS = NULL;
1023 App = new QPEApplication(g_argc, g_argv); 1008 App = new QPEApplication(g_argc, g_argv);
1024 if (fullscreen) 1009 if (fullscreen)
1025 { 1010 {
1026 d = QApplication::desktop(); 1011 d = QApplication::desktop();
1027 width = d->width(); // returns screen width 1012 width = d->width(); // returns screen width
1028 height = d->height(); // returns screen height 1013 height = d->height(); // returns screen height
1029 } 1014 }
1030 return True; 1015 return True;
1031} 1016}
1032*/ 1017*/
1033 1018
1034/* 1019/*
1035void ui_deinit(void) 1020void ui_deinit(void)
1036{ 1021{
1037 delete App; 1022 delete App;
1038} 1023}
1039*/ 1024*/
1040 1025
1041/* 1026/*
1042BOOL ui_create_window(void) 1027BOOL ui_create_window(void)
1043{ 1028{
1044 MW = new QMyMainWindow(); 1029 MW = new QMyMainWindow();
1045 MW->resize(width, height); 1030 MW->resize(width, height);
1046 SV = new QMyScrollView(); 1031 SV = new QMyScrollView();
1047 SV->resize(width + 4, height + 4); 1032 SV->resize(width + 4, height + 4);
1048 App->setMainWidget(SV); 1033 App->setMainWidget(SV);
1049 SV->addChild(MW); 1034 SV->addChild(MW);
1050 MW->setMouseTracking(true); 1035 MW->setMouseTracking(true);
1051 SocketNotifier = new QSocketNotifier(global_sock, QSocketNotifier::Read, MW); 1036 SocketNotifier = new QSocketNotifier(global_sock, QSocketNotifier::Read, MW);
1052 MW->connect(SocketNotifier, SIGNAL(activated(int)), MW, SLOT(dataReceived())); 1037 MW->connect(SocketNotifier, SIGNAL(activated(int)), MW, SLOT(dataReceived()));
1053 if (fullscreen) 1038 if (fullscreen)
1054 SV->showFullScreen(); 1039 SV->showFullScreen();
1055 else 1040 else
1056 SV->showMaximized(); 1041 SV->showMaximized();
1057 BS = (uint8*)xmalloc(width * height); 1042 BS = (uint8*)xmalloc(width * height);
1058 memset(BS, 0, width * height); 1043 memset(BS, 0, width * height);
1059 clipx = 0; 1044 clipx = 0;
1060 clipy = 0; 1045 clipy = 0;
1061 clipcx = width; 1046 clipcx = width;
1062 clipcy = height; 1047 clipcy = height;
1063 CM = (QColorMap*)xmalloc(sizeof(struct QColorMap)); 1048 CM = (QColorMap*)xmalloc(sizeof(struct QColorMap));
1064 memset(CM, 0, sizeof(struct QColorMap)); 1049 memset(CM, 0, sizeof(struct QColorMap));
diff --git a/noncore/net/opierdesktop/qtwin.h b/noncore/net/opierdesktop/qtwin.h
index 38ad190..7a2110b 100644
--- a/noncore/net/opierdesktop/qtwin.h
+++ b/noncore/net/opierdesktop/qtwin.h
@@ -1,105 +1,103 @@
1 1
2#include <qwidget.h> 2#include <qwidget.h>
3#include <qscrollview.h> 3#include <qscrollview.h>
4#include <qdialog.h> 4#include <qdialog.h>
5#include <qlistbox.h> 5#include <qlistbox.h>
6#include <qlineedit.h> 6#include <qlineedit.h>
7#include <qcombobox.h> 7#include <qcombobox.h>
8#include <qlabel.h> 8#include <qlabel.h>
9#include <qcheckbox.h> 9#include <qcheckbox.h>
10#include <qpopupmenu.h> 10#include <qpopupmenu.h>
11 11
12class QMyConnectionItem 12class QMyConnectionItem
13{ 13{
14 public: 14 public:
15 QString ServerName; 15 QString ServerName;
16 QString UserName; 16 QString UserName;
17 QString ServerIP; 17 QString ServerIP;
18 int Width; 18 int Width;
19 int Height; 19 int Height;
20 int FullScreen; 20 int FullScreen;
21}; 21};
22 22
23class QMyDialog: public QDialog 23class QMyDialog: public QDialog
24{ 24{
25 Q_OBJECT 25 Q_OBJECT
26 public: 26 public:
27 QMyDialog(QWidget*); 27 QMyDialog(QWidget*);
28 ~QMyDialog(); 28 ~QMyDialog();
29 public: 29 public:
30 QListBox* ListBox; 30 QListBox* ListBox;
31 QPushButton* OKButton;
32 QPushButton* CancelButton;
33 QLabel* Label1; 31 QLabel* Label1;
34 QLineEdit* ServerNameEdit; 32 QLineEdit* ServerNameEdit;
35 QLabel* Label2; 33 QLabel* Label2;
36 QLineEdit* UserNameEdit; 34 QLineEdit* UserNameEdit;
37 QLabel* Label3; 35 QLabel* Label3;
38 QLineEdit* IPEdit; 36 QLineEdit* IPEdit;
39 QLineEdit* WidthEdit; 37 QLineEdit* WidthEdit;
40 QLineEdit* HeightEdit; 38 QLineEdit* HeightEdit;
41 QComboBox* WidthHeightBox; 39 QComboBox* WidthHeightBox;
42 QPushButton* AddButton; 40 QPushButton* AddButton;
43 QPushButton* EditButton; 41 QPushButton* EditButton;
44 QPushButton* SaveButton; 42 QPushButton* SaveButton;
45 QPushButton* RemoveButton; 43 QPushButton* RemoveButton;
46 QCheckBox* FullScreenCheckBox; 44 QCheckBox* FullScreenCheckBox;
47 public slots: 45 public slots:
48 void ComboChanged(int); 46 void ComboChanged(int);
49 void OKClicked();
50 void CancelClicked();
51 void AddClicked(); 47 void AddClicked();
52 void EditClicked(); 48 void EditClicked();
53 void SaveClicked(); 49 void SaveClicked();
54 void RemoveClicked(); 50 void RemoveClicked();
55 void ListBoxChanged(); 51 void ListBoxChanged();
56 void ListBoxSelected(int); 52 void ListBoxSelected(int);
57 public: 53 public:
58 QString ServerName; 54 QString ServerName;
59 QString UserName; 55 QString UserName;
60 QString ServerIP; 56 QString ServerIP;
61 int Width; 57 int Width;
62 int Height; 58 int Height;
63 int FullScreen; 59 int FullScreen;
64 QMyConnectionItem* ConnectionList[10]; 60 QMyConnectionItem* ConnectionList[10];
61 protected slots:
62 void accept();
65}; 63};
66 64
67class QMyScrollView: public QScrollView 65class QMyScrollView: public QScrollView
68{ 66{
69 Q_OBJECT 67 Q_OBJECT
70 public: 68 public:
71 QMyScrollView(); 69 QMyScrollView();
72 ~QMyScrollView(); 70 ~QMyScrollView();
73 void keyPressEvent(QKeyEvent*); 71 void keyPressEvent(QKeyEvent*);
74 void keyReleaseEvent(QKeyEvent*); 72 void keyReleaseEvent(QKeyEvent*);
75 void showEvent(QShowEvent*); 73 void showEvent(QShowEvent*);
76 void show(); 74 void show();
77 void polish(); 75 void polish();
78 void timerEvent(QTimerEvent*); 76 void timerEvent(QTimerEvent*);
79 public: 77 public:
80 int timer_id; 78 int timer_id;
81}; 79};
82 80
83class QMyMainWindow: public QWidget 81class QMyMainWindow: public QWidget
84{ 82{
85 Q_OBJECT 83 Q_OBJECT
86 public: 84 public:
87 QMyMainWindow(); 85 QMyMainWindow();
88 ~QMyMainWindow(); 86 ~QMyMainWindow();
89 void paintEvent(QPaintEvent*); 87 void paintEvent(QPaintEvent*);
90 void mouseMoveEvent(QMouseEvent*); 88 void mouseMoveEvent(QMouseEvent*);
91 void mousePressEvent(QMouseEvent*); 89 void mousePressEvent(QMouseEvent*);
92 void mouseReleaseEvent(QMouseEvent*); 90 void mouseReleaseEvent(QMouseEvent*);
93 void wheelEvent(QWheelEvent*); 91 void wheelEvent(QWheelEvent*);
94 void closeEvent(QCloseEvent*); 92 void closeEvent(QCloseEvent*);
95 void timerEvent(QTimerEvent*); 93 void timerEvent(QTimerEvent*);
96 public slots: 94 public slots:
97 void dataReceived(); 95 void dataReceived();
98 void MemuClicked(int); 96 void MemuClicked(int);
99 public: 97 public:
100 QPopupMenu* PopupMenu; 98 QPopupMenu* PopupMenu;
101 int timer_id; 99 int timer_id;
102 int mx; 100 int mx;
103 int my; 101 int my;
104}; 102};
105 103