summaryrefslogtreecommitdiffstats
path: root/filesharing/advanced/nfs/nfshostdlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filesharing/advanced/nfs/nfshostdlg.cpp')
-rw-r--r--filesharing/advanced/nfs/nfshostdlg.cpp226
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 : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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"
+
+