File indexing completed on 2024-12-08 10:27:16
0001 /* 0002 The configuration page for the network settings of Smb4K 0003 0004 SPDX-FileCopyrightText: 2003-2023 Alexander Reinholdt <alexander.reinholdt@kdemail.net> 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 // application specific includes 0009 #include "smb4kconfigpagenetwork.h" 0010 #include "core/smb4ksettings.h" 0011 0012 // Qt includes 0013 #include <QCheckBox> 0014 #include <QGridLayout> 0015 #include <QGroupBox> 0016 #include <QHBoxLayout> 0017 #include <QLabel> 0018 #include <QSpinBox> 0019 #include <QVBoxLayout> 0020 0021 // KDE includes 0022 #include <KComboBox> 0023 #include <KIconLoader> 0024 #include <KLineEdit> 0025 #include <KLocalizedString> 0026 #include <KMessageWidget> 0027 0028 Smb4KConfigPageNetwork::Smb4KConfigPageNetwork(QWidget *parent) 0029 : QTabWidget(parent) 0030 { 0031 // 0032 // Basic Settings 0033 // 0034 QWidget *basicTab = new QWidget(this); 0035 QVBoxLayout *basicTabLayout = new QVBoxLayout(basicTab); 0036 0037 // 0038 // Browse Settings 0039 // 0040 QGroupBox *browseSettingsBox = new QGroupBox(i18n("Browse Settings"), basicTab); 0041 QVBoxLayout *browseSettingsBoxLayout = new QVBoxLayout(browseSettingsBox); 0042 0043 #ifdef USE_WS_DISCOVERY 0044 // Use WS-Discovery 0045 QCheckBox *useWsDiscovery = new QCheckBox(Smb4KSettings::self()->useWsDiscoveryItem()->label(), browseSettingsBox); 0046 useWsDiscovery->setObjectName(QStringLiteral("kcfg_UseWsDiscovery")); 0047 0048 browseSettingsBoxLayout->addWidget(useWsDiscovery); 0049 #endif 0050 0051 // Use DNS-SD 0052 QCheckBox *useDnsServiceDiscovery = new QCheckBox(Smb4KSettings::self()->useDnsServiceDiscoveryItem()->label(), browseSettingsBox); 0053 useDnsServiceDiscovery->setObjectName(QStringLiteral("kcfg_UseDnsServiceDiscovery")); 0054 0055 browseSettingsBoxLayout->addWidget(useDnsServiceDiscovery); 0056 0057 // Set client protocol versions 0058 QCheckBox *useClientProtocolVersions = new QCheckBox(Smb4KSettings::self()->useClientProtocolVersionsItem()->label(), browseSettingsBox); 0059 useClientProtocolVersions->setObjectName(QStringLiteral("kcfg_UseClientProtocolVersions")); 0060 0061 browseSettingsBoxLayout->addWidget(useClientProtocolVersions); 0062 0063 m_protocolVersionsWidget = new QWidget(browseSettingsBox); 0064 m_protocolVersionsWidget->setEnabled(false); 0065 QGridLayout *protocolVersionsWidgetLayout = new QGridLayout(m_protocolVersionsWidget); 0066 protocolVersionsWidgetLayout->setContentsMargins(0, 0, 0, 0); 0067 0068 QLabel *minimalProtocolVersionLabel = new QLabel(Smb4KSettings::self()->minimalClientProtocolVersionItem()->label(), m_protocolVersionsWidget); 0069 minimalProtocolVersionLabel->setIndent(25); 0070 0071 KComboBox *minimalProtocolVersion = new KComboBox(m_protocolVersionsWidget); 0072 minimalProtocolVersion->setObjectName(QStringLiteral("kcfg_MinimalClientProtocolVersion")); 0073 0074 QList<KCoreConfigSkeleton::ItemEnum::Choice> minimalProtocolVersionChoices = Smb4KSettings::self()->minimalClientProtocolVersionItem()->choices(); 0075 0076 for (const KCoreConfigSkeleton::ItemEnum::Choice &c : qAsConst(minimalProtocolVersionChoices)) { 0077 minimalProtocolVersion->addItem(c.label); 0078 } 0079 0080 protocolVersionsWidgetLayout->addWidget(minimalProtocolVersionLabel, 0, 0); 0081 protocolVersionsWidgetLayout->addWidget(minimalProtocolVersion, 0, 1); 0082 0083 QLabel *maximalProtocolVersionLabel = new QLabel(Smb4KSettings::self()->maximalClientProtocolVersionItem()->label(), m_protocolVersionsWidget); 0084 maximalProtocolVersionLabel->setIndent(25); 0085 0086 KComboBox *maximalProtocolVersion = new KComboBox(m_protocolVersionsWidget); 0087 maximalProtocolVersion->setObjectName(QStringLiteral("kcfg_MaximalClientProtocolVersion")); 0088 0089 QList<KCoreConfigSkeleton::ItemEnum::Choice> maximalProtocolVersionChoices = Smb4KSettings::self()->maximalClientProtocolVersionItem()->choices(); 0090 0091 for (const KCoreConfigSkeleton::ItemEnum::Choice &c : qAsConst(maximalProtocolVersionChoices)) { 0092 maximalProtocolVersion->addItem(c.label); 0093 } 0094 0095 protocolVersionsWidgetLayout->addWidget(maximalProtocolVersionLabel, 1, 0); 0096 protocolVersionsWidgetLayout->addWidget(maximalProtocolVersion, 1, 1); 0097 0098 browseSettingsBoxLayout->addWidget(m_protocolVersionsWidget); 0099 0100 basicTabLayout->addWidget(browseSettingsBox); 0101 0102 // 0103 // Behavior 0104 // 0105 QGroupBox *behaviorBox = new QGroupBox(i18n("Behavior"), basicTab); 0106 QGridLayout *behaviorBoxLayout = new QGridLayout(behaviorBox); 0107 0108 QCheckBox *detectPrinters = new QCheckBox(Smb4KSettings::self()->detectPrinterSharesItem()->label(), behaviorBox); 0109 detectPrinters->setObjectName(QStringLiteral("kcfg_DetectPrinterShares")); 0110 0111 behaviorBoxLayout->addWidget(detectPrinters, 0, 0); 0112 0113 QCheckBox *detectHiddenShares = new QCheckBox(Smb4KSettings::self()->detectHiddenSharesItem()->label(), behaviorBox); 0114 detectHiddenShares->setObjectName(QStringLiteral("kcfg_DetectHiddenShares")); 0115 0116 behaviorBoxLayout->addWidget(detectHiddenShares, 0, 1); 0117 0118 QCheckBox *previewHiddenItems = new QCheckBox(Smb4KSettings::self()->previewHiddenItemsItem()->label(), behaviorBox); 0119 previewHiddenItems->setObjectName(QStringLiteral("kcfg_PreviewHiddenItems")); 0120 0121 behaviorBoxLayout->addWidget(previewHiddenItems, 1, 0); 0122 0123 basicTabLayout->addWidget(behaviorBox); 0124 basicTabLayout->addStretch(100); 0125 0126 addTab(basicTab, i18n("Basic Settings")); 0127 0128 // 0129 // Advanced Settings 0130 // 0131 QWidget *advancedTab = new QWidget(this); 0132 QVBoxLayout *advancedTabLayout = new QVBoxLayout(advancedTab); 0133 0134 // 0135 // Samba 0136 // 0137 QGroupBox *sambaBox = new QGroupBox(i18n("Samba"), advancedTab); 0138 QGridLayout *sambaBoxLayout = new QGridLayout(sambaBox); 0139 0140 QCheckBox *useRemoteSmbPort = new QCheckBox(Smb4KSettings::self()->useRemoteSmbPortItem()->label(), sambaBox); 0141 useRemoteSmbPort->setObjectName(QStringLiteral("kcfg_UseRemoteSmbPort")); 0142 0143 sambaBoxLayout->addWidget(useRemoteSmbPort, 0, 0); 0144 0145 QSpinBox *remoteSmbPort = new QSpinBox(sambaBox); 0146 remoteSmbPort->setObjectName(QStringLiteral("kcfg_RemoteSmbPort")); 0147 // remoteSmbPort->setSliderEnabled(true); 0148 0149 sambaBoxLayout->addWidget(remoteSmbPort, 0, 1); 0150 0151 QCheckBox *useEncryptionLevel = new QCheckBox(Smb4KSettings::self()->useEncryptionLevelItem()->label(), sambaBox); 0152 useEncryptionLevel->setObjectName(QStringLiteral("kcfg_UseEncryptionLevel")); 0153 0154 sambaBoxLayout->addWidget(useEncryptionLevel, 1, 0); 0155 0156 KComboBox *encryptionLevel = new KComboBox(sambaBox); 0157 encryptionLevel->setObjectName(QStringLiteral("kcfg_EncryptionLevel")); 0158 0159 QList<KCoreConfigSkeleton::ItemEnum::Choice> encryptionLevelChoices = Smb4KSettings::self()->encryptionLevelItem()->choices(); 0160 0161 for (const KCoreConfigSkeleton::ItemEnum::Choice &c : qAsConst(encryptionLevelChoices)) { 0162 encryptionLevel->addItem(c.label); 0163 } 0164 0165 sambaBoxLayout->addWidget(encryptionLevel, 1, 1); 0166 0167 QCheckBox *largeNetworkNeighborhood = new QCheckBox(Smb4KSettings::self()->largeNetworkNeighborhoodItem()->label(), sambaBox); 0168 largeNetworkNeighborhood->setObjectName(QStringLiteral("kcfg_LargeNetworkNeighborhood")); 0169 0170 sambaBoxLayout->addWidget(largeNetworkNeighborhood, 2, 0, 1, 2); 0171 0172 QCheckBox *masterBrowsersRequireAuth = new QCheckBox(Smb4KSettings::self()->masterBrowsersRequireAuthItem()->label(), sambaBox); 0173 masterBrowsersRequireAuth->setObjectName(QStringLiteral("kcfg_MasterBrowsersRequireAuth")); 0174 0175 sambaBoxLayout->addWidget(masterBrowsersRequireAuth, 3, 0, 1, 2); 0176 0177 QCheckBox *useKerberos = new QCheckBox(Smb4KSettings::self()->useKerberosItem()->label(), sambaBox); 0178 useKerberos->setObjectName(QStringLiteral("kcfg_UseKerberos")); 0179 0180 sambaBoxLayout->addWidget(useKerberos, 4, 0, 1, 2); 0181 0182 QCheckBox *useCCache = new QCheckBox(Smb4KSettings::self()->useWinbindCCacheItem()->label(), sambaBox); 0183 useCCache->setObjectName(QStringLiteral("kcfg_UseWinbindCCache")); 0184 0185 sambaBoxLayout->addWidget(useCCache, 5, 0, 1, 2); 0186 0187 advancedTabLayout->addWidget(sambaBox); 0188 0189 QGroupBox *wakeOnLanBox = new QGroupBox(i18n("Wake-On-LAN"), advancedTab); 0190 QVBoxLayout *wakeOnLanBoxLayout = new QVBoxLayout(wakeOnLanBox); 0191 0192 QCheckBox *enableWakeOnLan = new QCheckBox(Smb4KSettings::self()->enableWakeOnLANItem()->label(), wakeOnLanBox); 0193 enableWakeOnLan->setObjectName(QStringLiteral("kcfg_EnableWakeOnLAN")); 0194 0195 wakeOnLanBoxLayout->addWidget(enableWakeOnLan); 0196 0197 m_waitingTimeWidget = new QWidget(wakeOnLanBox); 0198 m_waitingTimeWidget->setEnabled(false); 0199 QHBoxLayout *waitingTimeWidgetLayout = new QHBoxLayout(m_waitingTimeWidget); 0200 waitingTimeWidgetLayout->setContentsMargins(0, 0, 0, 0); 0201 0202 QLabel *wakeOnLanWaitingTimeLabel = new QLabel(Smb4KSettings::self()->wakeOnLANWaitingTimeItem()->label(), m_waitingTimeWidget); 0203 wakeOnLanWaitingTimeLabel->setIndent(25); 0204 0205 waitingTimeWidgetLayout->addWidget(wakeOnLanWaitingTimeLabel); 0206 0207 QSpinBox *wakeOnLanWaitingTime = new QSpinBox(m_waitingTimeWidget); 0208 wakeOnLanWaitingTime->setObjectName(QStringLiteral("kcfg_WakeOnLANWaitingTime")); 0209 wakeOnLanWaitingTime->setSuffix(i18n(" s")); 0210 wakeOnLanWaitingTime->setSingleStep(1); 0211 // wakeOnLanWaitingTime->setSliderEnabled(true); 0212 0213 waitingTimeWidgetLayout->addWidget(wakeOnLanWaitingTime); 0214 0215 wakeOnLanBoxLayout->addWidget(m_waitingTimeWidget); 0216 0217 KMessageWidget *wakeOnLanNote = new KMessageWidget(wakeOnLanBox); 0218 wakeOnLanNote->setText(i18n("Define the hosts that should be woken up via the custom settings editor.")); 0219 wakeOnLanNote->setMessageType(KMessageWidget::Information); 0220 wakeOnLanNote->setCloseButtonVisible(false); 0221 wakeOnLanNote->setIcon(KDE::icon(QStringLiteral("emblem-information"))); 0222 0223 wakeOnLanBoxLayout->addWidget(wakeOnLanNote); 0224 0225 advancedTabLayout->addWidget(wakeOnLanBox); 0226 advancedTabLayout->addStretch(100); 0227 0228 addTab(advancedTab, i18n("Advanced Settings")); 0229 0230 connect(useClientProtocolVersions, &QCheckBox::toggled, this, &Smb4KConfigPageNetwork::slotSetProtocolVersionsToggled); 0231 connect(enableWakeOnLan, &QCheckBox::toggled, this, &Smb4KConfigPageNetwork::slotEnableWakeOnLanFeatureToggled); 0232 } 0233 0234 Smb4KConfigPageNetwork::~Smb4KConfigPageNetwork() 0235 { 0236 } 0237 0238 void Smb4KConfigPageNetwork::slotSetProtocolVersionsToggled(bool on) 0239 { 0240 m_protocolVersionsWidget->setEnabled(on); 0241 } 0242 0243 void Smb4KConfigPageNetwork::slotEnableWakeOnLanFeatureToggled(bool on) 0244 { 0245 m_waitingTimeWidget->setEnabled(on); 0246 }