File indexing completed on 2023-12-03 11:58:23
0001 /* 0002 The configuration page for the synchronization options 0003 0004 SPDX-FileCopyrightText: 2005-2022 Alexander Reinholdt <alexander.reinholdt@kdemail.net> 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 // application specific includes 0009 #include "smb4kconfigpagesynchronization.h" 0010 #include "core/smb4ksettings.h" 0011 0012 // Qt includes 0013 #include <QCheckBox> 0014 #include <QFormLayout> 0015 #include <QGroupBox> 0016 #include <QHBoxLayout> 0017 #include <QLabel> 0018 #include <QSpinBox> 0019 #include <QVBoxLayout> 0020 0021 // KDE includes 0022 #include <KLineEdit> 0023 #include <KLocalizedString> 0024 #include <KUrlRequester> 0025 0026 Smb4KConfigPageSynchronization::Smb4KConfigPageSynchronization(QWidget *parent) 0027 : QTabWidget(parent) 0028 { 0029 // 0030 // 'Basic Settings' tab 0031 // 0032 QWidget *basicTab = new QWidget(this); 0033 QVBoxLayout *basicTabLayout = new QVBoxLayout(basicTab); 0034 0035 // Synchronization Directory 0036 QGroupBox *synchronizationDirectoryBox = new QGroupBox(i18n("Synchronization Directory"), basicTab); 0037 QVBoxLayout *synchronizationDirectoryBoxLayout = new QVBoxLayout(synchronizationDirectoryBox); 0038 0039 QWidget *rsyncPrefixWidget = new QWidget(synchronizationDirectoryBox); 0040 QHBoxLayout *rsyncPrefixWidgetLayout = new QHBoxLayout(rsyncPrefixWidget); 0041 rsyncPrefixWidgetLayout->setContentsMargins(0, 0, 0, 0); 0042 0043 QLabel *rsyncPrefixLabel = new QLabel(rsyncPrefixWidget); 0044 rsyncPrefixLabel->setText(Smb4KSettings::self()->rsyncPrefixItem()->label()); 0045 rsyncPrefixWidgetLayout->addWidget(rsyncPrefixLabel); 0046 0047 KUrlRequester *rsyncPrefix = new KUrlRequester(rsyncPrefixWidget); 0048 rsyncPrefix->setMode(KFile::Directory | KFile::LocalOnly); 0049 rsyncPrefix->setObjectName(QStringLiteral("kcfg_RsyncPrefix")); 0050 rsyncPrefixWidgetLayout->addWidget(rsyncPrefix); 0051 0052 rsyncPrefixLabel->setBuddy(rsyncPrefix); 0053 0054 synchronizationDirectoryBoxLayout->addWidget(rsyncPrefixWidget); 0055 0056 basicTabLayout->addWidget(synchronizationDirectoryBox); 0057 0058 // Behavior 0059 QGroupBox *behaviorBox = new QGroupBox(i18n("Behavior"), basicTab); 0060 QGridLayout *behaviorBoxLayout = new QGridLayout(behaviorBox); 0061 0062 QCheckBox *archiveMode = new QCheckBox(Smb4KSettings::self()->archiveModeItem()->label(), behaviorBox); 0063 archiveMode->setObjectName(QStringLiteral("kcfg_ArchiveMode")); 0064 0065 behaviorBoxLayout->addWidget(archiveMode, 0, 0); 0066 0067 QCheckBox *recurseDirectories = new QCheckBox(Smb4KSettings::self()->recurseIntoDirectoriesItem()->label(), behaviorBox); 0068 recurseDirectories->setObjectName(QStringLiteral("kcfg_RecurseIntoDirectories")); 0069 0070 behaviorBoxLayout->addWidget(recurseDirectories, 0, 1); 0071 0072 QCheckBox *relativePaths = new QCheckBox(Smb4KSettings::self()->relativePathNamesItem()->label(), behaviorBox); 0073 relativePaths->setObjectName(QStringLiteral("kcfg_RelativePathNames")); 0074 0075 behaviorBoxLayout->addWidget(relativePaths, 1, 0); 0076 0077 QCheckBox *noImpliedDirs = new QCheckBox(Smb4KSettings::self()->noImpliedDirectoriesItem()->label(), behaviorBox); 0078 noImpliedDirs->setObjectName(QStringLiteral("kcfg_NoImpliedDirectories")); 0079 0080 behaviorBoxLayout->addWidget(noImpliedDirs, 1, 1); 0081 0082 QCheckBox *transferDirs = new QCheckBox(Smb4KSettings::self()->transferDirectoriesItem()->label(), behaviorBox); 0083 transferDirs->setObjectName(QStringLiteral("kcfg_TransferDirectories")); 0084 0085 behaviorBoxLayout->addWidget(transferDirs, 2, 0); 0086 0087 basicTabLayout->addWidget(behaviorBox); 0088 0089 // Backups 0090 QGroupBox *backupsBox = new QGroupBox(i18n("Backups"), basicTab); 0091 QVBoxLayout *backupsBoxLayout = new QVBoxLayout(backupsBox); 0092 0093 QCheckBox *makeBackups = new QCheckBox(Smb4KSettings::self()->makeBackupsItem()->label(), backupsBox); 0094 makeBackups->setObjectName(QStringLiteral("kcfg_MakeBackups")); 0095 0096 backupsBoxLayout->addWidget(makeBackups); 0097 0098 QWidget *backupSuffixWidget = new QWidget(backupsBox); 0099 QHBoxLayout *backupSuffixLayout = new QHBoxLayout(backupSuffixWidget); 0100 backupSuffixLayout->setContentsMargins(0, 0, 0, 0); 0101 0102 QCheckBox *backupSuffixButton = new QCheckBox(Smb4KSettings::self()->useBackupSuffixItem()->label(), backupSuffixWidget); 0103 backupSuffixButton->setObjectName(QStringLiteral("kcfg_UseBackupSuffix")); 0104 KLineEdit *backupSuffix = new KLineEdit(backupSuffixWidget); 0105 backupSuffix->setObjectName(QStringLiteral("kcfg_BackupSuffix")); 0106 backupSuffix->setClearButtonEnabled(true); 0107 0108 backupSuffixLayout->addWidget(backupSuffixButton); 0109 backupSuffixLayout->addWidget(backupSuffix); 0110 0111 backupsBoxLayout->addWidget(backupSuffixWidget); 0112 0113 QWidget *backupDirWidget = new QWidget(backupsBox); 0114 QHBoxLayout *backupDirLayout = new QHBoxLayout(backupDirWidget); 0115 backupDirLayout->setContentsMargins(0, 0, 0, 0); 0116 0117 QCheckBox *backupDirButton = new QCheckBox(Smb4KSettings::self()->useBackupDirectoryItem()->label(), backupDirWidget); 0118 backupDirButton->setObjectName(QStringLiteral("kcfg_UseBackupDirectory")); 0119 KUrlRequester *backupDir = new KUrlRequester(backupDirWidget); 0120 backupDir->setObjectName(QStringLiteral("kcfg_BackupDirectory")); 0121 backupDir->setMode(KFile::Directory | KFile::LocalOnly); 0122 0123 backupDirLayout->addWidget(backupDirButton); 0124 backupDirLayout->addWidget(backupDir); 0125 0126 backupsBoxLayout->addWidget(backupDirWidget); 0127 0128 basicTabLayout->addWidget(backupsBox); 0129 basicTabLayout->addStretch(100); 0130 0131 addTab(basicTab, i18n("Basic Settings")); 0132 0133 // 0134 // 'File Handling' tab 0135 // 0136 QWidget *fileHandlingTab = new QWidget(this); 0137 QVBoxLayout *fileHandlingTabLayout = new QVBoxLayout(fileHandlingTab); 0138 0139 // General 0140 QGroupBox *generalBox = new QGroupBox(i18n("General"), fileHandlingTab); 0141 QGridLayout *generalBoxLayout = new QGridLayout(generalBox); 0142 0143 QCheckBox *updateTarget = new QCheckBox(Smb4KSettings::self()->updateTargetItem()->label(), generalBox); 0144 updateTarget->setObjectName(QStringLiteral("kcfg_UpdateTarget")); 0145 0146 generalBoxLayout->addWidget(updateTarget, 0, 0); 0147 0148 QCheckBox *updateInPlace = new QCheckBox(Smb4KSettings::self()->updateInPlaceItem()->label(), generalBox); 0149 updateInPlace->setObjectName(QStringLiteral("kcfg_UpdateInPlace")); 0150 0151 generalBoxLayout->addWidget(updateInPlace, 0, 1); 0152 0153 QCheckBox *sparseFiles = new QCheckBox(Smb4KSettings::self()->efficientSparseFileHandlingItem()->label(), generalBox); 0154 sparseFiles->setObjectName(QStringLiteral("kcfg_EfficientSparseFileHandling")); 0155 0156 generalBoxLayout->addWidget(sparseFiles, 1, 0); 0157 0158 QCheckBox *copyFilesWhole = new QCheckBox(Smb4KSettings::self()->copyFilesWholeItem()->label(), generalBox); 0159 copyFilesWhole->setObjectName(QStringLiteral("kcfg_CopyFilesWhole")); 0160 0161 generalBoxLayout->addWidget(copyFilesWhole, 1, 1); 0162 0163 QCheckBox *updateExisting = new QCheckBox(Smb4KSettings::self()->updateExistingItem()->label(), generalBox); 0164 updateExisting->setObjectName(QStringLiteral("kcfg_UpdateExisting")); 0165 0166 generalBoxLayout->addWidget(updateExisting, 2, 0); 0167 0168 QCheckBox *ignoreExisting = new QCheckBox(Smb4KSettings::self()->ignoreExistingItem()->label(), generalBox); 0169 ignoreExisting->setObjectName(QStringLiteral("kcfg_IgnoreExisting")); 0170 0171 generalBoxLayout->addWidget(ignoreExisting, 2, 1); 0172 0173 fileHandlingTabLayout->addWidget(generalBox); 0174 0175 // Links 0176 QGroupBox *linksBox = new QGroupBox(i18n("Links"), fileHandlingTab); 0177 QGridLayout *linksBoxLayout = new QGridLayout(linksBox); 0178 0179 QCheckBox *preserveLinks = new QCheckBox(Smb4KSettings::self()->preserveSymlinksItem()->label(), linksBox); 0180 preserveLinks->setObjectName(QStringLiteral("kcfg_PreserveSymlinks")); 0181 0182 linksBoxLayout->addWidget(preserveLinks, 0, 0); 0183 0184 QCheckBox *transformLinks = new QCheckBox(Smb4KSettings::self()->transformSymlinksItem()->label(), linksBox); 0185 transformLinks->setObjectName(QStringLiteral("kcfg_TransformSymlinks")); 0186 0187 linksBoxLayout->addWidget(transformLinks, 0, 1); 0188 0189 QCheckBox *transformUnsafe = new QCheckBox(Smb4KSettings::self()->transformUnsafeSymlinksItem()->label(), linksBox); 0190 transformUnsafe->setObjectName(QStringLiteral("kcfg_TransformUnsafeSymlinks")); 0191 0192 linksBoxLayout->addWidget(transformUnsafe, 1, 0); 0193 0194 QCheckBox *ignoreUnsafe = new QCheckBox(Smb4KSettings::self()->ignoreUnsafeSymlinksItem()->label(), linksBox); 0195 ignoreUnsafe->setObjectName(QStringLiteral("kcfg_IgnoreUnsafeSymlinks")); 0196 0197 linksBoxLayout->addWidget(ignoreUnsafe, 1, 1); 0198 0199 QCheckBox *mungeLinks = new QCheckBox(Smb4KSettings::self()->mungeSymlinksItem()->label(), linksBox); 0200 mungeLinks->setObjectName(QStringLiteral("kcfg_MungeSymlinks")); 0201 0202 linksBoxLayout->addWidget(mungeLinks, 2, 0); 0203 0204 QCheckBox *preserveHardLinks = new QCheckBox(Smb4KSettings::self()->preserveHardLinksItem()->label(), linksBox); 0205 preserveHardLinks->setObjectName(QStringLiteral("kcfg_PreserveHardLinks")); 0206 0207 linksBoxLayout->addWidget(preserveHardLinks, 2, 1); 0208 0209 QCheckBox *copyDirLinks = new QCheckBox(Smb4KSettings::self()->copyDirectorySymlinksItem()->label(), linksBox); 0210 ; 0211 copyDirLinks->setObjectName(QStringLiteral("kcfg_CopyDirectorySymlinks")); 0212 0213 linksBoxLayout->addWidget(copyDirLinks, 3, 0); 0214 0215 QCheckBox *keepDirLinks = new QCheckBox(Smb4KSettings::self()->keepDirectorySymlinksItem()->label(), linksBox); 0216 keepDirLinks->setObjectName(QStringLiteral("kcfg_KeepDirectorySymlinks")); 0217 0218 linksBoxLayout->addWidget(keepDirLinks, 3, 1); 0219 0220 fileHandlingTabLayout->addWidget(linksBox); 0221 fileHandlingTabLayout->addStretch(100); 0222 0223 addTab(fileHandlingTab, i18n("File Handling")); 0224 0225 // 0226 // 'File Attributes and Ownership' tab 0227 // 0228 QWidget *attributesAndOwnershipTab = new QWidget(this); 0229 QVBoxLayout *attributesAndOwnershipTabLayout = new QVBoxLayout(attributesAndOwnershipTab); 0230 0231 QGroupBox *attributesBox = new QGroupBox(i18n("File Attributes"), attributesAndOwnershipTab); 0232 QGridLayout *attributesBoxLayout = new QGridLayout(attributesBox); 0233 0234 QCheckBox *preservePermissions = new QCheckBox(Smb4KSettings::self()->preservePermissionsItem()->label(), attributesBox); 0235 preservePermissions->setObjectName(QStringLiteral("kcfg_PreservePermissions")); 0236 0237 attributesBoxLayout->addWidget(preservePermissions, 0, 0); 0238 0239 QCheckBox *preserveACLs = new QCheckBox(Smb4KSettings::self()->preserveACLsItem()->label(), attributesBox); 0240 preserveACLs->setObjectName(QStringLiteral("kcfg_PreserveACLs")); 0241 0242 attributesBoxLayout->addWidget(preserveACLs, 0, 1); 0243 0244 QCheckBox *preserveExtendedArrtibutes = new QCheckBox(Smb4KSettings::self()->preserveExtendedAttributesItem()->label(), attributesBox); 0245 preserveExtendedArrtibutes->setObjectName(QStringLiteral("kcfg_PreserveExtendedAttributes")); 0246 0247 attributesBoxLayout->addWidget(preserveExtendedArrtibutes, 1, 0); 0248 0249 QCheckBox *preserveAccessTimes = new QCheckBox(Smb4KSettings::self()->preserveAccessTimesItem()->label(), attributesBox); 0250 preserveAccessTimes->setObjectName(QStringLiteral("kcfg_PreserveAccessTimes")); 0251 0252 attributesBoxLayout->addWidget(preserveAccessTimes, 1, 1); 0253 0254 QCheckBox *preserveCreateTimes = new QCheckBox(Smb4KSettings::self()->preserveCreateTimesItem()->label(), attributesBox); 0255 preserveCreateTimes->setObjectName(QStringLiteral("kcfg_PreserveCreateTimes")); 0256 0257 attributesBoxLayout->addWidget(preserveCreateTimes, 2, 0); 0258 0259 QCheckBox *preserveDevices = new QCheckBox(Smb4KSettings::self()->preserveDevicesAndSpecialsItem()->label(), attributesBox); 0260 preserveDevices->setObjectName(QStringLiteral("kcfg_PreserveDevicesAndSpecials")); 0261 0262 attributesBoxLayout->addWidget(preserveDevices, 2, 1); 0263 0264 QCheckBox *preserveTimes = new QCheckBox(Smb4KSettings::self()->preserveTimesItem()->label(), attributesBox); 0265 preserveTimes->setObjectName(QStringLiteral("kcfg_PreserveTimes")); 0266 0267 attributesBoxLayout->addWidget(preserveTimes, 3, 0); 0268 0269 QCheckBox *omitDirectoriesTimes = new QCheckBox(Smb4KSettings::self()->omitDirectoryTimesItem()->label(), attributesBox); 0270 omitDirectoriesTimes->setObjectName(QStringLiteral("kcfg_OmitDirectoryTimes")); 0271 0272 attributesBoxLayout->addWidget(omitDirectoriesTimes, 3, 1); 0273 0274 attributesAndOwnershipTabLayout->addWidget(attributesBox); 0275 0276 QGroupBox *ownershipBox = new QGroupBox(i18n("Ownership"), attributesAndOwnershipTab); 0277 QGridLayout *ownershipBoxLayout = new QGridLayout(ownershipBox); 0278 0279 QCheckBox *preserveOwner = new QCheckBox(Smb4KSettings::self()->preserveOwnerItem()->label(), ownershipBox); 0280 preserveOwner->setObjectName(QStringLiteral("kcfg_PreserveOwner")); 0281 0282 ownershipBoxLayout->addWidget(preserveOwner, 1, 0); 0283 0284 QCheckBox *preserveGroup = new QCheckBox(Smb4KSettings::self()->preserveGroupItem()->label(), ownershipBox); 0285 preserveGroup->setObjectName(QStringLiteral("kcfg_PreserveGroup")); 0286 0287 ownershipBoxLayout->addWidget(preserveGroup, 1, 1); 0288 0289 attributesAndOwnershipTabLayout->addWidget(ownershipBox); 0290 attributesAndOwnershipTabLayout->addStretch(100); 0291 0292 addTab(attributesAndOwnershipTab, i18n("File Attributes && Ownership")); 0293 0294 // 0295 // 'File Transfer' tab 0296 // 0297 QWidget *transferTab = new QWidget(this); 0298 QVBoxLayout *transferTabLayout = new QVBoxLayout(transferTab); 0299 0300 // Compression 0301 QGroupBox *compressionBox = new QGroupBox(i18n("Compression"), transferTab); 0302 QGridLayout *compressionBoxLayout = new QGridLayout(compressionBox); 0303 0304 QCheckBox *compressData = new QCheckBox(Smb4KSettings::self()->compressDataItem()->label(), compressionBox); 0305 compressData->setObjectName(QStringLiteral("kcfg_CompressData")); 0306 0307 compressionBoxLayout->addWidget(compressData, 0, 0, 1, 2); 0308 0309 QCheckBox *compressionLevelButton = new QCheckBox(Smb4KSettings::self()->useCompressionLevelItem()->label(), compressionBox); 0310 compressionLevelButton->setObjectName(QStringLiteral("kcfg_UseCompressionLevel")); 0311 0312 compressionBoxLayout->addWidget(compressionLevelButton, 1, 0); 0313 0314 QSpinBox *compressionLevel = new QSpinBox(compressionBox); 0315 compressionLevel->setObjectName(QStringLiteral("kcfg_CompressionLevel")); 0316 0317 compressionBoxLayout->addWidget(compressionLevel, 1, 1); 0318 0319 QCheckBox *skipCompressionButton = new QCheckBox(Smb4KSettings::self()->useSkipCompressionItem()->label(), compressionBox); 0320 skipCompressionButton->setObjectName(QStringLiteral("kcfg_UseSkipCompression")); 0321 0322 compressionBoxLayout->addWidget(skipCompressionButton, 2, 0); 0323 0324 KLineEdit *skipCompression = new KLineEdit(compressionBox); 0325 skipCompression->setObjectName(QStringLiteral("kcfg_SkipCompression")); 0326 skipCompression->setClearButtonEnabled(true); 0327 0328 compressionBoxLayout->addWidget(skipCompression, 2, 1); 0329 0330 transferTabLayout->addWidget(compressionBox); 0331 0332 // Files 0333 QGroupBox *filesBox = new QGroupBox(i18n("Files"), transferTab); 0334 QGridLayout *filesBoxLayout = new QGridLayout(filesBox); 0335 0336 QCheckBox *minTransferSizeButton = new QCheckBox(Smb4KSettings::self()->useMinimalTransferSizeItem()->label(), filesBox); 0337 minTransferSizeButton->setObjectName(QStringLiteral("kcfg_UseMinimalTransferSize")); 0338 0339 filesBoxLayout->addWidget(minTransferSizeButton, 0, 0); 0340 0341 QSpinBox *minTransferSize = new QSpinBox(filesBox); 0342 minTransferSize->setObjectName(QStringLiteral("kcfg_MinimalTransferSize")); 0343 minTransferSize->setSuffix(i18n(" kB")); 0344 0345 filesBoxLayout->addWidget(minTransferSize, 0, 1); 0346 0347 QCheckBox *maxTransferSizeButton = new QCheckBox(Smb4KSettings::self()->useMaximalTransferSizeItem()->label(), filesBox); 0348 maxTransferSizeButton->setObjectName(QStringLiteral("kcfg_UseMaximalTransferSize")); 0349 0350 filesBoxLayout->addWidget(maxTransferSizeButton, 1, 0); 0351 0352 QSpinBox *maxTransferSize = new QSpinBox(filesBox); 0353 maxTransferSize->setObjectName(QStringLiteral("kcfg_MaximalTransferSize")); 0354 maxTransferSize->setSuffix(i18n(" kB")); 0355 0356 filesBoxLayout->addWidget(maxTransferSize, 1, 1); 0357 0358 QCheckBox *keepPartial = new QCheckBox(Smb4KSettings::self()->keepPartialItem()->label(), filesBox); 0359 keepPartial->setObjectName(QStringLiteral("kcfg_KeepPartial")); 0360 0361 filesBoxLayout->addWidget(keepPartial, 2, 0, 1, 2); 0362 0363 QCheckBox *partialDirButton = new QCheckBox(Smb4KSettings::self()->usePartialDirectoryItem()->label(), filesBox); 0364 partialDirButton->setObjectName(QStringLiteral("kcfg_UsePartialDirectory")); 0365 0366 filesBoxLayout->addWidget(partialDirButton, 3, 0); 0367 0368 KUrlRequester *partialDir = new KUrlRequester(filesBox); 0369 partialDir->setObjectName(QStringLiteral("kcfg_PartialDirectory")); 0370 partialDir->setMode(KFile::Directory | KFile::LocalOnly); 0371 0372 filesBoxLayout->addWidget(partialDir, 3, 1); 0373 0374 transferTabLayout->addWidget(filesBox); 0375 0376 // Restrictions 0377 QGroupBox *miscellaneousBox = new QGroupBox(i18n("Miscellaneous"), transferTab); 0378 QGridLayout *miscellaneousBoxLayout = new QGridLayout(miscellaneousBox); 0379 0380 QCheckBox *bandwidthLimitButton = new QCheckBox(Smb4KSettings::self()->useBandwidthLimitItem()->label(), miscellaneousBox); 0381 bandwidthLimitButton->setObjectName(QStringLiteral("kcfg_UseBandwidthLimit")); 0382 0383 miscellaneousBoxLayout->addWidget(bandwidthLimitButton, 0, 0); 0384 0385 QSpinBox *bandwidthLimit = new QSpinBox(miscellaneousBox); 0386 bandwidthLimit->setObjectName(QStringLiteral("kcfg_BandwidthLimit")); 0387 bandwidthLimit->setSuffix(i18n(" kB/s")); 0388 0389 miscellaneousBoxLayout->addWidget(bandwidthLimit, 0, 1); 0390 0391 transferTabLayout->addWidget(miscellaneousBox); 0392 transferTabLayout->addStretch(100); 0393 0394 addTab(transferTab, i18n("File Transfer")); 0395 0396 // 0397 // 'File Deletion' tab 0398 // 0399 QWidget *deleteTab = new QWidget(this); 0400 QVBoxLayout *deleteTabLayout = new QVBoxLayout(deleteTab); 0401 0402 // Files and Directories 0403 QGroupBox *filesAndDirectoriesBox = new QGroupBox(i18n("Files && Directories"), deleteTab); 0404 QGridLayout *filesAndDirectoriesBoxLayout = new QGridLayout(filesAndDirectoriesBox); 0405 0406 QCheckBox *removeSource = new QCheckBox(Smb4KSettings::self()->removeSourceFilesItem()->label(), filesAndDirectoriesBox); 0407 removeSource->setObjectName(QStringLiteral("kcfg_RemoveSourceFiles")); 0408 0409 filesAndDirectoriesBoxLayout->addWidget(removeSource, 0, 0); 0410 0411 QCheckBox *deleteExtraneous = new QCheckBox(Smb4KSettings::self()->deleteExtraneousItem()->label(), filesAndDirectoriesBox); 0412 deleteExtraneous->setObjectName(QStringLiteral("kcfg_DeleteExtraneous")); 0413 0414 filesAndDirectoriesBoxLayout->addWidget(deleteExtraneous, 0, 1); 0415 0416 QCheckBox *deleteBefore = new QCheckBox(Smb4KSettings::self()->deleteBeforeItem()->label(), filesAndDirectoriesBox); 0417 deleteBefore->setObjectName(QStringLiteral("kcfg_DeleteBefore")); 0418 0419 filesAndDirectoriesBoxLayout->addWidget(deleteBefore, 1, 0); 0420 0421 QCheckBox *deleteAfter = new QCheckBox(Smb4KSettings::self()->deleteAfterItem()->label(), filesAndDirectoriesBox); 0422 deleteAfter->setObjectName(QStringLiteral("kcfg_DeleteAfter")); 0423 0424 filesAndDirectoriesBoxLayout->addWidget(deleteAfter, 1, 1); 0425 0426 QCheckBox *deleteDuring = new QCheckBox(Smb4KSettings::self()->deleteDuringItem()->label(), filesAndDirectoriesBox); 0427 deleteDuring->setObjectName(QStringLiteral("kcfg_DeleteDuring")); 0428 0429 filesAndDirectoriesBoxLayout->addWidget(deleteDuring, 2, 0); 0430 0431 QCheckBox *deleteExcluded = new QCheckBox(Smb4KSettings::self()->deleteExcludedItem()->label(), filesAndDirectoriesBox); 0432 deleteExcluded->setObjectName(QStringLiteral("kcfg_DeleteExcluded")); 0433 0434 filesAndDirectoriesBoxLayout->addWidget(deleteExcluded, 2, 1); 0435 0436 QCheckBox *ignoreIoErrors = new QCheckBox(Smb4KSettings::self()->ignoreErrorsItem()->label(), filesAndDirectoriesBox); 0437 ignoreIoErrors->setObjectName(QStringLiteral("kcfg_IgnoreErrors")); 0438 0439 filesAndDirectoriesBoxLayout->addWidget(ignoreIoErrors, 3, 0); 0440 0441 QCheckBox *forceDirDeletion = new QCheckBox(Smb4KSettings::self()->forceDirectoryDeletionItem()->label(), filesAndDirectoriesBox); 0442 forceDirDeletion->setObjectName(QStringLiteral("kcfg_ForceDirectoryDeletion")); 0443 0444 filesAndDirectoriesBoxLayout->addWidget(forceDirDeletion, 3, 1); 0445 0446 deleteTabLayout->addWidget(filesAndDirectoriesBox); 0447 0448 // Restrictions 0449 QGroupBox *restrictionsBox = new QGroupBox(i18n("Restrictions"), deleteTab); 0450 QGridLayout *restrictionsBoxLayout = new QGridLayout(restrictionsBox); 0451 0452 QCheckBox *maximumDeleteButton = new QCheckBox(Smb4KSettings::self()->useMaximumDeleteItem()->label(), restrictionsBox); 0453 maximumDeleteButton->setObjectName(QStringLiteral("kcfg_UseMaximumDelete")); 0454 0455 restrictionsBoxLayout->addWidget(maximumDeleteButton, 0, 0); 0456 0457 QSpinBox *maximumDelete = new QSpinBox(restrictionsBox); 0458 maximumDelete->setObjectName(QStringLiteral("kcfg_MaximumDeleteValue")); 0459 0460 restrictionsBoxLayout->addWidget(maximumDelete, 0, 1); 0461 0462 deleteTabLayout->addWidget(restrictionsBox); 0463 deleteTabLayout->addStretch(100); 0464 0465 addTab(deleteTab, i18n("File Deletion")); 0466 0467 // 0468 // 'Filter' tab 0469 // 0470 QWidget *filterTab = new QWidget(this); 0471 QVBoxLayout *filterTabLayout = new QVBoxLayout(filterTab); 0472 0473 // General 0474 QGroupBox *generalFilteringBox = new QGroupBox(i18n("General Filtering Settings"), filterTab); 0475 QGridLayout *generalFilteringBoxLayout = new QGridLayout(generalFilteringBox); 0476 0477 QCheckBox *cvsExclude = new QCheckBox(Smb4KSettings::self()->useCVSExcludeItem()->label(), generalFilteringBox); 0478 cvsExclude->setObjectName(QStringLiteral("kcfg_UseCVSExclude")); 0479 0480 generalFilteringBoxLayout->addWidget(cvsExclude, 0, 0, 1, 2); 0481 0482 QCheckBox *excludePatternButton = new QCheckBox(Smb4KSettings::self()->useExcludePatternItem()->label(), generalFilteringBox); 0483 excludePatternButton->setObjectName(QStringLiteral("kcfg_UseExcludePattern")); 0484 0485 generalFilteringBoxLayout->addWidget(excludePatternButton, 1, 0); 0486 0487 KLineEdit *excludePattern = new KLineEdit(generalFilteringBox); 0488 excludePattern->setObjectName(QStringLiteral("kcfg_ExcludePattern")); 0489 excludePattern->setClearButtonEnabled(true); 0490 0491 generalFilteringBoxLayout->addWidget(excludePattern, 1, 1); 0492 0493 QCheckBox *excludeFromButton = new QCheckBox(Smb4KSettings::self()->useExcludeFromItem()->label(), generalFilteringBox); 0494 excludeFromButton->setObjectName(QStringLiteral("kcfg_UseExcludeFrom")); 0495 0496 generalFilteringBoxLayout->addWidget(excludeFromButton, 2, 0); 0497 0498 KUrlRequester *excludeFrom = new KUrlRequester(generalFilteringBox); 0499 excludeFrom->setObjectName(QStringLiteral("kcfg_ExcludeFrom")); 0500 excludeFrom->setMode(KFile::File | KFile::LocalOnly); 0501 0502 generalFilteringBoxLayout->addWidget(excludeFrom, 2, 1); 0503 0504 QCheckBox *includePatternButton = new QCheckBox(Smb4KSettings::self()->useIncludePatternItem()->label(), generalFilteringBox); 0505 includePatternButton->setObjectName(QStringLiteral("kcfg_UseIncludePattern")); 0506 0507 generalFilteringBoxLayout->addWidget(includePatternButton, 3, 0); 0508 0509 KLineEdit *includePattern = new KLineEdit(generalFilteringBox); 0510 includePattern->setObjectName(QStringLiteral("kcfg_IncludePattern")); 0511 includePattern->setClearButtonEnabled(true); 0512 0513 generalFilteringBoxLayout->addWidget(includePattern, 3, 1); 0514 0515 QCheckBox *includeFromButton = new QCheckBox(Smb4KSettings::self()->useIncludeFromItem()->label(), generalFilteringBox); 0516 includeFromButton->setObjectName(QStringLiteral("kcfg_UseIncludeFrom")); 0517 0518 generalFilteringBoxLayout->addWidget(includeFromButton, 4, 0); 0519 0520 KUrlRequester *includeFrom = new KUrlRequester(generalFilteringBox); 0521 includeFrom->setObjectName(QStringLiteral("kcfg_IncludeFrom")); 0522 includeFrom->setMode(KFile::File | KFile::LocalOnly); 0523 0524 generalFilteringBoxLayout->addWidget(includeFrom, 4, 1); 0525 0526 filterTabLayout->addWidget(generalFilteringBox); 0527 0528 // Filter rules 0529 QGroupBox *filterRulesBox = new QGroupBox(i18n("Filter Rules"), filterTab); 0530 QGridLayout *filterRulesBoxLayout = new QGridLayout(filterRulesBox); 0531 0532 QCheckBox *useFFilterRule = new QCheckBox(Smb4KSettings::self()->useFFilterRuleItem()->label(), filterRulesBox); 0533 useFFilterRule->setObjectName(QStringLiteral("kcfg_UseFFilterRule")); 0534 0535 filterRulesBoxLayout->addWidget(useFFilterRule, 0, 0, 1, 2); 0536 0537 QCheckBox *useFFFilterRule = new QCheckBox(Smb4KSettings::self()->useFFFilterRuleItem()->label(), filterRulesBox); 0538 useFFFilterRule->setObjectName(QStringLiteral("kcfg_UseFFFilterRule")); 0539 0540 filterRulesBoxLayout->addWidget(useFFFilterRule, 1, 0, 1, 2); 0541 0542 QCheckBox *useCustomFilterRules = new QCheckBox(Smb4KSettings::self()->useCustomFilteringRulesItem()->label(), filterRulesBox); 0543 useCustomFilterRules->setObjectName(QStringLiteral("kcfg_UseCustomFilteringRules")); 0544 0545 filterRulesBoxLayout->addWidget(useCustomFilterRules, 2, 0); 0546 0547 KLineEdit *customFilterRules = new KLineEdit(filterTab); 0548 customFilterRules->setObjectName(QStringLiteral("kcfg_CustomFilteringRules")); 0549 customFilterRules->setClearButtonEnabled(true); 0550 0551 filterRulesBoxLayout->addWidget(customFilterRules, 2, 1); 0552 0553 filterTabLayout->addWidget(filterRulesBox); 0554 filterTabLayout->addStretch(100); 0555 0556 addTab(filterTab, i18n("Filtering")); 0557 0558 // 0559 // 'Miscellaneous' tab 0560 // 0561 QWidget *miscellaneousTab = new QWidget(this); 0562 QVBoxLayout *miscellaneousTabLayout = new QVBoxLayout(miscellaneousTab); 0563 0564 // Checksums 0565 QGroupBox *checksumsBox = new QGroupBox(i18n("Checksums"), miscellaneousTab); 0566 QGridLayout *checksumsBoxLayout = new QGridLayout(checksumsBox); 0567 0568 QCheckBox *blockSizeButton = new QCheckBox(Smb4KSettings::self()->useBlockSizeItem()->label(), checksumsBox); 0569 blockSizeButton->setObjectName(QStringLiteral("kcfg_UseBlockSize")); 0570 0571 checksumsBoxLayout->addWidget(blockSizeButton, 0, 0); 0572 0573 QSpinBox *blockSize = new QSpinBox(checksumsBox); 0574 blockSize->setObjectName(QStringLiteral("kcfg_BlockSize")); 0575 0576 checksumsBoxLayout->addWidget(blockSize, 0, 1); 0577 0578 QCheckBox *checksumSeedButton = new QCheckBox(Smb4KSettings::self()->useChecksumSeedItem()->label(), checksumsBox); 0579 checksumSeedButton->setObjectName(QStringLiteral("kcfg_UseChecksumSeed")); 0580 0581 checksumsBoxLayout->addWidget(checksumSeedButton, 1, 0); 0582 0583 QSpinBox *checksumSeed = new QSpinBox(checksumsBox); 0584 checksumSeed->setObjectName(QStringLiteral("kcfg_ChecksumSeed")); 0585 0586 checksumsBoxLayout->addWidget(checksumSeed, 1, 1); 0587 0588 QCheckBox *useChecksum = new QCheckBox(Smb4KSettings::self()->useChecksumItem()->label(), checksumsBox); 0589 useChecksum->setObjectName(QStringLiteral("kcfg_UseChecksum")); 0590 0591 checksumsBoxLayout->addWidget(useChecksum, 2, 0, 1, 2); 0592 0593 miscellaneousTabLayout->addWidget(checksumsBox); 0594 0595 // Miscellaneous 0596 QGroupBox *miscellaneousBox2 = new QGroupBox(i18n("Miscellaneous"), miscellaneousTab); 0597 QGridLayout *miscellaneousBox2Layout = new QGridLayout(miscellaneousBox2); 0598 0599 QCheckBox *oneFilesystem = new QCheckBox(Smb4KSettings::self()->oneFileSystemItem()->label(), miscellaneousBox2); 0600 oneFilesystem->setObjectName(QStringLiteral("kcfg_OneFileSystem")); 0601 0602 miscellaneousBox2Layout->addWidget(oneFilesystem, 0, 0); 0603 0604 QCheckBox *delayUpdates = new QCheckBox(Smb4KSettings::self()->delayUpdatesItem()->label(), miscellaneousBox2); 0605 delayUpdates->setObjectName(QStringLiteral("kcfg_DelayUpdates")); 0606 0607 miscellaneousBox2Layout->addWidget(delayUpdates, 0, 1); 0608 0609 miscellaneousTabLayout->addWidget(miscellaneousBox2); 0610 miscellaneousTabLayout->addStretch(100); 0611 0612 addTab(miscellaneousTab, i18n("Miscellaneous")); 0613 0614 // 0615 // Connections 0616 // 0617 connect(useFFilterRule, SIGNAL(toggled(bool)), this, SLOT(slotFFilterRuleToggled(bool))); 0618 connect(useFFFilterRule, SIGNAL(toggled(bool)), this, SLOT(slotFFFilterRuleToggled(bool))); 0619 connect(makeBackups, SIGNAL(toggled(bool)), this, SLOT(slotBackupToggled(bool))); 0620 connect(compressData, SIGNAL(toggled(bool)), this, SLOT(slotCompressToggled(bool))); 0621 connect(keepPartial, SIGNAL(toggled(bool)), this, SLOT(slotKeepPartialToggled(bool))); 0622 0623 slotBackupToggled(Smb4KSettings::makeBackups()); 0624 slotCompressToggled(Smb4KSettings::compressData()); 0625 slotKeepPartialToggled(Smb4KSettings::keepPartial()); 0626 } 0627 0628 Smb4KConfigPageSynchronization::~Smb4KConfigPageSynchronization() 0629 { 0630 } 0631 0632 bool Smb4KConfigPageSynchronization::checkSettings() 0633 { 0634 for (int i = 0; i < count(); i++) { 0635 // Synchronization prefix 0636 KUrlRequester *synchronizationPrefix = widget(i)->findChild<KUrlRequester *>(QStringLiteral("kcfg_RsyncPrefix")); 0637 0638 if (synchronizationPrefix) { 0639 if (!synchronizationPrefix->url().isValid()) { 0640 setCurrentIndex(i); 0641 synchronizationPrefix->setFocus(); 0642 return false; 0643 } 0644 } 0645 0646 // Backups 0647 QCheckBox *makeBackups = widget(i)->findChild<QCheckBox *>(QStringLiteral("kcfg_MakeBackups")); 0648 QCheckBox *useBackupSuffix = widget(i)->findChild<QCheckBox *>(QStringLiteral("kcfg_UseBackupSuffix")); 0649 KLineEdit *backupSuffix = widget(i)->findChild<KLineEdit *>(QStringLiteral("kcfg_BackupSuffix")); 0650 QCheckBox *useBackupDir = widget(i)->findChild<QCheckBox *>(QStringLiteral("kcfg_UseBackupDirectory")); 0651 KUrlRequester *backupDir = widget(i)->findChild<KUrlRequester *>(QStringLiteral("kcfg_BackupDirectory")); 0652 0653 if (makeBackups && makeBackups->isChecked()) { 0654 if (useBackupSuffix && backupSuffix) { 0655 if (useBackupSuffix->isChecked() && backupSuffix->text().trimmed().isEmpty()) { 0656 setCurrentIndex(i); 0657 backupSuffix->setFocus(); 0658 return false; 0659 } 0660 } 0661 0662 if (useBackupDir && backupDir) { 0663 if (useBackupDir->isChecked() && !backupDir->url().isValid()) { 0664 setCurrentIndex(i); 0665 backupDir->setFocus(); 0666 return false; 0667 } 0668 } 0669 } 0670 0671 // Minimal transfer size 0672 QCheckBox *useMinTransferSize = widget(i)->findChild<QCheckBox *>(QStringLiteral("kcfg_UseMinimalTransferSize")); 0673 QSpinBox *minTransferSize = widget(i)->findChild<QSpinBox *>(QStringLiteral("kcfg_MinimalTransferSize")); 0674 0675 if (useMinTransferSize && minTransferSize) { 0676 if (useMinTransferSize->isChecked() && minTransferSize->value() == 0) { 0677 setCurrentIndex(i); 0678 minTransferSize->setFocus(); 0679 return false; 0680 } 0681 } 0682 0683 // Maximal transfer size 0684 QCheckBox *useMaxTransferSize = widget(i)->findChild<QCheckBox *>(QStringLiteral("kcfg_UseMaximalTransferSize")); 0685 QSpinBox *maxTransferSize = widget(i)->findChild<QSpinBox *>(QStringLiteral("kcfg_MaximalTransferSize")); 0686 0687 if (useMaxTransferSize && maxTransferSize) { 0688 if (useMaxTransferSize->isChecked() && maxTransferSize->value() == 0) { 0689 setCurrentIndex(i); 0690 maxTransferSize->setFocus(); 0691 return false; 0692 } 0693 } 0694 0695 // Partial directory 0696 QCheckBox *usePartialDirectory = widget(i)->findChild<QCheckBox *>(QStringLiteral("kcfg_UsePartialDirectory")); 0697 KUrlRequester *partialDirectory = widget(i)->findChild<KUrlRequester *>(QStringLiteral("kcfg_PartialDirectory")); 0698 0699 if (usePartialDirectory && partialDirectory) { 0700 if (usePartialDirectory->isChecked() && !partialDirectory->url().isValid()) { 0701 setCurrentIndex(i); 0702 partialDirectory->setFocus(); 0703 return false; 0704 } 0705 } 0706 0707 // Exclude exclude 0708 QCheckBox *useExcludePattern = widget(i)->findChild<QCheckBox *>(QStringLiteral("kcfg_UseExcludePattern")); 0709 KLineEdit *excludePattern = widget(i)->findChild<KLineEdit *>(QStringLiteral("kcfg_ExcludePattern")); 0710 0711 if (useExcludePattern && excludePattern) { 0712 if (useExcludePattern->isChecked() && excludePattern->text().trimmed().isEmpty()) { 0713 setCurrentIndex(i); 0714 excludePattern->setFocus(); 0715 return false; 0716 } 0717 } 0718 0719 // Read exclude pattern from file 0720 QCheckBox *useExcludeFrom = widget(i)->findChild<QCheckBox *>(QStringLiteral("kcfg_UseExcludeFrom")); 0721 KUrlRequester *excludeFrom = widget(i)->findChild<KUrlRequester *>(QStringLiteral("kcfg_ExcludeFrom")); 0722 0723 if (useExcludeFrom && excludeFrom) { 0724 if (useExcludeFrom->isChecked() && !excludeFrom->url().isValid()) { 0725 setCurrentIndex(i); 0726 excludeFrom->setFocus(); 0727 return false; 0728 } 0729 } 0730 0731 // Exclude exclude 0732 QCheckBox *useIncludePattern = widget(i)->findChild<QCheckBox *>(QStringLiteral("kcfg_UseIncludePattern")); 0733 KLineEdit *includePattern = widget(i)->findChild<KLineEdit *>(QStringLiteral("kcfg_IncludePattern")); 0734 0735 if (useIncludePattern && includePattern) { 0736 if (useIncludePattern->isChecked() && includePattern->text().trimmed().isEmpty()) { 0737 setCurrentIndex(i); 0738 includePattern->setFocus(); 0739 return false; 0740 } 0741 } 0742 0743 // Read exclude pattern from file 0744 QCheckBox *useIncludeFrom = widget(i)->findChild<QCheckBox *>(QStringLiteral("kcfg_UseIncludeFrom")); 0745 KUrlRequester *includeFrom = widget(i)->findChild<KUrlRequester *>(QStringLiteral("kcfg_IncludeFrom")); 0746 0747 if (useIncludeFrom && includeFrom) { 0748 if (useIncludeFrom->isChecked() && !includeFrom->url().isValid()) { 0749 setCurrentIndex(i); 0750 includeFrom->setFocus(); 0751 return false; 0752 } 0753 } 0754 0755 // Block size 0756 QCheckBox *useFixedBlocksize = widget(i)->findChild<QCheckBox *>(QStringLiteral("kcfg_UseBlockSize")); 0757 QSpinBox *fixedBlocksize = widget(i)->findChild<QSpinBox *>(QStringLiteral("kcfg_BlockSize")); 0758 0759 if (useFixedBlocksize && fixedBlocksize) { 0760 if (useFixedBlocksize->isChecked() && fixedBlocksize->value() == 0) { 0761 setCurrentIndex(i); 0762 fixedBlocksize->setFocus(); 0763 return false; 0764 } 0765 } 0766 0767 // NOTE: There is no need to check the following settings, because they may be empty or 0: 0768 // - kcfg_UseCompressionLevel & kcfg_CompressionLevel 0769 // - kcfg_UseSkipCompression & kcfg_SkipCompression 0770 // - kcfg_UseBandwidthLimit & kcfg_BandwidthLimit 0771 // - kcfg_UseMaximumDelete & kcfg_MaximumDeleteValue 0772 // - kcfg_CustomFilteringRules 0773 // - kcfg_UseChecksumSeed & kcfg_ChecksumSeed 0774 } 0775 0776 return true; 0777 } 0778 0779 ///////////////////////////////////////////////////////////////////////////// 0780 // SLOT IMPLEMENTATIONS 0781 ///////////////////////////////////////////////////////////////////////////// 0782 0783 void Smb4KConfigPageSynchronization::slotBackupToggled(bool checked) 0784 { 0785 findChild<QCheckBox *>(QStringLiteral("kcfg_UseBackupDirectory"))->setEnabled(checked); 0786 findChild<KUrlRequester *>(QStringLiteral("kcfg_BackupDirectory"))->setEnabled(checked); 0787 findChild<QCheckBox *>(QStringLiteral("kcfg_UseBackupSuffix"))->setEnabled(checked); 0788 findChild<KLineEdit *>(QStringLiteral("kcfg_BackupSuffix"))->setEnabled(checked); 0789 } 0790 0791 void Smb4KConfigPageSynchronization::slotCompressToggled(bool checked) 0792 { 0793 findChild<QCheckBox *>(QStringLiteral("kcfg_UseCompressionLevel"))->setEnabled(checked); 0794 findChild<QSpinBox *>(QStringLiteral("kcfg_CompressionLevel"))->setEnabled(checked); 0795 findChild<QCheckBox *>(QStringLiteral("kcfg_UseSkipCompression"))->setEnabled(checked); 0796 findChild<KLineEdit *>(QStringLiteral("kcfg_SkipCompression"))->setEnabled(checked); 0797 } 0798 0799 void Smb4KConfigPageSynchronization::slotKeepPartialToggled(bool checked) 0800 { 0801 findChild<QCheckBox *>(QStringLiteral("kcfg_UsePartialDirectory"))->setEnabled(checked); 0802 findChild<KUrlRequester *>(QStringLiteral("kcfg_PartialDirectory"))->setEnabled(checked); 0803 } 0804 0805 void Smb4KConfigPageSynchronization::slotFFilterRuleToggled(bool on) 0806 { 0807 QCheckBox *ff_filter = findChild<QCheckBox *>(QStringLiteral("kcfg_UseFFFilterRule")); 0808 0809 if (on && ff_filter->isChecked()) { 0810 ff_filter->setChecked(false); 0811 } 0812 } 0813 0814 void Smb4KConfigPageSynchronization::slotFFFilterRuleToggled(bool on) 0815 { 0816 QCheckBox *f_filter = findChild<QCheckBox *>(QStringLiteral("kcfg_UseFFilterRule")); 0817 0818 if (on && f_filter->isChecked()) { 0819 f_filter->setChecked(false); 0820 } 0821 }