diff --git a/src/gui/formsettings.cpp b/src/gui/formsettings.cpp index 63b8d4974..ed08e968b 100644 --- a/src/gui/formsettings.cpp +++ b/src/gui/formsettings.cpp @@ -78,6 +78,8 @@ FormSettings::FormSettings(QWidget *parent) : QDialog(parent), m_ui(new Ui::Form this, SLOT(displayProxyPassword(int))); connect(m_ui->m_btnBrowserProgressColor, SIGNAL(clicked()), this, SLOT(changeBrowserProgressColor())); + connect(m_ui->m_treeSkins, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), + this, SLOT(onSkinSelected(QTreeWidgetItem*,QTreeWidgetItem*))); // Load all settings. loadGeneral(); @@ -92,6 +94,16 @@ FormSettings::~FormSettings() { delete m_ui; } +void FormSettings::onSkinSelected(QTreeWidgetItem *current, + QTreeWidgetItem *previous) { + Q_UNUSED(previous); + + if (current != NULL) { + Skin skin = current->data(0, Qt::UserRole).value(); + m_ui->m_lblSelectedContents->setText(skin.m_visibleName); + } +} + void FormSettings::changeBrowserProgressColor() { QColorDialog color_dialog(m_initialSettings.m_webBrowserProgress, this); color_dialog.setWindowTitle(tr("Select color for web browser progress bar")); @@ -397,28 +409,36 @@ void FormSettings::loadInterface() { m_ui->m_cmbIconTheme->setCurrentIndex(theme_index); } #endif + } - // Load skin. - QList installed_skins = SkinFactory::getInstance()->getInstalledSkins(); - QString active_skin = SkinFactory::getInstance()->getCurrentSkinName(); + // Load skin. + QList installed_skins = SkinFactory::getInstance()->getInstalledSkins(); + QString selected_skin = SkinFactory::getInstance()->getSelectedSkinName(); + QString active_skin = SkinFactory::getInstance()->getCurrentSkinName(); - foreach (Skin skin, installed_skins) { - QTreeWidgetItem *new_item = new QTreeWidgetItem(QStringList() << - skin.m_visibleName << - skin.m_version << - skin.m_author << - skin.m_email); - new_item->setData(0, Qt::UserRole, QVariant::fromValue(skin)); + foreach (Skin skin, installed_skins) { + QTreeWidgetItem *new_item = new QTreeWidgetItem(QStringList() << + skin.m_visibleName << + skin.m_version << + skin.m_author << + skin.m_email); + new_item->setData(0, Qt::UserRole, QVariant::fromValue(skin)); - // Add this skin and mark it as active if its active now. - m_ui->m_treeSkins->addTopLevelItem(new_item); + // Add this skin and mark it as active if its active now. + m_ui->m_treeSkins->addTopLevelItem(new_item); - if (skin.m_baseName == active_skin) { - m_ui->m_treeSkins->setCurrentItem(new_item); - } + if (skin.m_baseName == selected_skin) { + m_ui->m_treeSkins->setCurrentItem(new_item); } } + if (m_ui->m_treeSkins->currentItem() == NULL) { + // No skin is selected or currently selected skin is unavailable. + m_ui->m_treeSkins->setCurrentItem(m_ui->m_treeSkins->topLevelItem(0)); + } + + m_ui->m_lblActiveContents->setText(SkinFactory::getInstance()->getSkinInfo(active_skin).m_visibleName); + // Load tab settings. m_ui->m_checkCloseTabsMiddleClick->setChecked(settings->value(APP_CFG_GUI, "tab_close_mid_button", diff --git a/src/gui/formsettings.h b/src/gui/formsettings.h index ea43b0929..af44b64dc 100644 --- a/src/gui/formsettings.h +++ b/src/gui/formsettings.h @@ -32,6 +32,7 @@ class FormSettings : public QDialog { void loadInterface(); void saveInterface(); void changeBrowserProgressColor(); + void onSkinSelected(QTreeWidgetItem *current, QTreeWidgetItem *previous); void loadGeneral(); void saveGeneral(); diff --git a/src/gui/formsettings.ui b/src/gui/formsettings.ui index d293233d2..70bb67d5b 100644 --- a/src/gui/formsettings.ui +++ b/src/gui/formsettings.ui @@ -121,49 +121,121 @@ Icons && skins - - - - - Icon theme + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::NoFrame - - m_cmbIconTheme + + true - - - - - - - - - Skin - - - - - - - - 0 - 0 - - - - 0 - - - false - - - false - - - - 1 + + + + 0 + 0 + 581 + 340 + - + + + + + Icon theme + + + m_cmbIconTheme + + + + + + + + + + Skin + + + + + + + + 0 + 0 + + + + 0 + + + false + + + false + + + + 1 + + + + + + + + Active skin + + + + + + + + + + + + + + Selected skin + + + + + + + + + + + + + + Newly selected skin is activated after the applicaton gets restarted!!! + + + Qt::AlignCenter + + + + + diff --git a/src/gui/skinfactory.cpp b/src/gui/skinfactory.cpp index 9d2555640..08ca9b19f 100644 --- a/src/gui/skinfactory.cpp +++ b/src/gui/skinfactory.cpp @@ -28,16 +28,13 @@ SkinFactory *SkinFactory::getInstance() { } void SkinFactory::loadCurrentSkin() { - QString skin_name_from_settings = Settings::getInstance()->value(APP_CFG_GUI, - "skin", - "base/plain.xml").toString(); + QString skin_name_from_settings = getSelectedSkinName(); bool loaded = false; Skin skin_data = getSkinInfo(skin_name_from_settings, &loaded); if (skin_name_from_settings == APP_THEME_SYSTEM) { - qApp->setStyleSheet(QString()); - qApp->setStyle(NULL); - qDebug("System default skin loaded."); + // NOTE: No need to call qApp->setStylesheet(QString()) here. + qDebug("'Default system skin' loaded."); } else if (loaded) { loadSkinFromData(skin_data.m_rawData, skin_name_from_settings); @@ -54,7 +51,7 @@ void SkinFactory::loadCurrentSkin() { qDebug("Skin '%s' loaded.", qPrintable(skin_name_from_settings)); } else { - qDebug("Skin '%s' not loaded because style name is not specified or skin raw data is missing.", + qDebug("Skin '%s' not loaded because style name is not specified or skin raw data is missing. Default skin loaded.", qPrintable(skin_name_from_settings)); } } @@ -89,7 +86,12 @@ bool SkinFactory::loadSkinFromData(QString skin_data, const QString &skin_path) void SkinFactory::setCurrentSkinName(const QString &skin_name) { Settings::getInstance()->setValue(APP_CFG_GUI, "skin", skin_name); - loadCurrentSkin(); +} + +QString SkinFactory::getSelectedSkinName() { + return Settings::getInstance()->value(APP_CFG_GUI, + "skin", + APP_THEME_SYSTEM).toString(); } QString SkinFactory::getCurrentSkinName() { @@ -98,6 +100,21 @@ QString SkinFactory::getCurrentSkinName() { Skin SkinFactory::getSkinInfo(const QString &skin_name, bool *ok) { Skin skin; + + if (skin_name == APP_THEME_SYSTEM) { + skin.m_author = "-"; + skin.m_baseName = APP_THEME_SYSTEM; + skin.m_email = "-"; + skin.m_version = "-"; + skin.m_visibleName = tr("default system skin"); + + if (ok != NULL) { + *ok = true; + } + + return skin; + } + QXmlQuery query; QFile skin_file(APP_SKIN_PATH + QDir::separator() + skin_name); @@ -157,13 +174,7 @@ Skin SkinFactory::getSkinInfo(const QString &skin_name, bool *ok) { QList SkinFactory::getInstalledSkins() { QList skins; - Skin default_skin; - default_skin.m_author = "-"; - default_skin.m_baseName = APP_THEME_SYSTEM; - default_skin.m_email = "-"; - default_skin.m_version = "-"; - default_skin.m_visibleName = tr("default system skin"); - skins.append(default_skin); + skins.append(getSkinInfo(APP_THEME_SYSTEM)); bool skin_load_ok; QStringList skin_directories = QDir(APP_SKIN_PATH).entryList(QDir::Dirs | diff --git a/src/gui/skinfactory.h b/src/gui/skinfactory.h index 80427a675..c6e0db8f2 100644 --- a/src/gui/skinfactory.h +++ b/src/gui/skinfactory.h @@ -44,8 +44,15 @@ class SkinFactory : public QObject { // NOTE: Skin name is formatted as "/.xml". QString getCurrentSkinName(); + // Returns the name of the skin, that should be activated + // after application restart. + QString getSelectedSkinName(); + + // Gets skin about a particular skin. Skin getSkinInfo(const QString &skin_name, bool *ok = NULL); + // Returns list of installed skins, including "default system skin". + // NOTE: Default skin always lies at position 0. QList getInstalledSkins(); // Sets the desired skin as the active one if it exists. diff --git a/src/main.cpp b/src/main.cpp index 5744ebb69..484b7cb1d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -72,7 +72,6 @@ int main(int argc, char *argv[]) { IconThemeFactory::getInstance()->setupSearchPaths(); IconThemeFactory::getInstance()->loadCurrentIconTheme(false); SkinFactory::getInstance()->loadCurrentSkin(); - SkinFactory::getInstance()->getInstalledSkins(); // Load localization and setup locale before any widget is constructed. LoadLocalization();