~ubuntu-branches/ubuntu/gutsy/kdebase-workspace/gutsy

« back to all changes in this revision

Viewing changes to libs/plasma/appletbrowser/kcategorizeditemsview.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Riddell
  • Date: 2007-10-11 14:04:48 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20071011140448-v0eb7lxbb24zagca
Tags: 3.94.0-0ubuntu1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde@gmail.com>
 
3
 *
 
4
 *   This program is free software; you can redistribute it and/or modify
 
5
 *   it under the terms of the GNU General Public License version 2 (or,
 
6
 *   at your option, any later version) as published by the Free Software
 
7
 *   Foundation
 
8
 *
 
9
 *   This program 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
 
12
 *   GNU General Public License for more details
 
13
 *
 
14
 *   You should have received a copy of the GNU Library General Public
 
15
 *   License along with this program; if not, write to the
 
16
 *   Free Software Foundation, Inc.,
 
17
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
18
 */
 
19
 
 
20
#include "kcategorizeditemsview_p.h"
 
21
#include "kcategorizeditemsviewdelegate_p.h"
 
22
 
 
23
#include <KIcon>
 
24
#include <KDebug>
 
25
#include <KAction>
 
26
#include <KStandardAction>
 
27
 
 
28
KCategorizedItemsView::KCategorizedItemsView(QWidget * parent, Qt::WindowFlags f)
 
29
        : QWidget(parent, f), m_modelCategories(NULL), m_modelFilters(NULL),
 
30
        m_modelItems(NULL), m_modelFilterItems(NULL), m_delegate(NULL)
 
31
{
 
32
    setupUi(this);
 
33
    itemsView->m_view = this;
 
34
 
 
35
    textSearch->setClickMessage(i18n("Enter search phrase here"));
 
36
 
 
37
    connect(textSearch, SIGNAL(textChanged(QString)),
 
38
            this, SLOT(searchTermChanged(QString)));
 
39
    connect(comboFilters, SIGNAL(currentIndexChanged(int)),
 
40
            this, SLOT(filterChanged(int)));
 
41
 
 
42
    connect (itemsView, SIGNAL(activated(const QModelIndex &)),
 
43
                  this, SIGNAL(activated(const QModelIndex &)));
 
44
 
 
45
    connect (itemsView, SIGNAL(clicked(const QModelIndex &)),
 
46
                  this, SIGNAL(clicked(const QModelIndex &)));
 
47
    connect (itemsView, SIGNAL(entered(const QModelIndex &)),
 
48
                  this, SIGNAL(entered(const QModelIndex &)));
 
49
    connect (itemsView, SIGNAL(pressed(const QModelIndex &)),
 
50
                  this, SIGNAL(pressed(const QModelIndex &)));
 
51
 
 
52
    itemsView->header()->setVisible(false);
 
53
 
 
54
    itemsView->setItemDelegate(m_delegate = new KCategorizedItemsViewDelegate(this));
 
55
 
 
56
    comboFilters->setItemDelegate(new KCategorizedItemsViewFilterDelegate(this));
 
57
 
 
58
    itemsView->viewport()->setAttribute(Qt::WA_Hover);
 
59
 
 
60
    QAction * find = KStandardAction::find(textSearch, SLOT(setFocus()), this);
 
61
    addAction(find);
 
62
    resizeEvent(NULL);
 
63
}
 
64
 
 
65
KCategorizedItemsView::~KCategorizedItemsView() {
 
66
    delete m_modelFilterItems;
 
67
    delete m_delegate;
 
68
}
 
69
 
 
70
void KCategorizedItemsView::paintEvent ( QPaintEvent * event ) {
 
71
    Q_UNUSED(event);
 
72
    resizeEvent(NULL);
 
73
}
 
74
 
 
75
void KCategorizedItemsView::resizeEvent ( QResizeEvent * event ) {
 
76
    Q_UNUSED(event);
 
77
    if (m_viewWidth == itemsView->viewport()->width()) return;
 
78
    m_viewWidth = itemsView->viewport()->width();
 
79
    itemsView->setColumnWidth(0, m_delegate->columnWidth(0, m_viewWidth));
 
80
    itemsView->setColumnWidth(1, m_delegate->columnWidth(1, m_viewWidth));
 
81
}
 
82
 
 
83
void KCategorizedItemsView::setFilterModel(QStandardItemModel * model)
 
84
{
 
85
    comboFilters->setModel(model);
 
86
    m_modelFilters = model;
 
87
}
 
88
 
 
89
void KCategorizedItemsView::setItemModel(QStandardItemModel * model)
 
90
{
 
91
    if (!m_modelFilterItems) m_modelFilterItems = new DefaultItemFilterProxyModel(this);
 
92
 
 
93
    m_modelItems = model;
 
94
    m_modelFilterItems->setSourceModel(m_modelItems);
 
95
 
 
96
    itemsView->setModel(m_modelFilterItems);
 
97
}
 
98
 
 
99
void KCategorizedItemsView::searchTermChanged(const QString & text)
 
100
{
 
101
    kDebug() << "EVENT\n" << text;
 
102
    if (m_modelFilterItems) {
 
103
        m_modelFilterItems->setSearch(text);
 
104
    }
 
105
}
 
106
 
 
107
void KCategorizedItemsView::filterChanged(int index)
 
108
{
 
109
    if (m_modelFilterItems) {
 
110
        QVariant data = m_modelFilters->item(index)->data();
 
111
        m_modelFilterItems->setFilter(qVariantValue<KCategorizedItemsViewModels::Filter>(data));
 
112
    }
 
113
}
 
114
 
 
115
void KCategorizedItemsView::addEmblem(const QString & title, QIcon * icon, const Filter & filter) {
 
116
    m_emblems[title] = QPair<Filter, QIcon *>(filter, icon);
 
117
}
 
118
 
 
119
void KCategorizedItemsView::clearEmblems() {
 
120
    m_emblems.clear();
 
121
}
 
122
 
 
123
AbstractItem * KCategorizedItemsView::getItemByProxyIndex(const QModelIndex & index) const {
 
124
    return (AbstractItem *) m_modelItems->itemFromIndex(
 
125
        m_modelFilterItems->mapToSource(index)
 
126
    );
 
127
}
 
128
 
 
129
 
 
130
QList < AbstractItem * > KCategorizedItemsView::selectedItems() const {
 
131
    QList < AbstractItem * > items;
 
132
    foreach (QModelIndex index, itemsView->selectionModel()->selectedIndexes()) {
 
133
        if (index.column() == 0) {
 
134
            items << getItemByProxyIndex(index);
 
135
        }
 
136
    }
 
137
    return items;
 
138
}
 
139
 
 
140
#include "kcategorizeditemsview_p.moc"
 
141