qt_demoe/designer/qdesigner/qdesigner_settings.cpp

251 lines
8.3 KiB
C++

/****************************************************************************
**
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the Qt Designer of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial Usage
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
** $QT_END_LICENSE$
**
****************************************************************************/
#include "qdesigner.h"
#include "qdesigner_settings.h"
#include "qdesigner_toolwindow.h"
#include "qdesigner_workbench.h"
#include <abstractformeditor.h>
#include <abstractsettings_p.h>
#include <qdesigner_utils_p.h>
#include <previewmanager_p.h>
#include <QtCore/QVariant>
#include <QtCore/QDir>
#include <QtGui/QDesktopWidget>
#include <QtGui/QStyle>
#include <QtGui/QListView>
#include <QtCore/qdebug.h>
enum { debugSettings = 0 };
QT_BEGIN_NAMESPACE
static const char *newFormShowKey = "newFormDialog/ShowOnStartup";
// Change the version whenever the arrangement changes significantly.
static const char *mainWindowStateKey = "MainWindowState45";
static const char *toolBarsStateKey = "ToolBarsState45";
static const char *backupOrgListKey = "backup/fileListOrg";
static const char *backupBakListKey = "backup/fileListBak";
static const char *recentFilesListKey = "recentFilesList";
QDesignerSettings::QDesignerSettings(QDesignerFormEditorInterface *core) :
qdesigner_internal::QDesignerSharedSettings(core)
{
}
void QDesignerSettings::setValue(const QString &key, const QVariant &value)
{
settings()->setValue(key, value);
}
QVariant QDesignerSettings::value(const QString &key, const QVariant &defaultValue) const
{
return settings()->value(key, defaultValue);
}
static inline QChar modeChar(UIMode mode)
{
return QLatin1Char(static_cast<char>(mode) + '0');
}
void QDesignerSettings::saveGeometryFor(const QWidget *w)
{
Q_ASSERT(w && !w->objectName().isEmpty());
QDesignerSettingsInterface *s = settings();
const bool visible = w->isVisible();
if (debugSettings)
qDebug() << Q_FUNC_INFO << w << "visible=" << visible;
s->beginGroup(w->objectName());
s->setValue(QLatin1String("visible"), visible);
s->setValue(QLatin1String("geometry"), w->saveGeometry());
s->endGroup();
}
void QDesignerSettings::restoreGeometry(QWidget *w, QRect fallBack) const
{
Q_ASSERT(w && !w->objectName().isEmpty());
const QString key = w->objectName();
const QByteArray ba(settings()->value(key + QLatin1String("/geometry")).toByteArray());
const bool visible = settings()->value(key + QLatin1String("/visible"), true).toBool();
if (debugSettings)
qDebug() << Q_FUNC_INFO << w << fallBack << "visible=" << visible;
if (ba.isEmpty()) {
/// Apply default geometry, check for null and maximal size
if (fallBack.isNull())
fallBack = QRect(QPoint(0, 0), w->sizeHint());
if (fallBack.size() == QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)) {
w->setWindowState(w->windowState() | Qt::WindowMaximized);
} else {
w->move(fallBack.topLeft());
w->resize(fallBack.size());
}
} else {
w->restoreGeometry(ba);
}
if (visible)
w->show();
}
QStringList QDesignerSettings::recentFilesList() const
{
return settings()->value(QLatin1String(recentFilesListKey)).toStringList();
}
void QDesignerSettings::setRecentFilesList(const QStringList &sl)
{
settings()->setValue(QLatin1String(recentFilesListKey), sl);
}
void QDesignerSettings::setShowNewFormOnStartup(bool showIt)
{
settings()->setValue(QLatin1String(newFormShowKey), showIt);
}
bool QDesignerSettings::showNewFormOnStartup() const
{
return settings()->value(QLatin1String(newFormShowKey), true).toBool();
}
QByteArray QDesignerSettings::mainWindowState(UIMode mode) const
{
return settings()->value(QLatin1String(mainWindowStateKey) + modeChar(mode)).toByteArray();
}
void QDesignerSettings::setMainWindowState(UIMode mode, const QByteArray &mainWindowState)
{
settings()->setValue(QLatin1String(mainWindowStateKey) + modeChar(mode), mainWindowState);
}
QByteArray QDesignerSettings::toolBarsState(UIMode mode) const
{
QString key = QLatin1String(toolBarsStateKey);
key += modeChar(mode);
return settings()->value(key).toByteArray();
}
void QDesignerSettings::setToolBarsState(UIMode mode, const QByteArray &toolBarsState)
{
QString key = QLatin1String(toolBarsStateKey);
key += modeChar(mode);
settings()->setValue(key, toolBarsState);
}
void QDesignerSettings::clearBackup()
{
QDesignerSettingsInterface *s = settings();
s->remove(QLatin1String(backupOrgListKey));
s->remove(QLatin1String(backupBakListKey));
}
void QDesignerSettings::setBackup(const QMap<QString, QString> &map)
{
const QStringList org = map.keys();
const QStringList bak = map.values();
QDesignerSettingsInterface *s = settings();
s->setValue(QLatin1String(backupOrgListKey), org);
s->setValue(QLatin1String(backupBakListKey), bak);
}
QMap<QString, QString> QDesignerSettings::backup() const
{
const QStringList org = settings()->value(QLatin1String(backupOrgListKey), QStringList()).toStringList();
const QStringList bak = settings()->value(QLatin1String(backupBakListKey), QStringList()).toStringList();
QMap<QString, QString> map;
const int orgCount = org.count();
for (int i = 0; i < orgCount; ++i)
map.insert(org.at(i), bak.at(i));
return map;
}
void QDesignerSettings::setUiMode(UIMode mode)
{
QDesignerSettingsInterface *s = settings();
s->beginGroup(QLatin1String("UI"));
s->setValue(QLatin1String("currentMode"), mode);
s->endGroup();
}
UIMode QDesignerSettings::uiMode() const
{
#ifdef Q_WS_MAC
const UIMode defaultMode = TopLevelMode;
#else
const UIMode defaultMode = DockedMode;
#endif
UIMode uiMode = static_cast<UIMode>(value(QLatin1String("UI/currentMode"), defaultMode).toInt());
return uiMode;
}
void QDesignerSettings::setToolWindowFont(const ToolWindowFontSettings &fontSettings)
{
QDesignerSettingsInterface *s = settings();
s->beginGroup(QLatin1String("UI"));
s->setValue(QLatin1String("font"), fontSettings.m_font);
s->setValue(QLatin1String("useFont"), fontSettings.m_useFont);
s->setValue(QLatin1String("writingSystem"), fontSettings.m_writingSystem);
s->endGroup();
}
ToolWindowFontSettings QDesignerSettings::toolWindowFont() const
{
ToolWindowFontSettings fontSettings;
fontSettings.m_writingSystem =
static_cast<QFontDatabase::WritingSystem>(value(QLatin1String("UI/writingSystem"),
QFontDatabase::Any).toInt());
fontSettings.m_font = qVariantValue<QFont>(value(QLatin1String("UI/font")));
fontSettings.m_useFont =
settings()->value(QLatin1String("UI/useFont"), QVariant(false)).toBool();
return fontSettings;
}
QT_END_NAMESPACE