File indexing completed on 2023-10-01 08:44:24
0001 /*************************************************************************** 0002 The configuration dialog of Smb4K 0003 ------------------- 0004 begin : Sa Apr 14 2007 0005 copyright : (C) 2004-2019 by Alexander Reinholdt 0006 email : alexander.reinholdt@kdemail.net 0007 ***************************************************************************/ 0008 0009 /*************************************************************************** 0010 * This program is free software; you can redistribute it and/or modify * 0011 * it under the terms of the GNU General Public License as published by * 0012 * the Free Software Foundation; either version 2 of the License, or * 0013 * (at your option) any later version. * 0014 * * 0015 * This program is distributed in the hope that it will be useful, but * 0016 * WITHOUT ANY WARRANTY; without even the implied warranty of * 0017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 0018 * General Public License for more details. * 0019 * * 0020 * You should have received a copy of the GNU General Public License * 0021 * along with this program; if not, write to the * 0022 * Free Software Foundation, Inc., 51 Franklin Street, Suite 500, Boston,* 0023 * MA 02110-1335, USA * 0024 ***************************************************************************/ 0025 0026 #ifdef HAVE_CONFIG_H 0027 #include <config.h> 0028 #endif 0029 0030 // application specific includes 0031 #include "smb4kconfigdialog.h" 0032 #include "smb4kconfigpageauthentication.h" 0033 #include "smb4kconfigpagecustomoptions.h" 0034 #include "smb4kconfigpagemounting.h" 0035 #include "smb4kconfigpagenetwork.h" 0036 #include "smb4kconfigpageprofiles.h" 0037 #include "smb4kconfigpagesynchronization.h" 0038 #include "smb4kconfigpageuserinterface.h" 0039 #include "core/smb4ksettings.h" 0040 #include "core/smb4kglobal.h" 0041 #include "core/smb4kauthinfo.h" 0042 #include "core/smb4kwalletmanager.h" 0043 #include "core/smb4kcustomoptions.h" 0044 #include "core/smb4kcustomoptionsmanager.h" 0045 #include "core/smb4kprofilemanager.h" 0046 0047 #if defined(Q_OS_LINUX) 0048 #include "smb4kmountsettings_linux.h" 0049 #elif defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD) 0050 #include "smb4kmountsettings_bsd.h" 0051 #endif 0052 0053 // Qt includes 0054 #include <QPointer> 0055 #include <QPair> 0056 #include <QList> 0057 #include <QSize> 0058 #include <QStandardPaths> 0059 #include <QRadioButton> 0060 #include <QCheckBox> 0061 #include <QTreeWidget> 0062 #include <QScrollArea> 0063 #include <QShowEvent> 0064 #include <QWindow> 0065 0066 // KDE includes 0067 #include <KCoreAddons/KPluginFactory> 0068 #include <KI18n/KLocalizedString> 0069 #include <KConfigGui/KWindowConfig> 0070 #include <KWidgetsAddons/KMessageBox> 0071 #include <KWidgetsAddons/KPasswordDialog> 0072 #include <KIOWidgets/KUrlRequester> 0073 0074 using namespace Smb4KGlobal; 0075 0076 K_PLUGIN_FACTORY(Smb4KConfigDialogFactory, registerPlugin<Smb4KConfigDialog>();) 0077 0078 0079 Smb4KConfigDialog::Smb4KConfigDialog(QWidget *parent, const QList<QVariant> &/*args*/) 0080 : KConfigDialog(parent, "ConfigDialog", Smb4KSettings::self()) 0081 { 0082 setupDialog(); 0083 } 0084 0085 0086 Smb4KConfigDialog::~Smb4KConfigDialog() 0087 { 0088 } 0089 0090 0091 void Smb4KConfigDialog::setupDialog() 0092 { 0093 // FIXME: I guess, normally we would not need to close destructively, 0094 // but at the moment there are issues with the KURLRequester in file 0095 // mode. To work around those, we are closing the dialog destructively. 0096 // Maybe we can remove this if we moved to KDE4. 0097 setAttribute(Qt::WA_DeleteOnClose, true); 0098 0099 // Add the pages: 0100 Smb4KConfigPageUserInterface *interface_options = new Smb4KConfigPageUserInterface(this); 0101 QScrollArea *interface_area = new QScrollArea(this); 0102 interface_area->setWidget(interface_options); 0103 interface_area->setWidgetResizable(true); 0104 interface_area->setFrameStyle(QFrame::NoFrame); 0105 0106 Smb4KConfigPageNetwork *network_options = new Smb4KConfigPageNetwork(this); 0107 QScrollArea *network_area = new QScrollArea(this); 0108 network_area->setWidget(network_options); 0109 network_area->setWidgetResizable(true); 0110 network_area->setFrameStyle(QFrame::NoFrame); 0111 0112 Smb4KConfigPageMounting *mount_options = new Smb4KConfigPageMounting(this); 0113 QScrollArea *mount_area = new QScrollArea(this); 0114 mount_area->setWidget(mount_options); 0115 mount_area->setWidgetResizable(true); 0116 mount_area->setFrameStyle(QFrame::NoFrame); 0117 0118 Smb4KConfigPageAuthentication *auth_options = new Smb4KConfigPageAuthentication(this); 0119 QScrollArea *auth_area = new QScrollArea(this); 0120 auth_area->setWidget(auth_options); 0121 auth_area->setWidgetResizable(true); 0122 auth_area->setFrameStyle(QFrame::NoFrame); 0123 0124 Smb4KConfigPageSynchronization *rsync_options = new Smb4KConfigPageSynchronization(this); 0125 QScrollArea *rsync_area = new QScrollArea(this); 0126 rsync_area->setWidget(rsync_options); 0127 rsync_area->setWidgetResizable(true); 0128 rsync_area->setFrameStyle(QFrame::NoFrame); 0129 0130 rsync_options->setEnabled(!QStandardPaths::findExecutable("rsync").isEmpty()); 0131 0132 Smb4KConfigPageCustomOptions *custom_options = new Smb4KConfigPageCustomOptions(this); 0133 QScrollArea *custom_area = new QScrollArea(this); 0134 custom_area->setWidget(custom_options); 0135 custom_area->setWidgetResizable(true); 0136 custom_area->setFrameStyle(QFrame::NoFrame); 0137 0138 Smb4KConfigPageProfiles *profiles_page = new Smb4KConfigPageProfiles(this); 0139 QScrollArea *profiles_area = new QScrollArea(this); 0140 profiles_area->setWidget(profiles_page); 0141 profiles_area->setWidgetResizable(true); 0142 profiles_area->setFrameStyle(QFrame::NoFrame); 0143 0144 // 0145 // Pages to the configuration dialog 0146 // 0147 m_user_interface = addPage(interface_area, Smb4KSettings::self(), i18n("User Interface"), "preferences-desktop"); 0148 m_network = addPage(network_area, Smb4KSettings::self(), i18n("Network"), "network-workgroup"); 0149 m_mounting = addPage(mount_area, Smb4KMountSettings::self(), i18n("Mounting"), "system-run"); 0150 m_authentication = addPage(auth_area, Smb4KSettings::self(), i18n("Authentication"), "dialog-password"); 0151 m_synchronization = addPage(rsync_area, Smb4KSettings::self(),i18n("Synchronization"), "folder-sync"); 0152 m_custom_options = addPage(custom_area, Smb4KSettings::self(), i18n("Custom Options"), "preferences-system-network"); 0153 m_profiles = addPage(profiles_area, Smb4KSettings::self(), i18n("Profiles"), "format-list-unordered"); 0154 0155 // 0156 // Connections 0157 // 0158 connect(custom_options, SIGNAL(customSettingsModified()), this, SLOT(slotEnableApplyButton())); 0159 0160 connect(auth_options, SIGNAL(loadWalletEntries()), this, SLOT(slotLoadAuthenticationInformation())); 0161 connect(auth_options, SIGNAL(saveWalletEntries()), this, SLOT(slotSaveAuthenticationInformation())); 0162 connect(auth_options, SIGNAL(setDefaultLogin()), this, SLOT(slotSetDefaultLogin())); 0163 connect(auth_options, SIGNAL(walletEntriesModified()), this, SLOT(slotEnableApplyButton())); 0164 0165 connect(this, SIGNAL(currentPageChanged(KPageWidgetItem*,KPageWidgetItem*)), this, SLOT(slotCheckPage(KPageWidgetItem*,KPageWidgetItem*))); 0166 0167 // 0168 // Dialog size 0169 // 0170 create(); 0171 windowHandle()->resize(QSize(800, 600)); 0172 0173 KConfigGroup group(Smb4KSettings::self()->config(), "ConfigDialog"); 0174 KWindowConfig::restoreWindowSize(windowHandle(), group); 0175 resize(windowHandle()->size()); // workaround for QTBUG-40584 0176 } 0177 0178 0179 void Smb4KConfigDialog::loadCustomOptions() 0180 { 0181 if (m_custom_options) 0182 { 0183 QList<OptionsPtr> options = Smb4KCustomOptionsManager::self()->customOptions(); 0184 m_custom_options->widget()->findChild<Smb4KConfigPageCustomOptions *>()->insertCustomOptions(options); 0185 } 0186 } 0187 0188 0189 void Smb4KConfigDialog::saveCustomOptions() 0190 { 0191 if (m_custom_options) 0192 { 0193 QList<OptionsPtr> options = m_custom_options->widget()->findChild<Smb4KConfigPageCustomOptions *>()->getCustomOptions(); 0194 Smb4KCustomOptionsManager::self()->replaceCustomOptions(options); 0195 } 0196 } 0197 0198 0199 void Smb4KConfigDialog::propagateProfilesChanges() 0200 { 0201 Smb4KConfigPageProfiles *profiles_page = m_profiles->widget()->findChild<Smb4KConfigPageProfiles *>(); 0202 0203 if (profiles_page) 0204 { 0205 // Remove the profiles. 0206 QStringList removed_profiles = profiles_page->removedProfiles(); 0207 0208 if (!removed_profiles.isEmpty()) 0209 { 0210 Smb4KProfileManager::self()->removeProfiles(removed_profiles); 0211 profiles_page->clearRemovedProfiles(); 0212 } 0213 0214 // Rename the profiles. 0215 QList< QPair<QString,QString> > renamed_profiles = profiles_page->renamedProfiles(); 0216 0217 if (!renamed_profiles.isEmpty()) 0218 { 0219 Smb4KProfileManager::self()->migrateProfiles(renamed_profiles); 0220 profiles_page->clearRenamedProfiles(); 0221 } 0222 0223 // Finally reload the custom options. 0224 if (!removed_profiles.isEmpty() || !renamed_profiles.isEmpty()) 0225 { 0226 loadCustomOptions(); 0227 } 0228 } 0229 } 0230 0231 0232 bool Smb4KConfigDialog::checkNetworkPage() 0233 { 0234 QRadioButton *query_custom_master = m_network->widget()->findChild<QRadioButton *>("kcfg_QueryCustomMaster"); 0235 KLineEdit *custom_master_input = m_network->widget()->findChild<KLineEdit *>("kcfg_CustomMasterBrowser"); 0236 0237 QString msg = i18n("<qt>An incorrect setting has been found. You are now taken to the corresponding configuration page to fix it.</qt>"); 0238 0239 if ((query_custom_master && query_custom_master->isChecked()) && 0240 (custom_master_input && custom_master_input->text().trimmed().isEmpty())) 0241 { 0242 KMessageBox::sorry(this, msg); 0243 setCurrentPage(m_network); 0244 custom_master_input->setFocus(); 0245 return false; 0246 } 0247 0248 QRadioButton *scan_bcast_areas = m_network->widget()->findChild<QRadioButton *>("kcfg_ScanBroadcastAreas"); 0249 KLineEdit *bcast_areas_input = m_network->widget()->findChild<KLineEdit *>("kcfg_BroadcastAreas"); 0250 0251 if ((scan_bcast_areas && scan_bcast_areas->isChecked()) && 0252 (bcast_areas_input && bcast_areas_input->text().trimmed().isEmpty())) 0253 { 0254 KMessageBox::sorry(this, msg); 0255 setCurrentPage(m_network); 0256 bcast_areas_input->setFocus(); 0257 return false; 0258 } 0259 0260 return true; 0261 } 0262 0263 0264 bool Smb4KConfigDialog::checkMountingPage() 0265 { 0266 KUrlRequester *mount_prefix = m_mounting->widget()->findChild<KUrlRequester *>("kcfg_MountPrefix"); 0267 0268 QString msg = i18n("<qt>An incorrect setting has been found. You are now taken to the corresponding configuration page to fix it.</qt>"); 0269 0270 if (mount_prefix && mount_prefix->url().path().trimmed().isEmpty()) 0271 { 0272 KMessageBox::sorry(this, msg); 0273 setCurrentPage(m_mounting); 0274 mount_prefix->setFocus(); 0275 return false; 0276 } 0277 0278 KLineEdit *file_mask = m_mounting->widget()->findChild<KLineEdit *>("kcfg_FileMask"); 0279 0280 msg = i18n("<qt>An incorrect setting has been found. You are now taken to the corresponding configuration page to fix it.</qt>"); 0281 0282 if (file_mask && file_mask->text().trimmed().isEmpty()) 0283 { 0284 KMessageBox::sorry(this, msg); 0285 setCurrentPage(m_mounting); 0286 file_mask->setFocus(); 0287 return false; 0288 } 0289 0290 KLineEdit *directory_mask = m_mounting->widget()->findChild<KLineEdit *>("kcfg_DirectoryMask"); 0291 0292 if (directory_mask && directory_mask->text().trimmed().isEmpty()) 0293 { 0294 KMessageBox::sorry(this, msg); 0295 setCurrentPage(m_mounting); 0296 directory_mask->setFocus(); 0297 return false; 0298 } 0299 0300 return true; 0301 } 0302 0303 0304 bool Smb4KConfigDialog::checkSynchronizationPage() 0305 { 0306 // 0307 // Get the config page 0308 // Since the config page is embedded into a scroll area, use findChild() here. 0309 // 0310 Smb4KConfigPageSynchronization *configPage = m_synchronization->widget()->findChild<Smb4KConfigPageSynchronization *>(); 0311 0312 if (configPage) 0313 { 0314 // 0315 // The error message 0316 // 0317 QString errorMessage = i18n("<qt>An incorrect setting has been found. You are now taken to the corresponding configuration page to fix it.</qt>"); 0318 0319 // Find the tab number and the url requester 0320 for (int i = 0; i < configPage->count(); i++) 0321 { 0322 // Synchronization prefix 0323 KUrlRequester *syncPrefix = configPage->widget(i)->findChild<KUrlRequester *>("kcfg_RsyncPrefix"); 0324 0325 if (syncPrefix && (!syncPrefix->url().isValid() || syncPrefix->url().path().trimmed().isEmpty())) 0326 { 0327 KMessageBox::sorry(this, errorMessage); 0328 setCurrentPage(m_synchronization); 0329 configPage->setCurrentIndex(i); 0330 syncPrefix->setFocus(); 0331 return false; 0332 } 0333 0334 // Backups 0335 QCheckBox *makeBackups = configPage->widget(i)->findChild<QCheckBox *>("kcfg_MakeBackups"); 0336 QCheckBox *useBackupSuffix = configPage->widget(i)->findChild<QCheckBox *>("kcfg_UseBackupSuffix"); 0337 KLineEdit *backupSuffix = configPage->widget(i)->findChild<KLineEdit *>("kcfg_BackupSuffix"); 0338 QCheckBox *useBackupDir = configPage->widget(i)->findChild<QCheckBox *>("kcfg_UseBackupDirectory"); 0339 KUrlRequester *backupDir = configPage->widget(i)->findChild<KUrlRequester *>("kcfg_BackupDirectory"); 0340 0341 if (makeBackups && makeBackups->isChecked()) 0342 { 0343 if (useBackupSuffix && useBackupSuffix->isChecked()) 0344 { 0345 if (backupSuffix && backupSuffix->text().trimmed().isEmpty()) 0346 { 0347 KMessageBox::sorry(this, errorMessage); 0348 setCurrentPage(m_synchronization); 0349 configPage->setCurrentIndex(i); 0350 backupSuffix->setFocus(); 0351 return false; 0352 } 0353 } 0354 0355 if (useBackupDir && useBackupDir->isChecked()) 0356 { 0357 if (backupDir && (!backupDir->url().isValid() || backupDir->url().path().trimmed().isEmpty())) 0358 { 0359 KMessageBox::sorry(this, errorMessage); 0360 setCurrentPage(m_synchronization); 0361 configPage->setCurrentIndex(i); 0362 backupDir->setFocus(); 0363 return false; 0364 } 0365 } 0366 } 0367 0368 // Minimal transfer size 0369 QCheckBox *useMinTransferSize = configPage->widget(i)->findChild<QCheckBox *>("kcfg_UseMinimalTransferSize"); 0370 QSpinBox *minTransferSize = configPage->widget(i)->findChild<QSpinBox *>("kcfg_MinimalTransferSize"); 0371 0372 if (useMinTransferSize && useMinTransferSize->isChecked()) 0373 { 0374 if (minTransferSize && minTransferSize->value() == 0) 0375 { 0376 KMessageBox::sorry(this, errorMessage); 0377 setCurrentPage(m_synchronization); 0378 configPage->setCurrentIndex(i); 0379 minTransferSize->setFocus(); 0380 return false; 0381 } 0382 } 0383 0384 // Maximal transfer size 0385 QCheckBox *useMaxTransferSize = configPage->widget(i)->findChild<QCheckBox *>("kcfg_UseMaximalTransferSize"); 0386 QSpinBox *maxTransferSize = configPage->widget(i)->findChild<QSpinBox *>("kcfg_MaximalTransferSize"); 0387 0388 if (useMaxTransferSize && useMaxTransferSize->isChecked()) 0389 { 0390 if (maxTransferSize && maxTransferSize->value() == 0) 0391 { 0392 KMessageBox::sorry(this, errorMessage); 0393 setCurrentPage(m_synchronization); 0394 configPage->setCurrentIndex(i); 0395 maxTransferSize->setFocus(); 0396 return false; 0397 } 0398 } 0399 0400 // Partial directory 0401 QCheckBox *usePartialDirectory = configPage->widget(i)->findChild<QCheckBox *>("kcfg_UsePartialDirectory"); 0402 KUrlRequester *partialDirectory = configPage->widget(i)->findChild<KUrlRequester *>("kcfg_PartialDirectory"); 0403 0404 if (usePartialDirectory && usePartialDirectory->isChecked()) 0405 { 0406 if (partialDirectory && (!partialDirectory->url().isValid() || partialDirectory->url().path().trimmed().isEmpty())) 0407 { 0408 KMessageBox::sorry(this, errorMessage); 0409 setCurrentPage(m_synchronization); 0410 configPage->setCurrentIndex(i); 0411 partialDirectory->setFocus(); 0412 return false; 0413 } 0414 } 0415 0416 // Exclude exclude 0417 QCheckBox *useExcludePattern = configPage->widget(i)->findChild<QCheckBox *>("kcfg_UseExcludePattern"); 0418 KLineEdit *excludePattern = configPage->widget(i)->findChild<KLineEdit *>("kcfg_ExcludePattern"); 0419 0420 if (useExcludePattern && useExcludePattern->isChecked()) 0421 { 0422 if (excludePattern && excludePattern->text().trimmed().isEmpty()) 0423 { 0424 KMessageBox::sorry(this, errorMessage); 0425 setCurrentPage(m_synchronization); 0426 configPage->setCurrentIndex(i); 0427 excludePattern->setFocus(); 0428 return false; 0429 } 0430 } 0431 0432 // Read exclude pattern from file 0433 QCheckBox *useExcludeFrom = configPage->widget(i)->findChild<QCheckBox *>("kcfg_UseExcludeFrom"); 0434 KUrlRequester *excludeFrom = configPage->widget(i)->findChild<KUrlRequester *>("kcfg_ExcludeFrom"); 0435 0436 if (useExcludeFrom && useExcludeFrom->isChecked()) 0437 { 0438 if (excludeFrom && (!excludeFrom->url().isValid() || excludeFrom->url().path().trimmed().isEmpty())) 0439 { 0440 KMessageBox::sorry(this, errorMessage); 0441 setCurrentPage(m_synchronization); 0442 configPage->setCurrentIndex(i); 0443 excludeFrom->setFocus(); 0444 return false; 0445 } 0446 } 0447 0448 // Exclude exclude 0449 QCheckBox *useIncludePattern = configPage->widget(i)->findChild<QCheckBox *>("kcfg_UseIncludePattern"); 0450 KLineEdit *includePattern = configPage->widget(i)->findChild<KLineEdit *>("kcfg_IncludePattern"); 0451 0452 if (useIncludePattern && useIncludePattern->isChecked()) 0453 { 0454 if (includePattern && includePattern->text().trimmed().isEmpty()) 0455 { 0456 KMessageBox::sorry(this, errorMessage); 0457 setCurrentPage(m_synchronization); 0458 configPage->setCurrentIndex(i); 0459 includePattern->setFocus(); 0460 return false; 0461 } 0462 } 0463 0464 // Read exclude pattern from file 0465 QCheckBox *useIncludeFrom = configPage->widget(i)->findChild<QCheckBox *>("kcfg_UseIncludeFrom"); 0466 KUrlRequester *includeFrom = configPage->widget(i)->findChild<KUrlRequester *>("kcfg_IncludeFrom"); 0467 0468 if (useIncludeFrom && useIncludeFrom->isChecked()) 0469 { 0470 if (includeFrom && (!includeFrom->url().isValid() || includeFrom->url().path().trimmed().isEmpty())) 0471 { 0472 KMessageBox::sorry(this, errorMessage); 0473 setCurrentPage(m_synchronization); 0474 configPage->setCurrentIndex(i); 0475 includeFrom->setFocus(); 0476 return false; 0477 } 0478 } 0479 0480 // Block size 0481 QCheckBox *useFixedBlocksize = configPage->widget(i)->findChild<QCheckBox *>("kcfg_UseBlockSize"); 0482 QSpinBox *fixedBlocksize = configPage->widget(i)->findChild<QSpinBox *>("kcfg_BlockSize"); 0483 0484 if (useFixedBlocksize && useFixedBlocksize->isChecked()) 0485 { 0486 if (fixedBlocksize && fixedBlocksize->value() == 0) 0487 { 0488 KMessageBox::sorry(this, errorMessage); 0489 setCurrentPage(m_synchronization); 0490 configPage->setCurrentIndex(i); 0491 fixedBlocksize->setFocus(); 0492 return false; 0493 } 0494 } 0495 0496 // NOTE: The is no need to check the following settings, because they may be empty or 0: 0497 // - kcfg_UseCompressionLevel & kcfg_CompressionLevel 0498 // - kcfg_UseSkipCompression & kcfg_SkipCompression 0499 // - kcfg_UseBandwidthLimit & kcfg_BandwidthLimit 0500 // - kcfg_UseMaximumDelete & kcfg_MaximumDeleteValue 0501 // - kcfg_CustomFilteringRules 0502 // - kcfg_UseChecksumSeed & kcfg_ChecksumSeed 0503 } 0504 } 0505 0506 return true; 0507 } 0508 0509 0510 0511 bool Smb4KConfigDialog::checkSettings() 0512 { 0513 // Check Network page 0514 if (!checkNetworkPage()) 0515 { 0516 return false; 0517 } 0518 0519 // Check Mounting page 0520 if (!checkMountingPage()) 0521 { 0522 return false; 0523 } 0524 0525 // Check Synchronization page 0526 if (!checkSynchronizationPage()) 0527 { 0528 return false; 0529 } 0530 0531 return true; 0532 } 0533 0534 0535 ///////////////////////////////////////////////////////////////////////////// 0536 // SLOT IMPLEMENTATIONS 0537 ///////////////////////////////////////////////////////////////////////////// 0538 0539 0540 void Smb4KConfigDialog::updateSettings() 0541 { 0542 saveCustomOptions(); 0543 slotSaveAuthenticationInformation(); 0544 propagateProfilesChanges(); 0545 (void)checkSettings(); 0546 0547 KConfigGroup group(Smb4KSettings::self()->config(), "ConfigDialog"); 0548 KWindowConfig::saveWindowSize(windowHandle(), group); 0549 0550 KConfigDialog::updateSettings(); 0551 } 0552 0553 0554 void Smb4KConfigDialog::updateWidgets() 0555 { 0556 loadCustomOptions(); 0557 0558 KConfigDialog::updateWidgets(); 0559 } 0560 0561 0562 void Smb4KConfigDialog::reject() 0563 { 0564 Smb4KCustomOptionsManager::self()->resetCustomOptions(); 0565 QDialog::reject(); 0566 } 0567 0568 0569 void Smb4KConfigDialog::slotLoadAuthenticationInformation() 0570 { 0571 // 0572 // Get the Authentication config page 0573 // 0574 Smb4KConfigPageAuthentication *authenticationPage = m_authentication->widget()->findChild<Smb4KConfigPageAuthentication *>(); 0575 0576 // 0577 // Insert and display the wallet entries 0578 // 0579 authenticationPage->insertWalletEntries(Smb4KWalletManager::self()->walletEntries()); 0580 } 0581 0582 0583 void Smb4KConfigDialog::slotSaveAuthenticationInformation() 0584 { 0585 // 0586 // Get the Authentication config page 0587 // 0588 Smb4KConfigPageAuthentication *authenticationPage = m_authentication->widget()->findChild<Smb4KConfigPageAuthentication *>(); 0589 0590 // 0591 // Save the authentication information to the wallet 0592 // 0593 if (authenticationPage->walletEntriesDisplayed()) 0594 { 0595 Smb4KWalletManager::self()->writeWalletEntries(authenticationPage->getWalletEntries()); 0596 } 0597 } 0598 0599 0600 void Smb4KConfigDialog::slotSetDefaultLogin() 0601 { 0602 // 0603 // Get the Authentication config page 0604 // 0605 Smb4KConfigPageAuthentication *authenticationPage = m_authentication->widget()->findChild<Smb4KConfigPageAuthentication *>(); 0606 0607 // 0608 // Create an authentication object for the default authentication information 0609 // 0610 Smb4KAuthInfo authInfo; 0611 0612 // 0613 // Read the default authentication information 0614 // 0615 Smb4KWalletManager::self()->readDefaultAuthInfo(&authInfo); 0616 0617 // 0618 // Show the password dialog to enter or modify the default authentication 0619 // information. 0620 // 0621 QPointer<KPasswordDialog> dlg = new KPasswordDialog(this, KPasswordDialog::ShowUsernameLine); 0622 dlg->setPrompt(i18n("Enter the default login information.")); 0623 dlg->setUsername(authInfo.userName()); 0624 dlg->setPassword(authInfo.password()); 0625 0626 if (dlg->exec() == KPasswordDialog::Accepted) 0627 { 0628 // 0629 // Save the authentication information to the wallet 0630 // 0631 authInfo.setUserName(dlg->username()); 0632 authInfo.setPassword(dlg->password()); 0633 0634 Smb4KWalletManager::self()->writeDefaultAuthInfo(&authInfo); 0635 0636 // 0637 // Reload the list of authentication information 0638 // 0639 if (authenticationPage->walletEntriesDisplayed()) 0640 { 0641 slotLoadAuthenticationInformation(); 0642 } 0643 } 0644 else 0645 { 0646 // 0647 // Discard the password dialog and reset the checkbox 0648 // 0649 authenticationPage->findChild<QCheckBox *>("kcfg_UseDefaultLogin")->setChecked(false); 0650 } 0651 0652 delete dlg; 0653 } 0654 0655 0656 void Smb4KConfigDialog::slotEnableApplyButton() 0657 { 0658 // 0659 // Check if we need to enable the Apply button 0660 // 0661 bool enable = false; 0662 0663 // 0664 // Check the wallet entries 0665 // 0666 Smb4KConfigPageAuthentication *authenticationPage = m_authentication->widget()->findChild<Smb4KConfigPageAuthentication *>(); 0667 0668 if (authenticationPage->walletEntriesMaybeChanged()) 0669 { 0670 QList<Smb4KAuthInfo *> oldWalletEntries = Smb4KWalletManager::self()->walletEntries(); 0671 QList<Smb4KAuthInfo *> newWalletEntries = authenticationPage->getWalletEntries(); 0672 0673 for (Smb4KAuthInfo *oldEntry : oldWalletEntries) 0674 { 0675 for (Smb4KAuthInfo *newEntry : newWalletEntries) 0676 { 0677 if (QString::compare(oldEntry->url().toString(QUrl::RemovePort), newEntry->url().toString(QUrl::RemovePort), Qt::CaseInsensitive) == 0 /* leave the user info here */ && 0678 QString::compare(oldEntry->workgroupName(), newEntry->workgroupName(), Qt::CaseInsensitive) == 0) 0679 { 0680 enable = true; 0681 break; 0682 } 0683 } 0684 0685 if (enable) 0686 { 0687 break; 0688 } 0689 } 0690 } 0691 0692 // 0693 // Check the custom options 0694 // 0695 Smb4KConfigPageCustomOptions *customOptionsPage = m_custom_options->widget()->findChild<Smb4KConfigPageCustomOptions *>(); 0696 0697 if (!enable && customOptionsPage && customOptionsPage->customSettingsMaybeChanged()) 0698 { 0699 enable = true; 0700 } 0701 0702 QPushButton *applyButton = buttonBox()->button(QDialogButtonBox::Apply); 0703 0704 if (applyButton) 0705 { 0706 applyButton->setEnabled(enable); 0707 } 0708 } 0709 0710 0711 void Smb4KConfigDialog::slotCheckPage(KPageWidgetItem* /*current*/, KPageWidgetItem* before) 0712 { 0713 if (before == m_network) 0714 { 0715 (void)checkNetworkPage(); 0716 } 0717 else if (before == m_mounting) 0718 { 0719 (void)checkMountingPage(); 0720 } 0721 else if (before == m_synchronization) 0722 { 0723 (void)checkSynchronizationPage(); 0724 } 0725 } 0726 0727 #include "smb4kconfigdialog.moc"