/* * setupwizard.cpp * * Copyright (C) 2001 Alexander Neundorf * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "setupwizard.h" #include #include #include #include #include #include #include #include SetupWizard::SetupWizard(QWidget* parent, LisaConfigInfo* configInfo) :QWizard(parent,"hallo",true) ,m_page1(0) ,m_noNicPage(0) ,m_multiNicPage(0) ,m_searchPage(0) ,m_addressesPage(0) ,m_allowedAddressesPage(0) ,m_bcastPage(0) ,m_intervalPage(0) ,m_advancedPage(0) ,m_finalPage(0) ,m_nicListBox(0) ,m_trustedHostsLabel(0) ,m_ping(0) ,m_nmblookup(0) ,m_pingAddresses(0) ,m_allowedAddresses(0) ,m_bcastAddress(0) ,m_manualAddress(0) ,m_updatePeriod(0) ,m_deliverUnnamedHosts(0) ,m_firstWait(0) ,m_maxPingsAtOnce(0) ,m_secondScan(0) ,m_secondWait(0) ,m_nics(0) ,m_configInfo(configInfo) { QString title( i18n("LISa Network Neighborhood Setup") ); setCaption(title); m_configInfo->clear(); setupPage1(); addPage( m_page1, title); setupAdvancedSettingsPage(); addPage( m_advancedPage, i18n("Advanced Settings")); } SetupWizard::~SetupWizard() {} void SetupWizard::clearAll() { showPage(m_page1); if (m_nicListBox) m_nicListBox->clear(); if (m_manualAddress) m_manualAddress->setText(""); if (m_ping) m_ping->setChecked(false); if (m_nmblookup) m_nmblookup->setChecked(false); if (m_pingAddresses) m_pingAddresses->setText(""); if (m_allowedAddresses) m_allowedAddresses->setText(""); if (m_bcastAddress) m_bcastAddress->setText(""); if (m_updatePeriod) m_updatePeriod->setValue(300); if (m_deliverUnnamedHosts) m_deliverUnnamedHosts->setChecked(false); if (m_firstWait) m_firstWait->setValue(10); if (m_maxPingsAtOnce) m_maxPingsAtOnce->setValue(256); if (m_secondScan) m_secondScan->setChecked(false); if (m_secondWait) { m_secondWait->setEnabled(false); m_secondWait->setValue(0); } if (m_nics) { delete m_nics; m_nics=0; } } void SetupWizard::setupPage1() { m_page1 = new QVBox( this ); new QLabel(i18n("

This wizard will ask you a few questions about your network.

" "

Usually you can simply keep the suggested settings.

" "

After you have finished the wizard, you will be able to browse and use " "shared resources on your LAN, not only Samba/Windows shares, but also " "FTP, HTTP and NFS resources exactly the same way.

" "

Therefore you need to setup the LAN Information Server (LISa) on your machine. " "Think of the LISa server as an FTP or HTTP server; " "it has to be run by root, it should be started during the boot process and " "only one LISa server can run on one machine."), m_page1); QWidget *dummy=new QWidget(m_page1); m_page1->setStretchFactor(dummy,10); m_page1->setSpacing(KDialog::spacingHint()); m_page1->setMargin(KDialog::marginHint()); setNextEnabled( m_page1, true ); setHelpEnabled( m_page1, false ); } void SetupWizard::setupMultiNicPage() { m_multiNicPage=new QVBox(this); new QLabel(i18n("

More than one network interface card was found on your system.

" "

Please choose the one to which your LAN is connected.

"), m_multiNicPage); m_multiNicPage->setMargin(KDialog::marginHint()); m_multiNicPage->setSpacing(KDialog::spacingHint()); m_nicListBox=new QListBox(m_multiNicPage); m_nicListBox->setSelectionMode(QListBox::Single); setHelpEnabled( m_multiNicPage, false ); } void SetupWizard::setupNoNicPage() { m_noNicPage=new QVBox(this); new QLabel(i18n("

No network interface card was found on your system.

" "

Possible reason: no network card is installed. You probably want to cancel now " "or enter your IP address and network manually

" "Example: 192.168.0.1/255.255.255.0.
"), m_noNicPage); m_noNicPage->setMargin(KDialog::marginHint()); m_noNicPage->setSpacing(KDialog::spacingHint()); m_manualAddress=new KRestrictedLine(m_noNicPage,"0123456789./"); connect(m_manualAddress,SIGNAL(textChanged(const QString&)),this,SLOT(checkIPAddress(const QString&))); QWidget *dummy=new QWidget(m_noNicPage); m_noNicPage->setStretchFactor(dummy,10); setNextEnabled(m_noNicPage, false); setHelpEnabled(m_noNicPage, false); } void SetupWizard::setupSearchPage() { m_searchPage=new QVBox(this); QLabel *info=new QLabel(i18n("There are two ways LISa can search hosts on your network."),m_searchPage); info->setTextFormat(Qt::RichText); m_ping=new QCheckBox(i18n("Send pings"), m_searchPage); info=new QLabel(i18n("All hosts with TCP/IP will respond,
" "whether or not they are samba servers.
" "Don\'t use it if your network is very large, i.e. more than 1000 hosts.
"),m_searchPage); m_nmblookup=new QCheckBox(i18n("Send NetBIOS broadcasts"),m_searchPage); info=new QLabel(i18n("You need to have the samba package (nmblookup) installed.
" "Only samba/windows servers will respond.
" "This method is not very reliable.
" "You should enable it if you are part of a large network."),m_searchPage); info->setTextFormat(Qt::RichText); QWidget *dummy=new QWidget(m_searchPage); m_searchPage->setStretchFactor(dummy,10); m_searchPage->setSpacing(KDialog::spacingHint()); m_searchPage->setMargin(KDialog::marginHint()); info=new QLabel(i18n("If unsure, keep it as is."),m_searchPage); info->setAlignment(AlignRight|AlignVCenter); setHelpEnabled( m_searchPage, false ); } void SetupWizard::setupAddressesPage() { m_addressesPage=new QVBox(this); QLabel *info=new QLabel(i18n("All IP addresses included in the specified range will be pinged.
" "If you are part of a small network, e.g. with network mask 255.255.255.0
" "use your IP address/network mask.
"),m_addressesPage); info->setTextFormat(Qt::RichText); m_pingAddresses=new KRestrictedLine(m_addressesPage,"0123456789./;-"); info=new QLabel(i18n("
There are four ways to specify address ranges:
" "1. IP address/network mask, like 192.168.0.0/255.255.255.0;
" "2. single IP addresses, like 10.0.0.23;
" "3. continuous ranges, like 10.0.1.0-10.0.1.200;
" "4. ranges for each part of the address, like 10-10.1-5.1-25.1-3;
" "You can also enter combinations of 1 to 4, separated by \";\", like
" "192.168.0.0/255.255.255.0;10.0.0.0;10.0.1.1-10.0.1.100;
"),m_addressesPage); info->setAlignment(AlignLeft|AlignVCenter|WordBreak); QWidget *dummy=new QWidget(m_addressesPage); m_addressesPage->setStretchFactor(dummy,10); m_addressesPage->setSpacing(KDialog::spacingHint()); m_addressesPage->setMargin(KDialog::marginHint()); info=new QLabel(i18n("If unsure, keep it as is."), m_addressesPage); info->setAlignment(AlignRight|AlignVCenter); setHelpEnabled( m_addressesPage, false ); } void SetupWizard::setupAllowedPage() { m_allowedAddressesPage=new QVBox(this); QLabel* info=new QLabel(i18n("This is a security related setting.
" "It provides a simple IP address based way to specify \"trusted\" hosts.
" "Only hosts which fit into the addresses given here are accepted by LISa as clients. " "The list of hosts published by LISa will also only contain hosts which fit into this scheme.
" "Usually you enter your IP address/network mask here."),m_allowedAddressesPage); info->setAlignment(AlignLeft|AlignVCenter|WordBreak); m_allowedAddresses=new KRestrictedLine(m_allowedAddressesPage,"0123456789./-;"); m_trustedHostsLabel=new QLabel(m_allowedAddressesPage); QWidget *dummy=new QWidget(m_allowedAddressesPage); m_allowedAddressesPage->setStretchFactor(dummy,10); m_allowedAddressesPage->setSpacing(KDialog::spacingHint()); m_allowedAddressesPage->setMargin(KDialog::marginHint()); info=new QLabel(i18n("If unsure, keep it as is."), m_allowedAddressesPage); info->setAlignment(AlignRight|AlignVCenter); setHelpEnabled( m_allowedAddressesPage, false ); } void SetupWizard::setupBcastPage() { m_bcastPage=new QVBox(this); QLabel *info=new QLabel(i18n("
Enter your IP address and network mask here, like 192.168.0.1/255.255.255.0"),m_bcastPage); info->setAlignment(AlignLeft|AlignVCenter|WordBreak); m_bcastAddress=new KRestrictedLine(m_bcastPage,"0123456789./"); info=new QLabel(i18n("
To reduce the network load, the LISa servers in one network
" "cooperate with each other. Therefore you have to enter the broadcast
" "address here. If you are connected to more than one network, choose
" "one of the broadcast addresses."),m_bcastPage); info->setAlignment(AlignLeft|AlignVCenter|WordBreak); QWidget *dummy=new QWidget(m_bcastPage); m_bcastPage->setStretchFactor(dummy,10); m_bcastPage->setSpacing(KDialog::spacingHint()); info=new QLabel(i18n("If unsure, keep it as is."), m_bcastPage); info->setAlignment(AlignRight|AlignVCenter); m_bcastPage->setSpacing(KDialog::spacingHint()); m_bcastPage->setMargin(KDialog::marginHint()); setHelpEnabled( m_bcastPage, false ); } void SetupWizard::setupUpdateIntervalPage() { m_intervalPage=new QVBox(this); QLabel *info=new QLabel(i18n("
Enter the interval after which LISa, if busy, will update its host list."),m_intervalPage); info->setTextFormat(Qt::RichText); m_updatePeriod=new QSpinBox(300,1800,10,m_intervalPage); m_updatePeriod->setSuffix(i18n(" sec")); info=new QLabel(i18n("
Please note that the update interval will grow automatically by " "up to 16 times the value you enter here, if nobody accesses the LISa server. " "So if you enter 300 sec = 5 min here, this does not mean that LISa will ping " "your whole network every 5 minutes. The interval will increase up to 16 x 5 min = 80 min."),m_intervalPage); info->setAlignment(AlignLeft|AlignVCenter|WordBreak); QWidget *dummy=new QWidget(m_intervalPage); m_intervalPage->setStretchFactor(dummy,10); m_intervalPage->setSpacing(KDialog::spacingHint()); m_intervalPage->setMargin(KDialog::marginHint()); info=new QLabel(i18n("If unsure, keep it as is."), m_intervalPage); info->setAlignment(AlignRight|AlignVCenter); info->setTextFormat(Qt::RichText); setHelpEnabled( m_intervalPage, false ); } void SetupWizard::setupAdvancedSettingsPage() { m_advancedPage=new QVBox(this); QLabel *info=new QLabel(i18n("This page contains several settings you usually only
" "need if LISa doesn't find all hosts in your network."),m_advancedPage); info->setTextFormat(Qt::RichText); m_deliverUnnamedHosts=new QCheckBox(i18n("Re&port unnamed hosts"),m_advancedPage); info=new QLabel(i18n("Should hosts for which LISa can\'t resolve the name be included in the host list?
"),m_advancedPage); QHBox* hbox=new QHBox(m_advancedPage); info=new QLabel(i18n("Wait for replies after first scan"),hbox); m_firstWait=new QSpinBox(10,1000,50,hbox); m_firstWait->setSuffix(i18n(" ms")); info=new QLabel(i18n("How long should LISa wait for answers to pings?
" "If LISa doesn\'t find all hosts, try to increase this value.
"),m_advancedPage); hbox=new QHBox(m_advancedPage); info=new QLabel(i18n("Max. number of pings to send at once"),hbox); info->setTextFormat(Qt::RichText); m_maxPingsAtOnce=new QSpinBox(8,1024,5,hbox); info=new QLabel(i18n("How many ping packets should LISa send at once?
" "If LISa doesn't find all hosts you could try to decrease this value.
"),m_advancedPage); m_secondScan=new QCheckBox(i18n("Al&ways scan twice"),m_advancedPage); hbox=new QHBox(m_advancedPage); // hbox->setSpacing(10); // WTF? info=new QLabel(i18n("Wait for replies after second scan"),hbox); info->setTextFormat(Qt::RichText); m_secondWait=new QSpinBox(0,1000,50,hbox); m_secondWait->setSuffix(i18n(" ms")); info=new QLabel(i18n("If LISa doesn't find all hosts, enable this option."),m_advancedPage); //this would make the dialog to large //m_advancedPage->setSpacing(KDialog::spacingHint()); //m_advancedPage->setMargin(KDialog::marginHint()); info=new QLabel(i18n("If unsure, keep it as is."), m_advancedPage); info->setAlignment(AlignRight|AlignVCenter); connect(m_secondScan,SIGNAL(toggled(bool)),m_secondWait,SLOT(setEnabled(bool))); setHelpEnabled( m_advancedPage, false ); } void SetupWizard::setupFinalPage() { m_finalPage=new QVBox(this); QLabel *info=new QLabel(i18n("
Your LAN browsing has been successfully set up.

" "Make sure that the LISa server is started during the " "boot process. How this is done depends on your " "distribution and OS. Usually you have to insert it somewhere " "in a boot script under /etc.
" "Start the LISa server as root and without any command line options.
" "The config file will now be saved to /etc/lisarc.
" "To test the server, try lan:/ in Konqueror.

" "If you have problems or suggestions, visit http://lisa-home.sourceforge.net."),m_finalPage); info->setTextFormat(Qt::RichText); QWidget *dummy=new QWidget(m_finalPage); m_finalPage->setStretchFactor(dummy,10); m_finalPage->setSpacing(KDialog::spacingHint()); m_finalPage->setMargin(KDialog::marginHint()); setHelpEnabled( m_finalPage, false ); } void SetupWizard::next() { if (currentPage()==m_page1) { if (m_noNicPage==0) setupRest(); setAppropriate(m_noNicPage,false); setAppropriate(m_multiNicPage,false); if (m_nics!=0) delete m_nics; m_nics=findNICs(); if (m_nics->count()==0) { setAppropriate(m_noNicPage,true); } else if (m_nics->count()==1) { //still easy //if the host part is less than 20 bits simply take it MyNIC *nic=m_nics->first(); LisaConfigInfo lci; suggestSettingsForNic(nic,lci); applyLisaConfigInfo(lci); } else { //more than one nic setAppropriate(m_multiNicPage,true); m_nicListBox->clear(); for (MyNIC *nic=m_nics->first(); nic!=0; nic=m_nics->next()) { QString tmp=nic->name+": "+nic->addr+"/"+nic->netmask+";"; m_nicListBox->insertItem(tmp); } m_nicListBox->setSelected(0,true); } } else if (currentPage()==m_multiNicPage) { QString nic=m_nicListBox->currentText(); unsigned int i=0; for (i=0; icount(); i++) { if (m_nicListBox->isSelected(i)) { nic=m_nicListBox->text(i); break; } } MyNIC* thisNic=m_nics->at(i); LisaConfigInfo lci; suggestSettingsForNic(thisNic,lci); applyLisaConfigInfo(lci); } else if (currentPage()==m_noNicPage) { LisaConfigInfo lci; suggestSettingsForAddress(m_manualAddress->text(),lci); applyLisaConfigInfo(lci); } else if (currentPage()==m_searchPage) setAppropriate(m_addressesPage, m_ping->isChecked()); else if (currentPage()==m_intervalPage) { if (m_finalPage==0) { setupFinalPage(); addPage( m_finalPage, i18n("Congratulations!")); } setAppropriate(m_advancedPage, m_ping->isChecked()); } QWizard::next(); } void SetupWizard::showPage(QWidget* page) { if (page==m_noNicPage) { m_manualAddress->setFocus(); setNextEnabled(m_noNicPage, false); setHelpEnabled(m_noNicPage, false); } else if (page==m_multiNicPage) m_nicListBox->setFocus(); else if ( page == m_searchPage) m_ping->setFocus(); else if (page==m_addressesPage) m_pingAddresses->setFocus(); else if (page==m_allowedAddressesPage) { QString text; if (m_ping->isChecked()) text+=i18n("You can use the same syntax as on the previous page.
"); else text+=i18n("There are three ways to specify IP addresses:
" "1. IP address/network mask, like 192.168.0.0/255.255.255.0;
" "2. continuous ranges, like 10.0.1.0-10.0.1.200;
" "3. single IP addresses, like 10.0.0.23;
" "You can also enter combinations of 1 to 3, separated by \";\",
" "like 192.168.0.0/255.255.255.0;10.0.0.0;10.0.1.1-10.0.1.100;
"); m_trustedHostsLabel->setText(text); m_allowedAddresses->setFocus(); } else if (page==m_bcastPage) m_bcastAddress->setFocus(); else if (page==m_intervalPage) m_updatePeriod->setFocus(); else if (page==m_advancedPage) m_deliverUnnamedHosts->setFocus(); else if (page==m_finalPage) setFinishEnabled(m_finalPage,true); QWizard::showPage(page); } void SetupWizard::setupRest() { removePage(m_advancedPage); setupMultiNicPage(); addPage( m_multiNicPage, i18n("Multiple Network Interfaces Found")); setupNoNicPage(); addPage( m_noNicPage, i18n("No Network Interface Found")); setNextEnabled(m_noNicPage, false); setHelpEnabled(m_noNicPage, false); setupSearchPage(); addPage( m_searchPage, i18n("Specify Search Method")); setupAddressesPage(); addPage( m_addressesPage, i18n("Specify Address Range LISa Will Ping")); setupAllowedPage(); addPage( m_allowedAddressesPage, i18n("\"Trusted\" Hosts")); setupBcastPage(); addPage( m_bcastPage, i18n("Your Broadcast Address")); setupUpdateIntervalPage(); addPage( m_intervalPage, i18n("LISa Update Interval")); addPage( m_advancedPage, i18n("Advanced Settings")); } void SetupWizard::accept() { if (m_ping->isChecked()) { m_configInfo->pingAddresses=m_pingAddresses->text(); m_configInfo->secondScan=m_secondScan->isChecked(); if (m_configInfo->secondScan) m_configInfo->secondWait=(m_secondWait->value()+5)/10; else m_configInfo->secondWait=0; m_configInfo->firstWait=(m_firstWait->value()+5)/10; } else { m_configInfo->pingAddresses=""; m_configInfo->secondScan=false; m_configInfo->secondWait=0; m_configInfo->firstWait=30; } m_configInfo->broadcastNetwork=m_bcastAddress->text(); m_configInfo->allowedAddresses=m_allowedAddresses->text(); m_configInfo->maxPingsAtOnce=m_maxPingsAtOnce->value(); m_configInfo->updatePeriod=m_updatePeriod->value(); m_configInfo->useNmblookup=m_nmblookup->isChecked(); m_configInfo->unnamedHosts=m_deliverUnnamedHosts->isChecked(); QWizard::accept(); } void SetupWizard::checkIPAddress(const QString& addr) { QString address=addr.simplifyWhiteSpace(); QRegExp regex("^\\d+\\.\\d+\\.\\d+\\.\\d+\\s*/\\s*\\d+\\.\\d+\\.\\d+\\.\\d+$"); setNextEnabled(m_noNicPage, (regex.search(address,0)!=-1)); // setNextEnabled(m_noNicPage, (regex.find(address,0)!=-1)); } void SetupWizard::applyLisaConfigInfo(LisaConfigInfo& lci) { m_ping->setChecked(!lci.pingAddresses.isEmpty()); m_pingAddresses->setText(lci.pingAddresses); m_nmblookup->setChecked(lci.useNmblookup); m_allowedAddresses->setText(lci.allowedAddresses); m_bcastAddress->setText(lci.broadcastNetwork); m_updatePeriod->setValue(lci.updatePeriod); m_deliverUnnamedHosts->setChecked(lci.unnamedHosts); m_firstWait->setValue(lci.firstWait*10); m_maxPingsAtOnce->setValue(lci.maxPingsAtOnce); m_secondWait->setValue(lci.secondWait*10); m_secondScan->setChecked(lci.secondScan); m_secondWait->setEnabled(lci.secondScan); } #include "setupwizard.moc"