diff options
Diffstat (limited to 'filesharing/advanced/nfs/nfshostdlg.cpp')
-rw-r--r-- | filesharing/advanced/nfs/nfshostdlg.cpp | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/filesharing/advanced/nfs/nfshostdlg.cpp b/filesharing/advanced/nfs/nfshostdlg.cpp new file mode 100644 index 00000000..073170d6 --- /dev/null +++ b/filesharing/advanced/nfs/nfshostdlg.cpp @@ -0,0 +1,226 @@ +/*************************************************************************** + nfshostdlg.cpp - description + ------------------- + begin : Mon Apr 29 2002 + copyright : (C) 2002 by Jan Sch�er + email : [email protected] + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include <qcheckbox.h> +#include <qlayout.h> +#include <qlineedit.h> +#include <qwhatsthis.h> +#include <qgroupbox.h> + +#include <klocale.h> +#include <kdebug.h> +#include <kmessagebox.h> + +#include <assert.h> + +#include "nfshostdlg.h" +#include "hostprops.h" +#include "nfsentry.h" + + +NFSHostDlg::NFSHostDlg(QWidget* parent, HostList* hosts, NFSEntry* entry) + : KDialogBase(Plain, i18n("Host Properties"), Ok|Cancel, Ok, parent), + m_hosts(hosts), m_nfsEntry(entry), m_modified(false) +{ + + QWidget* page = plainPage(); + + m_gui = new HostProps(page); + + QVBoxLayout *layout = new QVBoxLayout( page, 0, 6 ); + layout->addWidget( m_gui ); + + connect( m_gui, SIGNAL(modified()), this, SLOT(setModified())); + + init(); + +} + +NFSHostDlg::~NFSHostDlg() +{ +} + +void NFSHostDlg::init() +{ + if (m_hosts->count()==1) { + NFSHost* host = m_hosts->first(); + assert(host); + m_gui->nameEdit->setText(host->name); + m_gui->publicChk->setChecked(host->isPublic()); + + setHostValues(host); + + m_gui->nameEdit->setFocus(); + } else { + m_gui->nameEdit->setDisabled(true); + m_gui->publicChk->setDisabled(true); + + m_gui->readOnlyChk->setTristate(); + m_gui->allSquashChk->setTristate(); + m_gui->rootSquashChk->setTristate(); + m_gui->hideChk->setTristate(); + m_gui->secureChk->setTristate(); + m_gui->secureLocksChk->setTristate(); + m_gui->subtreeChk->setTristate(); + m_gui->syncChk->setTristate(); + m_gui->wdelayChk->setTristate(); + + for (NFSHost* host = m_hosts->first(); host; host = m_hosts->next()) { + setHostValues(host); + } + } +} + +void NFSHostDlg::setHostValues(NFSHost* host) { + setCheckBoxValue(m_gui->readOnlyChk, ! host->readonly); + setCheckBoxValue(m_gui->allSquashChk, host->allSquash); + setCheckBoxValue(m_gui->rootSquashChk, ! host->rootSquash); + setCheckBoxValue(m_gui->hideChk, ! host->hide); + setCheckBoxValue(m_gui->secureChk, ! host->secure); + setCheckBoxValue(m_gui->secureLocksChk, ! host->secureLocks); + setCheckBoxValue(m_gui->subtreeChk, ! host->subtreeCheck); + setCheckBoxValue(m_gui->syncChk, host->sync); + setCheckBoxValue(m_gui->wdelayChk, ! host->wdelay); + + setEditValue(m_gui->anonuidEdit,QString::number(host->anonuid)); + setEditValue(m_gui->anongidEdit,QString::number(host->anongid)); +} + +void NFSHostDlg::setEditValue(QLineEdit* edit, const QString & value) { + if (edit->text().isEmpty()) + return; + + if (edit->text() == "FF") + edit->setText(value); + else + if (edit->text() != value) + edit->setText(QString::null); +} + +void NFSHostDlg::setCheckBoxValue(QCheckBox* chk, bool value) { + if (chk->state() == QButton::NoChange) + return; + + if (chk->isChecked()) { + if (! value) + chk->setNoChange(); + } else { + if (value) + chk->setChecked(true); + } +} + + +void NFSHostDlg::slotOk() +{ + if (m_hosts->count()==1) { + NFSHost* host = m_hosts->first(); + if (! saveName(host)) + return; + + saveValues(host); + } else { + for (NFSHost* host = m_hosts->first(); host; host = m_hosts->next()) { + saveValues(host); + } + } + + KDialogBase::slotOk(); +} + +bool NFSHostDlg::saveName(NFSHost* host) { + if (m_gui->publicChk->isChecked()) { + NFSHost* publicHost = m_nfsEntry->getPublicHost(); + if (publicHost && publicHost != host) { + KMessageBox::sorry(this,i18n("There already exists a public entry."), + i18n("Host Already Exists")); + m_gui->publicChk->setChecked(false); + return false; + } + host->name="*"; + } else { + QString name = m_gui->nameEdit->text().stripWhiteSpace(); + if (name.isEmpty()) { + KMessageBox::sorry(this, + i18n("Please enter a hostname or an IP address.").arg(name), + i18n("No Hostname/IP-Address")); + m_gui->nameEdit->setFocus(); + return false; + } else { + NFSHost* host2 = m_nfsEntry->getHostByName(name); + if (host2 && host2 != host) { + KMessageBox::sorry(this,i18n("The host '%1' already exists.").arg(name), + i18n("Host Already Exists")); + m_gui->nameEdit->setFocus(); + return false; + } + } + host->name=name; + } + + return true; +} + + +void NFSHostDlg::saveValues(NFSHost* host) { + + saveCheckBoxValue(host->readonly,m_gui->readOnlyChk,true); + saveCheckBoxValue(host->allSquash,m_gui->allSquashChk,false); + saveCheckBoxValue(host->rootSquash,m_gui->rootSquashChk,true); + saveCheckBoxValue(host->hide,m_gui->hideChk,true); + saveCheckBoxValue(host->secure,m_gui->secureChk,true); + saveCheckBoxValue(host->secureLocks,m_gui->secureLocksChk,true); + saveCheckBoxValue(host->subtreeCheck,m_gui->subtreeChk,true); + saveCheckBoxValue(host->sync,m_gui->syncChk,false); + saveCheckBoxValue(host->wdelay,m_gui->wdelayChk,true); + + saveEditValue(host->anonuid,m_gui->anonuidEdit); + saveEditValue(host->anongid,m_gui->anongidEdit); +} + +void NFSHostDlg::saveEditValue(int & value, QLineEdit* edit) { + if ( edit->text().isEmpty()) + return; + + value = edit->text().toInt(); +} + +void NFSHostDlg::saveCheckBoxValue(bool & value, QCheckBox* chk, bool neg) { + if (chk->state() == QButton::NoChange) + return; + + if (neg) + value = ! chk->isChecked(); + else + value = chk->isChecked(); +} + + + +bool NFSHostDlg::isModified() { + return m_modified; +} + + +void NFSHostDlg::setModified() +{ + m_modified = true; +} + +#include "nfshostdlg.moc" + + |