summaryrefslogtreecommitdiff
path: root/noncore/styles/theme/themeset.cpp
blob: 32051060f1d20448f20c505a62ffffe7ebb63ec5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/**********************************************************************
** Copyright (C) 2000 Trolltech AS.  All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/



#include "themeset.h"

#include <qpe/qpeapplication.h>
#include <qpe/global.h>

#include <qlabel.h>
#include <qlayout.h>
#include <qlistview.h>
#include <qdir.h>

#include <qpe/config.h>


class MyConfig : public Config
{
public:
	MyConfig ( const QString &f, Domain d ) : Config ( f, d )
	{ }

	bool hasGroup ( const QString &gname ) const
	{
		QMap< QString, ConfigGroup>::ConstIterator it = groups. find ( gname );
		return ( it != groups.end() );
	}
};

class MyItem : public QListViewItem 
{
public:
	MyItem ( QListView *lv, QListViewItem *after, const QString &name, const QString &comm, const QString &theme ) : QListViewItem ( lv, after, name, comm )
	{
		m_theme = theme;	
	}
	

	QString m_theme;
};


ThemeSettings::ThemeSettings ( QWidget* parent, const char *name, WFlags fl )
		: QWidget ( parent, name, fl )
{
	setCaption ( tr( "Theme Style" ) );
	
	Config config ( "qpe" );
    config. setGroup ( "Appearance" );

	QString active = config. readEntry ( "Theme", "default" );

	QVBoxLayout *vbox = new QVBoxLayout ( this );
	vbox-> setSpacing ( 3 );
	vbox-> setMargin ( 6 );

	vbox-> addWidget ( new QLabel ( tr( "Select the theme to be used" ), this ));

	m_list = new QListView ( this );
	m_list-> addColumn ( tr( "Name" ));
	m_list-> addColumn ( tr( "Description" ));
	m_list-> setSelectionMode ( QListView::Single );
	m_list-> setAllColumnsShowFocus ( true );
	m_list-> setSorting ( -1 );
	vbox-> addWidget ( m_list, 10 );
		
	QListViewItem *item = new MyItem ( m_list, 0, tr( "[No theme]" ), "", "" );
	m_list-> setSelected ( item, true );
	
	QString path = QPEApplication::qpeDir() + "plugins/styles/themes";
	QStringList list = QDir ( path, "*.themerc" ). entryList ( );
	
	for ( QStringList::Iterator it = list. begin(); it != list. end ( ); ++it ) {
		MyConfig cfg ( path + "/" + *it, Config::File );
		
		if ( cfg. hasGroup ( "Misc" )) {
			cfg. setGroup ( "Misc" );
			
			QString name = cfg. readEntry ( "Name" );
			QString comm = cfg. readEntry ( "Comment" );
	
			if ( !name. isEmpty ( )) {	
				QString fname = (*it). left ((*it). length ( ) - 8 );
			
				item = new MyItem ( m_list, item, name, comm, fname );
				if ( active == fname ) {
					m_list-> setSelected ( item, true );
				}
			}
		}
	}
}

bool ThemeSettings::writeConfig ( )
{
	Config config ( "qpe" );
    config. setGroup ( "Appearance" );

	MyItem *it = (MyItem *) m_list-> selectedItem ( );
	config. writeEntry ( "Theme", it ? it-> m_theme : QString ( "" ));
	config. write ( );

	return true;
}