libplasma
kcategorizeditemsview.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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