kylin-connectivity/ui/filemanageview/fileviewdelegate.cpp

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);
}