parse the stylesheet in an extra class
authorcoolo <coolo@e0cc52ee-31ee-0310-8b87-e83c4596d67c>
Tue, 4 Dec 2007 11:20:33 +0000 (11:20 +0000)
committercoolo <coolo@e0cc52ee-31ee-0310-8b87-e83c4596d67c>
Tue, 4 Dec 2007 11:20:33 +0000 (11:20 +0000)
git-svn-id: http://svn.opensuse.org/svn/yast/branches/tmp/coolo/qt4-port@42648 e0cc52ee-31ee-0310-8b87-e83c4596d67c

src/CMakeLists.txt
src/QY2Styler.cc [new file with mode: 0644]
src/QY2Styler.h [new file with mode: 0644]
src/YQUI.h
src/YQUI_core.cc
theme/style.qss

index 8cdbe48..43b8eb2 100644 (file)
@@ -26,7 +26,8 @@ SET(qt4_yast_plugin_SRCS
   YQRichText.cc YQSelectionBox.cc YQSignalBlocker.cc YQSlider.cc
   YQSpacing.cc YQSquash.cc YQTable.cc YQTimeField.cc YQTree.cc
   YQUI_builtins.cc YQUI_core.cc YQUI_widgets.cc YQUI_x11.cc
-  YQWidgetCaption.cc YQWidgetFactory.cc YQWizardButton.cc YQWizard.cc
+  YQWidgetCaption.cc YQWidgetFactory.cc YQWizardButton.cc 
+  YQWizard.cc QY2Styler.cc
 )
 
 QT4_AUTOMOC(${qt4_yast_plugin_SRCS})
diff --git a/src/QY2Styler.cc b/src/QY2Styler.cc
new file mode 100644 (file)
index 0000000..6cd55cf
--- /dev/null
@@ -0,0 +1,48 @@
+#include "QY2Styler.h"
+#include <QFile>
+#include <QString>
+#include <QStringList>
+#include <QApplication>
+
+QY2Styler::QY2Styler( QObject *parent )
+    : QObject( parent )
+{
+}
+
+void QY2Styler::setStyleSheet( const QString &filename )
+{
+    QFile file( themeDir() + filename );
+    if ( file.open( QIODevice::ReadOnly ) )
+    {
+        QString content = file.readAll();
+        processUrls( content );
+        qApp->setStyleSheet( content );
+    }
+}
+
+void QY2Styler::processUrls(QString &text) const
+{
+    QString result;
+    QStringList lines = text.split( '\n' );
+    QRegExp urlx( ": *url\\((.*)\\)" );
+    QRegExp backgroundx( "^ */\\* *Background: *([^ ]*) *([^ ]*) *\\*/$" );
+    for ( QStringList::const_iterator it = lines.begin(); it != lines.end(); ++it )
+    {
+        QString line = *it;
+        if ( urlx.indexIn( line ) >= 0 )
+            line.replace( urlx, ": url(" + themeDir() + urlx.cap( 1 ) + ")");
+
+        if ( backgroundx.exactMatch( line ) )
+            _backgrounds[backgroundx.cap( 1 )] = backgroundx.cap( 2 );
+
+        result += line;
+    }
+    text = result;
+}
+
+QString QY2Styler::themeDir() const
+{
+    return THEMEDIR "/openSUSE/wizard/";
+}
+
+#include "QY2Styler.moc"
diff --git a/src/QY2Styler.h b/src/QY2Styler.h
new file mode 100644 (file)
index 0000000..a425bd4
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef QY2STYLER_H
+#define QY2STYLER_H
+
+#include <QObject>
+#include <QHash>
+#include <QString>
+
+class QY2Styler : public QObject
+{
+    Q_OBJECT
+
+public:
+    QY2Styler( QObject *parent );
+
+    void setStyleSheet( const QString &file );
+    QString themeDir() const;
+
+protected:
+    void processUrls(QString &text) const;
+
+private:
+    QHash<QString,QString> _backgrounds;
+};
+
+#endif
index 34c80a7..54e702a 100644 (file)
@@ -32,6 +32,7 @@
 #define YQWidgetSpacing        4
 #define YQButtonBorder 3
 
+class QY2Styler;
 class QCursor;
 class QFrame;
 class QStackedWidget;
@@ -654,6 +655,11 @@ protected:
     bool _ui_inited;
     int _ui_argc;
     char **_ui_argv;
+
+    /*
+     * Reads the style sheet, parses some comments and passes it to qapp
+     */ 
+    QY2Styler *_styler;
 };
 
 #endif // YQUI_h
index f3c199e..ac70c77 100644 (file)
@@ -35,6 +35,7 @@
 #include <ycp/y2log.h>
 
 #include "YQUI.h"
+#include "QY2Styler.h"
 #include "YQApplication.h"
 #include "YQWidgetFactory.h"
 #include "YQOptionalWidgetFactory.h"
@@ -46,7 +47,6 @@
 #include "YQDialog.h"
 #include "QY2Settings.h"
 
-#define PIXMAP_DIR THEMEDIR "/openSUSE/wizard/"
 #define BUSY_CURSOR_TIMEOUT    200     // milliseconds
 
 YQUI * YQUI::_ui = 0;
@@ -119,7 +119,8 @@ void YQUI::init_ui()
     processCommandLineArgs( _ui_argc, _ui_argv );
     calcDefaultSize();
 
-    qApp->setStyleSheet( "file:///" PIXMAP_DIR "/style.qss" );
+    _styler = new QY2Styler( this );
+    _styler->setStyleSheet( "style.qss" );
 
     // Event loop object. Required since a YaST2 UI needs to react to commands
     // from the YCP command stream as well as to X11 / Qt events.
index 142b1c9..9c7b8c8 100644 (file)
@@ -1,3 +1,6 @@
+/* Background: main_window background.svg */
+/* Background: work_area g22503.png */
+/* Background: steps rect2174.png */
 
 #main_window {
    background-image: url(background-1024x768.png);