• Skip to content
  • Skip to link menu
KDE 4.0 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

libplasma

kcategorizeditemsview.cpp

Go to the documentation of this file.
00001 /*
00002  *   Copyright (C) 2007 Ivan Cukic <ivan.cukic+kde@gmail.com>
00003  *
00004  *   This program is free software; you can redistribute it and/or modify
00005  *   it under the terms of the GNU Library/Lesser General Public License
00006  *   version 2, or (at your option) any later version, as published by the
00007  *   Free Software Foundation
00008  *
00009  *   This program is distributed in the hope that it will be useful,
00010  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  *   GNU General Public License for more details
00013  *
00014  *   You should have received a copy of the GNU Library/Lesser General Public
00015  *   License along with this program; if not, write to the
00016  *   Free Software Foundation, Inc.,
00017  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
00018  */
00019 
00020 #include "kcategorizeditemsview_p.h"
00021 #include "kcategorizeditemsviewdelegate_p.h"
00022 
00023 #include <KIcon>
00024 #include <KDebug>
00025 #include <KAction>
00026 #include <KStandardAction>
00027 
00028 KCategorizedItemsView::KCategorizedItemsView(QWidget * parent, Qt::WindowFlags f)
00029         : QWidget(parent, f), m_modelCategories(NULL), m_modelFilters(NULL),
00030         m_modelItems(NULL), m_modelFilterItems(NULL), m_delegate(NULL),
00031         m_viewWidth(0)
00032 {
00033     setupUi(this);
00034     itemsView->m_view = this;
00035 
00036     textSearch->setClickMessage(i18n("Enter search phrase here"));
00037     
00038     textSearch->setFocus();
00039     
00040     connect(textSearch, SIGNAL(textChanged(QString)),
00041             this, SLOT(searchTermChanged(QString)));
00042     connect(comboFilters, SIGNAL(currentIndexChanged(int)),
00043             this, SLOT(filterChanged(int)));
00044 
00045     connect (itemsView, SIGNAL(activated(const QModelIndex &)),
00046                   this, SIGNAL(activated(const QModelIndex &)));
00047 
00048     connect (itemsView, SIGNAL(clicked(const QModelIndex &)),
00049                   this, SIGNAL(clicked(const QModelIndex &)));
00050     connect (itemsView, SIGNAL(entered(const QModelIndex &)),
00051                   this, SIGNAL(entered(const QModelIndex &)));
00052     connect (itemsView, SIGNAL(pressed(const QModelIndex &)),
00053                   this, SIGNAL(pressed(const QModelIndex &)));
00054 
00055     itemsView->header()->setVisible(false);
00056 
00057     itemsView->setItemDelegate(m_delegate = new KCategorizedItemsViewDelegate(this));
00058     itemsView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
00059 
00060     connect (m_delegate, SIGNAL(destroyApplets(const QString)),
00061                   parent, SLOT(destroyApplets(const QString)));
00062 
00063     comboFilters->setItemDelegate(new KCategorizedItemsViewFilterDelegate(this));
00064 
00065     itemsView->viewport()->setAttribute(Qt::WA_Hover);
00066 
00067     QAction * find = KStandardAction::find(textSearch, SLOT(setFocus()), this);
00068     addAction(find);
00069     resizeEvent(NULL);
00070 }
00071 
00072 KCategorizedItemsView::~KCategorizedItemsView() {
00073     delete m_modelFilterItems;
00074     delete m_delegate;
00075 }
00076 
00077 void KCategorizedItemsView::paintEvent ( QPaintEvent * event ) {
00078     Q_UNUSED(event);
00079     resizeEvent(NULL);
00080 }
00081 
00082 void KCategorizedItemsView::resizeEvent ( QResizeEvent * event ) {
00083     Q_UNUSED(event);
00084     if (m_viewWidth == itemsView->viewport()->width()) return;
00085     m_viewWidth = itemsView->viewport()->width();
00086     itemsView->setColumnWidth(0, m_delegate->columnWidth(0, m_viewWidth));
00087     itemsView->setColumnWidth(1, m_delegate->columnWidth(1, m_viewWidth));
00088     itemsView->setColumnWidth(2, m_delegate->columnWidth(2, m_viewWidth));
00089 }
00090 
00091 void KCategorizedItemsView::setFilterModel(QStandardItemModel * model)
00092 {
00093     comboFilters->setModel(model);
00094     m_modelFilters = model;
00095 }
00096 
00097 void KCategorizedItemsView::setItemModel(QStandardItemModel * model)
00098 {
00099     if (!m_modelFilterItems) {
00100         m_modelFilterItems = new DefaultItemFilterProxyModel(this);
00101     }
00102 
00103     m_modelItems = model;
00104     m_modelFilterItems->setSourceModel(m_modelItems);
00105     m_modelFilterItems->setSortCaseSensitivity(Qt::CaseInsensitive);
00106     m_modelFilterItems->sort(0);
00107 
00108     itemsView->setModel(m_modelFilterItems);
00109 
00110     if (m_modelFilterItems->rowCount()) {
00111         itemsView->verticalScrollBar()->setSingleStep(itemsView->sizeHintForRow(0));
00112     }
00113 }
00114 
00115 void KCategorizedItemsView::searchTermChanged(const QString & text)
00116 {
00117     kDebug() << "EVENT\n" << text;
00118     if (m_modelFilterItems) {
00119         m_modelFilterItems->setSearch(text);
00120     }
00121 }
00122 
00123 void KCategorizedItemsView::filterChanged(int index)
00124 {
00125     if (m_modelFilterItems) {
00126         QVariant data = m_modelFilters->item(index)->data();
00127         m_modelFilterItems->setFilter(qVariantValue<KCategorizedItemsViewModels::Filter>(data));
00128     }
00129 }
00130 
00131 void KCategorizedItemsView::addEmblem(const QString & title, QIcon * icon, const Filter & filter) {
00132     m_emblems[title] = QPair<Filter, QIcon *>(filter, icon);
00133 }
00134 
00135 void KCategorizedItemsView::clearEmblems() {
00136     m_emblems.clear();
00137 }
00138 
00139 AbstractItem * KCategorizedItemsView::getItemByProxyIndex(const QModelIndex & index) const {
00140     return (AbstractItem *) m_modelItems->itemFromIndex(
00141         m_modelFilterItems->mapToSource(index)
00142     );
00143 }
00144 
00145 
00146 QList < AbstractItem * > KCategorizedItemsView::selectedItems() const {
00147     QList < AbstractItem * > items;
00148     foreach (QModelIndex index, itemsView->selectionModel()->selectedIndexes()) {
00149         if (index.column() == 0) {
00150             items << getItemByProxyIndex(index);
00151         }
00152     }
00153     return items;
00154 }
00155 
00156 #include "kcategorizeditemsview_p.moc"
00157 

libplasma

Skip menu "libplasma"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • KWin
  •   KWin Libraries
  • Libraries
  •   libkworkspace
  •   libplasma
  • Plasma
  •   Animators
  •   Applets
  •   Engines
  • Solid Modules
Generated for API Reference by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal