~ubuntu-branches/ubuntu/oneiric/kdeplasma-addons/oneiric

« back to all changes in this revision

Viewing changes to applets/community/stylesheet.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Thomas
  • Date: 2010-05-25 09:50:14 UTC
  • mto: (0.4.3 experimental)
  • mto: This revision was merged to the branch mainline in revision 68.
  • Revision ID: james.westby@ubuntu.com-20100525095014-e3cebfkdenjrx3xg
Tags: upstream-4.4.80
Import upstream version 4.4.80

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
    Copyright 2009 by Sebastian Kügler <sebas@kde.org>
 
3
 
 
4
    This library is free software; you can redistribute it and/or
 
5
    modify it under the terms of the GNU Library General Public
 
6
    License as published by the Free Software Foundation; either
 
7
    version 2 of the License, or (at your option) any later version.
 
8
 
 
9
    This library is distributed in the hope that it will be useful,
 
10
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
12
    Library General Public License for more details.
 
13
 
 
14
    You should have received a copy of the GNU Library General Public License
 
15
    along with this library; see the file COPYING.LIB.  If not, write to
 
16
    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 
17
    Boston, MA 02110-1301, USA.
 
18
*/
 
19
 
 
20
#include "stylesheet.h"
 
21
 
 
22
//Qt
 
23
#include <QFile>
 
24
#include <QPalette>
 
25
 
 
26
// KDE
 
27
#include <KDirWatch>
 
28
#include <KGlobalSettings>
 
29
#include <KStandardDirs>
 
30
 
 
31
// Plasma
 
32
#include <Plasma/Theme>
 
33
 
 
34
 
 
35
using namespace Plasma;
 
36
 
 
37
StyleSheet::StyleSheet(QObject *parent)
 
38
    : QObject(parent)
 
39
{
 
40
    //m_cssFile = "/home/sebas/kdesvn/src/attica/plasma/opendesktop/user.css"; // For debugging quicker
 
41
    m_cssFile = KStandardDirs::locate("data", "plasma-applet-opendesktop/user.css");
 
42
    load(m_cssFile);
 
43
    m_cssWatch = new KDirWatch(this);
 
44
    m_cssWatch->addFile(m_cssFile);
 
45
    connect(m_cssWatch,SIGNAL(dirty(QString)),this,SLOT(load(QString)));
 
46
    connect(m_cssWatch,SIGNAL(created(QString)),this,SLOT(load(QString)));
 
47
    connect(m_cssWatch,SIGNAL(deleted(QString)),this,SLOT(load(QString)));
 
48
 
 
49
    connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()), SLOT(update()));
 
50
    connect(KGlobalSettings::self(), SIGNAL(kdisplayPaletteChanged()), SLOT(update()));
 
51
}
 
52
 
 
53
StyleSheet::~StyleSheet()
 
54
{
 
55
}
 
56
 
 
57
QString StyleSheet::styleSheet() const
 
58
{
 
59
    return m_styleSheet;
 
60
}
 
61
 
 
62
void StyleSheet::setFileName(const QString &cssFile)
 
63
{
 
64
    if (m_cssFile != cssFile) {
 
65
        // change watch file watch and load new CSS ...
 
66
        m_cssWatch->removeFile(m_cssFile);
 
67
        m_cssFile = cssFile;
 
68
        load(cssFile);
 
69
        m_cssWatch->addFile(m_cssFile);
 
70
    }
 
71
}
 
72
 
 
73
void StyleSheet::setStyleSheet(const QString &css)
 
74
{
 
75
    m_rawStyleSheet = css;
 
76
    update();
 
77
}
 
78
 
 
79
void StyleSheet::load(const QString &cssFile)
 
80
{
 
81
    QFile f(this);
 
82
 
 
83
    if (cssFile.isEmpty()) {
 
84
        f.setFileName(m_cssFile);
 
85
    } else {
 
86
        f.setFileName(cssFile);
 
87
    }
 
88
    kDebug() << "(Re)loading CSS" << cssFile;
 
89
    if (f.open(QIODevice::ReadOnly)) {
 
90
        QTextStream t(&f);
 
91
        m_rawStyleSheet = t.readAll();
 
92
        f.close();
 
93
        update();
 
94
    } else {
 
95
        kDebug() << "CSS File not loaded, error reading file";
 
96
    }
 
97
}
 
98
 
 
99
void StyleSheet::update()
 
100
{
 
101
    QPalette p = QPalette();
 
102
 
 
103
    QColor text = Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor);
 
104
    QColor link = Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor);
 
105
    QColor background = Plasma::Theme::defaultTheme()->color(Plasma::Theme::BackgroundColor);
 
106
    link.setAlphaF(qreal(.8));
 
107
    QColor linkvisited = Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor);
 
108
    linkvisited.setAlphaF(qreal(.6));
 
109
 
 
110
    m_colors["%textcolor"] = text.name();
 
111
    m_colors["%background"] = background.name();
 
112
    m_colors["%visitedlink"] = linkvisited.name();
 
113
    m_colors["%activatedlink"] = linkvisited.name();
 
114
    m_colors["%hoveredlink"] = linkvisited.name();
 
115
    m_colors["%link"] = link.name();
 
116
    m_colors["%smallfontsize"] = QString("%1pt").arg(KGlobalSettings::smallestReadableFont().pointSize());
 
117
    m_colors["%fontsize"] = QString("%1pt").arg(KGlobalSettings::generalFont().pointSize());
 
118
 
 
119
    m_styleSheet = m_rawStyleSheet;
 
120
    foreach(const QString &k, m_colors.keys()) {
 
121
        m_styleSheet.replace(k, m_colors[k]);
 
122
    }
 
123
    //kDebug() << "CSS:" << m_styleSheet;
 
124
 
 
125
    emit styleSheetChanged(m_styleSheet);
 
126
}
 
127
 
 
128
#include "stylesheet.moc"