| 
									
										
										
										
											2020-07-28 21:14:38 +08:00
										 |  |  | #include "settings.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <QApplication>
 | 
					
						
							|  |  |  | #include <QStandardPaths>
 | 
					
						
							|  |  |  | #include <QDebug>
 | 
					
						
							|  |  |  | #include <QDir>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Settings *Settings::m_settings_instance = nullptr; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Settings *Settings::instance() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (!m_settings_instance) { | 
					
						
							|  |  |  |         m_settings_instance = new Settings; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return m_settings_instance; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-29 00:57:43 +08:00
										 |  |  | bool Settings::stayOnTop() | 
					
						
							| 
									
										
										
										
											2020-07-28 21:14:38 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2020-07-29 00:57:43 +08:00
										 |  |  |     return m_qsettings->value("stay_on_top", true).toBool(); | 
					
						
							| 
									
										
										
										
											2020-07-28 21:14:38 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DoubleClickBehavior Settings::doubleClickBehavior() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QString result = m_qsettings->value("double_click_behavior", "close").toString().toLower(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return stringToDoubleClickBehavior(result); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-29 00:57:43 +08:00
										 |  |  | void Settings::setStayOnTop(bool on) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_qsettings->setValue("stay_on_top", on); | 
					
						
							|  |  |  |     m_qsettings->sync(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void Settings::setDoubleClickBehavior(DoubleClickBehavior dcb) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_qsettings->setValue("double_click_behavior", doubleClickBehaviorToString(dcb)); | 
					
						
							|  |  |  |     m_qsettings->sync(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-28 21:14:38 +08:00
										 |  |  | QString Settings::doubleClickBehaviorToString(DoubleClickBehavior dcb) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     static QMap<DoubleClickBehavior, QString> _map { | 
					
						
							|  |  |  |         {ActionCloseWindow, "close"}, | 
					
						
							|  |  |  |         {ActionMaximizeWindow, "maximize"}, | 
					
						
							|  |  |  |         {ActionDoNothing, "ignore"} | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return _map.value(dcb, "close"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DoubleClickBehavior Settings::stringToDoubleClickBehavior(QString str) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     static QMap<QString, DoubleClickBehavior> _map { | 
					
						
							|  |  |  |         {"close", ActionCloseWindow}, | 
					
						
							|  |  |  |         {"maximize", ActionMaximizeWindow}, | 
					
						
							|  |  |  |         {"ignore", ActionDoNothing} | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return _map.value(str, ActionCloseWindow); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Settings::Settings() | 
					
						
							|  |  |  |     : QObject(qApp) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QString configPath; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-10 23:41:59 +08:00
										 |  |  | #ifdef FLAG_PORTABLE_MODE_SUPPORT
 | 
					
						
							| 
									
										
										
										
											2020-07-28 21:14:38 +08:00
										 |  |  |     QString portableConfigDirPath = QDir(QCoreApplication::applicationDirPath()).absoluteFilePath("data"); | 
					
						
							|  |  |  |     QFileInfo portableConfigDirInfo(portableConfigDirPath); | 
					
						
							|  |  |  |     if (portableConfigDirInfo.exists() && portableConfigDirInfo.isDir() && portableConfigDirInfo.isWritable()) { | 
					
						
							|  |  |  |         // we can use it.
 | 
					
						
							|  |  |  |         configPath = portableConfigDirPath; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-08-10 23:41:59 +08:00
										 |  |  | #endif // FLAG_PORTABLE_MODE_SUPPORT
 | 
					
						
							| 
									
										
										
										
											2020-07-28 21:14:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // %LOCALAPPDATA% under Windows.
 | 
					
						
							|  |  |  |     if (configPath.isEmpty()) { | 
					
						
							|  |  |  |         configPath = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     m_qsettings = new QSettings(QDir(configPath).absoluteFilePath("config.ini"), QSettings::IniFormat, this); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 |