]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/components/simple_preferences.cpp
Qt: restore system's default theme without having to guess
[vlc] / modules / gui / qt4 / components / simple_preferences.cpp
index c390736fb9ed82884aa292820c8e954d645bc7d3..f428a5d97e63a152de324e08d1f751dacb048797 100644 (file)
 #include <QVBoxLayout>
 #include <QScrollArea>
 
+#include <QStyleFactory>
+#include <QSettings>
 #include <QtAlgorithms>
 
-#include <string>
-
 #define ICON_HEIGHT 64
 
 #ifdef WIN32
-#include "vistaassoc.h"
+# include <vlc_windows_interfaces.h>
 #endif
 
 /*********************************************************************
@@ -347,10 +347,10 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent,
                 else
                     ui.lastfm->setChecked( false );
 
-                ui.lastfm_zone->setEnabled( ui.lastfm->isChecked() );
+                ui.lastfm_zone->setVisible( ui.lastfm->isChecked() );
 
                 CONNECT( ui.lastfm, toggled( bool ),
-                         ui.lastfm_zone, setEnabled( bool ) );
+                         ui.lastfm_zone, setVisible( bool ) );
                 CONNECT( ui.lastfm, stateChanged( int ),
                          this, lastfm_Changed( int ) );
             }
@@ -482,7 +482,7 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent,
          * Interface Panel *
          *******************/
         START_SPREFS_CAT( Interface, qtr("Interface Settings") );
-            ui.defaultLabel->setFont( italicFont );
+//            ui.defaultLabel->setFont( italicFont );
             ui.skinsLabel->setText(
                     qtr( "This is VLC's skinnable interface. You can download other skins at" )
                     + QString( " <a href=\"http://www.videolan.org/vlc/skins.php\">VLC skins website</a>." ) );
@@ -495,7 +495,6 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent,
             ui.languageBox->hide();
             ui.assoBox->hide();
 #endif
-
             /* interface */
             char *psz_intf = config_GetPsz( p_intf, "intf" );
             if( psz_intf )
@@ -510,6 +509,19 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent,
 
             optionWidgets.append( ui.skins );
             optionWidgets.append( ui.qt4 );
+#if !defined(NDEBUG) || !defined( WIN32)
+            ui.stylesCombo->addItem( qtr("System's default") );
+            ui.stylesCombo->addItems( QStyleFactory::keys() );
+            ui.stylesCombo->setCurrentIndex( ui.stylesCombo->findText(
+                        getSettings()->value( "MainWindow/QtStyle", "" ).toString() ) );
+            ui.stylesCombo->insertSeparator( 1 );
+
+            CONNECT( ui.stylesCombo, currentIndexChanged( QString ), this, changeStyle( QString ) );
+            optionWidgets.append( ui.stylesCombo );
+#else
+            ui.stylesCombo->hide();
+            optionWidgets.append( NULL );
+#endif
 
             ui.skins_zone->setEnabled( ui.skins->isChecked() );
             CONNECT( ui.skins, toggled( bool ), ui.skins_zone, setEnabled( bool ) );
@@ -750,6 +762,10 @@ void SPrefsPanel::apply()
             config_PutPsz( p_intf, "intf", "skins2" );
         if( qobject_cast<QRadioButton *>(optionWidgets[qtRB])->isChecked() )
             config_PutPsz( p_intf, "intf", "qt" );
+        if( qobject_cast<QComboBox *>(optionWidgets[styleCB]) )
+            getSettings()->setValue( "MainWindow/QtStyle",
+                qobject_cast<QComboBox *>(optionWidgets[styleCB])->currentText() );
+
         break;
     }
 
@@ -787,10 +803,24 @@ void SPrefsPanel::lastfm_Changed( int i_state )
         config_RemoveIntf( VLC_OBJECT( p_intf ), "audioscrobbler" );
 }
 
+void SPrefsPanel::changeStyle( QString s_style )
+{
+    QApplication::setStyle( s_style );
+
+    /* force refresh on all widgets */
+    QWidgetList widgets = QApplication::allWidgets();
+    QWidgetList::iterator it = widgets.begin();
+    while( it != widgets.end() ) {
+        (*it)->update();
+        it++;
+    };
+}
+
 #ifdef WIN32
 #include <QDialogButtonBox>
 #include <QHeaderView>
 #include "util/registry.hpp"
+#include <string>
 
 bool SPrefsPanel::addType( const char * psz_ext, QTreeWidgetItem* current,
                            QTreeWidgetItem* parent, QVLCRegistry *qvReg )