summaryrefslogtreecommitdiffstats
path: root/filesharing/advanced/kcm_sambaconf/sharedlgimpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filesharing/advanced/kcm_sambaconf/sharedlgimpl.cpp')
-rw-r--r--filesharing/advanced/kcm_sambaconf/sharedlgimpl.cpp478
1 files changed, 478 insertions, 0 deletions
diff --git a/filesharing/advanced/kcm_sambaconf/sharedlgimpl.cpp b/filesharing/advanced/kcm_sambaconf/sharedlgimpl.cpp
new file mode 100644
index 00000000..aca5ea39
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/sharedlgimpl.cpp
@@ -0,0 +1,478 @@
+/***************************************************************************
+ sharedlgimpl.cpp - description
+ -------------------
+ begin : Tue June 6 2002
+ copyright : (C) 2002 by Jan Schäfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * This file is part of KSambaPlugin. *
+ * *
+ * KSambaPlugin 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. *
+ * *
+ * KSambaPlugin 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 KSambaPlugin; if not, write to the Free Software *
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
+ * *
+ ******************************************************************************/
+
+
+/**
+ * @author Jan Schäfer
+ **/
+
+#include <qcheckbox.h>
+#include <qlineedit.h>
+#include <qcombobox.h>
+#include <qlabel.h>
+#include <qgroupbox.h>
+#include <qlayout.h>
+#include <qtabwidget.h>
+#include <qregexp.h>
+#include <qstringlist.h>
+#include <qgrid.h>
+#include <qcursor.h>
+#include <qtable.h>
+#include <qlistbox.h>
+#include <qtoolbutton.h>
+#include <qpixmap.h>
+#include <qframe.h>
+#include <qwidget.h>
+#include <qtabwidget.h>
+
+
+#include <klineedit.h>
+#include <kurlrequester.h>
+#include <knuminput.h>
+#include <kdebug.h>
+#include <kcombobox.h>
+#include <kiconloader.h>
+#include <klocale.h>
+#include <kfiledetailview.h>
+#include <kdirlister.h>
+#include <kmessagebox.h>
+#include <kpopupmenu.h>
+#include <kaction.h>
+#include <krestrictedline.h>
+#include <kjanuswidget.h>
+
+#include "smbpasswdfile.h"
+#include "sambafile.h"
+#include "common.h"
+#include "passwd.h"
+#include "usertabimpl.h"
+#include "filemodedlgimpl.h"
+#include "hiddenfileview.h"
+#include "dictmanager.h"
+
+#include "sharedlgimpl.h"
+
+
+
+
+ShareDlgImpl::ShareDlgImpl(QWidget* parent, SambaShare* share)
+ : KcmShareDlg(parent,"sharedlgimpl")
+{
+ if (!share) {
+ kdWarning() << "ShareDlgImpl::Constructor : share parameter is null!" << endl;
+ return;
+ }
+
+ _dictMngr = new DictManager(share);
+ _share = share;
+
+ initDialog();
+ initAdvancedTab();
+}
+
+void ShareDlgImpl::initDialog()
+{
+ if (!_share)
+ return;
+
+ // Base settings
+ _fileView = 0L;
+
+ pathUrlRq->setMode(2+8+16);
+
+ homeChk->setChecked(_share->getName().lower() == "homes");
+ shareNameEdit->setText( _share->getName() );
+
+ _dictMngr->add("path",pathUrlRq);
+
+ _dictMngr->add("comment",commentEdit);
+ _dictMngr->add("available",availableBaseChk);
+ _dictMngr->add("browseable",browseableBaseChk);
+ _dictMngr->add("public",publicBaseChk);
+
+ _dictMngr->add("read only",readOnlyBaseChk);
+
+ // User settings
+
+ _userTab = new UserTabImpl(this,_share);
+ _tabs->insertTab(_userTab,i18n("&Users"),1);
+ _userTab->load();
+ connect(_userTab, SIGNAL(changed()), this, SLOT(changedSlot()));
+
+ // Filename settings
+
+ _dictMngr->add("case sensitive",caseSensitiveCombo,
+ new QStringList(QStringList() << "auto" << "yes" << "no"));
+ _dictMngr->add("preserve case",preserveCaseChk);
+ _dictMngr->add("short preserve case",shortPreserveCaseChk);
+ _dictMngr->add("mangled names",mangledNamesChk);
+ _dictMngr->add("mangle case",mangleCaseChk);
+ _dictMngr->add("mangling char",manglingCharEdit);
+ _dictMngr->add("mangled map",mangledMapEdit);
+
+
+ _dictMngr->add("mangling method",manglingMethodCombo,
+ new QStringList(QStringList() << "hash" << "hash2"));
+
+ _dictMngr->add("default case",defaultCaseCombo,
+ new QStringList(QStringList() << "Lower" << "Upper"));
+
+ _dictMngr->add("hide dot files",hideDotFilesChk);
+ _dictMngr->add("strip dot",hideTrailingDotChk);
+ _dictMngr->add("hide unreadable",hideUnreadableChk);
+ _dictMngr->add("hide unwriteable files",hideUnwriteableFilesChk);
+ _dictMngr->add("hide special files",hideSpecialFilesChk);
+ _dictMngr->add("dos filemode",dosFilemodeChk);
+ _dictMngr->add("dos filetimes",dosFiletimesChk);
+ _dictMngr->add("dos filetime resolution",dosFiletimeResolutionChk);
+
+ // Security tab
+
+ _dictMngr->add("guest only",guestOnlyChk);
+ _dictMngr->add("hosts allow",hostsAllowEdit);
+
+ _dictMngr->add("only user",onlyUserChk);
+ _dictMngr->add("username",userNameEdit);
+
+
+ guestAccountCombo->insertStringList( getUnixUsers() );
+ setComboToString(guestAccountCombo,_share->getValue("guest account"));
+
+ _dictMngr->add("hosts deny",hostsDenyEdit);
+ _dictMngr->add("force directory security mode",forceDirectorySecurityModeEdit);
+ _dictMngr->add("force directory mode",forceDirectoryModeEdit);
+ _dictMngr->add("force security mode",forceSecurityModeEdit);
+
+ _dictMngr->add("force create mode",forceCreateModeEdit);
+ _dictMngr->add("directory security mask",directorySecurityMaskEdit);
+ _dictMngr->add("directory mask",directoryMaskEdit);
+ _dictMngr->add("security mask",securityMaskEdit);
+ _dictMngr->add("create mask",createMaskEdit);
+ _dictMngr->add("inherit permissions",inheritPermissionsChk);
+ _dictMngr->add("inherit acls",inheritAclsChk);
+ _dictMngr->add("nt acl support",ntAclSupportChk);
+ _dictMngr->add("delete readonly",deleteReadonlyChk);
+
+ _dictMngr->add("wide links",wideLinksChk);
+ _dictMngr->add("follow symlinks",followSymlinksChk);
+
+ _dictMngr->add("map hidden",mapHiddenChk);
+ _dictMngr->add("map archive",mapArchiveChk);
+ _dictMngr->add("map system",mapSystemChk);
+ _dictMngr->add("store dos attributes",eaSupportChk);
+
+ _dictMngr->add("ea support",eaSupportChk);
+
+
+ _dictMngr->add("force unknown acl user",forceUnknownAclUserEdit);
+ _dictMngr->add("profile acls",profileAclsChk);
+ _dictMngr->add("map acl inherit",mapAclInheritChk);
+
+
+ // Advanced
+
+ _dictMngr->add("blocking locks",blockingLocksChk);
+ _dictMngr->add("fake oplocks",fakeOplocksChk);
+ _dictMngr->add("locking",lockingChk);
+ _dictMngr->add("level2 oplocks",level2OplocksChk);
+ _dictMngr->add("posix locking",posixLockingChk);
+ _dictMngr->add("strict locking",strictLockingCombo,
+ new QStringList(QStringList() << "Auto" << "yes" << "no"));
+ _dictMngr->add("share modes",shareModesChk);
+ _dictMngr->add("oplocks",oplocksChk);
+
+
+ _dictMngr->add("oplock contention limit",oplockContentionLimitSpin);
+ _dictMngr->add("strict sync",strictSyncChk);
+
+ // Tuning
+
+ _dictMngr->add("strict allocate",strictAllocateChk);
+
+ _dictMngr->add("max connections",maxConnectionsSpin);
+ _dictMngr->add("write cache size",writeCacheSizeSpin);
+ _dictMngr->add("block size",blockSizeSpin);
+
+
+ _dictMngr->add("sync always",syncAlwaysChk);
+ _dictMngr->add("use sendfile",useSendfileChk);
+
+ _dictMngr->add("csc policy",cscPolicyCombo,
+ new QStringList(QStringList() << "manual" << "documents" << "programs" << "disable"));
+
+
+
+ // VFS
+
+ _dictMngr->add("vfs objects",vfsObjectsEdit);
+ _dictMngr->add("vfs options",vfsOptionsEdit);
+
+ // Misc
+
+ _dictMngr->add("preexec",preexecEdit);
+ _dictMngr->add("postexec",postexecEdit);
+ _dictMngr->add("root preexec",rootPreexecEdit);
+ _dictMngr->add("root postexec",rootPostexecEdit);
+
+ _dictMngr->add("preexec close",preexecCloseChk);
+ _dictMngr->add("root preexec close",rootPreexecCloseChk);
+
+ _dictMngr->add("volume",volumeEdit);
+ _dictMngr->add("fstype",fstypeEdit);
+ _dictMngr->add("magic script",magicScriptEdit);
+ _dictMngr->add("magic output",magicOutputEdit);
+ _dictMngr->add("dont descend",dontDescendEdit);
+ _dictMngr->add("set directory",setDirectoryChk);
+ _dictMngr->add("fake directory create times",fakeDirectoryCreateTimesChk);
+
+ _dictMngr->add("msdfs root",msdfsRootChk);
+ _dictMngr->add("msdfs proxy",msdfsProxyEdit);
+
+ _dictMngr->load( _share );
+
+
+ connect( _tabs, SIGNAL(currentChanged(QWidget*)), this, SLOT(tabChangedSlot(QWidget*)));
+ connect(_dictMngr, SIGNAL(changed()), this, SLOT(changedSlot()));
+}
+
+ShareDlgImpl::~ShareDlgImpl()
+{
+ delete _fileView;
+}
+
+void ShareDlgImpl::initAdvancedTab()
+{
+
+ QVBoxLayout *l = new QVBoxLayout(advancedFrame);
+ l->setAutoAdd(true);
+ l->setMargin(0);
+ _janus = new KJanusWidget(advancedFrame,0,KJanusWidget::TreeList);
+ _janus->setRootIsDecorated(false);
+ _janus->setShowIconsInTreeList(true);
+
+ QWidget *w;
+ QFrame *f;
+ QString label;
+ QPixmap icon;
+
+ for (int i=0;i<advancedDumpTab->count();)
+ {
+ w = advancedDumpTab->page(i);
+ label = advancedDumpTab->label(i);
+
+ if (label.lower() == "security")
+ icon = SmallIcon("password");
+ else
+ if (label.lower() == "tuning")
+ icon = SmallIcon("launch");
+ else
+ if (label.lower() == "filenames")
+ icon = SmallIcon("folder");
+ else
+ if (label.lower() == "printing")
+ icon = SmallIcon("fileprint");
+ else
+ if (label.lower() == "locking")
+ icon = SmallIcon("lock");
+ else
+ if (label.lower() == "logon")
+ icon = SmallIcon("kdmconfig");
+ else
+ if (label.lower() == "protocol")
+ icon = SmallIcon("core");
+ else
+ if (label.lower() == "coding")
+ icon = SmallIcon("charset");
+ else
+ if (label.lower() == "socket")
+ icon = SmallIcon("socket");
+ else
+ if (label.lower() == "ssl")
+ icon = SmallIcon("encrypted");
+ else
+ if (label.lower() == "browsing")
+ icon = SmallIcon("konqueror");
+ else
+ if (label.lower() == "misc")
+ icon = SmallIcon("misc");
+ else {
+ icon = QPixmap(16,16);
+ icon.fill();
+ }
+ //SmallIcon("empty2");
+
+ f = _janus->addPage( label,label,icon );
+ l = new QVBoxLayout(f);
+ l->setAutoAdd(true);
+ l->setMargin(0);
+
+ advancedDumpTab->removePage(w);
+
+ w->reparent(f,QPoint(1,1),TRUE);
+
+ }
+
+ w = _tabs->page(5);
+ _tabs->removePage(w);
+ delete w;
+
+
+}
+
+
+void ShareDlgImpl::tabChangedSlot(QWidget* w)
+{
+ // We are only interrested in the Hidden files tab
+ if ( QString(w->name()) == "hiddenFilesTab" )
+ loadHiddenFilesView();
+
+}
+
+void ShareDlgImpl::loadHiddenFilesView()
+{
+
+ if (_fileView)
+ return;
+
+ _fileView = new HiddenFileView( this, _share );
+
+ if ( ! _share->isSpecialSection())
+ _fileView->load();
+
+
+}
+
+void ShareDlgImpl::accept()
+{
+ // Base settings
+ if (!_share)
+ return;
+
+ if (homeChk->isChecked())
+ _share->setName("homes");
+ else
+ _share->setName(shareNameEdit->text());
+
+ // User settings
+
+ _userTab->save();
+
+ // Security
+
+ _share->setValue("guest account",guestAccountCombo->currentText( ) );
+
+
+ // Hidden files
+ if (_fileView)
+ _fileView->save();
+
+ _dictMngr->save( _share );
+
+ KcmShareDlg::accept();
+}
+
+void ShareDlgImpl::homeChkToggled(bool b)
+{
+ shareNameEdit->setDisabled(b);
+ pathUrlRq->setDisabled(b);
+
+ if (b)
+ {
+ shareNameEdit->setText("homes");
+ pathUrlRq->setURL("");
+ directoryPixLbl->setPixmap(DesktopIcon("folder_home",48));
+
+ }
+ else
+ {
+ shareNameEdit->setText( _share->getName() );
+ pathUrlRq->setURL( _share->getValue("path") );
+ directoryPixLbl->setPixmap(DesktopIcon("folder"));
+ }
+}
+
+void ShareDlgImpl::accessModifierBtnClicked()
+{
+ if (!QObject::sender()) {
+ kdWarning() << "ShareDlgImpl::accessModifierBtnClicked() : QObject::sender() is null!" << endl;
+ return;
+ }
+
+
+ QString name = QObject::sender()->name();
+
+ QLineEdit *edit = 0L;
+
+ if (name == "forceCreateModeBtn")
+ edit = forceCreateModeEdit;
+ else
+ if (name == "forceSecurityModeBtn")
+ edit = forceSecurityModeEdit;
+ else
+ if (name == "forceDirectoryModeBtn")
+ edit = forceDirectoryModeEdit;
+ else
+ if (name == "forceDirectorySecurityModeBtn")
+ edit = forceDirectorySecurityModeEdit;
+ else
+ if (name == "createMaskBtn")
+ edit = createMaskEdit;
+ else
+ if (name == "securityMaskBtn")
+ edit = securityMaskEdit;
+ else
+ if (name == "directoryMaskBtn")
+ edit = directoryMaskEdit;
+ else
+ if (name == "directorySecurityMaskBtn")
+ edit = directorySecurityMaskEdit;
+
+ if (!edit) {
+ kdWarning() << "ShareDlgImpl::accessModifierBtnClicked() : edit is null! name=" << name << endl;
+ return;
+ }
+
+ FileModeDlgImpl dlg(this, edit);
+
+ dlg.exec();
+}
+
+void ShareDlgImpl::changedSlot() {
+ m_changed = true;
+ kdDebug(5009) << "ShareDlgImpl::changedSlot()" << endl;
+ emit changed();
+}
+
+void ShareDlgImpl::pathUrlRq_textChanged( const QString & s)
+{
+ if (_fileView && ! _share->isSpecialSection())
+ _fileView->load();
+}
+
+
+#include "sharedlgimpl.moc"