17 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
18 #include <QDesktopWidget>
21 #include <QDockWidget>
23 #include <QGuiApplication>
24 #include <QMainWindow>
49 this->
setValue(
"Position", dialog.pos());
50 this->
setValue(
"Size", dialog.size());
53 this->
setValue(
"PID", QCoreApplication::applicationPid());
62 dialog.resize(this->
value(
"Size").toSize());
66 if (this->
value(
"PID").value<qint64>() ==
67 QCoreApplication::applicationPid() &&
69 dialog.move(this->
value(
"Position").toPoint());
78 this->
setValue(
"Size", window.size());
79 this->
setValue(
"Layout", window.saveState());
88 window.resize(this->
value(
"Size").toSize());
92 window.restoreState(this->
value(
"Layout").toByteArray());
94 QList<QDockWidget*> dockWidgets = window.findChildren<QDockWidget*>();
95 foreach (QDockWidget* dock_widget, dockWidgets) {
96 if (dock_widget->isFloating() ==
true) {
107 if (
nullptr == dock_widget) {
110 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
111 QDesktopWidget desktop;
114 QPoint dockTopLeft = dock_widget->pos();
115 QRect dockRect(dockTopLeft, dock_widget->size());
117 QRect geometry = QRect(dockTopLeft, dock_widget->frameSize());
118 int titleBarHeight = geometry.height() - dockRect.height();
121 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
122 QScreen* screen = dock_widget->screen();
124 screen = QGuiApplication::primaryScreen();
126 QRect screenRect = screen ? screen->availableGeometry() : QRect();
128 QRect screenRect = desktop.availableGeometry(dock_widget);
131 QGuiApplication::primaryScreen()
132 ->availableGeometry();
135 if (!screenRect.contains(dockTopLeft)) {
137 if (dockTopLeft.y() < screenRect.y()) {
138 dock_widget->move(dockRect.x(), screenRect.y());
139 dockTopLeft = dock_widget->pos();
140 dockRect = QRect(dockTopLeft, dock_widget->frameSize());
143 if (dockTopLeft.y() > screenRect.y() + screenRect.height()) {
144 dock_widget->move(dockRect.x(),
145 screenRect.y() + screenRect.height() - 20);
146 dockTopLeft = dock_widget->pos();
147 dockRect = QRect(dockTopLeft, dock_widget->frameSize());
150 if (dockTopLeft.x() < screenRect.x()) {
151 dock_widget->move(screenRect.x(), dockRect.y());
152 dockTopLeft = dock_widget->pos();
153 dockRect = QRect(dockTopLeft, dock_widget->frameSize());
156 if (dockTopLeft.x() > screenRect.x() + screenRect.width()) {
158 screenRect.x() + screenRect.width() - dockRect.width(),
160 dockTopLeft = dock_widget->pos();
161 dockRect = QRect(dockTopLeft, dock_widget->frameSize());
164 dockTopLeft = dock_widget->pos();
165 dockRect = QRect(dockTopLeft, dock_widget->frameSize());
168 if (!desktopRect.contains(dockRect)) {
170 if (dockRect.x() + dockRect.width() >
171 screenRect.x() + screenRect.width()) {
172 if (screenRect.x() + screenRect.width() - dockRect.width() >
175 dockRect.setX(screenRect.x() + screenRect.width() -
177 dock_widget->move(dockRect.x(), dockRect.y());
178 dockTopLeft = dock_widget->pos();
179 dockRect = QRect(dockTopLeft, dock_widget->frameSize());
182 dockRect.setX(screenRect.x() + screenRect.width() -
184 dockRect.setWidth(screenRect.width());
185 dock_widget->resize(dockRect.width(), dockRect.height());
186 dock_widget->move(dockRect.x(), dockRect.y());
187 dockTopLeft = dock_widget->pos();
188 dockRect = QRect(dockTopLeft, dock_widget->frameSize());
192 dockTopLeft = dock_widget->pos();
193 dockRect = QRect(dockTopLeft, dock_widget->frameSize());
195 if (dockRect.y() + dockRect.height() >
196 screenRect.y() + screenRect.height()) {
199 if (screenRect.y() + screenRect.height() - dockRect.height() >
202 dockRect.setY(screenRect.y() + screenRect.height() -
204 dock_widget->move(dockRect.x(), dockRect.y());
205 dockTopLeft = dock_widget->pos();
206 dockRect = QRect(dockTopLeft, dock_widget->frameSize());
209 dock_widget->resize(dockRect.width(),
210 screenRect.height() - titleBarHeight);
211 dock_widget->move(dockRect.x(), screenRect.y());
212 dockTopLeft = dock_widget->pos();
213 dockRect = QRect(dockTopLeft, dock_widget->frameSize());
223 QString fname = argName.isEmpty() ? (this->
fileName() +
".bak") : argName;
224 QFile::remove(fname);
239 configPath = QCoreApplication::applicationDirPath() +
"/";
241 s_manager.instance->m_iniFile = QSharedPointer<QSettings>(
242 new QSettings(configPath, QSettings::IniFormat));
244 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
245 s_manager.instance->m_iniFile->setIniCodec(
"utf8");
247 QFile file(configPath);
248 if (
false == file.open(QIODevice::ReadOnly | QIODevice::Text)) {
249 s_manager.instance->m_iniFile->beginGroup(
"section");
250 s_manager.instance->m_iniFile->setValue(
"status",
"false");
251 s_manager.instance->m_iniFile->endGroup();
255 QSettings::setDefaultFormat(QSettings::NativeFormat);
256 s_manager.instance->m_iniFile = QSharedPointer<QSettings>(
new QSettings());
258 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
259 s_manager.instance->m_iniFile->setIniCodec(
"utf8");
266 const QVariant& value) {
267 s_manager.instance->m_iniFile->beginGroup(section);
270 s_manager.instance->m_iniFile->endGroup();
274 s_manager.instance->m_iniFile->remove(section);
278 s_manager.instance->m_iniFile->beginGroup(section);
279 s_manager.instance->m_iniFile->remove(key);
280 s_manager.instance->m_iniFile->endGroup();
285 const QVariant& defaultValue) {
286 s_manager.instance->m_iniFile->beginGroup(section);
287 QVariant
result =
s_manager.instance->m_iniFile->value(key, defaultValue);
288 s_manager.instance->m_iniFile->endGroup();
297 return s_manager.instance->m_iniFile->status();
301 return s_manager.instance->m_iniFile->isAtomicSyncRequired();
305 s_manager.instance->m_iniFile->setAtomicSyncRequired(enable);
309 s_manager.instance->m_iniFile->beginGroup(prefix);
313 s_manager.instance->m_iniFile->endGroup();
317 return s_manager.instance->m_iniFile->group();
321 return s_manager.instance->m_iniFile->beginReadArray(prefix);
325 s_manager.instance->m_iniFile->beginWriteArray(prefix,
size);
329 s_manager.instance->m_iniFile->endArray();
333 s_manager.instance->m_iniFile->setArrayIndex(i);
337 return s_manager.instance->m_iniFile->allKeys();
341 return s_manager.instance->m_iniFile->childKeys();
345 return s_manager.instance->m_iniFile->childGroups();
349 return s_manager.instance->m_iniFile->isWritable();
357 const QVariant& defaultValue)
const {
358 return s_manager.instance->m_iniFile->value(key, defaultValue);
362 s_manager.instance->m_iniFile->remove(key);
366 return s_manager.instance->m_iniFile->contains(key);
370 s_manager.instance->m_iniFile->setFallbacksEnabled(b);
374 return s_manager.instance->m_iniFile->fallbacksEnabled();
378 return s_manager.instance->m_iniFile->fileName();
382 return s_manager.instance->m_iniFile->format();
386 return s_manager.instance->m_iniFile->scope();
390 return s_manager.instance->m_iniFile->organizationName();
394 return s_manager.instance->m_iniFile->applicationName();
397 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
398 void ecvSettingManager::setIniCodec(
QTextCodec* codec) {
399 s_manager.instance->m_iniFile->setIniCodec(codec);
402 void ecvSettingManager::setIniCodec(
const char* codecName) {
403 s_manager.instance->m_iniFile->setIniCodec(codecName);
406 QTextCodec* ecvSettingManager::iniCoxdec()
const {
407 return s_manager.instance->m_iniFile->iniCodec();
virtual Format format() const
virtual void restoreState(const QString &key, QMainWindow &window)
static void setValue(const QString §ion, const QString &key, const QVariant &value)
virtual Status status() const
virtual QString organizationName() const
static void ReleaseInstance()
Releases unique instance.
virtual QString applicationName() const
virtual bool fallbacksEnabled() const
virtual int beginReadArray(const QString &prefix)
virtual bool isWritable() const
virtual QStringList allKeys() const
virtual void remove(const QString &key)
virtual void setAtomicSyncRequired(bool enable)
static QVariant getValue(const QString §ion, const QString &key, const QVariant &defaultValue=QVariant())
virtual QString fileName() const
virtual bool isAtomicSyncRequired() const
virtual void setArrayIndex(int i)
static void removeKey(const QString §ion, const QString &key)
virtual void setFallbacksEnabled(bool b)
virtual Scope scope() const
static ecvSettingManager * TheInstance(bool autoInit=true)
Returns the (unique) static instance.
virtual QStringList childGroups() const
virtual QString group() const
virtual QVariant value(const QString &key, const QVariant &defaultValue=QVariant()) const
virtual void beginGroup(const QString &prefix)
QString backup(const QString &filename=QString())
virtual void saveState(const QMainWindow &window, const QString &key)
virtual void sanityCheckDock(QDockWidget *docke_widget)
virtual void beginWriteArray(const QString &prefix, int size=-1)
virtual QStringList childKeys() const
virtual bool contains(const QString &key) const
virtual void alertSettingsModified()
static void Init(const QString &path)
static void removeNode(const QString §ion)
static ecvSingleton< ecvSettingManager > s_manager
Generic singleton encapsulation structure.