/*************************************************************************** * Copyright (C) 2010 by Petr Vanek * * petr@scribus.info * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * ***************************************************************************/ #include #include "properties.h" #include "config.h" Properties * Properties::m_instance = 0; Properties * Properties::Instance(const QString& filename) { if (!m_instance) m_instance = new Properties(filename); return m_instance; } Properties::Properties(const QString& filename) : filename(filename) { if (filename.isEmpty()) m_settings = new QSettings(); else m_settings = new QSettings(filename); qDebug("Properties constructor called"); } Properties::~Properties() { qDebug("Properties destructor called"); saveSettings(); m_settings->deleteLater(); delete m_instance; m_instance = 0; } QFont Properties::defaultFont() { QFont default_font = QApplication::font(); default_font.setFamily(DEFAULT_FONT); default_font.setPointSize(12); default_font.setStyleHint(QFont::TypeWriter); return default_font; } void Properties::loadSettings() { guiStyle = m_settings->value("guiStyle", QString()).toString(); if (!guiStyle.isNull()) QApplication::setStyle(guiStyle); colorScheme = m_settings->value("colorScheme", "Linux").toString(); highlightCurrentTerminal = m_settings->value("highlightCurrentTerminal", true).toBool(); font = qvariant_cast(m_settings->value("font", defaultFont())); m_settings->beginGroup("Shortcuts"); QStringList keys = m_settings->childKeys(); foreach( QString key, keys ) { QKeySequence sequence = QKeySequence( m_settings->value( key ).toString() ); if( Properties::Instance()->actions.contains( key ) ) Properties::Instance()->actions[ key ]->setShortcut( sequence ); } m_settings->endGroup(); mainWindowSize = m_settings->value("MainWindow/size").toSize(); mainWindowPosition = m_settings->value("MainWindow/pos").toPoint(); mainWindowState = m_settings->value("MainWindow/state").toByteArray(); historyLimited = m_settings->value("HistoryLimited", true).toBool(); historyLimitedTo = m_settings->value("HistoryLimitedTo", 1000).toUInt(); emulation = m_settings->value("emulation", "default").toString(); // sessions int size = m_settings->beginReadArray("Sessions"); for (int i = 0; i < size; ++i) { m_settings->setArrayIndex(i); QString name(m_settings->value("name").toString()); if (name.isEmpty()) continue; sessions[name] = m_settings->value("state").toByteArray(); } m_settings->endArray(); appTransparency = m_settings->value("MainWindow/ApplicationTransparency", 0).toInt(); termTransparency = m_settings->value("TerminalTransparency", 0).toInt(); /* default to Right. see qtermwidget.h */ scrollBarPos = m_settings->value("ScrollbarPosition", 2).toInt(); /* default to North. I'd prefer South but North is standard (they say) */ tabsPos = m_settings->value("TabsPosition", 0).toInt(); hideTabBarWithOneTab = m_settings->value("HideTabBarWithOneTab", false).toBool(); m_motionAfterPaste = m_settings->value("MotionAfterPaste", 0).toInt(); /* toggles */ borderless = m_settings->value("Borderless", false).toBool(); tabBarless = m_settings->value("TabBarless", false).toBool(); menuVisible = m_settings->value("MenuVisible", true).toBool(); askOnExit = m_settings->value("AskOnExit", true).toBool(); saveSizeOnExit = m_settings->value("SaveSizeOnExit", true).toBool(); savePosOnExit = m_settings->value("SavePosOnExit", true).toBool(); useCWD = m_settings->value("UseCWD", false).toBool(); // bookmarks useBookmarks = m_settings->value("UseBookmarks", false).toBool(); bookmarksVisible = m_settings->value("BookmarksVisible", true).toBool(); bookmarksFile = m_settings->value("BookmarksFile", QFileInfo(m_settings->fileName()).canonicalPath()+"/qterminal_bookmarks.xml").toString(); terminalsPreset = m_settings->value("TerminalsPreset", 0).toInt(); m_settings->beginGroup("DropMode"); dropShortCut = QKeySequence(m_settings->value("ShortCut", "F12").toString()); dropKeepOpen = m_settings->value("KeepOpen", false).toBool(); dropShowOnStart = m_settings->value("ShowOnStart", true).toBool(); dropWidht = m_settings->value("Width", 70).toInt(); dropHeight = m_settings->value("Height", 45).toInt(); m_settings->endGroup(); } void Properties::saveSettings() { m_settings->setValue("guiStyle", guiStyle); m_settings->setValue("colorScheme", colorScheme); m_settings->setValue("highlightCurrentTerminal", highlightCurrentTerminal); m_settings->setValue("font", font); m_settings->beginGroup("Shortcuts"); QMapIterator< QString, QAction * > it(actions); while( it.hasNext() ) { it.next(); QKeySequence shortcut = it.value()->shortcut(); m_settings->setValue( it.key(), shortcut.toString() ); } m_settings->endGroup(); m_settings->setValue("MainWindow/size", mainWindowSize); m_settings->setValue("MainWindow/pos", mainWindowPosition); m_settings->setValue("MainWindow/state", mainWindowState); m_settings->setValue("HistoryLimited", historyLimited); m_settings->setValue("HistoryLimitedTo", historyLimitedTo); m_settings->setValue("emulation", emulation); // sessions m_settings->beginWriteArray("Sessions"); int i = 0; Sessions::iterator sit = sessions.begin(); while (sit != sessions.end()) { m_settings->setArrayIndex(i); m_settings->setValue("name", sit.key()); m_settings->setValue("state", sit.value()); ++sit; ++i; } m_settings->endArray(); m_settings->setValue("MainWindow/ApplicationTransparency", appTransparency); m_settings->setValue("TerminalTransparency", termTransparency); m_settings->setValue("ScrollbarPosition", scrollBarPos); m_settings->setValue("TabsPosition", tabsPos); m_settings->setValue("HideTabBarWithOneTab", hideTabBarWithOneTab); m_settings->setValue("MotionAfterPaste", m_motionAfterPaste); m_settings->setValue("Borderless", borderless); m_settings->setValue("TabBarless", tabBarless); m_settings->setValue("MenuVisible", menuVisible); m_settings->setValue("AskOnExit", askOnExit); m_settings->setValue("SavePosOnExit", savePosOnExit); m_settings->setValue("SaveSizeOnExit", saveSizeOnExit); m_settings->setValue("UseCWD", useCWD); // bookmarks m_settings->setValue("UseBookmarks", useBookmarks); m_settings->setValue("BookmarksVisible", bookmarksVisible); m_settings->setValue("BookmarksFile", bookmarksFile); m_settings->setValue("TerminalsPreset", terminalsPreset); m_settings->beginGroup("DropMode"); m_settings->setValue("ShortCut", dropShortCut.toString()); m_settings->setValue("KeepOpen", dropKeepOpen); m_settings->setValue("ShowOnStart", dropShowOnStart); m_settings->setValue("Width", dropWidht); m_settings->setValue("Height", dropHeight); m_settings->endGroup(); } void Properties::migrate_settings() { // Deal with rearrangements of settings. // If this method becomes unbearably huge we should look at the config-update // system used by kde and razor. QSettings settings; QString lastVersion = settings.value("version", "0.0.0").toString(); QString currentVersion = STR_VERSION; if (currentVersion < lastVersion) { qDebug() << "Warning: Configuration file was written by a newer version " << "of QTerminal. Some settings might be incompatible"; } if (lastVersion < "0.4.0") { // ===== Paste Selection -> Paste Clipboard ===== settings.beginGroup("Shortcuts"); if(!settings.contains(PASTE_CLIPBOARD)) { QString value = settings.value("Paste Selection", PASTE_CLIPBOARD_SHORTCUT).toString(); settings.setValue(PASTE_CLIPBOARD, value); } settings.remove("Paste Selection"); settings.endGroup(); } if (lastVersion <= "0.6.0") { // ===== AlwaysShowTabs -> HideTabBarWithOneTab ===== if(!settings.contains("HideTabBarWithOneTab")) { QString hideValue = settings.value("AlwaysShowTabs", false).toString(); settings.setValue("HideTabBarWithOneTab", hideValue); } settings.remove("AlwaysShowTabs"); // ===== appOpacity -> ApplicationTransparency ===== // // Note: In 0.6.0 the opacity values had been erroneously // restricted to [0,99] instead of [1,100]. We fix this here by // setting the opacity to 100 if it was 99 and to 1 if it was 0. // if(!settings.contains("MainWindow/ApplicationTransparency")) { int appOpacityValue = settings.value("MainWindow/appOpacity", 100).toInt(); appOpacityValue = appOpacityValue == 99 ? 100 : appOpacityValue; appOpacityValue = appOpacityValue == 0 ? 1 : appOpacityValue; settings.setValue("MainWindow/ApplicationTransparency", 100 - appOpacityValue); } settings.remove("MainWindow/appOpacity"); // ===== termOpacity -> TerminalTransparency ===== if(!settings.contains("TerminalTransparency")) { int termOpacityValue = settings.value("termOpacity", 100).toInt(); termOpacityValue = termOpacityValue == 99 ? 100 : termOpacityValue; settings.setValue("TerminalTransparency", 100 - termOpacityValue); } settings.remove("termOpacity"); // geometry -> size, pos if (!settings.contains("MainWindow/size")) { QWidget geom; geom.restoreGeometry(settings.value("MainWindow/geometry").toByteArray()); settings.setValue("MainWindow/size", geom.size()); settings.setValue("MainWindow/pos", geom.pos()); settings.remove("MainWindow/geometry"); } } if (currentVersion > lastVersion) settings.setValue("version", currentVersion); }