79 lines
2.5 KiB
C++
79 lines
2.5 KiB
C++
#include "fileviewdelegate.h"
|
|
|
|
#include <QString>
|
|
#include <QPainter>
|
|
#include <QFont>
|
|
#include <QApplication>
|
|
#include <QFontMetrics>
|
|
#include <QLabel>
|
|
#include <QDebug>
|
|
#include <QTextDocument>
|
|
#include <QAbstractTextDocumentLayout>
|
|
#include <QStandardItemModel>
|
|
#include <QCoreApplication>
|
|
#include <QListView>
|
|
#include <QHBoxLayout>
|
|
#include <QPainterPath>
|
|
|
|
#include "fileview.h"
|
|
|
|
const int ICON_MODE_ITEM_WIDTH = 96;
|
|
const int ICON_MODE_ITEM_HEIGHT = 104;
|
|
const int LIST_MODE_ITEM_HEIGHT = 56;
|
|
|
|
FileViewDelegate::FileViewDelegate(QAbstractItemView *parent) : kdk::KListViewDelegate(parent) {}
|
|
|
|
FileViewDelegate::~FileViewDelegate() {}
|
|
|
|
void FileViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
|
|
{
|
|
auto *view = qobject_cast<const FileView *>(option.widget);
|
|
if (view->getItemMode() == FileView::ItemSelectMode::Default) {
|
|
kdk::KListViewDelegate::paint(painter, option, index);
|
|
} else {
|
|
editModePaint(painter, option, index);
|
|
}
|
|
}
|
|
|
|
QSize FileViewDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
|
|
{
|
|
auto *listView = qobject_cast<const FileView *>(option.widget);
|
|
|
|
if (listView->getViewMode() == QListView::IconMode) {
|
|
return QSize(ICON_MODE_ITEM_WIDTH, ICON_MODE_ITEM_HEIGHT);
|
|
} else {
|
|
auto size = QStyledItemDelegate::sizeHint(option, index);
|
|
return QSize(size.width(), LIST_MODE_ITEM_HEIGHT);
|
|
}
|
|
}
|
|
|
|
void FileViewDelegate::editModePaint(QPainter *painter, const QStyleOptionViewItem &option,
|
|
const QModelIndex &index) const
|
|
{
|
|
kdk::KListViewDelegate::paint(painter, option, index);
|
|
auto *view = qobject_cast<const FileView *>(option.widget);
|
|
if (!view) {
|
|
return;
|
|
}
|
|
QRectF rect;
|
|
rect.setX(option.rect.x());
|
|
rect.setY(option.rect.y());
|
|
rect.setWidth(option.rect.width());
|
|
rect.setHeight(option.rect.height());
|
|
QRect selectIconRect;
|
|
// 绘制可选图标的位置
|
|
if (view->viewMode() == QListView::ListMode) {
|
|
selectIconRect = QRect(rect.right() - 24, rect.top() + 21, 14, 14);
|
|
} else if (view->viewMode() == QListView::IconMode) {
|
|
selectIconRect = QRect(rect.right() - 15, rect.top(), 14, 14);
|
|
}
|
|
QIcon selectIcon;
|
|
if (option.state.testFlag(QStyle::State_Selected)) {
|
|
selectIcon = QIcon(":/filemanageview/select.svg");
|
|
} else {
|
|
selectIcon = QIcon(":/filemanageview/rectangle.svg");
|
|
}
|
|
QPixmap selectPixmap = selectIcon.pixmap(14, 14);
|
|
painter->drawPixmap(selectIconRect, selectPixmap);
|
|
}
|