File indexing completed on 2024-05-19 04:55:55
0001 /** 0002 * \file guiconfig.cpp 0003 * GUI related configuration. 0004 * 0005 * \b Project: Kid3 0006 * \author Urs Fleisch 0007 * \date 29 Jun 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 "guiconfig.h" 0028 #include <QStringList> 0029 #include "isettings.h" 0030 0031 int GuiConfig::s_index = -1; 0032 0033 /** 0034 * Constructor. 0035 */ 0036 GuiConfig::GuiConfig() 0037 : StoredConfig(QLatin1String("GUI")), 0038 m_fileListSortColumn(0), 0039 m_fileListSortOrder(Qt::AscendingOrder), 0040 m_dirListSortColumn(0), 0041 m_dirListSortOrder(Qt::AscendingOrder), 0042 m_playToolBarArea(Qt::BottomToolBarArea), 0043 m_autoHideTags(true), 0044 m_hideFile(false), 0045 m_hidePicture(false), 0046 m_playOnDoubleClick(false), 0047 m_selectFileOnPlayEnabled(false), 0048 m_playToolBarVisible(false), 0049 m_fileListCustomColumnWidthsEnabled(true), 0050 m_dirListCustomColumnWidthsEnabled(true) 0051 { 0052 FOR_ALL_TAGS(tagNr) { 0053 m_hideTag[tagNr] = false; 0054 } 0055 } 0056 0057 /** 0058 * Persist configuration. 0059 * 0060 * @param config configuration 0061 */ 0062 void GuiConfig::writeToConfig(ISettings* config) const 0063 { 0064 config->beginGroup(m_group); 0065 config->setValue(QLatin1String("AutoHideTags"), QVariant(m_autoHideTags)); 0066 config->setValue(QLatin1String("HideFile"), QVariant(m_hideFile)); 0067 FOR_ALL_TAGS(tagNr) { 0068 config->setValue(QLatin1String("HideV") + Frame::tagNumberToString(tagNr), 0069 QVariant(m_hideTag[tagNr])); 0070 } 0071 config->setValue(QLatin1String("HidePicture"), QVariant(m_hidePicture)); 0072 config->setValue(QLatin1String("PlayOnDoubleClick"), 0073 QVariant(m_playOnDoubleClick)); 0074 config->setValue(QLatin1String("SelectFileOnPlayEnabled"), 0075 QVariant(m_selectFileOnPlayEnabled)); 0076 config->setValue(QLatin1String("PlayToolBarVisible"), 0077 QVariant(m_playToolBarVisible)); 0078 config->setValue(QLatin1String("PreferredAudioOutput"), 0079 QVariant(m_preferredAudioOutput)); 0080 config->setValue(QLatin1String("FileListVisibleColumns"), 0081 QVariant(intListToStringList(m_fileListVisibleColumns))); 0082 config->setValue(QLatin1String("FileListCustomColumnWidthsEnabled"), 0083 QVariant(m_fileListCustomColumnWidthsEnabled)); 0084 config->setValue(QLatin1String("DirListVisibleColumns"), 0085 QVariant(intListToStringList(m_dirListVisibleColumns))); 0086 config->setValue(QLatin1String("DirListCustomColumnWidthsEnabled"), 0087 QVariant(m_dirListCustomColumnWidthsEnabled)); 0088 0089 config->endGroup(); 0090 config->beginGroup(m_group, true); 0091 config->setValue(QLatin1String("FileListSortColumn"), 0092 QVariant(m_fileListSortColumn)); 0093 config->setValue(QLatin1String("FileListSortOrder"), 0094 QVariant(m_fileListSortOrder)); 0095 config->setValue(QLatin1String("FileListColumnWidths"), 0096 QVariant(intListToStringList(m_fileListColumnWidths))); 0097 config->setValue(QLatin1String("DirListSortColumn"), 0098 QVariant(m_dirListSortColumn)); 0099 config->setValue(QLatin1String("DirListSortOrder"), 0100 QVariant(m_dirListSortOrder)); 0101 config->setValue(QLatin1String("DirListColumnWidths"), 0102 QVariant(intListToStringList(m_dirListColumnWidths))); 0103 auto it = m_splitterSizes.constBegin(); 0104 int i = 0; 0105 for (; it != m_splitterSizes.constEnd(); ++it, ++i) { 0106 config->setValue(QLatin1String("SplitterSize") + QString::number(i), 0107 QVariant(*it)); 0108 } 0109 for (it = m_vSplitterSizes.constBegin(), i = 0; 0110 it != m_vSplitterSizes.constEnd(); 0111 ++it, ++i) { 0112 config->setValue(QLatin1String("VSplitterSize") + QString::number(i), 0113 QVariant(*it)); 0114 } 0115 config->setValue(QLatin1String("PlayToolBarArea"), 0116 QVariant(m_playToolBarArea)); 0117 config->setValue(QLatin1String("ConfigWindowGeometry"), 0118 QVariant(m_configWindowGeometry)); 0119 config->endGroup(); 0120 } 0121 0122 /** 0123 * Read persisted configuration. 0124 * 0125 * @param config configuration 0126 */ 0127 void GuiConfig::readFromConfig(ISettings* config) 0128 { 0129 config->beginGroup(m_group); 0130 m_autoHideTags = config->value(QLatin1String("AutoHideTags"), 0131 m_autoHideTags).toBool(); 0132 m_hideFile = config->value(QLatin1String("HideFile"), 0133 m_hideFile).toBool(); 0134 FOR_ALL_TAGS(tagNr) { 0135 m_hideTag[tagNr] = config->value( 0136 QLatin1String("HideV") + Frame::tagNumberToString(tagNr), 0137 m_hideTag[tagNr]).toBool(); 0138 } 0139 m_hidePicture = config->value(QLatin1String("HidePicture"), 0140 m_hidePicture).toBool(); 0141 m_playOnDoubleClick = config->value(QLatin1String("PlayOnDoubleClick"), 0142 m_playOnDoubleClick).toBool(); 0143 m_selectFileOnPlayEnabled = 0144 config->value(QLatin1String("SelectFileOnPlayEnabled"), 0145 m_selectFileOnPlayEnabled).toBool(); 0146 m_playToolBarVisible = config->value(QLatin1String("PlayToolBarVisible"), 0147 m_playToolBarVisible).toBool(); 0148 m_preferredAudioOutput = config->value(QLatin1String("PreferredAudioOutput"), 0149 m_preferredAudioOutput).toString(); 0150 m_fileListVisibleColumns = stringListToIntList( 0151 config->value(QLatin1String("FileListVisibleColumns"), QStringList()) 0152 .toStringList()); 0153 if (m_fileListVisibleColumns.isEmpty()) { 0154 // Uninitialized, otherwise there is at least the value 0 in the list. 0155 m_fileListVisibleColumns << 0 << 1 << 3; 0156 } 0157 m_fileListCustomColumnWidthsEnabled = 0158 config->value(QLatin1String("FileListCustomColumnWidthsEnabled"), 0159 m_fileListCustomColumnWidthsEnabled).toBool(); 0160 m_dirListVisibleColumns = stringListToIntList( 0161 config->value(QLatin1String("DirListVisibleColumns"), QStringList()) 0162 .toStringList()); 0163 if (m_dirListVisibleColumns.isEmpty()) { 0164 // Uninitialized, otherwise there is at least the value 0 in the list. 0165 m_dirListVisibleColumns << 0 << 3; 0166 } 0167 m_dirListCustomColumnWidthsEnabled = 0168 config->value(QLatin1String("DirListCustomColumnWidthsEnabled"), 0169 m_dirListCustomColumnWidthsEnabled).toBool(); 0170 0171 config->endGroup(); 0172 config->beginGroup(m_group, true); 0173 m_fileListSortColumn = config->value(QLatin1String("FileListSortColumn"), 0174 m_fileListSortColumn).toInt(); 0175 m_fileListSortOrder = static_cast<Qt::SortOrder>( 0176 config->value(QLatin1String("FileListSortOrder"), 0177 static_cast<int>(m_fileListSortOrder)).toInt()); 0178 m_fileListColumnWidths = stringListToIntList( 0179 config->value(QLatin1String("FileListColumnWidths"), QStringList()) 0180 .toStringList()); 0181 m_dirListSortColumn = config->value(QLatin1String("DirListSortColumn"), 0182 m_dirListSortColumn).toInt(); 0183 m_dirListSortOrder = static_cast<Qt::SortOrder>( 0184 config->value(QLatin1String("DirListSortOrder"), 0185 static_cast<int>(m_dirListSortOrder)).toInt()); 0186 m_dirListColumnWidths = stringListToIntList( 0187 config->value(QLatin1String("DirListColumnWidths"), QStringList()) 0188 .toStringList()); 0189 m_splitterSizes.clear(); 0190 for (int i = 0; i < 5; ++i) { 0191 if (int val = config->value( 0192 QLatin1String("SplitterSize") + QString::number(i),-1).toInt(); 0193 val != -1) { 0194 m_splitterSizes.push_back(val); 0195 } else { 0196 break; 0197 } 0198 } 0199 m_vSplitterSizes.clear(); 0200 for (int j = 0; j < 5; ++j) { 0201 if (int val = config->value( 0202 QLatin1String("VSplitterSize") + QString::number(j), -1).toInt(); 0203 val != -1) { 0204 m_vSplitterSizes.push_back(val); 0205 } else { 0206 break; 0207 } 0208 } 0209 m_playToolBarArea = config->value(QLatin1String("PlayToolBarArea"), 0210 m_playToolBarArea).toInt(); 0211 m_configWindowGeometry = config->value(QLatin1String("ConfigWindowGeometry"), 0212 m_configWindowGeometry).toByteArray(); 0213 config->endGroup(); 0214 } 0215 0216 void GuiConfig::setFileListSortColumn(int fileListSortColumn) 0217 { 0218 if (m_fileListSortColumn != fileListSortColumn) { 0219 m_fileListSortColumn = fileListSortColumn; 0220 emit fileListSortColumnChanged(m_fileListSortColumn); 0221 } 0222 } 0223 0224 void GuiConfig::setFileListSortOrder(Qt::SortOrder fileListSortOrder) 0225 { 0226 if (m_fileListSortOrder != fileListSortOrder) { 0227 m_fileListSortOrder = fileListSortOrder; 0228 emit fileListSortOrderChanged(m_fileListSortOrder); 0229 } 0230 } 0231 0232 void GuiConfig::setFileListVisibleColumns(const QList<int>& fileListVisibleColumns) 0233 { 0234 if (m_fileListVisibleColumns != fileListVisibleColumns) { 0235 m_fileListVisibleColumns = fileListVisibleColumns; 0236 emit fileListVisibleColumnsChanged(m_fileListVisibleColumns); 0237 } 0238 } 0239 0240 void GuiConfig::setFileListCustomColumnWidthsEnabled(bool enable) 0241 { 0242 if (m_fileListCustomColumnWidthsEnabled != enable) { 0243 m_fileListCustomColumnWidthsEnabled = enable; 0244 emit fileListCustomColumnWidthsEnabledChanged( 0245 m_fileListCustomColumnWidthsEnabled); 0246 } 0247 } 0248 0249 void GuiConfig::setFileListColumnWidths(const QList<int>& fileListColumnWidths) 0250 { 0251 if (m_fileListColumnWidths != fileListColumnWidths) { 0252 m_fileListColumnWidths = fileListColumnWidths; 0253 emit fileListColumnWidthsChanged(m_fileListColumnWidths); 0254 } 0255 } 0256 0257 void GuiConfig::setDirListSortColumn(int dirListSortColumn) 0258 { 0259 if (m_dirListSortColumn != dirListSortColumn) { 0260 m_dirListSortColumn = dirListSortColumn; 0261 emit dirListSortColumnChanged(m_dirListSortColumn); 0262 } 0263 } 0264 0265 void GuiConfig::setDirListSortOrder(Qt::SortOrder dirListSortOrder) 0266 { 0267 if (m_dirListSortOrder != dirListSortOrder) { 0268 m_dirListSortOrder = dirListSortOrder; 0269 emit dirListSortOrderChanged(m_dirListSortOrder); 0270 } 0271 } 0272 0273 void GuiConfig::setDirListVisibleColumns(const QList<int>& dirListVisibleColumns) 0274 { 0275 if (m_dirListVisibleColumns != dirListVisibleColumns) { 0276 m_dirListVisibleColumns = dirListVisibleColumns; 0277 emit dirListVisibleColumnsChanged(m_dirListVisibleColumns); 0278 } 0279 } 0280 0281 void GuiConfig::setDirListCustomColumnWidthsEnabled(bool enable) 0282 { 0283 if (m_dirListCustomColumnWidthsEnabled != enable) { 0284 m_dirListCustomColumnWidthsEnabled = enable; 0285 emit dirListCustomColumnWidthsEnabledChanged( 0286 m_dirListCustomColumnWidthsEnabled); 0287 } 0288 } 0289 0290 void GuiConfig::setDirListColumnWidths(const QList<int>& dirListColumnWidths) 0291 { 0292 if (m_dirListColumnWidths != dirListColumnWidths) { 0293 m_dirListColumnWidths = dirListColumnWidths; 0294 emit dirListColumnWidthsChanged(m_dirListColumnWidths); 0295 } 0296 } 0297 0298 void GuiConfig::setSplitterSizes(const QList<int>& splitterSizes) 0299 { 0300 if (m_splitterSizes != splitterSizes) { 0301 m_splitterSizes = splitterSizes; 0302 emit splitterSizesChanged(m_splitterSizes); 0303 } 0304 } 0305 0306 void GuiConfig::setVSplitterSizes(const QList<int>& vSplitterSizes) 0307 { 0308 if (m_vSplitterSizes != vSplitterSizes) { 0309 m_vSplitterSizes = vSplitterSizes; 0310 emit vSplitterSizesChanged(m_vSplitterSizes); 0311 } 0312 } 0313 0314 void GuiConfig::setAutoHideTags(bool autoHideTags) 0315 { 0316 if (m_autoHideTags != autoHideTags) { 0317 m_autoHideTags = autoHideTags; 0318 emit autoHideTagsChanged(m_autoHideTags); 0319 } 0320 } 0321 0322 void GuiConfig::setHideFile(bool hideFile) 0323 { 0324 if (m_hideFile != hideFile) { 0325 m_hideFile = hideFile; 0326 emit hideFileChanged(m_hideFile); 0327 } 0328 } 0329 0330 void GuiConfig::setHideTag(Frame::TagNumber tagNr, bool hide) 0331 { 0332 if (m_hideTag[tagNr] != hide) { 0333 m_hideTag[tagNr] = hide; 0334 emit hideTagChanged(); 0335 } 0336 } 0337 0338 void GuiConfig::setHidePicture(bool hidePicture) 0339 { 0340 if (m_hidePicture != hidePicture) { 0341 m_hidePicture = hidePicture; 0342 emit hidePictureChanged(m_hidePicture); 0343 } 0344 } 0345 0346 void GuiConfig::setPlayOnDoubleClick(bool playOnDoubleClick) 0347 { 0348 if (m_playOnDoubleClick != playOnDoubleClick) { 0349 m_playOnDoubleClick = playOnDoubleClick; 0350 emit playOnDoubleClickChanged(m_playOnDoubleClick); 0351 } 0352 } 0353 0354 void GuiConfig::setSelectFileOnPlayEnabled(bool selectFileOnPlayEnabled) 0355 { 0356 if (m_selectFileOnPlayEnabled != selectFileOnPlayEnabled) { 0357 m_selectFileOnPlayEnabled = selectFileOnPlayEnabled; 0358 emit selectFileOnPlayEnabledChanged(m_selectFileOnPlayEnabled); 0359 } 0360 } 0361 0362 void GuiConfig::setPlayToolBarVisible(bool playToolBarVisible) 0363 { 0364 if (m_playToolBarVisible != playToolBarVisible) { 0365 m_playToolBarVisible = playToolBarVisible; 0366 emit playToolBarVisibleChanged(m_playToolBarVisible); 0367 } 0368 } 0369 0370 void GuiConfig::setPreferredAudioOutput(const QString& preferredAudioOutput) 0371 { 0372 if (m_preferredAudioOutput != preferredAudioOutput) { 0373 m_preferredAudioOutput = preferredAudioOutput; 0374 emit preferredAudioOutputChanged(m_preferredAudioOutput); 0375 } 0376 } 0377 0378 void GuiConfig::setPlayToolBarArea(int playToolBarArea) 0379 { 0380 if (m_playToolBarArea != playToolBarArea) { 0381 m_playToolBarArea = playToolBarArea; 0382 emit playToolBarAreaChanged(m_playToolBarArea); 0383 } 0384 } 0385 0386 void GuiConfig::setConfigWindowGeometry(const QByteArray& configWindowGeometry) 0387 { 0388 if (m_configWindowGeometry != configWindowGeometry) { 0389 m_configWindowGeometry = configWindowGeometry; 0390 emit configWindowGeometryChanged(m_configWindowGeometry); 0391 } 0392 }