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

« back to all changes in this revision

Viewing changes to applets/opendesktop-activities/activitylist.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
 
    This file is part of KDE.
3
 
 
4
 
    Copyright (c) 2009 Eckhart Wörner <ewoerner@kde.org>
5
 
 
6
 
    This program is free software; you can redistribute it and/or modify
7
 
    it under the terms of the GNU General Public License as published by
8
 
    the Free Software Foundation; either version 2 of the License, or
9
 
    (at your option) any later version.
10
 
 
11
 
    This program is distributed in the hope that it will be useful,
12
 
    but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
 
    GNU General Public License for more details.
15
 
 
16
 
    You should have received a copy of the GNU General Public License
17
 
    along with this program; if not, write to the Free Software
18
 
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19
 
    USA.
20
 
*/
21
 
 
22
 
#include "activitylist.h"
23
 
 
24
 
#include <QtCore/QtAlgorithms>
25
 
 
26
 
#include "activitywidget.h"
27
 
 
28
 
 
29
 
ActivityList::ActivityList(Plasma::DataEngine* engine, QGraphicsWidget* parent)
30
 
    : ScrollWidget(parent),
31
 
      m_engine(engine),
32
 
      m_limit(20),
33
 
      m_updateInterval(10 * 60),
34
 
      m_firstUpdateDone(false)
35
 
{
36
 
    m_container = new QGraphicsWidget(this);
37
 
    m_layout = new QGraphicsLinearLayout(Qt::Vertical, m_container);
38
 
    setWidget(m_container);
39
 
}
40
 
 
41
 
 
42
 
int ActivityList::limit() const
43
 
{
44
 
    return m_limit;
45
 
}
46
 
 
47
 
 
48
 
int ActivityList::updateInterval() const
49
 
{
50
 
    return m_updateInterval;
51
 
}
52
 
 
53
 
 
54
 
void ActivityList::setLimit(int limit)
55
 
{
56
 
    if (limit != m_limit) {
57
 
        m_limit = limit;
58
 
        dataUpdated("activity", m_engine->query("activity"));
59
 
    }
60
 
}
61
 
 
62
 
 
63
 
void ActivityList::setProvider(const QString& provider) {
64
 
    if (provider != m_provider) {
65
 
        if (!m_provider.isEmpty()) {
66
 
            m_engine->disconnectSource("Activities\\provider:" + m_provider, this);
67
 
        }
68
 
        m_provider = provider;
69
 
        if (!m_provider.isEmpty()) {
70
 
            // wait for the data to arrive the first time
71
 
            m_engine->connectSource("Activities\\provider:" + m_provider, this, 1000);
72
 
        }
73
 
    }
74
 
}
75
 
 
76
 
 
77
 
void ActivityList::setUpdateInterval(int interval)
78
 
{
79
 
    m_updateInterval = interval;
80
 
    m_engine->connectSource("Activities\\provider:" + m_provider, this, m_updateInterval * 1000);
81
 
}
82
 
 
83
 
 
84
 
QStringList ActivityList::getDisplayedActivities(const Plasma::DataEngine::Data& data)
85
 
{
86
 
    QStringList result = data.keys();
87
 
    qSort(result.begin(), result.end(), qGreater<QString>());
88
 
    while (result.size() > m_limit) {
89
 
        result.pop_back();
90
 
    }
91
 
    return result;
92
 
}
93
 
 
94
 
 
95
 
void ActivityList::dataUpdated(const QString& source, const Plasma::DataEngine::Data& data)
96
 
{
97
 
    Q_UNUSED(source)
98
 
 
99
 
    if (!m_firstUpdateDone) {
100
 
        if (data.contains("SourceStatus") && data.value("SourceStatus") == "retrieving") {
101
 
            return;
102
 
        }
103
 
        m_engine->connectSource("Activities\\provider:" + m_provider, this, m_updateInterval * 1000);
104
 
        m_firstUpdateDone = true;
105
 
    }
106
 
 
107
 
    
108
 
    QStringList displayedActivities = getDisplayedActivities(data);
109
 
    
110
 
    // FIXME: This is still highly inefficient
111
 
    while (m_layout->count()) {
112
 
        ActivityWidget* widget = static_cast<ActivityWidget*>(m_layout->itemAt(0));
113
 
        m_layout->removeAt(0);
114
 
        widget->deleteLater();
115
 
    }
116
 
 
117
 
    QStringList::iterator j = displayedActivities.begin();
118
 
    for (int i = 0; i < displayedActivities.size(); ++i, ++j) {
119
 
        if (!data[*j].value<Plasma::DataEngine::Data>().isEmpty()) {
120
 
            ActivityWidget* widget = new ActivityWidget(m_engine, m_container);
121
 
            widget->setActivityData(data[*j].value<Plasma::DataEngine::Data>());
122
 
            m_layout->addItem(widget);
123
 
        }
124
 
    }
125
 
    
126
 
    // Go to the top of the list
127
 
    this->setPos(0, 0);
128
 
}
129
 
 
130
 
 
131
 
#include "activitylist.moc"