1 | /* |
2 | * kPPP: A pppd Front End for the KDE project |
3 | * |
4 | * $Id$ |
5 | * Copyright (C) 1997 Bernd Johannes Wuebben |
6 | * wuebben@math.cornell.edu |
7 | * |
8 | * based on EzPPP: |
9 | * Copyright (C) 1997 Jay Painter |
10 | * |
11 | * This program is free software; you can redistribute it and/or |
12 | * modify it under the terms of the GNU Library General Public |
13 | * License as published by the Free Software Foundation; either |
14 | * version 2 of the License, or (at your option) any later version. |
15 | * |
16 | * This program is distributed in the hope that it will be useful, |
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
19 | * Library General Public License for more details. |
20 | * |
21 | * You should have received a copy of the GNU Library General Public |
22 | * License along with this program; if not, write to the Free |
23 | * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
24 | */ |
25 | |
26 | #include <string.h> |
27 | #include <termios.h> |
28 | #include <qlayout.h> |
29 | //Added by qt3to4: |
30 | #include <QGridLayout> |
31 | #include <QHBoxLayout> |
32 | #include <QLabel> |
33 | #include <QVBoxLayout> |
34 | #include <QApplication> |
35 | #include <kmessagebox.h> |
36 | |
37 | #include <qregexp.h> |
38 | #include <kiconloader.h> |
39 | #include <kdialogbuttonbox.h> |
40 | #include <klocale.h> |
41 | #include <kdialog.h> |
42 | #include <kwindowsystem.h> |
43 | |
44 | #include "edit.h" |
45 | #include "pppdata.h" |
46 | #include "newwidget.h" |
47 | #include "iplined.h" |
48 | #include "auth.h" |
49 | |
50 | DialWidget::DialWidget( QWidget *parent, bool isnewaccount ) |
51 | : QWidget(parent) |
52 | { |
53 | parent->setMinimumWidth(440); |
54 | QVBoxLayout *topLayout = new QVBoxLayout(parent); |
55 | topLayout->setSpacing(KDialog::spacingHint()); |
56 | topLayout->addWidget(this); |
57 | |
58 | QGridLayout *tl = new QGridLayout(this ); |
59 | tl->setSpacing( KDialog::spacingHint() ); |
60 | |
61 | connect_label = new QLabel(i18n("Connection &name:" ), this); |
62 | tl->addWidget(connect_label, 0, 0); |
63 | |
64 | connectname_l = new QLineEdit(this); |
65 | connectname_l->setMaxLength(ACCNAME_SIZE); |
66 | connect_label->setBuddy(connectname_l); |
67 | |
68 | tl->addWidget(connectname_l, 0, 1); |
69 | QString tmp = i18n("Type in a unique name for this connection" ); |
70 | |
71 | connect_label->setWhatsThis(tmp); |
72 | connectname_l->setWhatsThis(tmp); |
73 | |
74 | |
75 | number_label = new QLabel(i18n("P&hone number:" ), this); |
76 | number_label->setAlignment(Qt::AlignTop|Qt::AlignLeft); |
77 | tl->addWidget(number_label, 1, 0); |
78 | |
79 | QHBoxLayout *lpn = new QHBoxLayout(); |
80 | lpn->setSpacing( 5 ); |
81 | tl->addLayout(lpn, 1, 1); |
82 | numbers = new Q3ListBox(this); |
83 | number_label->setBuddy(numbers); |
84 | numbers->setMinimumSize(120, 70); |
85 | lpn->addWidget(numbers); |
86 | QVBoxLayout *lpn1 = new QVBoxLayout; |
87 | lpn->addLayout(lpn1); |
88 | add = new QPushButton(i18n("&Add..." ), this); |
89 | del = new QPushButton(i18n("&Remove" ), this); |
90 | |
91 | up = new QPushButton(this); |
92 | up->setIcon(KIcon("go-up" )); |
93 | down = new QPushButton(this); |
94 | down->setIcon(KIcon("go-down" )); |
95 | lpn1->addWidget(add); |
96 | lpn1->addWidget(del); |
97 | lpn1->addStretch(1); |
98 | lpn1->addWidget(up); |
99 | lpn1->addWidget(down); |
100 | connect(add, SIGNAL(clicked()), |
101 | this, SLOT(addNumber())); |
102 | connect(del, SIGNAL(clicked()), |
103 | this, SLOT(delNumber())); |
104 | connect(up, SIGNAL(clicked()), |
105 | this, SLOT(upNumber())); |
106 | connect(down, SIGNAL(clicked()), |
107 | this, SLOT(downNumber())); |
108 | connect(numbers, SIGNAL(highlighted(int)), |
109 | this, SLOT(selectionChanged(int))); |
110 | numbersChanged(); |
111 | |
112 | tmp = i18n("<p>Specifies the phone numbers to dial. You\n" |
113 | "can supply multiple numbers here, simply\n" |
114 | "click on \"Add\". You can arrange the\n" |
115 | "order the numbers are tried by using the\n" |
116 | "arrow buttons.\n\n" |
117 | "When a number is busy or fails, <i>kppp</i> will \n" |
118 | "try the next number and so on" ); |
119 | |
120 | number_label->setWhatsThis(tmp); |
121 | numbers->setWhatsThis(tmp); |
122 | |
123 | auth_l = new QLabel(i18n("A&uthentication:" ), this); |
124 | tl->addWidget(auth_l, 3, 0); |
125 | |
126 | auth = new QComboBox(this); |
127 | auth_l->setBuddy(auth); |
128 | auth->addItem(i18n("Script-based" )); |
129 | auth->addItem(i18n("PAP" )); |
130 | auth->addItem(i18n("Terminal-based" )); |
131 | auth->addItem(i18n("CHAP" )); |
132 | auth->addItem(i18n("PAP/CHAP" )); |
133 | tl->addWidget(auth, 3, 1); |
134 | tmp = i18n("<p>Specifies the method used to identify yourself to\n" |
135 | "the PPP server. Most universities still use\n" |
136 | "<b>Terminal</b>- or <b>Script</b>-based authentication,\n" |
137 | "while most ISP use <b>PAP</b> and/or <b>CHAP</b>. If\n" |
138 | "unsure, contact your ISP.\n" |
139 | "\n" |
140 | "If you can choose between PAP and CHAP,\n" |
141 | "choose CHAP, because it is much safer. If you do not know\n" |
142 | "whether PAP or CHAP is right, choose PAP/CHAP." ); |
143 | |
144 | auth_l->setWhatsThis(tmp); |
145 | auth->setWhatsThis(tmp); |
146 | |
147 | store_password = new QCheckBox(i18n("Store &password" ), this); |
148 | store_password->setChecked(true); |
149 | tl->addWidget(store_password, 4, 0, 1, 2, Qt::AlignRight); |
150 | store_password->setWhatsThis( |
151 | i18n("<p>When this is turned on, your ISP password\n" |
152 | "will be saved in <i>kppp</i>'s config file, so\n" |
153 | "you do not need to type it in every time.\n" |
154 | "\n" |
155 | "<b><font color=\"red\">Warning:</font> your password will be stored as\n" |
156 | "plain text in the config file, which is\n" |
157 | "readable only to you. Make sure nobody\n" |
158 | "gains access to this file!" )); |
159 | |
160 | cbtype_l = new QLabel(i18n("&Callback type:" ), this); |
161 | tl->addWidget(cbtype_l, 5, 0); |
162 | |
163 | cbtype = new QComboBox(this); |
164 | cbtype_l->setBuddy(cbtype); |
165 | cbtype->addItem(i18n("None" )); |
166 | cbtype->addItem(i18n("Administrator-defined" )); |
167 | cbtype->addItem(i18n("User-defined" )); |
168 | connect(cbtype, SIGNAL(highlighted(int)), |
169 | this, SLOT(cbtypeChanged(int))); |
170 | tl->addWidget(cbtype, 5, 1); |
171 | tmp = i18n("Callback type" ); |
172 | |
173 | cbtype_l->setWhatsThis(tmp); |
174 | cbtype->setWhatsThis(tmp); |
175 | |
176 | cbphone_l = new QLabel(i18n("Call&back number:" ), this); |
177 | tl->addWidget(cbphone_l, 6, 0); |
178 | |
179 | cbphone = new QLineEdit(this); |
180 | cbphone_l->setBuddy(cbphone); |
181 | cbphone->setMaxLength(140); |
182 | tl->addWidget(cbphone, 6, 1); |
183 | tmp = i18n("Callback phone number" ); |
184 | |
185 | cbphone_l->setWhatsThis(tmp); |
186 | cbphone->setWhatsThis(tmp); |
187 | |
188 | pppdargs = new QPushButton(i18n("Customize &pppd Arguments..." ), this); |
189 | connect(pppdargs, SIGNAL(clicked()), SLOT(pppdargsbutton())); |
190 | tl->addWidget(pppdargs, 7, 0, 1, 2, Qt::AlignCenter); |
191 | |
192 | // Set defaults if editing an existing connection |
193 | if(!isnewaccount) { |
194 | connectname_l->setText(gpppdata.accname()); |
195 | |
196 | // insert the phone numbers into the listbox |
197 | QString n = gpppdata.phonenumber(); |
198 | QString tmp = "" ; |
199 | int idx = 0; |
200 | while(idx != n.length()) { |
201 | if(n[idx] == ':') { |
202 | if(tmp.length() > 0) |
203 | numbers->insertItem(tmp); |
204 | tmp = "" ; |
205 | } else |
206 | tmp += n[idx]; |
207 | idx++; |
208 | } |
209 | if(tmp.length() > 0) |
210 | numbers->insertItem(tmp); |
211 | |
212 | auth->setCurrentIndex(gpppdata.authMethod()); |
213 | store_password->setChecked(gpppdata.storePassword()); |
214 | cbtype->setCurrentIndex(gpppdata.callbackType()); |
215 | cbphone->setText(gpppdata.callbackPhone()); |
216 | } else { |
217 | // select PAP/CHAP as default |
218 | auth->setCurrentIndex(AUTH_PAPCHAP); |
219 | // select NONE as default |
220 | cbtype->setCurrentIndex(CBTYPE_NONE); |
221 | } |
222 | |
223 | emit cbtypeChanged(cbtype->currentIndex()); |
224 | numbersChanged(); |
225 | tl->activate(); |
226 | } |
227 | |
228 | |
229 | bool DialWidget::save() { |
230 | //first check to make sure that the account name is unique! |
231 | if(connectname_l->text().isEmpty() || |
232 | !gpppdata.isUniqueAccname(connectname_l->text())) { |
233 | return false; |
234 | } else { |
235 | gpppdata.setAccname(connectname_l->text()); |
236 | |
237 | QString number = "" ; |
238 | for(uint i = 0; i < numbers->count(); i++) { |
239 | if(i != 0) |
240 | number += ':'; |
241 | number += numbers->text(i); |
242 | } |
243 | |
244 | gpppdata.setPhonenumber(number); |
245 | gpppdata.setAuthMethod(auth->currentIndex()); |
246 | gpppdata.setStorePassword(store_password->isChecked()); |
247 | gpppdata.setCallbackType(cbtype->currentIndex()); |
248 | gpppdata.setCallbackPhone(cbphone->text()); |
249 | return true; |
250 | } |
251 | } |
252 | |
253 | |
254 | void DialWidget::numbersChanged() { |
255 | int sel = numbers->currentItem(); |
256 | |
257 | del->setEnabled(sel != -1); |
258 | up->setEnabled(sel != -1 && sel != 0); |
259 | down->setEnabled(sel != -1 && sel != (int)numbers->count()-1); |
260 | } |
261 | |
262 | void DialWidget::cbtypeChanged(int value) { |
263 | cbphone_l->setEnabled(value == CBTYPE_USER); |
264 | cbphone->setEnabled(value == CBTYPE_USER); |
265 | } |
266 | |
267 | void DialWidget::selectionChanged(int) { |
268 | numbersChanged(); |
269 | } |
270 | |
271 | |
272 | void DialWidget::addNumber() { |
273 | PhoneNumberDialog dlg(this); |
274 | if(dlg.exec()) { |
275 | numbers->insertItem(dlg.phoneNumber()); |
276 | numbersChanged(); |
277 | } |
278 | } |
279 | |
280 | |
281 | void DialWidget::delNumber() { |
282 | if(numbers->currentItem() != -1) { |
283 | numbers->removeItem(numbers->currentItem()); |
284 | numbersChanged(); |
285 | } |
286 | } |
287 | |
288 | |
289 | void DialWidget::upNumber() { |
290 | int idx = numbers->currentItem(); |
291 | if(idx != -1) { |
292 | QString item = numbers->text(idx); |
293 | numbers->removeItem(idx); |
294 | numbers->insertItem(item, idx-1); |
295 | numbers->setCurrentItem(idx-1); |
296 | numbersChanged(); |
297 | } |
298 | } |
299 | |
300 | |
301 | void DialWidget::downNumber() { |
302 | int idx = numbers->currentItem(); |
303 | if(idx != -1) { |
304 | QString item = numbers->text(idx); |
305 | numbers->removeItem(idx); |
306 | numbers->insertItem(item, idx+1); |
307 | numbers->setCurrentItem(idx+1); |
308 | numbersChanged(); |
309 | } |
310 | } |
311 | |
312 | |
313 | void DialWidget::pppdargsbutton() { |
314 | PPPdArguments pa(this); |
315 | pa.exec(); |
316 | } |
317 | |
318 | |
319 | |
320 | ///////////////////////////////////////////////////////////////////////////// |
321 | // ExecWidget |
322 | ///////////////////////////////////////////////////////////////////////////// |
323 | ExecWidget::ExecWidget(QWidget *parent, bool isnewaccount) : |
324 | QWidget(parent) |
325 | { |
326 | QVBoxLayout *tl = new QVBoxLayout(parent); |
327 | tl->setSpacing(KDialog::spacingHint()); |
328 | tl->setMargin(0); |
329 | |
330 | QLabel *l = new QLabel(\ |
331 | i18n("Here you can select commands to run at certain stages of the\n" |
332 | "connection. The commands are run with your real user id, so\n" |
333 | "you cannot run any commands here requiring root permissions\n" |
334 | "(unless, of course, you are root).\n\n" |
335 | "Be sure to supply the whole path to the program otherwise\n" |
336 | "kppp might be unable to find it." ), parent); |
337 | l->setMinimumHeight(l->sizeHint().height()); |
338 | tl->addWidget(l); |
339 | tl->addStretch(1); |
340 | |
341 | QGridLayout *l1 = new QGridLayout( ); |
342 | l1->setMargin( 10 ); |
343 | tl->addLayout(l1); |
344 | l1->setColumnStretch(0, 0); |
345 | l1->setColumnStretch(1, 1); |
346 | |
347 | before_connect_l = new QLabel(i18n("&Before connect:" ), parent); |
348 | before_connect_l->setAlignment(Qt::AlignVCenter); |
349 | l1->addWidget(before_connect_l, 0, 0); |
350 | before_connect = new QLineEdit(parent); |
351 | before_connect_l->setBuddy(before_connect); |
352 | before_connect->setMaxLength(COMMAND_SIZE); |
353 | l1->addWidget(before_connect, 0, 1); |
354 | QString tmp = i18n("Allows you to run a program <b>before</b> a connection\n" |
355 | "is established. It is called immediately before\n" |
356 | "dialing has begun.\n\n" |
357 | "This might be useful, e.g. to stop HylaFAX blocking the\n" |
358 | "modem." ); |
359 | |
360 | before_connect_l->setWhatsThis(tmp); |
361 | before_connect->setWhatsThis(tmp); |
362 | |
363 | command_label = new QLabel(i18n("&Upon connect:" ), parent); |
364 | command_label->setAlignment(Qt::AlignVCenter); |
365 | l1->addWidget(command_label, 1, 0); |
366 | command = new QLineEdit(parent); |
367 | command_label->setBuddy(command); |
368 | command->setMaxLength(COMMAND_SIZE); |
369 | l1->addWidget(command, 1, 1); |
370 | tmp = i18n("Allows you to run a program <b>after</b> a connection\n" |
371 | "is established. When your program is called, all\n" |
372 | "preparations for an Internet connection are finished.\n" |
373 | "\n" |
374 | "Very useful for fetching mail and news" ); |
375 | |
376 | command_label->setWhatsThis(tmp); |
377 | command->setWhatsThis(tmp); |
378 | |
379 | predisconnect_label = new QLabel(i18n("Before &disconnect:" ), |
380 | parent); |
381 | predisconnect_label->setAlignment(Qt::AlignVCenter); |
382 | l1->addWidget(predisconnect_label, 2, 0); |
383 | predisconnect = new QLineEdit(parent); |
384 | predisconnect_label->setBuddy(predisconnect); |
385 | predisconnect->setMaxLength(COMMAND_SIZE); |
386 | l1->addWidget(predisconnect, 2, 1); |
387 | tmp = i18n("Allows you to run a program <b>before</b> a connection\n" |
388 | "is closed. The connection will stay open until\n" |
389 | "the program exits." ); |
390 | |
391 | predisconnect_label->setWhatsThis(tmp); |
392 | predisconnect->setWhatsThis(tmp); |
393 | |
394 | discommand_label = new QLabel(i18n("U&pon disconnect:" ), |
395 | parent); |
396 | discommand_label->setAlignment(Qt::AlignVCenter); |
397 | l1->addWidget(discommand_label, 3, 0); |
398 | |
399 | discommand = new QLineEdit(parent); |
400 | discommand_label->setBuddy(discommand); |
401 | discommand->setMaxLength(COMMAND_SIZE); |
402 | l1->addWidget(discommand, 3, 1); |
403 | tmp = i18n("Allows you to run a program <b>after</b> a connection\n" |
404 | "has been closed." ); |
405 | |
406 | discommand_label->setWhatsThis(tmp); |
407 | discommand->setWhatsThis(tmp); |
408 | |
409 | // extra space between entries |
410 | l1->addItem(new QSpacerItem(0, 5), 1, 0); |
411 | l1->addItem(new QSpacerItem(0, 5), 3, 0); |
412 | |
413 | tl->addStretch(1); |
414 | tl->activate(); |
415 | |
416 | // Set defaults if editing an existing connection |
417 | if(!isnewaccount) { |
418 | before_connect->setText(gpppdata.command_before_connect()); |
419 | command->setText(gpppdata.command_on_connect()); |
420 | discommand->setText(gpppdata.command_on_disconnect()); |
421 | predisconnect->setText(gpppdata.command_before_disconnect()); |
422 | } |
423 | } |
424 | |
425 | |
426 | bool ExecWidget::save() { |
427 | gpppdata.setCommand_before_connect(before_connect->text()); |
428 | gpppdata.setCommand_on_connect(command->text()); |
429 | gpppdata.setCommand_before_disconnect(predisconnect->text()); |
430 | gpppdata.setCommand_on_disconnect(discommand->text()); |
431 | return true; |
432 | } |
433 | |
434 | |
435 | |
436 | ///////////////////////////////////////////////////////////////////////////// |
437 | // |
438 | // IPWidget |
439 | // |
440 | ///////////////////////////////////////////////////////////////////////////// |
441 | IPWidget::IPWidget( QWidget *parent, bool isnewaccount, const char *name ) |
442 | : QWidget(parent) |
443 | { |
444 | setObjectName(name); |
445 | QVBoxLayout *topLayout = new QVBoxLayout(parent); |
446 | topLayout->setSpacing(KDialog::spacingHint()); |
447 | |
448 | box = new Q3GroupBox(1, Qt::Horizontal,i18n("C&onfiguration" ), parent); |
449 | box->setInsideSpacing(KDialog::spacingHint()); |
450 | |
451 | rb = new Q3ButtonGroup(parent); |
452 | rb->hide(); |
453 | connect(rb, SIGNAL(clicked(int)), |
454 | SLOT(hitIPSelect(int))); |
455 | |
456 | dynamicadd_rb = new QRadioButton(box); |
457 | dynamicadd_rb->setText(i18n("Dynamic IP address" )); |
458 | dynamicadd_rb->setWhatsThis( |
459 | i18n("Select this option when your computer gets an\n" |
460 | "internet address (IP) every time a\n" |
461 | "connection is made.\n" |
462 | "\n" |
463 | "Almost every Internet Service Provider uses\n" |
464 | "this method, so this should be turned on." )); |
465 | |
466 | staticadd_rb = new QRadioButton(box); |
467 | staticadd_rb->setText(i18n("Static IP address" )); |
468 | rb->insert(dynamicadd_rb, 0); |
469 | rb->insert(staticadd_rb, 1); |
470 | staticadd_rb->setWhatsThis( |
471 | i18n("Select this option when your computer has a\n" |
472 | "fixed internet address (IP). Most computers\n" |
473 | "do not have one, so you should probably select\n" |
474 | "dynamic IP addressing unless you know what you\n" |
475 | "are doing." )); |
476 | |
477 | QWidget *ipWidget = new QWidget(box); |
478 | QGridLayout *ipLayout = new QGridLayout(ipWidget); |
479 | ipLayout->setSpacing(KDialog::spacingHint()); |
480 | |
481 | ipaddress_label = new QLabel(i18n("&IP address:" ), ipWidget); |
482 | QString tmp = i18n("If your computer has a permanent internet\n" |
483 | "address, you must supply your IP address here." ); |
484 | ipLayout->addWidget(ipaddress_label, 0, 0); |
485 | |
486 | ipaddress_l = new IPLineEdit(ipWidget); |
487 | ipaddress_label->setBuddy(ipaddress_l); |
488 | ipLayout->addWidget(ipaddress_l, 0, 1); |
489 | |
490 | ipaddress_label->setWhatsThis(tmp); |
491 | ipaddress_l->setWhatsThis(tmp); |
492 | |
493 | sub_label = new QLabel(i18n("&Subnet mask:" ), ipWidget); |
494 | tmp = i18n("<p>If your computer has a static Internet address,\n" |
495 | "you must supply a network mask here. In almost\n" |
496 | "all cases this netmask will be <b>255.255.255.0</b>,\n" |
497 | "but your mileage may vary.\n" |
498 | "\n" |
499 | "If unsure, contact your Internet Service Provider" ); |
500 | ipLayout->addWidget(sub_label, 1, 0); |
501 | |
502 | subnetmask_l = new IPLineEdit(ipWidget); |
503 | sub_label->setBuddy(subnetmask_l); |
504 | ipLayout->addWidget(subnetmask_l, 1, 1); |
505 | |
506 | sub_label->setWhatsThis(tmp); |
507 | subnetmask_l->setWhatsThis(tmp); |
508 | |
509 | autoname = new QCheckBox(i18n("&Auto-configure hostname from this IP" ), parent); |
510 | autoname->setChecked(gpppdata.autoname()); |
511 | connect(autoname,SIGNAL(toggled(bool)), |
512 | this,SLOT(autoname_t(bool))); |
513 | |
514 | autoname->setWhatsThis( |
515 | i18n("<p>Whenever you connect, this reconfigures\n" |
516 | "your hostname to match the IP address you\n" |
517 | "got from the PPP server. This may be useful\n" |
518 | "if you need to use a protocol which depends\n" |
519 | "on this information, but it can also cause several\n" |
520 | "<a href=\"kppp-7.html#autohostname\">problems</a>.\n" |
521 | "\n" |
522 | "Do not enable this unless you really need it." )); |
523 | |
524 | topLayout->addWidget(box); |
525 | topLayout->addWidget(autoname); |
526 | topLayout->addStretch(); |
527 | |
528 | //load info from gpppdata |
529 | if(!isnewaccount) { |
530 | if(gpppdata.ipaddr() == "0.0.0.0" && |
531 | gpppdata.subnetmask() == "0.0.0.0" ) { |
532 | dynamicadd_rb->setChecked(true); |
533 | hitIPSelect(0); |
534 | autoname->setChecked(gpppdata.autoname()); |
535 | } |
536 | else { |
537 | ipaddress_l->setText(gpppdata.ipaddr()); |
538 | subnetmask_l->setText(gpppdata.subnetmask()); |
539 | staticadd_rb->setChecked(true); |
540 | autoname->setChecked(false); |
541 | } |
542 | } |
543 | else { |
544 | dynamicadd_rb->setChecked(true); |
545 | hitIPSelect(0); |
546 | } |
547 | |
548 | } |
549 | |
550 | void IPWidget::autoname_t(bool on) { |
551 | static bool was_warned = false; |
552 | |
553 | // big-fat warning when selecting the auto configure hostname option |
554 | if(on && !was_warned) { |
555 | KMessageBox::information(this, |
556 | i18n("Selecting this option might cause some weird " |
557 | "problems with the X-server and applications " |
558 | "while kppp is connected. Do not use it unless " |
559 | "you know what you are doing.\n" |
560 | "For more information take a look at the " |
561 | "handbook (or help) in the \"Frequently " |
562 | "asked questions\" section." ), |
563 | i18n("Warning" )); |
564 | was_warned = true; |
565 | } |
566 | } |
567 | |
568 | |
569 | void IPWidget::save() { |
570 | if(dynamicadd_rb->isChecked()) { |
571 | gpppdata.setIpaddr("0.0.0.0" ); |
572 | gpppdata.setSubnetmask("0.0.0.0" ); |
573 | } else { |
574 | gpppdata.setIpaddr(ipaddress_l->text()); |
575 | gpppdata.setSubnetmask(subnetmask_l->text()); |
576 | } |
577 | gpppdata.setAutoname(autoname->isChecked()); |
578 | } |
579 | |
580 | |
581 | void IPWidget::hitIPSelect( int i ) { |
582 | if(i == 0) { |
583 | ipaddress_label->setEnabled(false); |
584 | sub_label->setEnabled(false); |
585 | ipaddress_l->setEnabled(false); |
586 | subnetmask_l->setEnabled(false); |
587 | } |
588 | else { |
589 | ipaddress_label->setEnabled(true); |
590 | sub_label->setEnabled(true); |
591 | ipaddress_l->setEnabled(true); |
592 | subnetmask_l->setEnabled(true); |
593 | } |
594 | } |
595 | |
596 | |
597 | |
598 | DNSWidget::DNSWidget( QWidget *parent, bool isnewaccount ) |
599 | : QWidget(parent) |
600 | { |
601 | QVBoxLayout *topLayout = new QVBoxLayout(parent); |
602 | topLayout->setSpacing(KDialog::spacingHint()); |
603 | topLayout->addWidget(this); |
604 | |
605 | // box = new QGroupBox(this); |
606 | QGridLayout *tl = new QGridLayout(this ); |
607 | tl->setSpacing( KDialog::spacingHint() ); |
608 | |
609 | dnsdomain_label = new QLabel(i18n("Domain &name:" ), this); |
610 | tl->addWidget(dnsdomain_label, 0, 0); |
611 | |
612 | dnsdomain = new QLineEdit(this); |
613 | dnsdomain_label->setBuddy(dnsdomain); |
614 | dnsdomain->setMaxLength(DOMAIN_SIZE); |
615 | tl->addWidget(dnsdomain, 0, 1); |
616 | QString tmp = i18n("If you enter a domain name here, this domain\n" |
617 | "name is used for your computer while you are\n" |
618 | "connected. When the connection is closed, the\n" |
619 | "original domain name of your computer is\n" |
620 | "restored.\n" |
621 | "\n" |
622 | "If you leave this field blank, no changes are\n" |
623 | "made to the domain name." ); |
624 | |
625 | dnsdomain_label->setWhatsThis(tmp); |
626 | dnsdomain->setWhatsThis(tmp); |
627 | |
628 | conf_label = new QLabel(i18n("C&onfiguration:" ), this); |
629 | tl->addWidget(conf_label, 1, 0); |
630 | |
631 | bg = new Q3ButtonGroup("Group" , this); |
632 | conf_label->setBuddy(bg); |
633 | connect(bg, SIGNAL(clicked(int)), SLOT(DNS_Mode_Selected(int))); |
634 | bg->hide(); |
635 | |
636 | autodns = new QRadioButton(i18n("Automatic" ), this); |
637 | bg->insert(autodns, 0); |
638 | tl->addWidget(autodns, 1, 1); |
639 | // no automatic DNS detection for pppd < 2.3.7 |
640 | if(!gpppdata.pppdVersionMin(2, 3, 7)) |
641 | autodns->setEnabled(false); |
642 | |
643 | mandns = new QRadioButton(i18n("Manual" ), this); |
644 | bg->insert(mandns, 1); |
645 | tl->addWidget(mandns, 2, 1); |
646 | |
647 | dns_label = new QLabel(i18n("DNS &IP address:" ), this); |
648 | tl->addWidget(dns_label, 3, 0); |
649 | |
650 | QHBoxLayout *l2 = new QHBoxLayout; |
651 | tl->addLayout(l2, 3, 1); |
652 | dnsipaddr = new IPLineEdit(this); |
653 | dns_label->setBuddy(dnsipaddr); |
654 | connect(dnsipaddr, SIGNAL(returnPressed()), |
655 | SLOT(adddns())); |
656 | connect(dnsipaddr, SIGNAL(textChanged(QString)), |
657 | SLOT(DNS_Edit_Changed(QString))); |
658 | l2->addWidget(dnsipaddr, 1); |
659 | l2->addStretch(1); |
660 | tmp = i18n("<p>Allows you to specify a new DNS server to be\n" |
661 | "used while you are connected. When the\n" |
662 | "connection is closed, this DNS entry will be\n" |
663 | "removed again.\n" |
664 | "\n" |
665 | "To add a DNS server, type in the IP address of\n" |
666 | "the DNS server here and click on <b>Add</b>" ); |
667 | |
668 | dns_label->setWhatsThis( tmp); |
669 | dnsipaddr->setWhatsThis( tmp); |
670 | |
671 | QHBoxLayout *l1 = new QHBoxLayout; |
672 | tl->addLayout(l1, 4, 1); |
673 | add = new QPushButton(i18n("&Add" ), this); |
674 | connect(add, SIGNAL(clicked()), SLOT(adddns())); |
675 | int width = add->sizeHint().width(); |
676 | width = qMax(width,60); |
677 | add->setMinimumWidth(width); |
678 | l1->addWidget(add); |
679 | l1->addStretch(1); |
680 | add->setWhatsThis( |
681 | i18n("Click this button to add the DNS server\n" |
682 | "specified in the field above. The entry\n" |
683 | "will then be added to the list below" )); |
684 | |
685 | remove = new QPushButton(i18n("&Remove" ), this); |
686 | connect(remove, SIGNAL(clicked()), SLOT(removedns())); |
687 | width = remove->sizeHint().width(); |
688 | width = qMax(width,60); |
689 | remove->setMinimumWidth(width); |
690 | l1->addWidget(remove); |
691 | remove->setWhatsThis( |
692 | i18n("Click this button to remove the selected DNS\n" |
693 | "server entry from the list below" )); |
694 | |
695 | servers_label = new QLabel(i18n("DNS address &list:" ), this); |
696 | servers_label->setAlignment(Qt::AlignTop|Qt::AlignLeft); |
697 | tl->addWidget(servers_label, 5, 0); |
698 | |
699 | dnsservers = new Q3ListBox(this); |
700 | servers_label->setBuddy(dnsservers); |
701 | dnsservers->setMinimumSize(150, 80); |
702 | connect(dnsservers, SIGNAL(highlighted(int)), |
703 | SLOT(DNS_Entry_Selected(int))); |
704 | tl->addWidget(dnsservers, 5, 1); |
705 | tmp = i18n("<p>This shows all defined DNS servers to use\n" |
706 | "while you are connected. Use the <b>Add</b> and\n" |
707 | "<b>Remove</b> buttons to modify the list" ); |
708 | |
709 | servers_label->setWhatsThis(tmp); |
710 | dnsservers->setWhatsThis(tmp); |
711 | |
712 | exdnsdisabled_toggle = new QCheckBox(i18n( \ |
713 | "&Disable existing DNS servers during connection" ), |
714 | this); |
715 | exdnsdisabled_toggle->setChecked(gpppdata.exDNSDisabled()); |
716 | tl->addWidget(exdnsdisabled_toggle, 6, 0, 1, 2, Qt::AlignCenter); |
717 | exdnsdisabled_toggle->setWhatsThis( |
718 | i18n("<p>When this option is selected, all DNS\n" |
719 | "servers specified in <tt>/etc/resolv.conf</tt> are\n" |
720 | "temporary disabled while the dialup connection\n" |
721 | "is established. After the connection is\n" |
722 | "closed, the servers will be re-enabled\n" |
723 | "\n" |
724 | "Typically, there is no reason to use this\n" |
725 | "option, but it may become useful under \n" |
726 | "some circumstances." )); |
727 | |
728 | |
729 | // restore data if editing |
730 | if(!isnewaccount) { |
731 | dnsservers->insertStringList(gpppdata.dns()); |
732 | dnsdomain->setText(gpppdata.domain()); |
733 | } |
734 | |
735 | int mode = gpppdata.autoDNS() ? 0 : 1; |
736 | bg->setButton(mode); |
737 | DNS_Mode_Selected(mode); |
738 | |
739 | tl->activate(); |
740 | } |
741 | |
742 | void DNSWidget::DNS_Edit_Changed(const QString &text) { |
743 | QRegExp r("[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+" ); |
744 | add->setEnabled(text.contains(r)); |
745 | } |
746 | |
747 | void DNSWidget::DNS_Entry_Selected(int) { |
748 | remove->setEnabled(true); |
749 | } |
750 | |
751 | void DNSWidget::DNS_Mode_Selected(int mode) { |
752 | bool on = (mode == 1); |
753 | dns_label->setEnabled(on); |
754 | servers_label->setEnabled(on); |
755 | dnsipaddr->setText("" ); |
756 | dnsipaddr->setEnabled(on); |
757 | add->setEnabled(false); |
758 | remove->setEnabled(dnsservers->count()>0 && on); |
759 | dnsservers->clearSelection(); |
760 | dnsservers->setEnabled(on); |
761 | dnsservers->triggerUpdate(false); |
762 | } |
763 | |
764 | void DNSWidget::save() { |
765 | gpppdata.setAutoDNS(bg->id(bg->selected()) == 0); |
766 | QStringList serverlist; |
767 | for(uint i=0; i < dnsservers->count(); i++) |
768 | serverlist.append(dnsservers->text(i)); |
769 | gpppdata.setDns(serverlist); |
770 | |
771 | // strip leading dot |
772 | QString s(dnsdomain->text()); |
773 | if(s.left(1) == "." ) |
774 | gpppdata.setDomain(s.mid(1)); |
775 | else |
776 | gpppdata.setDomain(dnsdomain->text()); |
777 | |
778 | gpppdata.setExDNSDisabled(exdnsdisabled_toggle->isChecked()); |
779 | } |
780 | |
781 | |
782 | void DNSWidget::adddns() { |
783 | if(dnsservers->count() < MAX_DNS_ENTRIES) { |
784 | dnsservers->insertItem(dnsipaddr->text()); |
785 | dnsipaddr->setText("" ); |
786 | } |
787 | } |
788 | |
789 | |
790 | void DNSWidget::removedns() { |
791 | int i; |
792 | i = dnsservers->currentItem(); |
793 | if(i != -1) |
794 | dnsservers->removeItem(i); |
795 | remove->setEnabled(dnsservers->count()>0); |
796 | } |
797 | |
798 | |
799 | // |
800 | // GatewayWidget |
801 | // |
802 | GatewayWidget::GatewayWidget( QWidget *parent, bool isnewaccount ) |
803 | : QWidget(parent) |
804 | { |
805 | QVBoxLayout *topLayout = new QVBoxLayout(parent); |
806 | topLayout->setSpacing(KDialog::spacingHint()); |
807 | |
808 | box = new Q3GroupBox (1, Qt::Horizontal,i18n("C&onfiguration" ), parent); |
809 | box->setInsideSpacing(KDialog::spacingHint()); |
810 | |
811 | rb = new Q3ButtonGroup(parent); |
812 | rb->hide(); |
813 | connect(rb, SIGNAL(clicked(int)), SLOT(hitGatewaySelect(int))); |
814 | |
815 | defaultgateway = new QRadioButton(box); |
816 | defaultgateway->setText(i18n("Default gateway" )); |
817 | rb->insert(defaultgateway, 0); |
818 | defaultgateway->setWhatsThis( |
819 | i18n("This makes the PPP peer computer (the computer\n" |
820 | "you are connected to with your modem) to act as\n" |
821 | "a gateway. Your computer will send all packets not\n" |
822 | "going to a computer inside your local net to this\n" |
823 | "computer, which will route these packets.\n" |
824 | "\n" |
825 | "This is the default for most ISPs, so you should\n" |
826 | "probably leave this option on." )); |
827 | |
828 | |
829 | staticgateway = new QRadioButton(box); |
830 | staticgateway->setText(i18n("Static gateway" )); |
831 | rb->insert(staticgateway, 1); |
832 | staticgateway->setWhatsThis( |
833 | i18n("<p>Allows you to specify which computer you want\n" |
834 | "to use as gateway (see <i>Default Gateway</i> above)" )); |
835 | |
836 | QWidget *gateBox = new QWidget(box); |
837 | QHBoxLayout *hboxLayout1 = new QHBoxLayout(gateBox); |
838 | gate_label = new QLabel(i18n("Gateway &IP address:" ), gateBox); |
839 | hboxLayout1->addWidget(gate_label); |
840 | gatewayaddr = new IPLineEdit(gateBox); |
841 | hboxLayout1->addWidget(gatewayaddr); |
842 | gate_label->setBuddy(gatewayaddr); |
843 | |
844 | defaultroute = new QCheckBox(i18n("&Assign the default route to this gateway" ), |
845 | parent); |
846 | defaultroute->setWhatsThis( |
847 | i18n("If this option is enabled, all packets not\n" |
848 | "going to the local net are routed through\n" |
849 | "the PPP connection.\n" |
850 | "\n" |
851 | "Normally, you should turn this on" )); |
852 | |
853 | topLayout->addWidget(box); |
854 | topLayout->addWidget(defaultroute); |
855 | topLayout->addStretch(); |
856 | |
857 | //load info from gpppdata |
858 | if(!isnewaccount) { |
859 | if(gpppdata.gateway() == "0.0.0.0" ) { |
860 | defaultgateway->setChecked(true); |
861 | hitGatewaySelect(0); |
862 | } |
863 | else { |
864 | gatewayaddr->setText(gpppdata.gateway()); |
865 | staticgateway->setChecked(true); |
866 | } |
867 | defaultroute->setChecked(gpppdata.defaultroute()); |
868 | } |
869 | else { |
870 | defaultgateway->setChecked(true); |
871 | hitGatewaySelect(0); |
872 | defaultroute->setChecked(true); |
873 | } |
874 | } |
875 | |
876 | void GatewayWidget::save() { |
877 | gpppdata.setGateway(gatewayaddr->text()); |
878 | gpppdata.setDefaultroute(defaultroute->isChecked()); |
879 | } |
880 | |
881 | |
882 | void GatewayWidget::hitGatewaySelect( int i ) { |
883 | if(i == 0) { |
884 | gatewayaddr->setText("0.0.0.0" ); |
885 | gatewayaddr->setEnabled(false); |
886 | gate_label->setEnabled(false); |
887 | } |
888 | else { |
889 | gatewayaddr->setEnabled(true); |
890 | gatewayaddr->setText("" ); |
891 | gate_label->setEnabled(true); |
892 | } |
893 | } |
894 | |
895 | |
896 | |
897 | ScriptWidget::ScriptWidget( QWidget *parent, bool isnewaccount, const char *name ) |
898 | : QWidget(parent) |
899 | { |
900 | setObjectName(name); |
901 | QVBoxLayout *tl = new QVBoxLayout(parent); |
902 | tl->setSpacing(KDialog::spacingHint()); |
903 | tl->setMargin(0); |
904 | se = new ScriptEdit(parent); |
905 | connect(se, SIGNAL(returnPressed()), SLOT(addButton())); |
906 | tl->addWidget(se); |
907 | |
908 | // insert equal-sized buttons |
909 | KDialogButtonBox *bbox = new KDialogButtonBox(parent); |
910 | add = bbox->addButton(i18n("&Add" ),QDialogButtonBox::ActionRole); |
911 | connect(add, SIGNAL(clicked()), SLOT(addButton())); |
912 | insert = bbox->addButton(i18n("&Insert" ),QDialogButtonBox::ActionRole); |
913 | connect(insert, SIGNAL(clicked()), SLOT(insertButton())); |
914 | remove = bbox->addButton(i18n("&Remove" ),QDialogButtonBox::ActionRole); |
915 | connect(remove, SIGNAL(clicked()), SLOT(removeButton())); |
916 | tl->addWidget(bbox); |
917 | |
918 | QHBoxLayout *l12 = new QHBoxLayout; |
919 | tl->addLayout(l12); |
920 | stl = new Q3ListBox(parent); |
921 | stl->setVScrollBarMode( Q3ScrollView::AlwaysOff ); |
922 | connect(stl, SIGNAL(highlighted(int)), SLOT(stlhighlighted(int))); |
923 | stl->setMinimumSize(QSize(70, 140)); |
924 | |
925 | sl = new Q3ListBox(parent); |
926 | sl->setVScrollBarMode( Q3ScrollView::AlwaysOff ); |
927 | connect(sl, SIGNAL(highlighted(int)), SLOT(slhighlighted(int))); |
928 | sl->setMinimumSize(QSize(150, 140)); |
929 | |
930 | slb = new QScrollBar(parent); |
931 | slb->setFixedWidth(slb->sizeHint().width()); |
932 | connect(slb, SIGNAL(valueChanged(int)), SLOT(scrolling(int))); |
933 | |
934 | l12->addWidget(stl, 1); |
935 | l12->addWidget(sl, 3); |
936 | l12->addWidget(slb, 0); |
937 | |
938 | //load data from gpppdata |
939 | if(!isnewaccount) { |
940 | QStringList &comlist = gpppdata.scriptType(); |
941 | QStringList &arglist = gpppdata.script(); |
942 | QStringList::Iterator itcom = comlist.begin(); |
943 | QStringList::Iterator itarg = arglist.begin(); |
944 | |
945 | for ( ; |
946 | itcom != comlist.end() && itarg != arglist.end(); |
947 | ++itcom, ++itarg ) |
948 | { |
949 | stl->insertItem(*itcom); |
950 | sl->insertItem(*itarg); |
951 | } |
952 | } |
953 | |
954 | insert->setEnabled(false); |
955 | remove->setEnabled(false); |
956 | adjustScrollBar(); |
957 | tl->activate(); |
958 | } |
959 | |
960 | bool ScriptWidget::check() { |
961 | uint lstart = 0; |
962 | uint lend = 0; |
963 | uint errcnt = 0; |
964 | |
965 | if(sl->count() > 0) { |
966 | for( uint i=0; i <= sl->count()-1; i++) { |
967 | if(stl->text(i) == "LoopStart" ) { |
968 | lstart++; |
969 | } |
970 | if (stl->text(i) == "LoopEnd" ) { |
971 | lend++; |
972 | } |
973 | if ( lend > lstart ) errcnt++; |
974 | } |
975 | return ( (errcnt == 0 ) && (lstart == lend) ); |
976 | } |
977 | return true; |
978 | } |
979 | |
980 | |
981 | void ScriptWidget::save() { |
982 | QStringList typelist, arglist; |
983 | for(uint i=0; i < sl->count(); i++) { |
984 | typelist.append(stl->text(i)); |
985 | arglist.append(sl->text(i)); |
986 | } |
987 | gpppdata.setScriptType(typelist); |
988 | gpppdata.setScript(arglist); |
989 | } |
990 | |
991 | |
992 | |
993 | void ScriptWidget::adjustScrollBar() { |
994 | if((int)sl->count() <= sl->numItemsVisible()) |
995 | slb->setRange(0, 0); |
996 | else |
997 | slb->setRange(0, (sl->count() - sl->numItemsVisible())+1); |
998 | } |
999 | |
1000 | |
1001 | void ScriptWidget::scrolling(int i) { |
1002 | sl->setTopItem(i); |
1003 | stl->setTopItem(i); |
1004 | } |
1005 | |
1006 | |
1007 | void ScriptWidget::slhighlighted(int i) { |
1008 | insert->setEnabled(true); |
1009 | remove->setEnabled(true); |
1010 | stl->setCurrentItem(i); |
1011 | } |
1012 | |
1013 | |
1014 | void ScriptWidget::stlhighlighted(int i) { |
1015 | insert->setEnabled(true); |
1016 | remove->setEnabled(true); |
1017 | sl->setCurrentItem(i); |
1018 | } |
1019 | |
1020 | |
1021 | void ScriptWidget::addButton() { |
1022 | //don't allow more than the maximum script entries |
1023 | if(sl->count() == MAX_SCRIPT_ENTRIES-1) |
1024 | return; |
1025 | |
1026 | switch(se->type()) { |
1027 | case ScriptEdit::Expect: |
1028 | stl->insertItem("Expect" ); |
1029 | sl->insertItem(se->text()); |
1030 | break; |
1031 | |
1032 | case ScriptEdit::Send: |
1033 | stl->insertItem("Send" ); |
1034 | sl->insertItem(se->text()); |
1035 | break; |
1036 | |
1037 | case ScriptEdit::SendNoEcho: |
1038 | stl->insertItem("SendNoEcho" ); |
1039 | sl->insertItem(se->text()); |
1040 | break; |
1041 | |
1042 | case ScriptEdit::Pause: |
1043 | stl->insertItem("Pause" ); |
1044 | sl->insertItem(se->text()); |
1045 | break; |
1046 | |
1047 | case ScriptEdit::Hangup: |
1048 | stl->insertItem("Hangup" ); |
1049 | sl->insertItem("" ); |
1050 | break; |
1051 | |
1052 | case ScriptEdit::Answer: |
1053 | stl->insertItem("Answer" ); |
1054 | sl->insertItem("" ); |
1055 | break; |
1056 | |
1057 | case ScriptEdit::Timeout: |
1058 | stl->insertItem("Timeout" ); |
1059 | sl->insertItem(se->text()); |
1060 | break; |
1061 | |
1062 | case ScriptEdit::Password: |
1063 | stl->insertItem("Password" ); |
1064 | sl->insertItem(se->text()); |
1065 | break; |
1066 | |
1067 | case ScriptEdit::ID: |
1068 | stl->insertItem("ID" ); |
1069 | sl->insertItem(se->text()); |
1070 | break; |
1071 | |
1072 | case ScriptEdit::Prompt: |
1073 | stl->insertItem("Prompt" ); |
1074 | sl->insertItem(se->text()); |
1075 | break; |
1076 | |
1077 | case ScriptEdit::PWPrompt: |
1078 | stl->insertItem("PWPrompt" ); |
1079 | sl->insertItem(se->text()); |
1080 | break; |
1081 | |
1082 | case ScriptEdit::LoopStart: |
1083 | stl->insertItem("LoopStart" ); |
1084 | sl->insertItem(se->text()); |
1085 | break; |
1086 | |
1087 | case ScriptEdit::LoopEnd: |
1088 | stl->insertItem("LoopEnd" ); |
1089 | sl->insertItem(se->text()); |
1090 | break; |
1091 | |
1092 | case ScriptEdit::Scan: |
1093 | stl->insertItem("Scan" ); |
1094 | sl->insertItem(se->text()); |
1095 | break; |
1096 | |
1097 | case ScriptEdit::Save: |
1098 | stl->insertItem("Save" ); |
1099 | sl->insertItem(se->text()); |
1100 | break; |
1101 | |
1102 | default: |
1103 | break; |
1104 | } |
1105 | |
1106 | //get the scrollbar adjusted, and scroll the list so we can see what |
1107 | //we're adding to |
1108 | adjustScrollBar(); |
1109 | slb->setValue(slb->maximum()); |
1110 | |
1111 | //clear the text in the entry box |
1112 | se->setText("" ); |
1113 | } |
1114 | |
1115 | |
1116 | void ScriptWidget::insertButton() { |
1117 | //exit if there is no highlighted item, or we've reached the |
1118 | //maximum entries in the script list |
1119 | if(sl->currentItem() < 0 || (sl->count() == MAX_SCRIPT_ENTRIES-1)) |
1120 | return; |
1121 | |
1122 | switch(se->type()) { |
1123 | case ScriptEdit::Expect: |
1124 | stl->insertItem("Expect" , stl->currentItem()); |
1125 | sl->insertItem(se->text(), sl->currentItem()); |
1126 | break; |
1127 | |
1128 | case ScriptEdit::Send: |
1129 | stl->insertItem("Send" , stl->currentItem()); |
1130 | sl->insertItem(se->text(), sl->currentItem()); |
1131 | break; |
1132 | |
1133 | case ScriptEdit::SendNoEcho: |
1134 | stl->insertItem("SendNoEcho" , stl->currentItem()); |
1135 | sl->insertItem(se->text(), sl->currentItem()); |
1136 | break; |
1137 | |
1138 | case ScriptEdit::Pause: |
1139 | stl->insertItem("Pause" , stl->currentItem()); |
1140 | sl->insertItem(se->text(), sl->currentItem()); |
1141 | break; |
1142 | |
1143 | case ScriptEdit::Hangup: |
1144 | stl->insertItem("Hangup" , stl->currentItem()); |
1145 | sl->insertItem("" , sl->currentItem()); |
1146 | break; |
1147 | |
1148 | case ScriptEdit::Answer: |
1149 | stl->insertItem("Answer" , stl->currentItem()); |
1150 | sl->insertItem("" , sl->currentItem()); |
1151 | break; |
1152 | |
1153 | case ScriptEdit::Timeout: |
1154 | stl->insertItem("Timeout" , stl->currentItem()); |
1155 | sl->insertItem(se->text(), sl->currentItem()); |
1156 | break; |
1157 | |
1158 | case ScriptEdit::Password: |
1159 | stl->insertItem("Password" , stl->currentItem()); |
1160 | sl->insertItem(se->text(), sl->currentItem()); |
1161 | break; |
1162 | |
1163 | case ScriptEdit::ID: |
1164 | stl->insertItem("ID" , stl->currentItem()); |
1165 | sl->insertItem(se->text(), sl->currentItem()); |
1166 | break; |
1167 | |
1168 | case ScriptEdit::Prompt: |
1169 | stl->insertItem("Prompt" , stl->currentItem()); |
1170 | sl->insertItem(se->text(), sl->currentItem()); |
1171 | break; |
1172 | |
1173 | case ScriptEdit::PWPrompt: |
1174 | stl->insertItem("PWPrompt" , stl->currentItem()); |
1175 | sl->insertItem(se->text(), sl->currentItem()); |
1176 | break; |
1177 | |
1178 | case ScriptEdit::LoopStart: |
1179 | stl->insertItem("LoopStart" , stl->currentItem()); |
1180 | sl->insertItem(se->text(), sl->currentItem()); |
1181 | break; |
1182 | |
1183 | case ScriptEdit::LoopEnd: |
1184 | stl->insertItem("LoopEnd" , stl->currentItem()); |
1185 | sl->insertItem(se->text(), sl->currentItem()); |
1186 | break; |
1187 | |
1188 | case ScriptEdit::Scan: |
1189 | stl->insertItem("Scan" , stl->currentItem()); |
1190 | sl->insertItem(se->text(), sl->currentItem()); |
1191 | break; |
1192 | |
1193 | case ScriptEdit::Save: |
1194 | stl->insertItem("Save" , stl->currentItem()); |
1195 | sl->insertItem(se->text(), sl->currentItem()); |
1196 | break; |
1197 | |
1198 | default: |
1199 | break; |
1200 | } |
1201 | adjustScrollBar(); |
1202 | se->setText("" ); |
1203 | } |
1204 | |
1205 | |
1206 | void ScriptWidget::removeButton() { |
1207 | if(sl->currentItem() >= 0) { |
1208 | int stlc = stl->currentItem(); |
1209 | sl->removeItem(sl->currentItem()); |
1210 | stl->removeItem(stlc); |
1211 | adjustScrollBar(); |
1212 | insert->setEnabled(sl->currentItem() != -1); |
1213 | remove->setEnabled(sl->currentItem() != -1); |
1214 | } |
1215 | } |
1216 | |
1217 | |
1218 | |
1219 | ///////////////////////////////////////////////////////////////////////////// |
1220 | // |
1221 | // Used to specify a new phone number |
1222 | // |
1223 | ///////////////////////////////////////////////////////////////////////////// |
1224 | PhoneNumberDialog::PhoneNumberDialog(QWidget *parent) |
1225 | : KDialog(parent) { |
1226 | setCaption( i18n("Add Phone Number" ) ); |
1227 | setButtons( Ok|Cancel ); |
1228 | setDefaultButton( Ok ); |
1229 | setModal( true ); |
1230 | KWindowSystem::setIcons(winId(), qApp->windowIcon().pixmap(IconSize(KIconLoader::Desktop),IconSize(KIconLoader::Desktop)), qApp->windowIcon().pixmap(IconSize(KIconLoader::Small),IconSize(KIconLoader::Small))); |
1231 | |
1232 | QWidget *hbox = new QWidget(this); |
1233 | QHBoxLayout *hboxLayout2 = new QHBoxLayout(hbox); |
1234 | hbox->setLayout(hboxLayout2); |
1235 | setMainWidget(hbox); |
1236 | |
1237 | hboxLayout2->setSpacing(KDialog::spacingHint()); |
1238 | |
1239 | QLabel *lbl_le = new QLabel(i18n("Enter a phone number:" )); |
1240 | hboxLayout2->addWidget(lbl_le); |
1241 | |
1242 | le = new QLineEdit(); |
1243 | le->setMinimumWidth(125); |
1244 | hboxLayout2->addWidget(le); |
1245 | |
1246 | connect(le, SIGNAL(textChanged(QString)), |
1247 | this, SLOT(textChanged(QString))); |
1248 | |
1249 | le->setFocus(); |
1250 | textChanged("" ); |
1251 | |
1252 | showButtonSeparator(true); |
1253 | } |
1254 | |
1255 | |
1256 | QString PhoneNumberDialog::phoneNumber() { |
1257 | QString s = le->text(); |
1258 | |
1259 | return s; |
1260 | } |
1261 | |
1262 | |
1263 | void PhoneNumberDialog::textChanged(const QString &s) { |
1264 | enableButtonOk(s.length() > 0); |
1265 | } |
1266 | |
1267 | |
1268 | #include "edit.moc" |
1269 | |