File indexing completed on 2025-01-19 07:43:01
0001 /* This file is part of the KDE project 0002 0003 Copyright (C) 2008 Javier Goday <jgoday@gmail.com> 0004 0005 This program is free software; you can redistribute it and/or 0006 modify it under the terms of the GNU General Public 0007 License as published by the Free Software Foundation; either 0008 version 2 of the License, or (at your option) any later version. 0009 */ 0010 #include "transferhistorycategorizedview.h" 0011 #include "ui/history/transferhistoryitemdelegate.h" 0012 0013 #include <QApplication> 0014 #include <QDate> 0015 #include <QDebug> 0016 #include <QGridLayout> 0017 #include <QStandardItem> 0018 #include <QStandardItemModel> 0019 #include <QVariant> 0020 0021 #include <KCategorizedSortFilterProxyModel> 0022 #include <KCategorizedView> 0023 #include <KCategoryDrawer> 0024 0025 TransferHistoryCategorizedView::TransferHistoryCategorizedView(QWidget *parent) 0026 : QWidget(parent) 0027 { 0028 // the widget layout 0029 auto *layout = new QGridLayout(this); 0030 0031 // initialize the model 0032 m_model = new QStandardItemModel(); 0033 0034 // the kcategoryizedview list 0035 auto *item_delegate = new TransferHistoryItemDelegate(this); 0036 m_view = new KCategorizedView(this); 0037 m_drawer = new KCategoryDrawer(m_view); 0038 m_view->setCategoryDrawer(m_drawer); 0039 m_view->setSelectionMode(QAbstractItemView::SingleSelection); 0040 m_view->setSpacing(QApplication::style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing)); 0041 m_view->setViewMode(QListView::IconMode); 0042 m_view->setMouseTracking(true); 0043 m_view->setItemDelegate(item_delegate); 0044 m_view->setEditTriggers(QAbstractItemView::NoEditTriggers); 0045 layout->addWidget(m_view, 0, 0); 0046 0047 // the proxy sort filter model and the categorized delegate 0048 m_delegate = new DateCategorizedDelegate(); 0049 m_proxyModel = new KCategorizedSortFilterProxyModel(); 0050 m_proxyModel->setCategorizedModel(true); 0051 m_proxyModel->sort(0); 0052 m_proxyModel->setSourceModel(m_model); 0053 m_view->setModel(m_proxyModel); 0054 0055 connect(item_delegate, &TransferHistoryItemDelegate::deletedTransfer, this, &TransferHistoryCategorizedView::deletedTransfer); 0056 connect(m_view, &KCategorizedView::doubleClicked, this, &TransferHistoryCategorizedView::doubleClicked); 0057 } 0058 0059 TransferHistoryCategorizedView::~TransferHistoryCategorizedView() 0060 { 0061 } 0062 0063 void TransferHistoryCategorizedView::addData(const QDate &date, const QString &url, const QString &dest, int size) 0064 { 0065 auto *item = new QStandardItem(url); 0066 item->setData(QVariant(size), TransferHistoryCategorizedDelegate::RoleSize); 0067 item->setData(QVariant(url), TransferHistoryCategorizedDelegate::RoleUrl); 0068 item->setData(QVariant(dest), TransferHistoryCategorizedDelegate::RoleDest); 0069 item->setData(QVariant(date), TransferHistoryCategorizedDelegate::RoleDate); 0070 0071 m_delegate->categorizeItem(item); 0072 m_model->appendRow(item); 0073 } 0074 0075 QVariant TransferHistoryCategorizedView::data(const QModelIndex &index, TransferHistoryCategorizedDelegate::AlternativeRoles role) const 0076 { 0077 return m_model->itemFromIndex(m_proxyModel->mapToSource(index))->data(role); 0078 } 0079 0080 void TransferHistoryCategorizedView::clear() 0081 { 0082 m_model->clear(); 0083 } 0084 0085 void TransferHistoryCategorizedView::setFilterRegExp(const QString &text) 0086 { 0087 m_proxyModel->setFilterRegularExpression(text); 0088 } 0089 0090 void TransferHistoryCategorizedView::setCategorizedDelegate(TransferHistoryCategorizedDelegate *delegate) 0091 { 0092 delete m_delegate; 0093 m_delegate = delegate; 0094 0095 update(); 0096 } 0097 0098 void TransferHistoryCategorizedView::removeRow(int row, const QModelIndex &parent) 0099 { 0100 m_model->removeRow(row, parent); 0101 } 0102 0103 void TransferHistoryCategorizedView::update() 0104 { 0105 for (int i = 0; i < m_model->rowCount(); i++) { 0106 QStandardItem *item = m_model->item(i, 0); 0107 0108 m_delegate->categorizeItem(item); 0109 } 0110 0111 m_proxyModel = new KCategorizedSortFilterProxyModel(this); 0112 m_proxyModel->setCategorizedModel(true); 0113 m_proxyModel->sort(0); 0114 m_proxyModel->setSourceModel(m_model); 0115 QAbstractItemModel *oldProxy = m_view->model(); 0116 m_view->setModel(m_proxyModel); 0117 oldProxy->deleteLater(); 0118 } 0119 0120 #include "moc_transferhistorycategorizedview.cpp"