mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-21 22:24:07 +01:00
Nuke ImagePtrItemDelegate
This commit is contained in:
parent
fb8584a51d
commit
2e60142a47
4 changed files with 0 additions and 110 deletions
|
@ -673,7 +673,6 @@ set(SOURCE_FILES
|
||||||
widgets/listview/GenericListModel.hpp
|
widgets/listview/GenericListModel.hpp
|
||||||
widgets/listview/GenericListView.cpp
|
widgets/listview/GenericListView.cpp
|
||||||
widgets/listview/GenericListView.hpp
|
widgets/listview/GenericListView.hpp
|
||||||
widgets/listview/ImagePtrItemDelegate.hpp
|
|
||||||
|
|
||||||
widgets/settingspages/AboutPage.cpp
|
widgets/settingspages/AboutPage.cpp
|
||||||
widgets/settingspages/AboutPage.hpp
|
widgets/settingspages/AboutPage.hpp
|
||||||
|
|
|
@ -1,92 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "common/QLogging.hpp"
|
|
||||||
#include "messages/Image.hpp"
|
|
||||||
#include "messages/ImageSet.hpp"
|
|
||||||
|
|
||||||
#include <QModelIndex>
|
|
||||||
#include <QPainter>
|
|
||||||
#include <QStyledItemDelegate>
|
|
||||||
#include <Qt>
|
|
||||||
#include <QTableView>
|
|
||||||
|
|
||||||
namespace chatterino {
|
|
||||||
class ImagePtrItemDelegate : public QStyledItemDelegate
|
|
||||||
{
|
|
||||||
std::map<QString, ImagePtr> ownedImages_;
|
|
||||||
QTableView *view_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
ImagePtrItemDelegate(QTableView *view)
|
|
||||||
: view_(view)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
static constexpr auto IMAGE_URL_ROLE = Qt::UserRole + 1;
|
|
||||||
|
|
||||||
void paint(QPainter *painter, const QStyleOptionViewItem &option,
|
|
||||||
const QModelIndex &index) const override
|
|
||||||
{
|
|
||||||
auto url = index.data(IMAGE_URL_ROLE).toString();
|
|
||||||
if (auto it = this->ownedImages_.find(url);
|
|
||||||
it != this->ownedImages_.end())
|
|
||||||
{
|
|
||||||
auto img = it->second;
|
|
||||||
auto opt = img->pixmapOrLoad();
|
|
||||||
if (!opt) // wait for next time
|
|
||||||
{
|
|
||||||
if (img->isEmpty())
|
|
||||||
{
|
|
||||||
painter->drawText(option.rect, "[Error]");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
painter->drawText(option.rect, "Loading");
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
auto pixmap = *opt;
|
|
||||||
double aspectRatio =
|
|
||||||
double(pixmap.width()) / double(pixmap.height());
|
|
||||||
int width = int(option.rect.height() * aspectRatio);
|
|
||||||
auto outputRect = QRect(option.rect.topLeft(),
|
|
||||||
QSize(width, option.rect.height()));
|
|
||||||
if (option.rect.width() < width)
|
|
||||||
{
|
|
||||||
// too wide?
|
|
||||||
|
|
||||||
double revAspectRatio =
|
|
||||||
double(pixmap.height()) / double(pixmap.width());
|
|
||||||
int height = int(option.rect.width() * revAspectRatio);
|
|
||||||
|
|
||||||
outputRect = QRect(option.rect.topLeft(),
|
|
||||||
QSize(option.rect.width(), height));
|
|
||||||
if (option.rect.height() < height)
|
|
||||||
{
|
|
||||||
// give up and squish the image
|
|
||||||
outputRect = option.rect;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
painter->drawPixmap(outputRect, pixmap, pixmap.rect());
|
|
||||||
}
|
|
||||||
auto img = Image::fromUrl(Url{url});
|
|
||||||
|
|
||||||
img->pixmapOrLoad([this, index]() {
|
|
||||||
// wait for it to parse
|
|
||||||
QTimer::singleShot(100, [this, index]() {
|
|
||||||
this->view_->repaint();
|
|
||||||
this->view_->update(index);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// You cannot stop me, clang-tidy
|
|
||||||
auto *bleh = const_cast<ImagePtrItemDelegate *>(this);
|
|
||||||
bleh->ownedImages_[url] = img;
|
|
||||||
}
|
|
||||||
QSize sizeHint(const QStyleOptionViewItem &option,
|
|
||||||
const QModelIndex &index) const override
|
|
||||||
{
|
|
||||||
return {32, 32};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
} // namespace chatterino
|
|
|
@ -41,9 +41,6 @@ ImageUploaderPage::ImageUploaderPage()
|
||||||
|
|
||||||
auto *view = layout.emplace<QTableView>().getElement();
|
auto *view = layout.emplace<QTableView>().getElement();
|
||||||
view->setModel(model);
|
view->setModel(model);
|
||||||
this->imgDelegate_ = new ImagePtrItemDelegate(view);
|
|
||||||
|
|
||||||
view->setItemDelegateForColumn(0, this->imgDelegate_);
|
|
||||||
view->setSelectionMode(QAbstractItemView::SingleSelection);
|
view->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||||
view->setSelectionBehavior(QAbstractItemView::SelectRows);
|
view->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||||
|
|
||||||
|
@ -131,9 +128,4 @@ ImageUploaderPage::ImageUploaderPage()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageUploaderPage::~ImageUploaderPage()
|
|
||||||
{
|
|
||||||
delete this->imgDelegate_;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace chatterino
|
} // namespace chatterino
|
||||||
|
|
|
@ -8,17 +8,8 @@ class ImagePtrItemDelegate;
|
||||||
|
|
||||||
class ImageUploaderPage : public SettingsPage
|
class ImageUploaderPage : public SettingsPage
|
||||||
{
|
{
|
||||||
ImagePtrItemDelegate *imgDelegate_;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ImageUploaderPage();
|
ImageUploaderPage();
|
||||||
~ImageUploaderPage() override;
|
|
||||||
|
|
||||||
ImageUploaderPage(ImageUploaderPage &cpy) = delete;
|
|
||||||
ImageUploaderPage(ImageUploaderPage &&move) = delete;
|
|
||||||
ImageUploaderPage &operator=(const ImageUploaderPage ©Assign) = delete;
|
|
||||||
ImageUploaderPage &&operator=(const ImageUploaderPage &&moveAssign) =
|
|
||||||
delete;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace chatterino
|
} // namespace chatterino
|
||||||
|
|
Loading…
Reference in a new issue