summaryrefslogtreecommitdiffstats
path: root/kscreensaver/kxsconfig/kxsxml.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kscreensaver/kxsconfig/kxsxml.cpp')
-rw-r--r--kscreensaver/kxsconfig/kxsxml.cpp157
1 files changed, 157 insertions, 0 deletions
diff --git a/kscreensaver/kxsconfig/kxsxml.cpp b/kscreensaver/kxsconfig/kxsxml.cpp
new file mode 100644
index 00000000..d8a689be
--- /dev/null
+++ b/kscreensaver/kxsconfig/kxsxml.cpp
@@ -0,0 +1,157 @@
+//-----------------------------------------------------------------------------
+//
+// KDE xscreensaver configuration dialog
+//
+// Copyright (c) Martin R. Jones <mjones@kde.org> 2002
+//
+// 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;
+// version 2 of the License.
+//
+// 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; see the file COPYING. If not, write to
+// the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include "kxsxml.h"
+#include "kxscontrol.h"
+#include <qobject.h>
+#include <qfile.h>
+#include <qvbox.h>
+#include <qhbox.h>
+#include <stdio.h>
+
+KXSXml::KXSXml( QWidget *p )
+ : parent(p), handler(0)
+{
+}
+
+bool KXSXml::parse( const QString &filename )
+{
+ QFile file( filename );
+ handler = new KXSXmlHandler( parent );
+ QXmlInputSource source( &file );
+ QXmlSimpleReader reader;
+ reader.setContentHandler( handler );
+ if ( !reader.parse( &source, FALSE ) )
+ return FALSE;
+
+ return true;
+}
+
+const QPtrList<KXSConfigItem> *KXSXml::items() const
+{
+ if ( handler )
+ return handler->items();
+ return 0;
+}
+
+QString KXSXml::description() const
+{
+ if ( handler )
+ return handler->description();
+ return QString();
+}
+
+//===========================================================================
+
+KXSXmlHandler::KXSXmlHandler( QWidget *p )
+ : QXmlDefaultHandler(), parent(p), selItem(0), inDesc(false)
+{
+ mParentStack.push( p );
+}
+
+bool KXSXmlHandler::startDocument()
+{
+ return true;
+}
+
+bool KXSXmlHandler::startElement( const QString&, const QString&,
+ const QString& qName,
+ const QXmlAttributes &atts )
+{
+ KXSConfigItem *i = 0;
+ QString id = atts.value("id");
+ if ( qName == "number" ) {
+ QString sLow = atts.value( "low" );
+ QString sHigh = atts.value( "high" );
+ if ( sLow.contains( '.' ) || sHigh.contains( '.' ) ) {
+ if ( parent )
+ i = new KXSDoubleRangeControl( parent, id, atts );
+ else
+ i = new KXSDoubleRangeItem( id, atts );
+ } else {
+ if ( parent )
+ i = new KXSRangeControl( parent, id, atts );
+ else
+ i = new KXSRangeItem( id, atts );
+ }
+ } else if ( qName == "boolean" ) {
+ if ( parent )
+ i = new KXSCheckBoxControl( parent, id, atts );
+ else
+ i = new KXSBoolItem( id, atts );
+ } else if ( qName == "string" ) {
+ if ( parent )
+ i = new KXSLineEditControl( parent, id, atts );
+ else
+ i = new KXSStringItem( id, atts );
+ } else if ( qName == "file" ) {
+ if ( parent )
+ i = new KXSFileControl( parent, id, atts );
+ else
+ i = new KXSStringItem( id, atts );
+ } else if ( qName == "_description" ) {
+ inDesc = true;
+ } else if ( qName == "select" ) {
+ if ( parent )
+ selItem = new KXSDropListControl( parent, id, atts );
+ else
+ selItem = new KXSSelectItem( id, atts );
+ i = selItem;
+ } else if ( qName == "option" && selItem ) {
+ selItem->addOption( atts );
+ } else if ( qName == "hgroup" && parent ) {
+ QHBox *hb = new QHBox( parent );
+ mParentStack.push( hb );
+ parent = hb;
+ } else if ( qName == "vgroup" && parent ) {
+ QVBox *vb = new QVBox( parent );
+ mParentStack.push( vb );
+ parent = vb;
+ }
+
+ if ( i )
+ mConfigItemList.append( i );
+
+ return true;
+}
+
+bool KXSXmlHandler::endElement( const QString&, const QString&, const QString &qName )
+{
+ if ( qName == "select" ) {
+ selItem = 0;
+ } else if ( qName == "_description" ) {
+ inDesc = false;
+ } else if ( (qName == "hgroup" || qName == "vgroup") && parent ) {
+ if ( mParentStack.count() > 1 ) {
+ mParentStack.pop();
+ parent = mParentStack.top();
+ }
+ }
+ return true;
+}
+
+bool KXSXmlHandler::characters( const QString &ch )
+{
+ if ( inDesc )
+ desc += ch;
+ return true;
+}
+