00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "edit.h"
00027 #include "pppdata.h"
00028 #include "iplined.h"
00029 #include "auth.h"
00030
00031
00032 #include <opie2/oresource.h>
00033
00034 #include <qpe/applnk.h>
00035 #include <qpe/qpeapplication.h>
00036
00037
00038 #include <qlayout.h>
00039 #include <qmessagebox.h>
00040 #include <qwhatsthis.h>
00041 #include <qregexp.h>
00042 #include <qapplication.h>
00043 #include <qbuttongroup.h>
00044 #include <qvgroupbox.h>
00045 #include <qhbox.h>
00046 #include <qdialog.h>
00047
00048
00049
00050 #include <string.h>
00051 #include <termios.h>
00052
00053 DialWidget::DialWidget( PPPData *pd, QWidget *parent, bool isnewaccount
00054 , const char *name )
00055 : QWidget(parent, name), _pppdata(pd)
00056 {
00057 const int GRIDROWS = 6;
00058
00059 QGridLayout *tl = new QGridLayout(this, GRIDROWS, 2, 0 );
00060
00061 connect_label = new QLabel(tr("Connection name:"), this);
00062 tl->addWidget(connect_label, 0, 0);
00063
00064 connectname_l = new QLineEdit(this);
00065
00066 tl->addWidget(connectname_l, 0, 1);
00067 QString tmp = tr("Type in a unique name for this connection");
00068
00069 QWhatsThis::add(connect_label,tmp);
00070 QWhatsThis::add(connectname_l,tmp);
00071
00072
00073 number_label = new QLabel(tr("Phone number:"), this);
00074 number_label->setAlignment(AlignTop|AlignLeft);
00075 tl->addWidget(number_label, 1, 0);
00076
00077 QHBoxLayout *lpn = new QHBoxLayout(5);
00078 tl->addLayout(lpn, 1, 1);
00079 numbers = new QListBox(this);
00080
00081 lpn->addWidget(numbers);
00082 QVBoxLayout *lpn1 = new QVBoxLayout;
00083 lpn->addLayout(lpn1);
00084 add = new QPushButton(tr("&Add..."), this);
00085 del = new QPushButton(tr("&Remove"), this);
00086
00087 up = new QPushButton(this);
00088 up->setPixmap( Opie::Core::OResource::loadPixmap("up", Opie::Core::OResource::SmallIcon) );
00089 up->setMinimumHeight( AppLnk::smallIconSize()+4 );
00090 down = new QPushButton(this);
00091 down->setPixmap( Opie::Core::OResource::loadPixmap("down", Opie::Core::OResource::SmallIcon) );
00092 down->setMinimumHeight( AppLnk::smallIconSize()+4 );
00093 lpn1->addWidget(add);
00094 lpn1->addWidget(del);
00095 lpn1->addStretch(1);
00096 lpn1->addWidget(up);
00097 lpn1->addWidget(down);
00098 connect(add, SIGNAL(clicked()),
00099 this, SLOT(addNumber()));
00100 connect(del, SIGNAL(clicked()),
00101 this, SLOT(delNumber()));
00102 connect(up, SIGNAL(clicked()),
00103 this, SLOT(upNumber()));
00104 connect(down, SIGNAL(clicked()),
00105 this, SLOT(downNumber()));
00106 connect(numbers, SIGNAL(highlighted(int)),
00107 this, SLOT(selectionChanged(int)));
00108 numbersChanged();
00109
00110 tmp = tr("<p>Specifies the phone numbers to dial. You\n"
00111 "can supply multiple numbers here, simply\n"
00112 "click on \"Add\". You can arrange the\n"
00113 "order the numbers are tried by using the\n"
00114 "arrow buttons.\n\n"
00115 "When a number is busy or fails, <i>kppp</i> will \n"
00116 "try the next number and so on");
00117
00118 QWhatsThis::add(number_label,tmp);
00119 QWhatsThis::add(numbers,tmp);
00120
00121 pppdargs = new QPushButton(tr("Customize pppd Arguments..."), this);
00122 connect(pppdargs, SIGNAL(clicked()), SLOT(pppdargsbutton()));
00123 tl->addMultiCellWidget(pppdargs, 5, 5, 0, 1, AlignCenter);
00124
00125
00126 if(!isnewaccount)
00127 {
00128 connectname_l->setText(_pppdata->accname());
00129
00130
00131 QString n = _pppdata->phonenumber();
00132 QString tmp = "";
00133 uint idx = 0;
00134 while(idx != n.length())
00135 {
00136 if(n[idx] == ':')
00137 {
00138 if(tmp.length() > 0)
00139 numbers->insertItem(tmp);
00140 tmp = "";
00141 }
00142 else
00143 tmp += n[idx];
00144 idx++;
00145 }
00146 if(tmp.length() > 0)
00147 numbers->insertItem(tmp);
00148
00149 }
00150
00151 numbersChanged();
00152 tl->activate();
00153 }
00154
00155 bool DialWidget::save()
00156 {
00157
00158 if(connectname_l->text().isEmpty() ||
00159 !_pppdata->isUniqueAccname(connectname_l->text()))
00160 {
00161 return false;
00162 }
00163 else
00164 {
00165 _pppdata->setAccname(connectname_l->text());
00166
00167 QString number = "";
00168 for(uint i = 0; i < numbers->count(); i++)
00169 {
00170 if(i != 0)
00171 number += ":";
00172 number += numbers->text(i);
00173 }
00174
00175 _pppdata->setPhonenumber(number);
00176 return true;
00177 }
00178 }
00179
00180
00181 void DialWidget::numbersChanged()
00182 {
00183 int sel = numbers->currentItem();
00184
00185 del->setEnabled(sel != -1);
00186 up->setEnabled(sel != -1 && sel != 0);
00187 down->setEnabled(sel != -1 && sel != (int)numbers->count()-1);
00188 }
00189
00190
00191 void DialWidget::selectionChanged(int)
00192 {
00193 numbersChanged();
00194 }
00195
00196
00197 void DialWidget::addNumber()
00198 {
00199 PhoneNumberDialog dlg(this);
00200 if(dlg.exec())
00201 {
00202 numbers->insertItem(dlg.phoneNumber());
00203 numbersChanged();
00204 }
00205 }
00206
00207
00208 void DialWidget::delNumber()
00209 {
00210 if(numbers->currentItem() != -1)
00211 {
00212 numbers->removeItem(numbers->currentItem());
00213 numbersChanged();
00214 }
00215 }
00216
00217
00218 void DialWidget::upNumber()
00219 {
00220 int idx = numbers->currentItem();
00221 if(idx != -1)
00222 {
00223 QString item = numbers->text(idx);
00224 numbers->removeItem(idx);
00225 numbers->insertItem(item, idx-1);
00226 numbers->setCurrentItem(idx-1);
00227 numbersChanged();
00228 }
00229 }
00230
00231
00232 void DialWidget::downNumber()
00233 {
00234 int idx = numbers->currentItem();
00235 if(idx != -1)
00236 {
00237 QString item = numbers->text(idx);
00238 numbers->removeItem(idx);
00239 numbers->insertItem(item, idx+1);
00240 numbers->setCurrentItem(idx+1);
00241 numbersChanged();
00242 }
00243 }
00244
00245
00246 void DialWidget::pppdargsbutton()
00247 {
00248 PPPdArguments pa(_pppdata, this);
00249 QPEApplication::execDialog( &pa );
00250 }
00251
00252
00253
00255
00257 ExecWidget::ExecWidget(PPPData *pd, QWidget *parent, bool isnewaccount, const char *name) :
00258 QWidget(parent, name), _pppdata(pd)
00259 {
00260 QVBoxLayout *tl = new QVBoxLayout(this, 0 );
00261
00262 QLabel *l = new QLabel( tr("Here you can select commands to run at certain stages of the connection. The commands are run with your real user id, so you cannot run any commands here requiring root permissions (unless, of course, you are root).<br><br>Be sure to supply the whole path to the program otherwise we might be unable to find it."), this);
00263
00264 tl->addWidget(l);
00265 tl->addStretch(1);
00266
00267 QGridLayout *l1 = new QGridLayout(4, 2, 10);
00268 tl->addLayout(l1);
00269 l1->setColStretch(0, 0);
00270 l1->setColStretch(1, 1);
00271
00272 before_connect_l = new QLabel(tr("Before connect:"), this);
00273 before_connect_l->setAlignment(AlignVCenter);
00274 l1->addWidget(before_connect_l, 0, 0);
00275 before_connect = new QLineEdit(this);
00276
00277 l1->addWidget(before_connect, 0, 1);
00278 QString tmp = tr("Allows you to run a program <b>before</b> a connection\n"
00279 "is established. It is called immediately before\n"
00280 "dialing has begun.\n\n"
00281 "This might be useful, e.g. to stop HylaFAX blocking the\n"
00282 "modem.");
00283
00284 QWhatsThis::add(before_connect_l,tmp);
00285 QWhatsThis::add(before_connect,tmp);
00286
00287 command_label = new QLabel(tr("Upon connect:"), this);
00288 command_label->setAlignment(AlignVCenter);
00289 l1->addWidget(command_label, 1, 0);
00290 command = new QLineEdit(this);
00291
00292 l1->addWidget(command, 1, 1);
00293 tmp = tr("Allows you to run a program <b>after</b> a connection\n"
00294 "is established. When your program is called, all\n"
00295 "preparations for an Internet connection are finished.\n"
00296 "\n"
00297 "Very useful for fetching mail and news");
00298
00299 QWhatsThis::add(command_label,tmp);
00300 QWhatsThis::add(command,tmp);
00301
00302 predisconnect_label = new QLabel(tr("Before disconnect:"),
00303 this);
00304 predisconnect_label->setAlignment(AlignVCenter);
00305 l1->addWidget(predisconnect_label, 2, 0);
00306 predisconnect = new QLineEdit(this);
00307
00308 l1->addWidget(predisconnect, 2, 1);
00309 tmp = tr("Allows you to run a program <b>before</b> a connection\n"
00310 "is closed. The connection will stay open until\n"
00311 "the program exits.");
00312
00313 QWhatsThis::add(predisconnect_label,tmp);
00314 QWhatsThis::add(predisconnect,tmp);
00315
00316 discommand_label = new QLabel(tr("Upon disconnect:"),
00317 this);
00318 discommand_label->setAlignment(AlignVCenter);
00319 l1->addWidget(discommand_label, 3, 0);
00320
00321 discommand = new QLineEdit(this);
00322
00323 l1->addWidget(discommand, 3, 1);
00324 tmp = tr("Allows you to run a program <b>after</b> a connection\n"
00325 "has been closed.");
00326
00327 QWhatsThis::add(discommand_label,tmp);
00328 QWhatsThis::add(discommand,tmp);
00329
00330
00331 l1->addRowSpacing(1, 5);
00332 l1->addRowSpacing(3, 5);
00333
00334 tl->addStretch(1);
00335 tl->activate();
00336
00337
00338 if(!isnewaccount)
00339 {
00340 before_connect->setText(_pppdata->command_before_connect());
00341 command->setText(_pppdata->command_on_connect());
00342 discommand->setText(_pppdata->command_on_disconnect());
00343 predisconnect->setText(_pppdata->command_before_disconnect());
00344 }
00345 }
00346
00347
00348 bool ExecWidget::save()
00349 {
00350 _pppdata->setCommand_before_connect(before_connect->text());
00351 _pppdata->setCommand_on_connect(command->text());
00352 _pppdata->setCommand_before_disconnect(predisconnect->text());
00353 _pppdata->setCommand_on_disconnect(discommand->text());
00354 return true;
00355 }
00356
00357
00358
00360
00361
00362
00364 IPWidget::IPWidget( PPPData *pd, QWidget *parent, bool isnewaccount, const char *name )
00365 : QWidget(parent, name), _pppdata(pd)
00366 {
00367 QVBoxLayout *topLayout = new QVBoxLayout(this);
00368 topLayout->setSpacing( 3 );
00369
00370 box = new QVGroupBox(tr("Configuration"), this);
00371
00372
00373 rb = new QButtonGroup(this);
00374 rb->hide();
00375 connect(rb, SIGNAL(clicked(int)),
00376 SLOT(hitIPSelect(int)));
00377
00378 dynamicadd_rb = new QRadioButton(box);
00379 dynamicadd_rb->setText(tr("Dynamic IP address"));
00380 QWhatsThis::add(dynamicadd_rb,
00381 tr("Select this option when your computer gets an\n"
00382 "internet address (IP) every time a\n"
00383 "connection is made.\n"
00384 "\n"
00385 "Almost every Internet Service Provider uses\n"
00386 "this method, so this should be turned on."));
00387
00388 staticadd_rb = new QRadioButton(box);
00389 staticadd_rb->setText(tr("Static IP address"));
00390 rb->insert(dynamicadd_rb, 0);
00391 rb->insert(staticadd_rb, 1);
00392 QWhatsThis::add(staticadd_rb,
00393 tr("Select this option when your computer has a\n"
00394 "fixed internet address (IP). Most computers\n"
00395 "don't have this, so you should probably select\n"
00396 "dynamic IP addressing unless you know what you\n"
00397 "are doing."));
00398
00399 QWidget *ipWidget = new QWidget(box);
00400 QGridLayout *ipLayout = new QGridLayout(ipWidget, 2, 2);
00401 ipLayout->setSpacing( 2 );
00402
00403 ipaddress_label = new QLabel(tr("IP address:"), ipWidget);
00404 QString tmp = tr("If your computer has a permanent internet\n"
00405 "address, you must supply your IP address here.");
00406 ipLayout->addWidget(ipaddress_label, 0, 0);
00407
00408 ipaddress_l = new IPLineEdit(ipWidget);
00409 ipLayout->addWidget(ipaddress_l, 0, 1);
00410
00411 QWhatsThis::add(ipaddress_label,tmp);
00412 QWhatsThis::add(ipaddress_l,tmp);
00413
00414 sub_label = new QLabel(tr("Subnet mask:"), ipWidget);
00415 tmp = tr("<p>If your computer has a static Internet address,\n"
00416 "you must supply a network mask here. In almost\n"
00417 "all cases this netmask will be <b>255.255.255.0</b>,\n"
00418 "but your mileage may vary.\n"
00419 "\n"
00420 "If unsure, contact your Internet Service Provider");
00421 ipLayout->addWidget(sub_label, 1, 0);
00422
00423 subnetmask_l = new IPLineEdit(ipWidget);
00424 ipLayout->addWidget(subnetmask_l, 1, 1);
00425
00426 QWhatsThis::add(sub_label,tmp);
00427 QWhatsThis::add(subnetmask_l,tmp);
00428
00429 autoname = new QCheckBox(tr("Auto-configure hostname from this IP"), this);
00430 autoname->setChecked(_pppdata->autoname());
00431 connect(autoname,SIGNAL(toggled(bool)),
00432 this,SLOT(autoname_t(bool)));
00433
00434 QWhatsThis::add(autoname,
00435 tr("<p>Whenever you connect, this reconfigures\n"
00436 "your hostname to match the IP address you\n"
00437 "got from the PPP server. This may be useful\n"
00438 "if you need to use a protocol which depends\n"
00439 "on this information, but it can also cause several\n"
00440 "<a href=\"kppp-7.html#autohostname\">problems</a>.\n"
00441 "\n"
00442 "Don't enable this unless you really need it."));
00443
00444 topLayout->addWidget(box);
00445 topLayout->addWidget(autoname);
00446 topLayout->addStretch();
00447
00448
00449 if(!isnewaccount)
00450 {
00451 if(_pppdata->ipaddr() == "0.0.0.0" &&
00452 _pppdata->subnetmask() == "0.0.0.0")
00453 {
00454 dynamicadd_rb->setChecked(true);
00455 hitIPSelect(0);
00456 autoname->setChecked(_pppdata->autoname());
00457 }
00458 else
00459 {
00460 ipaddress_l->setText(_pppdata->ipaddr());
00461 subnetmask_l->setText(_pppdata->subnetmask());
00462 staticadd_rb->setChecked(true);
00463 autoname->setChecked(false);
00464 }
00465 }
00466 else
00467 {
00468 dynamicadd_rb->setChecked(true);
00469 hitIPSelect(0);
00470 }
00471
00472 }
00473
00474 void IPWidget::autoname_t(bool on)
00475 {
00476 static bool was_warned = false;
00477
00478
00479 if(on && !was_warned)
00480 {
00481 QMessageBox::information(this,
00482 tr("Selecting this option might cause some weird "
00483 "problems with the X-server and applications "
00484 "while kppp is connected. Don't use it until "
00485 "you know what you are doing!\n"
00486 "For more information take a look at the "
00487 "handbook (or help) in the section \"Frequently "
00488 "asked questions\"."),
00489 tr("Warning"));
00490 was_warned = true;
00491 }
00492 }
00493
00494
00495 void IPWidget::save()
00496 {
00497 if(dynamicadd_rb->isChecked())
00498 {
00499 _pppdata->setIpaddr("0.0.0.0");
00500 _pppdata->setSubnetmask("0.0.0.0");
00501 }
00502 else
00503 {
00504 _pppdata->setIpaddr(ipaddress_l->text());
00505 _pppdata->setSubnetmask(subnetmask_l->text());
00506 }
00507 _pppdata->setAutoname(autoname->isChecked());
00508 }
00509
00510
00511 void IPWidget::hitIPSelect( int i )
00512 {
00513 if(i == 0)
00514 {
00515 ipaddress_label->setEnabled(false);
00516 sub_label->setEnabled(false);
00517 ipaddress_l->setEnabled(false);
00518 subnetmask_l->setEnabled(false);
00519 }
00520 else
00521 {
00522 ipaddress_label->setEnabled(true);
00523 sub_label->setEnabled(true);
00524 ipaddress_l->setEnabled(true);
00525 subnetmask_l->setEnabled(true);
00526 }
00527 }
00528
00529
00530
00531 DNSWidget::DNSWidget( PPPData *pd, QWidget *parent, bool isnewaccount, const char *name )
00532 : QWidget(parent, name), _pppdata(pd)
00533 {
00534 QGridLayout *tl = new QGridLayout(this, 7, 2, 0 );
00535
00536 dnsdomain_label = new QLabel(tr("Domain name:"), this);
00537 tl->addWidget(dnsdomain_label, 0, 0);
00538
00539 dnsdomain = new QLineEdit(this);
00540
00541 tl->addWidget(dnsdomain, 0, 1);
00542 QString tmp = tr("If you enter a domain name here, this domain\n"
00543 "name is used for your computer while you are\n"
00544 "connected. When the connection is closed, the\n"
00545 "original domain name of your computer is\n"
00546 "restored.\n"
00547 "\n"
00548 "If you leave this field blank, no changes are\n"
00549 "made to the domain name.");
00550
00551 QWhatsThis::add(dnsdomain_label,tmp);
00552 QWhatsThis::add(dnsdomain,tmp);
00553
00554 conf_label = new QLabel(tr("Configuration:"), this);
00555 tl->addWidget(conf_label, 1, 0);
00556
00557 bg = new QButtonGroup("Group", this);
00558 connect(bg, SIGNAL(clicked(int)), SLOT(DNS_Mode_Selected(int)));
00559 bg->hide();
00560
00561 autodns = new QRadioButton(tr("Automatic"), this);
00562 bg->insert(autodns, 0);
00563 tl->addWidget(autodns, 1, 1);
00564 if(!_pppdata->pppdVersionMin(2, 3, 7))
00565 autodns->setEnabled(false);
00566
00567 mandns = new QRadioButton(tr("Manual"), this);
00568 bg->insert(mandns, 1);
00569 tl->addWidget(mandns, 2, 1);
00570
00571 dns_label = new QLabel(tr("DNS IP address:"), this);
00572 tl->addWidget(dns_label, 3, 0);
00573
00574 QHBoxLayout *l2 = new QHBoxLayout;
00575 tl->addLayout(l2, 3, 1);
00576 dnsipaddr = new IPLineEdit(this);
00577 connect(dnsipaddr, SIGNAL(returnPressed()),
00578 SLOT(adddns()));
00579 connect(dnsipaddr, SIGNAL(textChanged(const QString&)),
00580 SLOT(DNS_Edit_Changed(const QString&)));
00581 l2->addWidget(dnsipaddr, 1);
00582 l2->addStretch(1);
00583 tmp = tr("<p>Allows you to specify a new DNS server to be\n"
00584 "used while you are connected. When the\n"
00585 "connection is closed, this DNS entry will be\n"
00586 "removed again.\n"
00587 "\n"
00588 "To add a DNS server, type in the IP address of\n"
00589 "the DNS server here and click on <b>Add</b>");
00590
00591 QWhatsThis::add(dns_label, tmp);
00592 QWhatsThis::add(dnsipaddr, tmp);
00593
00594 QHBoxLayout *l1 = new QHBoxLayout;
00595 tl->addLayout(l1, 4, 1);
00596 add = new QPushButton(tr("Add"), this);
00597 connect(add, SIGNAL(clicked()), SLOT(adddns()));
00598 l1->addWidget(add);
00599
00600 QWhatsThis::add(add,
00601 tr("Click this button to add the DNS server\n"
00602 "specified in the field above. The entry\n"
00603 "will then be added to the list below"));
00604
00605 remove = new QPushButton(tr("Remove"), this);
00606 connect(remove, SIGNAL(clicked()), SLOT(removedns()));
00607 l1->addWidget(remove);
00608 QWhatsThis::add(remove,
00609 tr("Click this button to remove the selected DNS\n"
00610 "server entry from the list below"));
00611
00612 servers_label = new QLabel(tr("DNS address list:"), this);
00613 servers_label->setAlignment(AlignTop|AlignLeft);
00614 tl->addWidget(servers_label, 5, 0);
00615
00616 dnsservers = new QListBox(this);
00617 dnsservers->setMinimumSize(150, 80);
00618 connect(dnsservers, SIGNAL(highlighted(int)),
00619 SLOT(DNS_Entry_Selected(int)));
00620 tl->addWidget(dnsservers, 5, 1);
00621 tmp = tr("<p>This shows all defined DNS servers to use\n"
00622 "while you are connected. Use the <b>Add</b> and\n"
00623 "<b>Remove</b> buttons to modify the list");
00624
00625 QWhatsThis::add(servers_label,tmp);
00626 QWhatsThis::add(dnsservers,tmp);
00627
00628 exdnsdisabled_toggle = new QCheckBox(tr("Disable DNS servers during connection"), this);
00629
00630 exdnsdisabled_toggle->setChecked(_pppdata->exDNSDisabled());
00631 tl->addMultiCellWidget(exdnsdisabled_toggle, 6, 6, 0, 1, AlignCenter);
00632 QWhatsThis::add(exdnsdisabled_toggle,
00633 tr("<p>When this option is selected, all DNS\n"
00634 "servers specified in <tt>/etc/resolv.conf</tt> are\n"
00635 "temporary disabled while the dialup connection\n"
00636 "is established. After the connection is\n"
00637 "closed, the servers will be re-enabled\n"
00638 "\n"
00639 "Typically, there is no reason to use this\n"
00640 "option, but it may become useful under \n"
00641 "some circumstances."));
00642
00643
00644
00645 if(!isnewaccount)
00646 {
00647 dnsservers->insertStringList(_pppdata->dns());
00648 dnsdomain->setText(_pppdata->domain());
00649 }
00650
00651 int mode = _pppdata->autoDNS() ? 0 : 1;
00652 bg->setButton(mode);
00653 DNS_Mode_Selected(mode);
00654
00655 tl->activate();
00656 }
00657
00658 void DNSWidget::DNS_Edit_Changed(const QString &text)
00659 {
00660 QRegExp r("[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+");
00661 add->setEnabled(text.find(r) != -1);
00662 }
00663
00664 void DNSWidget::DNS_Entry_Selected(int)
00665 {
00666 remove->setEnabled(true);
00667 }
00668
00669 void DNSWidget::DNS_Mode_Selected(int mode)
00670 {
00671 bool on = (mode == 1);
00672 dns_label->setEnabled(on);
00673 servers_label->setEnabled(on);
00674 dnsipaddr->setText("");
00675 dnsipaddr->setEnabled(on);
00676 add->setEnabled(false);
00677 remove->setEnabled(dnsservers->count()>0 && on);
00678 dnsservers->clearSelection();
00679 dnsservers->setEnabled(on);
00680 dnsservers->triggerUpdate(false);
00681 }
00682
00683 void DNSWidget::save()
00684 {
00685 _pppdata->setAutoDNS(bg->id(bg->selected()) == 0);
00686 QStringList serverlist;
00687 for(uint i=0; i < dnsservers->count(); i++)
00688 serverlist.append(dnsservers->text(i));
00689 _pppdata->setDns(serverlist);
00690
00691
00692 QString s(dnsdomain->text());
00693 if(s.left(1) == ".")
00694 _pppdata->setDomain(s.mid(1));
00695 else
00696 _pppdata->setDomain(dnsdomain->text());
00697
00698 _pppdata->setExDNSDisabled(exdnsdisabled_toggle->isChecked());
00699 }
00700
00701
00702 void DNSWidget::adddns()
00703 {
00704 if(dnsservers->count() < MAX_DNS_ENTRIES)
00705 {
00706 dnsservers->insertItem(dnsipaddr->text());
00707 dnsipaddr->setText("");
00708 }
00709 }
00710
00711
00712 void DNSWidget::removedns()
00713 {
00714 int i;
00715 i = dnsservers->currentItem();
00716 if(i != -1)
00717 dnsservers->removeItem(i);
00718 remove->setEnabled(dnsservers->count()>0);
00719 }
00720
00721
00722
00723
00724
00725 GatewayWidget::GatewayWidget( PPPData *pd, QWidget *parent, bool isnewaccount, const char *name )
00726 : QWidget(parent, name), _pppdata(pd)
00727 {
00728 QVBoxLayout *topLayout = new QVBoxLayout(this);
00729 topLayout->setSpacing( 2 );
00730 topLayout->setMargin( 0 );
00731
00732 box = new QVGroupBox(tr("Configuration"), this);
00733
00734 rb = new QButtonGroup(this);
00735 rb->hide();
00736 connect(rb, SIGNAL(clicked(int)), SLOT(hitGatewaySelect(int)));
00737
00738 defaultgateway = new QRadioButton(box);
00739 defaultgateway->setText(tr("Default gateway"));
00740 rb->insert(defaultgateway, 0);
00741 QWhatsThis::add(defaultgateway,
00742 tr("This makes the PPP peer computer (the computer\n"
00743 "you are connected to with your modem) to act as\n"
00744 "a gateway. Your computer will send all packets not\n"
00745 "going to a computer inside your local net to this\n"
00746 "computer, which will route these packets.\n"
00747 "\n"
00748 "This is the default for most ISPs, so you should\n"
00749 "probably leave this option on."));
00750
00751
00752 staticgateway = new QRadioButton(box);
00753 staticgateway->setText(tr("Static gateway"));
00754 rb->insert(staticgateway, 1);
00755 QWhatsThis::add(staticgateway,
00756 tr("<p>Allows you to specify which computer you want\n"
00757 "to use as gateway (see <i>Default Gateway</i> above)"));
00758
00759 QHBox *gateBox = new QHBox(box);
00760 gate_label = new QLabel(tr("Gateway IP address:"), gateBox);
00761 gatewayaddr = new IPLineEdit(gateBox);
00762
00763 defaultroute = new QCheckBox(tr("Assign the default route to this gateway"),
00764 this);
00765 QWhatsThis::add(defaultroute,
00766 tr("If this option is enabled, all packets not\n"
00767 "going to the local net are routed through\n"
00768 "the PPP connection.\n"
00769 "\n"
00770 "Normally, you should turn this on"));
00771
00772 topLayout->addWidget(box);
00773 topLayout->addWidget(defaultroute);
00774 topLayout->addStretch();
00775
00776
00777 if(!isnewaccount)
00778 {
00779 if(_pppdata->gateway() == "0.0.0.0")
00780 {
00781 defaultgateway->setChecked(true);
00782 hitGatewaySelect(0);
00783 }
00784 else
00785 {
00786 gatewayaddr->setText(_pppdata->gateway());
00787 staticgateway->setChecked(true);
00788 }
00789 defaultroute->setChecked(_pppdata->defaultroute());
00790 }
00791 else
00792 {
00793 defaultgateway->setChecked(true);
00794 hitGatewaySelect(0);
00795 defaultroute->setChecked(true);
00796 }
00797 }
00798
00799 void GatewayWidget::save()
00800 {
00801 _pppdata->setGateway(gatewayaddr->text());
00802 _pppdata->setDefaultroute(defaultroute->isChecked());
00803 }
00804
00805
00806 void GatewayWidget::hitGatewaySelect( int i )
00807 {
00808 if(i == 0)
00809 {
00810 gatewayaddr->setText("0.0.0.0");
00811 gatewayaddr->setEnabled(false);
00812 gate_label->setEnabled(false);
00813 }
00814 else
00815 {
00816 gatewayaddr->setEnabled(true);
00817 gatewayaddr->setText("");
00818 gate_label->setEnabled(true);
00819 }
00820 }
00821
00822
00823
00824 ScriptWidget::ScriptWidget( PPPData *pd, QWidget *parent, bool isnewaccount, const char *name )
00825 : QWidget(parent, name),_pppdata(pd)
00826 {
00827
00828 QVBoxLayout *tl = new QVBoxLayout(this, 0 );
00829 se = new ScriptEdit(this);
00830 connect(se, SIGNAL(returnPressed()), SLOT(addButton()));
00831 tl->addWidget(se);
00832
00833
00834 QHBoxLayout *hl = new QHBoxLayout( this );
00835 tl->addLayout( hl );
00836 add = new QPushButton( tr("Add"), this );
00837 hl->addWidget( add );
00838 connect(add, SIGNAL(clicked()), SLOT(addButton()));
00839 insert = new QPushButton( tr("Insert"), this );
00840 hl->addWidget( insert );
00841 connect(insert, SIGNAL(clicked()), SLOT(insertButton()));
00842 remove = new QPushButton( tr("Remove"), this );
00843 hl->addWidget( remove );
00844 connect(remove, SIGNAL(clicked()), SLOT(removeButton()));
00845
00846 QHBoxLayout *l12 = new QHBoxLayout(0);
00847 tl->addLayout(l12);
00848 stl = new QListBox(this);
00849
00850 connect(stl, SIGNAL(highlighted(int)), SLOT(stlhighlighted(int)));
00851
00852
00853 sl = new QListBox(this);
00854
00855 connect(sl, SIGNAL(highlighted(int)), SLOT(slhighlighted(int)));
00856
00857
00858 slb = new QScrollBar(this);
00859
00860 connect(slb, SIGNAL(valueChanged(int)), SLOT(scrolling(int)));
00861
00862 l12->addWidget(stl, 1);
00863 l12->addWidget(sl, 3);
00864 l12->addWidget(slb, 0);
00865
00866
00867 if(!isnewaccount)
00868 {
00869 QStringList &comlist = _pppdata->scriptType();
00870 QStringList &arglist = _pppdata->script();
00871 QStringList::Iterator itcom = comlist.begin();
00872 QStringList::Iterator itarg = arglist.begin();
00873
00874 for ( ;
00875 itcom != comlist.end() && itarg != arglist.end();
00876 ++itcom, ++itarg )
00877 {
00878 stl->insertItem(*itcom);
00879 sl->insertItem(*itarg);
00880 }
00881 }
00882
00883 insert->setEnabled(false);
00884 remove->setEnabled(false);
00885 adjustScrollBar();
00886 tl->activate();
00887 }
00888
00889 bool ScriptWidget::check()
00890 {
00891 uint lstart = 0;
00892 uint lend = 0;
00893 uint errcnt = 0;
00894
00895 if(sl->count() > 0)
00896 {
00897 for( uint i=0; i <= sl->count()-1; i++)
00898 {
00899 if(stl->text(i) == "LoopStart")
00900 {
00901 lstart++;
00902 }
00903 if (stl->text(i) == "LoopEnd")
00904 {
00905 lend++;
00906 }
00907 if ( lend > lstart ) errcnt++;
00908 }
00909 return ( (errcnt == 0 ) && (lstart == lend) );
00910 }
00911 return true;
00912 }
00913
00914
00915 void ScriptWidget::save()
00916 {
00917 QStringList typelist, arglist;
00918 for(uint i=0; i < sl->count(); i++)
00919 {
00920 typelist.append(stl->text(i));
00921 arglist.append(sl->text(i));
00922 }
00923 _pppdata->setScriptType(typelist);
00924 _pppdata->setScript(arglist);
00925 }
00926
00927
00928
00929 void ScriptWidget::adjustScrollBar()
00930 {
00931 if((int)sl->count() <= sl->numItemsVisible())
00932 slb->setRange(0, 0);
00933 else
00934 slb->setRange(0, (sl->count() - sl->numItemsVisible())+1);
00935 }
00936
00937
00938 void ScriptWidget::scrolling(int i)
00939 {
00940 sl->setTopItem(i);
00941 stl->setTopItem(i);
00942 }
00943
00944
00945 void ScriptWidget::slhighlighted(int i)
00946 {
00947 insert->setEnabled(true);
00948 remove->setEnabled(true);
00949 stl->setCurrentItem(i);
00950 }
00951
00952
00953 void ScriptWidget::stlhighlighted(int i)
00954 {
00955 insert->setEnabled(true);
00956 remove->setEnabled(true);
00957 sl->setCurrentItem(i);
00958 }
00959
00960
00961 void ScriptWidget::addButton()
00962 {
00963
00964 if(sl->count() == MAX_SCRIPT_ENTRIES-1)
00965 return;
00966
00967 switch(se->type())
00968 {
00969 case ScriptEdit::Expect:
00970 stl->insertItem("Expect");
00971 sl->insertItem(se->text());
00972 break;
00973
00974 case ScriptEdit::Send:
00975 stl->insertItem("Send");
00976 sl->insertItem(se->text());
00977 break;
00978
00979 case ScriptEdit::SendNoEcho:
00980 stl->insertItem("SendNoEcho");
00981 sl->insertItem(se->text());
00982 break;
00983
00984 case ScriptEdit::Pause:
00985 stl->insertItem("Pause");
00986 sl->insertItem(se->text());
00987 break;
00988
00989 case ScriptEdit::Hangup:
00990 stl->insertItem("Hangup");
00991 sl->insertItem("");
00992 break;
00993
00994 case ScriptEdit::Answer:
00995 stl->insertItem("Answer");
00996 sl->insertItem("");
00997 break;
00998
00999 case ScriptEdit::Timeout:
01000 stl->insertItem("Timeout");
01001 sl->insertItem(se->text());
01002 break;
01003
01004 case ScriptEdit::Password:
01005 stl->insertItem("Password");
01006 sl->insertItem(se->text());
01007 break;
01008
01009 case ScriptEdit::ID:
01010 stl->insertItem("ID");
01011 sl->insertItem(se->text());
01012 break;
01013
01014 case ScriptEdit::Prompt:
01015 stl->insertItem("Prompt");
01016 sl->insertItem(se->text());
01017 break;
01018
01019 case ScriptEdit::PWPrompt:
01020 stl->insertItem("PWPrompt");
01021 sl->insertItem(se->text());
01022 break;
01023
01024 case ScriptEdit::LoopStart:
01025 stl->insertItem("LoopStart");
01026 sl->insertItem(se->text());
01027 break;
01028
01029 case ScriptEdit::LoopEnd:
01030 stl->insertItem("LoopEnd");
01031 sl->insertItem(se->text());
01032 break;
01033
01034 case ScriptEdit::Scan:
01035 stl->insertItem("Scan");
01036 sl->insertItem(se->text());
01037 break;
01038
01039 case ScriptEdit::Save:
01040 stl->insertItem("Save");
01041 sl->insertItem(se->text());
01042 break;
01043
01044 default:
01045 break;
01046 }
01047
01048
01049
01050 adjustScrollBar();
01051 slb->setValue(slb->maxValue());
01052
01053
01054 se->setText("");
01055 }
01056
01057
01058 void ScriptWidget::insertButton()
01059 {
01060
01061
01062 if(sl->currentItem() < 0 || (sl->count() == MAX_SCRIPT_ENTRIES-1))
01063 return;
01064
01065 switch(se->type())
01066 {
01067 case ScriptEdit::Expect:
01068 stl->insertItem("Expect", stl->currentItem());
01069 sl->insertItem(se->text(), sl->currentItem());
01070 break;
01071
01072 case ScriptEdit::Send:
01073 stl->insertItem("Send", stl->currentItem());
01074 sl->insertItem(se->text(), sl->currentItem());
01075 break;
01076
01077 case ScriptEdit::SendNoEcho:
01078 stl->insertItem("SendNoEcho", stl->currentItem());
01079 sl->insertItem(se->text(), sl->currentItem());
01080 break;
01081
01082 case ScriptEdit::Pause:
01083 stl->insertItem("Pause", stl->currentItem());
01084 sl->insertItem(se->text(), sl->currentItem());
01085 break;
01086
01087 case ScriptEdit::Hangup:
01088 stl->insertItem("Hangup", stl->currentItem());
01089 sl->insertItem("", sl->currentItem());
01090 break;
01091
01092 case ScriptEdit::Answer:
01093 stl->insertItem("Answer", stl->currentItem());
01094 sl->insertItem("", sl->currentItem());
01095 break;
01096
01097 case ScriptEdit::Timeout:
01098 stl->insertItem("Timeout", stl->currentItem());
01099 sl->insertItem(se->text(), sl->currentItem());
01100 break;
01101
01102 case ScriptEdit::Password:
01103 stl->insertItem("Password", stl->currentItem());
01104 sl->insertItem(se->text(), sl->currentItem());
01105 break;
01106
01107 case ScriptEdit::ID:
01108 stl->insertItem("ID", stl->currentItem());
01109 sl->insertItem(se->text(), sl->currentItem());
01110 break;
01111
01112 case ScriptEdit::Prompt:
01113 stl->insertItem("Prompt", stl->currentItem());
01114 sl->insertItem(se->text(), sl->currentItem());
01115 break;
01116
01117 case ScriptEdit::PWPrompt:
01118 stl->insertItem("PWPrompt", stl->currentItem());
01119 sl->insertItem(se->text(), sl->currentItem());
01120 break;
01121
01122 case ScriptEdit::LoopStart:
01123 stl->insertItem("LoopStart", stl->currentItem());
01124 sl->insertItem(se->text(), sl->currentItem());
01125 break;
01126
01127 case ScriptEdit::LoopEnd:
01128 stl->insertItem("LoopEnd", stl->currentItem());
01129 sl->insertItem(se->text(), sl->currentItem());
01130 break;
01131
01132 case ScriptEdit::Scan:
01133 stl->insertItem("Scan", stl->currentItem());
01134 sl->insertItem(se->text(), sl->currentItem());
01135 break;
01136
01137 case ScriptEdit::Save:
01138 stl->insertItem("Save", stl->currentItem());
01139 sl->insertItem(se->text(), sl->currentItem());
01140 break;
01141
01142 default:
01143 break;
01144 }
01145 adjustScrollBar();
01146 se->setText("");
01147 }
01148
01149
01150 void ScriptWidget::removeButton()
01151 {
01152 if(sl->currentItem() >= 0)
01153 {
01154 int stlc = stl->currentItem();
01155 sl->removeItem(sl->currentItem());
01156 stl->removeItem(stlc);
01157 adjustScrollBar();
01158 insert->setEnabled(sl->currentItem() != -1);
01159 remove->setEnabled(sl->currentItem() != -1);
01160 }
01161 }
01162
01163
01164
01166
01167
01168
01170 PhoneNumberDialog::PhoneNumberDialog(QWidget *parent)
01171 : QDialog(parent,"PhoneNumberDialog",true)
01172 {
01173 setCaption( tr("Add Phone Number") );
01174
01175
01176 QVBoxLayout *layout = new QVBoxLayout( this );
01177 layout->setSpacing( 3 );
01178 layout->setMargin( 3 );
01179
01180
01181
01182
01183
01184
01185 QLabel *label = new QLabel(this, tr("Enter a phone number:"));
01186 layout->addWidget( label );
01187
01188 le = new QLineEdit(this, "lineEdit");
01189 layout->addWidget( le );
01190
01191 connect(le, SIGNAL(textChanged(const QString&)),
01192 this, SLOT(textChanged(const QString&)));
01193
01194 le->setFocus();
01195 textChanged("");
01196
01197
01198 }
01199
01200
01201 QString PhoneNumberDialog::phoneNumber()
01202 {
01203 QString s = le->text();
01204
01205 return s;
01206 }
01207
01208
01209 void PhoneNumberDialog::textChanged(const QString &)
01210 {
01211
01212 }
01213
01214
01215