File indexing completed on 2024-05-19 04:55:55
0001 /** 0002 * \file guiconfig.h 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 #pragma once 0028 0029 #include "generalconfig.h" 0030 #include "frame.h" 0031 #include "kid3api.h" 0032 0033 /** 0034 * GUI related configuration. 0035 */ 0036 class KID3_CORE_EXPORT GuiConfig : public StoredConfig<GuiConfig> { 0037 Q_OBJECT 0038 /** sorted column in file list */ 0039 Q_PROPERTY(int fileListSortColumn READ fileListSortColumn 0040 WRITE setFileListSortColumn NOTIFY fileListSortColumnChanged) 0041 /** sort order in file list */ 0042 Q_PROPERTY(Qt::SortOrder fileListSortOrder READ fileListSortOrder 0043 WRITE setFileListSortOrder NOTIFY fileListSortOrderChanged) 0044 /** visible columns in file list */ 0045 Q_PROPERTY(QList<int> fileListVisibleColumns READ fileListVisibleColumns 0046 WRITE setFileListVisibleColumns NOTIFY fileListVisibleColumnsChanged) 0047 /** true to enable custom column widths in file list */ 0048 Q_PROPERTY(bool fileListCustomColumnWidthsEnabled 0049 READ fileListCustomColumnWidthsEnabled 0050 WRITE setFileListCustomColumnWidthsEnabled 0051 NOTIFY fileListCustomColumnWidthsEnabledChanged) 0052 /** column widths in file list */ 0053 Q_PROPERTY(QList<int> fileListColumnWidths READ fileListColumnWidths 0054 WRITE setFileListColumnWidths NOTIFY fileListColumnWidthsChanged) 0055 /** sorted column in directory list */ 0056 Q_PROPERTY(int dirListSortColumn READ dirListSortColumn 0057 WRITE setDirListSortColumn NOTIFY dirListSortColumnChanged) 0058 /** sort order in directory list */ 0059 Q_PROPERTY(Qt::SortOrder dirListSortOrder READ dirListSortOrder 0060 WRITE setDirListSortOrder NOTIFY dirListSortOrderChanged) 0061 /** visible columns in directory list */ 0062 Q_PROPERTY(QList<int> dirListVisibleColumns READ dirListVisibleColumns 0063 WRITE setDirListVisibleColumns NOTIFY dirListVisibleColumnsChanged) 0064 /** true to enable custom column widths in directory list */ 0065 Q_PROPERTY(bool dirListCustomColumnWidthsEnabled 0066 READ dirListCustomColumnWidthsEnabled 0067 WRITE setDirListCustomColumnWidthsEnabled 0068 NOTIFY dirListCustomColumnWidthsEnabledChanged) 0069 /** column widths in directory list */ 0070 Q_PROPERTY(QList<int> dirListColumnWidths READ dirListColumnWidths 0071 WRITE setDirListColumnWidths NOTIFY dirListColumnWidthsChanged) 0072 /** size of splitter in main window */ 0073 Q_PROPERTY(QList<int> splitterSizes READ splitterSizes 0074 WRITE setSplitterSizes NOTIFY splitterSizesChanged) 0075 /** size of file/dirlist splitter */ 0076 Q_PROPERTY(QList<int> vSplitterSizes READ vSplitterSizes 0077 WRITE setVSplitterSizes NOTIFY vSplitterSizesChanged) 0078 /** true to automatically hide unused tags */ 0079 Q_PROPERTY(bool autoHideTags READ autoHideTags WRITE setAutoHideTags 0080 NOTIFY autoHideTagsChanged) 0081 /** true to hide file controls */ 0082 Q_PROPERTY(bool hideFile READ hideFile WRITE setHideFile 0083 NOTIFY hideFileChanged) 0084 /** true to hide picture preview */ 0085 Q_PROPERTY(bool hidePicture READ hidePicture WRITE setHidePicture 0086 NOTIFY hidePictureChanged) 0087 /** true to play file on double click */ 0088 Q_PROPERTY(bool playOnDoubleClick READ playOnDoubleClick 0089 WRITE setPlayOnDoubleClick NOTIFY playOnDoubleClickChanged) 0090 /** true to select file on play */ 0091 Q_PROPERTY(bool selectFileOnPlayEnabled READ selectFileOnPlayEnabled 0092 WRITE setSelectFileOnPlayEnabled NOTIFY selectFileOnPlayEnabledChanged) 0093 /** true if play tool bar is visible */ 0094 Q_PROPERTY(bool playToolBarVisible READ playToolBarVisible 0095 WRITE setPlayToolBarVisible NOTIFY playToolBarVisibleChanged) 0096 /** preferred audio output description and ID */ 0097 Q_PROPERTY(QString preferredAudioOutput READ preferredAudioOutput 0098 WRITE setPreferredAudioOutput NOTIFY preferredAudioOutputChanged) 0099 /** play tool bar docked area */ 0100 Q_PROPERTY(int playToolBarArea READ playToolBarArea 0101 WRITE setPlayToolBarArea NOTIFY playToolBarAreaChanged) 0102 /** config window geometry */ 0103 Q_PROPERTY(QByteArray configWindowGeometry READ configWindowGeometry 0104 WRITE setConfigWindowGeometry NOTIFY configWindowGeometryChanged) 0105 0106 public: 0107 /** 0108 * Constructor. 0109 */ 0110 GuiConfig(); 0111 0112 /** 0113 * Destructor. 0114 */ 0115 ~GuiConfig() override = default; 0116 0117 /** 0118 * Persist configuration. 0119 * 0120 * @param config configuration 0121 */ 0122 void writeToConfig(ISettings* config) const override; 0123 0124 /** 0125 * Read persisted configuration. 0126 * 0127 * @param config configuration 0128 */ 0129 void readFromConfig(ISettings* config) override; 0130 0131 /** Get sorted column in file list. */ 0132 int fileListSortColumn() const { return m_fileListSortColumn; } 0133 0134 /** Set sorted column in file list. */ 0135 void setFileListSortColumn(int fileListSortColumn); 0136 0137 /** Get sort order in file list. */ 0138 Qt::SortOrder fileListSortOrder() const { return m_fileListSortOrder; } 0139 0140 /** Set sort order in file list. */ 0141 void setFileListSortOrder(Qt::SortOrder fileListSortOrder); 0142 0143 /** Get visible columns in file list. */ 0144 QList<int> fileListVisibleColumns() const { return m_fileListVisibleColumns; } 0145 0146 /** Set visible columns in file list. */ 0147 void setFileListVisibleColumns(const QList<int>& fileListVisibleColumns); 0148 0149 /** Check if custom column widths are enabled in file list. */ 0150 bool fileListCustomColumnWidthsEnabled() const { 0151 return m_fileListCustomColumnWidthsEnabled; 0152 } 0153 0154 /** Set if custom column widths are enabled in file list. */ 0155 void setFileListCustomColumnWidthsEnabled(bool enable); 0156 0157 /** Get column widths in file list. */ 0158 QList<int> fileListColumnWidths() const { return m_fileListColumnWidths; } 0159 0160 /** Set column widths in file list. */ 0161 void setFileListColumnWidths(const QList<int>& fileListColumnWidths); 0162 0163 /** Get sorted column in directory list. */ 0164 int dirListSortColumn() const { return m_dirListSortColumn; } 0165 0166 /** Set sorted column in directory list. */ 0167 void setDirListSortColumn(int dirListSortColumn); 0168 0169 /** Get sort order in directory list. */ 0170 Qt::SortOrder dirListSortOrder() const { return m_dirListSortOrder; } 0171 0172 /** Set sort order in directory list. */ 0173 void setDirListSortOrder(Qt::SortOrder dirListSortOrder); 0174 0175 /** Get visible columns in directory list. */ 0176 QList<int> dirListVisibleColumns() const { return m_dirListVisibleColumns; } 0177 0178 /** Set visible columns in directory list. */ 0179 void setDirListVisibleColumns(const QList<int>& dirListVisibleColumns); 0180 0181 /** Check if custom column widths are enabled in directory list. */ 0182 bool dirListCustomColumnWidthsEnabled() const { 0183 return m_dirListCustomColumnWidthsEnabled; 0184 } 0185 0186 /** Set if custom column widths are enabled in directory list. */ 0187 void setDirListCustomColumnWidthsEnabled(bool enable); 0188 0189 /** Get column widths in directory list. */ 0190 QList<int> dirListColumnWidths() const { return m_dirListColumnWidths; } 0191 0192 /** Set column widths in directory list. */ 0193 void setDirListColumnWidths(const QList<int>& dirListColumnWidths); 0194 0195 /** Get size of splitter in main window. */ 0196 QList<int> splitterSizes() const { return m_splitterSizes; } 0197 0198 /** Set size of splitter in main window. */ 0199 void setSplitterSizes(const QList<int>& splitterSizes); 0200 0201 /** Get size of file/dirlist splitter. */ 0202 QList<int> vSplitterSizes() const { return m_vSplitterSizes; } 0203 0204 /** Set size of file/dirlist splitter. */ 0205 void setVSplitterSizes(const QList<int>& vSplitterSizes); 0206 0207 /** Check if unused tags are automatically hidden. */ 0208 bool autoHideTags() const { return m_autoHideTags; } 0209 0210 /** Set if unused tags are automatically hidden. */ 0211 void setAutoHideTags(bool autoHideTags); 0212 0213 /** Check if file controls are hidden. */ 0214 bool hideFile() const { return m_hideFile; } 0215 0216 /** Set if file controls are hidden. */ 0217 void setHideFile(bool hideFile); 0218 0219 /** Check if tag controls are hidden. */ 0220 bool hideTag(Frame::TagNumber tagNr) const { return m_hideTag[tagNr]; } 0221 0222 /** Set if tag controls are hidden. */ 0223 void setHideTag(Frame::TagNumber tagNr, bool hide); 0224 0225 /** Check if the picture preview is hidden. */ 0226 bool hidePicture() const { return m_hidePicture; } 0227 0228 /** Set if the picture preview is hidden. */ 0229 void setHidePicture(bool hidePicture); 0230 0231 /** Check if play file on double click is enabled. */ 0232 bool playOnDoubleClick() const { return m_playOnDoubleClick; } 0233 0234 /** Set if play file on double click is enabled. */ 0235 void setPlayOnDoubleClick(bool playOnDoubleClick); 0236 0237 /** Check if select file on play is enabled. */ 0238 bool selectFileOnPlayEnabled() const { return m_selectFileOnPlayEnabled; } 0239 0240 /** Enable select file on play. */ 0241 void setSelectFileOnPlayEnabled(bool selectFileOnPlayEnabled); 0242 0243 /** Check if play tool bar is visible. */ 0244 bool playToolBarVisible() const { return m_playToolBarVisible; } 0245 0246 /** Set if play tool bar is visible. */ 0247 void setPlayToolBarVisible(bool playToolBarVisible); 0248 0249 /** Get name and ID of preferred audio output. */ 0250 QString preferredAudioOutput() const { return m_preferredAudioOutput; } 0251 0252 /** Set name and ID of preferred audio output. */ 0253 void setPreferredAudioOutput(const QString& preferredAudioOutput); 0254 0255 /** Get play tool bar docked area. */ 0256 int playToolBarArea() const { return m_playToolBarArea; } 0257 0258 /** Set play tool bar docked area. */ 0259 void setPlayToolBarArea(int playToolBarArea); 0260 0261 /** Get config window geometry. */ 0262 QByteArray configWindowGeometry() const { return m_configWindowGeometry; } 0263 0264 /** Set import window geometry. */ 0265 void setConfigWindowGeometry(const QByteArray& configWindowGeometry); 0266 0267 signals: 0268 /** Emitted when @a fileListSortColumn changed. */ 0269 void fileListSortColumnChanged(int fileListSortColumn); 0270 0271 /** Emitted when @a fileListSortOrder changed. */ 0272 void fileListSortOrderChanged(Qt::SortOrder fileListSortOrder); 0273 0274 /** Emitted when @a fileListVisibleColumns changed. */ 0275 void fileListVisibleColumnsChanged(const QList<int>& fileListVisibleColumns); 0276 0277 /** Emitted when @a fileListCustomColumnWidthsEnabled changed. */ 0278 void fileListCustomColumnWidthsEnabledChanged(bool fileListCustomColumnWidthsEnabled); 0279 0280 /** Emitted when @a fileListColumnWidths changed. */ 0281 void fileListColumnWidthsChanged(const QList<int>& fileListColumnWidths); 0282 0283 /** Emitted when @a dirListSortColumn changed. */ 0284 void dirListSortColumnChanged(int dirListSortColumn); 0285 0286 /** Emitted when @a dirListSortOrder changed. */ 0287 void dirListSortOrderChanged(Qt::SortOrder dirListSortOrder); 0288 0289 /** Emitted when @a dirListVisibleColumns changed. */ 0290 void dirListVisibleColumnsChanged(const QList<int>& dirListVisibleColumns); 0291 0292 /** Emitted when @a dirListCustomColumnWidthsEnabled changed. */ 0293 void dirListCustomColumnWidthsEnabledChanged(bool dirListCustomColumnWidthsEnabled); 0294 0295 /** Emitted when @a dirListColumnWidths changed. */ 0296 void dirListColumnWidthsChanged(const QList<int>& dirListColumnWidths); 0297 0298 /** Emitted when @a splitterSizes changed. */ 0299 void splitterSizesChanged(const QList<int>& splitterSizes); 0300 0301 /** Emitted when @a vSplitterSizes changed. */ 0302 void vSplitterSizesChanged(const QList<int>& vSplitterSizes); 0303 0304 /** Emitted when @a autoHideTags changed. */ 0305 void autoHideTagsChanged(bool autoHideTags); 0306 0307 /** Emitted when @a hideFile changed. */ 0308 void hideFileChanged(bool hideFile); 0309 0310 /** Emitted when @a hideTag changed. */ 0311 void hideTagChanged(); 0312 0313 /** Emitted when @a hidePicture changed. */ 0314 void hidePictureChanged(bool hidePicture); 0315 0316 /** Emitted when @a playOnDoubleClick changed. */ 0317 void playOnDoubleClickChanged(bool playOnDoubleClick); 0318 0319 /** Emitted when @a selectFileOnPlayEnabled changed. */ 0320 void selectFileOnPlayEnabledChanged(bool selectFileOnPlayEnabled); 0321 0322 /** Emitted when @a playToolBarVisible changed. */ 0323 void playToolBarVisibleChanged(bool playToolBarVisible); 0324 0325 /** Emitted when @a preferredAudioOutput changed. */ 0326 void preferredAudioOutputChanged(const QString& preferredAudioOutput); 0327 0328 /** Emitted when @a playToolBarArea changed. */ 0329 void playToolBarAreaChanged(int playToolBarArea); 0330 0331 /** Emitted when @a configWindowGeometry changed. */ 0332 void configWindowGeometryChanged(const QByteArray& configWindowGeometry); 0333 0334 private: 0335 friend GuiConfig& StoredConfig<GuiConfig>::instance(); 0336 0337 int m_fileListSortColumn; 0338 Qt::SortOrder m_fileListSortOrder; 0339 QList<int> m_fileListVisibleColumns; 0340 QList<int> m_fileListColumnWidths; 0341 int m_dirListSortColumn; 0342 Qt::SortOrder m_dirListSortOrder; 0343 QList<int> m_dirListVisibleColumns; 0344 QList<int> m_dirListColumnWidths; 0345 QList<int> m_splitterSizes; 0346 QList<int> m_vSplitterSizes; 0347 QByteArray m_configWindowGeometry; 0348 QString m_preferredAudioOutput; 0349 int m_playToolBarArea; 0350 bool m_autoHideTags; 0351 bool m_hideFile; 0352 bool m_hideTag[Frame::Tag_NumValues]; 0353 bool m_hidePicture; 0354 bool m_playOnDoubleClick; 0355 bool m_selectFileOnPlayEnabled; 0356 bool m_playToolBarVisible; 0357 bool m_fileListCustomColumnWidthsEnabled; 0358 bool m_dirListCustomColumnWidthsEnabled; 0359 0360 /** Index in configuration storage */ 0361 static int s_index; 0362 };