File indexing completed on 2024-05-19 04:55:56

0001 /**
0002  * \file mainwindowconfig.cpp
0003  * Main window configuration.
0004  *
0005  * \b Project: Kid3
0006  * \author Urs Fleisch
0007  * \date 08 Apr 2013
0008  *
0009  * Copyright (C) 2013-2024  Urs Fleisch
0010  *
0011  * This file is part of Kid3.
0012  *
0013  * Kid3 is free software; you can redistribute it and/or modify
0014  * it under the terms of the GNU General Public License as published by
0015  * the Free Software Foundation; either version 2 of the License, or
0016  * (at your option) any later version.
0017  *
0018  * Kid3 is distributed in the hope that it will be useful,
0019  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0020  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0021  * GNU General Public License for more details.
0022  *
0023  * You should have received a copy of the GNU General Public License
0024  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
0025  */
0026 
0027 #include "mainwindowconfig.h"
0028 #include "isettings.h"
0029 #include "loadtranslation.h"
0030 
0031 int MainWindowConfig::s_index = -1;
0032 
0033 /**
0034  * Constructor.
0035  */
0036 MainWindowConfig::MainWindowConfig()
0037   : StoredConfig(QLatin1String("MainWindow")),
0038     m_fontSize(-1),
0039     m_useFont(false),
0040     m_hideToolBar(false),
0041     m_hideStatusBar(false),
0042     m_dontUseNativeDialogs(
0043 #if defined Q_OS_WIN32 || defined Q_OS_MAC
0044       false
0045 #else
0046       true
0047 #endif
0048     )
0049 {
0050 }
0051 
0052 /**
0053  * Persist configuration.
0054  *
0055  * @param config configuration
0056  */
0057 void MainWindowConfig::writeToConfig(ISettings* config) const
0058 {
0059   config->beginGroup(m_group);
0060   config->setValue(QLatin1String("HideToolBar"), QVariant(m_hideToolBar));
0061   config->setValue(QLatin1String("HideStatusBar"), QVariant(m_hideStatusBar));
0062   config->setValue(QLatin1String("Language"), QVariant(m_language));
0063   config->setValue(QLatin1String("UseFont"), QVariant(m_useFont));
0064   config->setValue(QLatin1String("FontFamily"), QVariant(m_fontFamily));
0065   config->setValue(QLatin1String("FontSize"), QVariant(m_fontSize));
0066   config->setValue(QLatin1String("Style"), QVariant(m_style));
0067   config->setValue(QLatin1String("DontUseNativeDialogs"), QVariant(m_dontUseNativeDialogs));
0068   config->setValue(QLatin1String("QtQuickStyle"), QVariant(m_qtQuickStyle));
0069   config->endGroup();
0070   config->beginGroup(m_group, true);
0071   config->setValue(QLatin1String("Geometry"), m_geometry);
0072   config->setValue(QLatin1String("WindowState"), m_windowState);
0073   config->endGroup();
0074 }
0075 
0076 /**
0077  * Read persisted configuration.
0078  *
0079  * @param config configuration
0080  */
0081 void MainWindowConfig::readFromConfig(ISettings* config)
0082 {
0083   config->beginGroup(m_group);
0084   m_hideToolBar = config->value(QLatin1String("HideToolBar"), m_hideToolBar).toBool();
0085   m_hideStatusBar = config->value(QLatin1String("HideStatusBar"), m_hideStatusBar).toBool();
0086   m_language = config->value(QLatin1String("Language"), m_language).toString();
0087   m_useFont = config->value(QLatin1String("UseFont"), m_useFont).toBool();
0088   m_fontFamily = config->value(QLatin1String("FontFamily"), m_fontFamily).toString();
0089   m_fontSize = config->value(QLatin1String("FontSize"), -1).toInt();
0090   m_style = config->value(QLatin1String("Style"), m_style).toString();
0091   m_dontUseNativeDialogs = config->value(QLatin1String("DontUseNativeDialogs"),
0092                                          m_dontUseNativeDialogs).toBool();
0093   m_qtQuickStyle = config->value(QLatin1String("QtQuickStyle"), m_qtQuickStyle).toString();
0094   config->endGroup();
0095   config->beginGroup(m_group, true);
0096   m_geometry = config->value(QLatin1String("Geometry"), m_geometry).toByteArray();
0097   m_windowState = config->value(QLatin1String("WindowState"), m_windowState).toByteArray();
0098   config->endGroup();
0099 }
0100 
0101 void MainWindowConfig::setGeometry(const QByteArray& geometry)
0102 {
0103   if (m_geometry != geometry) {
0104     m_geometry = geometry;
0105     emit geometryChanged(m_geometry);
0106   }
0107 }
0108 
0109 void MainWindowConfig::setWindowState(const QByteArray& windowState)
0110 {
0111   if (m_windowState != windowState) {
0112     m_windowState = windowState;
0113     emit windowStateChanged(m_windowState);
0114   }
0115 }
0116 
0117 void MainWindowConfig::setLanguage(const QString& language)
0118 {
0119   if (m_language != language) {
0120     m_language = language;
0121     emit languageChanged(m_language);
0122   }
0123 }
0124 
0125 void MainWindowConfig::setFontFamily(const QString& fontFamily)
0126 {
0127   if (m_fontFamily != fontFamily) {
0128     m_fontFamily = fontFamily;
0129     emit fontFamilyChanged(m_fontFamily);
0130   }
0131 }
0132 
0133 void MainWindowConfig::setFontSize(int fontSize)
0134 {
0135   if (m_fontSize != fontSize) {
0136     m_fontSize = fontSize;
0137     emit fontSizeChanged(m_fontSize);
0138   }
0139 }
0140 
0141 void MainWindowConfig::setStyle(const QString& style)
0142 {
0143   if (m_style != style) {
0144     m_style = style;
0145     emit styleChanged(m_style);
0146   }
0147 }
0148 
0149 void MainWindowConfig::setUseFont(bool useFont)
0150 {
0151   if (m_useFont != useFont) {
0152     m_useFont = useFont;
0153     emit useFontChanged(m_useFont);
0154   }
0155 }
0156 
0157 void MainWindowConfig::setHideToolBar(bool hideToolBar)
0158 {
0159   if (m_hideToolBar != hideToolBar) {
0160     m_hideToolBar = hideToolBar;
0161     emit hideToolBarChanged(m_hideToolBar);
0162   }
0163 }
0164 
0165 void MainWindowConfig::setHideStatusBar(bool hideStatusBar)
0166 {
0167   if (m_hideStatusBar != hideStatusBar) {
0168     m_hideStatusBar = hideStatusBar;
0169     emit hideStatusBarChanged(m_hideStatusBar);
0170   }
0171 }
0172 
0173 void MainWindowConfig::setDontUseNativeDialogs(bool dontUseNativeDialogs)
0174 {
0175   if (m_dontUseNativeDialogs != dontUseNativeDialogs) {
0176     m_dontUseNativeDialogs = dontUseNativeDialogs;
0177     emit dontUseNativeDialogsChanged(m_dontUseNativeDialogs);
0178   }
0179 }
0180 
0181 void MainWindowConfig::setQtQuickStyle(const QString& qtQuickStyle)
0182 {
0183   if (m_qtQuickStyle != qtQuickStyle) {
0184     m_qtQuickStyle = qtQuickStyle;
0185     emit styleChanged(m_qtQuickStyle);
0186   }
0187 }
0188 
0189 QStringList MainWindowConfig::getQtQuickStyleNames()
0190 {
0191   return {
0192     QLatin1String("Material/Light"),
0193     QLatin1String("Material/Dark"),
0194     QLatin1String("Material/System")
0195   };
0196 }
0197 
0198 QStringList MainWindowConfig::availableLanguages()
0199 {
0200   static QStringList languages;
0201   if (languages.isEmpty()) {
0202     // first time initialization
0203     languages = Utils::availableTranslations();
0204     if (!languages.contains(QLatin1String("en"))) {
0205       languages.prepend(QLatin1String("en"));
0206     }
0207   }
0208   return languages;
0209 }