File indexing completed on 2024-05-05 04:51:38

0001 /*
0002     SPDX-FileCopyrightText: 1998-2008 Sebastian Trueg <trueg@k3b.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 
0008 #include "k3boptiondialog.h"
0009 #include "k3bcore.h"
0010 #include "k3bdeviceoptiontab.h"
0011 #include "k3badvancedoptiontab.h"
0012 #include "k3bexternalbinoptiontab.h"
0013 #include "k3bmiscoptiontab.h"
0014 #include "k3bthemeoptiontab.h"
0015 #include "k3bpluginoptiontab.h"
0016 #include "k3bcddboptiontab.h"
0017 #include "k3bsystemproblemdialog.h"
0018 #include "k3bnotifyoptiontab.h"
0019 
0020 #include <KConfig>
0021 #include <KConfigGroup>
0022 #include <KSharedConfig>
0023 #include <KLocalizedString>
0024 
0025 #include <QIcon>
0026 #include <QFrame>
0027 #include <QGridLayout>
0028 #include <QHBoxLayout>
0029 #include <QLayout>
0030 #include <QTabWidget>
0031 #include <QToolTip>
0032 #include <QVBoxLayout>
0033 
0034 // TODO: handle the default-settings
0035 
0036 K3b::OptionDialog::OptionDialog(QWidget *parent )
0037     : KPageDialog( parent )
0038 {
0039     setFaceType( List );
0040     setWindowTitle( i18n("Settings") );
0041 
0042     this->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::RestoreDefaults | QDialogButtonBox::Apply | QDialogButtonBox::Cancel);
0043 
0044     setupMiscPage();
0045     setupDevicePage();
0046     setupProgramsPage();
0047     setupNotifyPage();
0048     setupPluginPage();
0049     setupThemePage();
0050     setupCddbPage();
0051     setupAdvancedPage();
0052 
0053     m_miscOptionTab->readSettings();
0054     m_deviceOptionTab->readDevices();
0055     m_externalBinOptionTab->readSettings();
0056     m_notifyOptionTab->readSettings();
0057     m_themeOptionTab->readSettings();
0058     m_advancedOptionTab->readSettings();
0059 
0060     // if we don't do this the dialog start really huge
0061     // because of the label in the device-tab
0062     resize( 700, 500 );
0063 
0064     buttonBox()->button(QDialogButtonBox::Apply)->setDefault(false);
0065     connect( this->buttonBox()->button( QDialogButtonBox::Ok ), SIGNAL(clicked()), SLOT(slotOk()) );
0066     connect( this->buttonBox()->button( QDialogButtonBox::RestoreDefaults ), SIGNAL(clicked()), SLOT(slotDefault()) );
0067     connect( this->buttonBox()->button( QDialogButtonBox::Apply ), SIGNAL(clicked()), SLOT(slotApply()) );
0068 }
0069 
0070 
0071 K3b::OptionDialog::~OptionDialog()
0072 {
0073 }
0074 
0075 
0076 void K3b::OptionDialog::setCurrentPage( ConfigPage page )
0077 {
0078     Pages::const_iterator pageIt = m_pages.constFind( page );
0079     if( pageIt != m_pages.constEnd() ) {
0080         KPageDialog::setCurrentPage( *pageIt );
0081     }
0082 }
0083 
0084 
0085 void K3b::OptionDialog::slotOk()
0086 {
0087     if( saveSettings() ) {
0088         accept();
0089 
0090         KConfigGroup grp( KSharedConfig::openConfig(), QStringLiteral("General Options") );
0091         if( grp.readEntry( "check system config", true ) )
0092             K3b::SystemProblemDialog::checkSystem();
0093     }
0094 }
0095 
0096 void K3b::OptionDialog::slotApply()
0097 {
0098     saveSettings();
0099 }
0100 
0101 
0102 bool K3b::OptionDialog::saveSettings()
0103 {
0104     m_deviceOptionTab->saveDevices();
0105     m_externalBinOptionTab->saveSettings();
0106     m_notifyOptionTab->saveSettings();
0107     m_themeOptionTab->saveSettings();
0108     m_cddbOptionTab->apply();
0109     m_advancedOptionTab->saveSettings();
0110 
0111     if( !m_miscOptionTab->saveSettings() )
0112         return false;
0113 
0114     return true;
0115 }
0116 
0117 
0118 void K3b::OptionDialog::slotDefault()
0119 {
0120 }
0121 
0122 
0123 void K3b::OptionDialog::setupMiscPage()
0124 {
0125     m_miscOptionTab = new K3b::MiscOptionTab;
0126     connect(m_miscOptionTab, &K3b::MiscOptionTab::changed, [this](){
0127         buttonBox()->button(QDialogButtonBox::Apply)->setDefault(true);
0128     });
0129     m_miscPage = addPage( m_miscOptionTab, i18n("Misc") );
0130     m_miscPage->setHeader( i18n("Miscellaneous Settings") );
0131     m_miscPage->setIcon( QIcon::fromTheme( "preferences-other" ) );
0132     m_pages.insert( Misc, m_miscPage );
0133 }
0134 
0135 
0136 void K3b::OptionDialog::setupDevicePage()
0137 {
0138     m_deviceOptionTab = new K3b::DeviceOptionTab;
0139     m_devicePage = addPage( m_deviceOptionTab, i18n("Devices") );
0140     m_devicePage->setHeader( i18n("Optical Devices") );
0141     QIcon icon = QIcon::fromTheme("drive-optical");
0142     if (icon.isNull()) {
0143         icon = QIcon::fromTheme("media-optical");
0144     }
0145     m_devicePage->setIcon(icon);
0146     m_pages.insert( Devices, m_devicePage );
0147 }
0148 
0149 
0150 void K3b::OptionDialog::setupProgramsPage()
0151 {
0152     m_externalBinOptionTab = new K3b::ExternalBinOptionTab( k3bcore->externalBinManager() );
0153     m_programsPage = addPage( m_externalBinOptionTab, i18n("Programs") );
0154     m_programsPage->setHeader( i18n("Setup External Programs") );
0155     m_programsPage->setIcon( QIcon::fromTheme( "system-run" ) );
0156     m_pages.insert( Programs, m_programsPage );
0157 }
0158 
0159 
0160 void K3b::OptionDialog::setupNotifyPage()
0161 {
0162     m_notifyOptionTab = new K3b::NotifyOptionTab;
0163     m_notifyPage = addPage( m_notifyOptionTab, i18n("Notifications") );
0164     m_notifyPage->setHeader( i18n("System Notifications") );
0165     m_notifyPage->setIcon( QIcon::fromTheme( "preferences-desktop-notification" ) );
0166     m_pages.insert( Notifications, m_notifyPage );
0167 }
0168 
0169 
0170 void K3b::OptionDialog::setupPluginPage()
0171 {
0172     m_pluginOptionTab = new K3b::PluginOptionTab;
0173     m_pluginPage = addPage( m_pluginOptionTab, i18n("Plugins") );
0174     m_pluginPage->setHeader( i18n("K3b Plugin Configuration") );
0175     QIcon icon = QIcon::fromTheme("preferences-plugin");
0176     if (icon.isNull()) {
0177         icon = QIcon::fromTheme("application-x-addon");
0178     }
0179     m_pluginPage->setIcon(icon);
0180     m_pages.insert( Plugins, m_pluginPage );
0181 }
0182 
0183 
0184 void K3b::OptionDialog::setupThemePage()
0185 {
0186     m_themeOptionTab = new K3b::ThemeOptionTab;
0187     m_themePage = addPage( m_themeOptionTab, i18n("Themes") );
0188     m_themePage->setHeader( i18n("K3b GUI Themes") );
0189     m_themePage->setIcon( QIcon::fromTheme( "preferences-desktop-theme" ) );
0190     m_pages.insert( Themes, m_themePage );
0191 }
0192 
0193 
0194 void K3b::OptionDialog::setupCddbPage()
0195 {
0196     m_cddbOptionTab = new K3b::CddbOptionTab;
0197     m_cddbPage = addPage( m_cddbOptionTab, i18n("CDDB") );
0198     m_cddbPage->setHeader( i18n("CDDB Audio CD Info Retrieval") );
0199     m_cddbPage->setIcon( QIcon::fromTheme( "media-optical-audio" ) );
0200     m_pages.insert( Cddb, m_cddbPage );
0201 }
0202 
0203 
0204 void K3b::OptionDialog::setupAdvancedPage()
0205 {
0206     m_advancedOptionTab = new K3b::AdvancedOptionTab;
0207     m_advancedPage = addPage( m_advancedOptionTab, i18n("Advanced") );
0208     m_advancedPage->setHeader( i18n("Advanced Settings") );
0209     m_advancedPage->setIcon( QIcon::fromTheme( "media-optical-recordable" ) );
0210     m_pages.insert( Advanced, m_advancedPage );
0211 }
0212 
0213 #include "moc_k3boptiondialog.cpp"