File indexing completed on 2024-04-28 04:57:35

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"