mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-21 22:24:07 +01:00
Add settings page and model for uploaded images
This commit is contained in:
parent
f097caa585
commit
ed3e2ecb90
6 changed files with 206 additions and 0 deletions
|
@ -432,6 +432,8 @@ set(SOURCE_FILES
|
|||
singletons/imageuploader/ImageUploader.cpp
|
||||
singletons/imageuploader/ImageUploader.hpp
|
||||
singletons/imageuploader/UploadedImage.hpp
|
||||
singletons/imageuploader/UploadedImageModel.cpp
|
||||
singletons/imageuploader/UploadedImageModel.hpp
|
||||
singletons/Logging.cpp
|
||||
singletons/Logging.hpp
|
||||
singletons/NativeMessaging.cpp
|
||||
|
@ -668,6 +670,8 @@ set(SOURCE_FILES
|
|||
widgets/settingspages/PluginsPage.hpp
|
||||
widgets/settingspages/SettingsPage.cpp
|
||||
widgets/settingspages/SettingsPage.hpp
|
||||
widgets/settingspages/ImageUploaderPage.cpp
|
||||
widgets/settingspages/ImageUploaderPage.hpp
|
||||
|
||||
widgets/splits/ClosedSplits.cpp
|
||||
widgets/splits/ClosedSplits.hpp
|
||||
|
|
61
src/singletons/imageuploader/UploadedImageModel.cpp
Normal file
61
src/singletons/imageuploader/UploadedImageModel.cpp
Normal file
|
@ -0,0 +1,61 @@
|
|||
#include "singletons/imageuploader/UploadedImageModel.hpp"
|
||||
|
||||
#include "common/SignalVectorModel.hpp"
|
||||
#include "messages/Image.hpp"
|
||||
#include "singletons/imageuploader/ImageUploader.hpp"
|
||||
#include "util/StandardItemHelper.hpp"
|
||||
#include "widgets/listview/ImagePtrItemDelegate.hpp"
|
||||
|
||||
#include <qdatetime.h>
|
||||
#include <qlocale.h>
|
||||
#include <qnamespace.h>
|
||||
#include <QObject>
|
||||
#include <Qt>
|
||||
|
||||
namespace chatterino {
|
||||
UploadedImageModel::UploadedImageModel(QObject *parent)
|
||||
: SignalVectorModel<UploadedImage>(4, parent)
|
||||
{
|
||||
}
|
||||
// image, path, delete url
|
||||
|
||||
UploadedImage UploadedImageModel::getItemFromRow(
|
||||
std::vector<QStandardItem *> &row, const UploadedImage &original)
|
||||
{
|
||||
return original;
|
||||
}
|
||||
|
||||
void UploadedImageModel::getRowFromItem(const UploadedImage &item,
|
||||
std::vector<QStandardItem *> &row)
|
||||
{
|
||||
row[0]->setData(item.imageLink, ImagePtrItemDelegate::IMAGE_URL_ROLE);
|
||||
row[0]->setData(item.imageLink, UploadedImageModel::DOUBLE_CLICK_LINK_ROLE);
|
||||
row[0]->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
||||
|
||||
auto locale = QLocale::system();
|
||||
setStringItem(row[1],
|
||||
locale.toString(QDateTime::fromSecsSinceEpoch(item.timestamp),
|
||||
QLocale::ShortFormat),
|
||||
false);
|
||||
|
||||
if (item.deletionLink.isNull())
|
||||
{
|
||||
setStringItem(row[2], "N/A", false);
|
||||
}
|
||||
else
|
||||
{
|
||||
setStringItem(row[2], "[Double click to open]", false);
|
||||
row[2]->setData(item.deletionLink, DOUBLE_CLICK_LINK_ROLE);
|
||||
}
|
||||
|
||||
if (item.localPath.isNull())
|
||||
{
|
||||
setStringItem(row[3], "n/a", false);
|
||||
}
|
||||
else
|
||||
{
|
||||
setStringItem(row[3], item.localPath, true);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace chatterino
|
27
src/singletons/imageuploader/UploadedImageModel.hpp
Normal file
27
src/singletons/imageuploader/UploadedImageModel.hpp
Normal file
|
@ -0,0 +1,27 @@
|
|||
#pragma once
|
||||
|
||||
#include "common/SignalVectorModel.hpp"
|
||||
#include "singletons/imageuploader/ImageUploader.hpp"
|
||||
|
||||
#include <QObject>
|
||||
#include <Qt>
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
class UploadedImageModel : public SignalVectorModel<UploadedImage>
|
||||
{
|
||||
explicit UploadedImageModel(QObject *parent);
|
||||
friend class ImageUploader;
|
||||
|
||||
protected:
|
||||
UploadedImage getItemFromRow(std::vector<QStandardItem *> &row,
|
||||
const UploadedImage &original) override;
|
||||
|
||||
void getRowFromItem(const UploadedImage &item,
|
||||
std::vector<QStandardItem *> &row) override;
|
||||
|
||||
public:
|
||||
static constexpr auto DOUBLE_CLICK_LINK_ROLE = Qt::UserRole + 2;
|
||||
};
|
||||
|
||||
} // namespace chatterino
|
|
@ -16,6 +16,7 @@
|
|||
#include "widgets/settingspages/GeneralPage.hpp"
|
||||
#include "widgets/settingspages/HighlightingPage.hpp"
|
||||
#include "widgets/settingspages/IgnoresPage.hpp"
|
||||
#include "widgets/settingspages/ImageUploaderPage.hpp"
|
||||
#include "widgets/settingspages/KeyboardSettingsPage.hpp"
|
||||
#include "widgets/settingspages/ModerationPage.hpp"
|
||||
#include "widgets/settingspages/NicknamesPage.hpp"
|
||||
|
@ -222,6 +223,7 @@ void SettingsDialog::addTabs()
|
|||
this->addTab([]{return new ModerationPage;}, "Moderation", ":/settings/moderation.svg", SettingsTabId::Moderation);
|
||||
this->addTab([]{return new NotificationPage;}, "Live Notifications", ":/settings/notification2.svg");
|
||||
this->addTab([]{return new ExternalToolsPage;}, "External tools", ":/settings/externaltools.svg");
|
||||
this->addTab([]{return new ImageUploaderPage;}, "Image Uploader", ":/settings/imageuploader.svg");
|
||||
#ifdef CHATTERINO_HAVE_PLUGINS
|
||||
this->addTab([]{return new PluginsPage;}, "Plugins", ":/settings/plugins.svg");
|
||||
#endif
|
||||
|
|
88
src/widgets/settingspages/ImageUploaderPage.cpp
Normal file
88
src/widgets/settingspages/ImageUploaderPage.cpp
Normal file
|
@ -0,0 +1,88 @@
|
|||
#include "widgets/settingspages/ImageUploaderPage.hpp"
|
||||
|
||||
#include "Application.hpp"
|
||||
#include "singletons/imageuploader/ImageUploader.hpp"
|
||||
#include "singletons/imageuploader/UploadedImageModel.hpp"
|
||||
#include "util/LayoutCreator.hpp"
|
||||
#include "widgets/helper/EditableModelView.hpp"
|
||||
#include "widgets/listview/ImagePtrItemDelegate.hpp"
|
||||
|
||||
#include <QBoxLayout>
|
||||
#include <QDesktopServices>
|
||||
#include <QHeaderView>
|
||||
#include <QPushButton>
|
||||
#include <QTableView>
|
||||
#include <QUrl>
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
ImageUploaderPage::ImageUploaderPage()
|
||||
: imgDelegate_(new ImagePtrItemDelegate())
|
||||
{
|
||||
LayoutCreator<ImageUploaderPage> layoutCreator(this);
|
||||
auto layout = layoutCreator.emplace<QVBoxLayout>();
|
||||
|
||||
auto *model = getApp()->imageUploader->createModel(nullptr);
|
||||
//EditableModelView *view =
|
||||
// layout.emplace<EditableModelView>(model).getElement();
|
||||
|
||||
auto container = layout.emplace<QVBoxLayout>();
|
||||
container->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
auto buttons = container.emplace<QHBoxLayout>();
|
||||
auto *forget = buttons.emplace<QPushButton>().getElement();
|
||||
forget->setText("Remove image from log");
|
||||
buttons->addStretch();
|
||||
|
||||
auto *view = layout.emplace<QTableView>().getElement();
|
||||
view->setModel(model);
|
||||
|
||||
view->setItemDelegateForColumn(0, this->imgDelegate_);
|
||||
view->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||
view->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
|
||||
view->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
|
||||
model->setHeaderData(0, Qt::Horizontal, "Image (double click to open)",
|
||||
Qt::DisplayRole);
|
||||
|
||||
view->horizontalHeader()->setSectionResizeMode(
|
||||
1, QHeaderView::ResizeToContents);
|
||||
model->setHeaderData(1, Qt::Horizontal, "Date uploaded", Qt::DisplayRole);
|
||||
|
||||
view->horizontalHeader()->setSectionResizeMode(
|
||||
2, QHeaderView::ResizeToContents);
|
||||
model->setHeaderData(2, Qt::Horizontal, "Delete link", Qt::DisplayRole);
|
||||
|
||||
view->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Interactive);
|
||||
model->setHeaderData(3, Qt::Horizontal, "Path", Qt::DisplayRole);
|
||||
|
||||
QObject::connect(forget, &QPushButton::pressed, this, [view, model]() {
|
||||
auto selected = view->selectionModel()->selectedRows(0);
|
||||
std::vector<int> rows;
|
||||
for (auto &&index : selected)
|
||||
{
|
||||
rows.push_back(index.row());
|
||||
}
|
||||
|
||||
std::sort(rows.begin(), rows.end(), std::greater{});
|
||||
|
||||
for (auto &&row : rows)
|
||||
{
|
||||
model->removeRow(row);
|
||||
}
|
||||
getApp()->imageUploader->save();
|
||||
});
|
||||
QObject::connect(
|
||||
view, &QTableView::doubleClicked, [](const QModelIndex &clicked) {
|
||||
auto url = clicked.data(UploadedImageModel::DOUBLE_CLICK_LINK_ROLE)
|
||||
.toString();
|
||||
QDesktopServices::openUrl(QUrl(url));
|
||||
});
|
||||
}
|
||||
|
||||
ImageUploaderPage::~ImageUploaderPage()
|
||||
{
|
||||
delete this->imgDelegate_;
|
||||
}
|
||||
|
||||
} // namespace chatterino
|
24
src/widgets/settingspages/ImageUploaderPage.hpp
Normal file
24
src/widgets/settingspages/ImageUploaderPage.hpp
Normal file
|
@ -0,0 +1,24 @@
|
|||
#pragma once
|
||||
|
||||
#include "widgets/settingspages/SettingsPage.hpp"
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
class ImagePtrItemDelegate;
|
||||
|
||||
class ImageUploaderPage : public SettingsPage
|
||||
{
|
||||
ImagePtrItemDelegate *imgDelegate_;
|
||||
|
||||
public:
|
||||
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
|
Loading…
Reference in a new issue