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.cpp
|
||||||
singletons/imageuploader/ImageUploader.hpp
|
singletons/imageuploader/ImageUploader.hpp
|
||||||
singletons/imageuploader/UploadedImage.hpp
|
singletons/imageuploader/UploadedImage.hpp
|
||||||
|
singletons/imageuploader/UploadedImageModel.cpp
|
||||||
|
singletons/imageuploader/UploadedImageModel.hpp
|
||||||
singletons/Logging.cpp
|
singletons/Logging.cpp
|
||||||
singletons/Logging.hpp
|
singletons/Logging.hpp
|
||||||
singletons/NativeMessaging.cpp
|
singletons/NativeMessaging.cpp
|
||||||
|
@ -668,6 +670,8 @@ set(SOURCE_FILES
|
||||||
widgets/settingspages/PluginsPage.hpp
|
widgets/settingspages/PluginsPage.hpp
|
||||||
widgets/settingspages/SettingsPage.cpp
|
widgets/settingspages/SettingsPage.cpp
|
||||||
widgets/settingspages/SettingsPage.hpp
|
widgets/settingspages/SettingsPage.hpp
|
||||||
|
widgets/settingspages/ImageUploaderPage.cpp
|
||||||
|
widgets/settingspages/ImageUploaderPage.hpp
|
||||||
|
|
||||||
widgets/splits/ClosedSplits.cpp
|
widgets/splits/ClosedSplits.cpp
|
||||||
widgets/splits/ClosedSplits.hpp
|
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/GeneralPage.hpp"
|
||||||
#include "widgets/settingspages/HighlightingPage.hpp"
|
#include "widgets/settingspages/HighlightingPage.hpp"
|
||||||
#include "widgets/settingspages/IgnoresPage.hpp"
|
#include "widgets/settingspages/IgnoresPage.hpp"
|
||||||
|
#include "widgets/settingspages/ImageUploaderPage.hpp"
|
||||||
#include "widgets/settingspages/KeyboardSettingsPage.hpp"
|
#include "widgets/settingspages/KeyboardSettingsPage.hpp"
|
||||||
#include "widgets/settingspages/ModerationPage.hpp"
|
#include "widgets/settingspages/ModerationPage.hpp"
|
||||||
#include "widgets/settingspages/NicknamesPage.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 ModerationPage;}, "Moderation", ":/settings/moderation.svg", SettingsTabId::Moderation);
|
||||||
this->addTab([]{return new NotificationPage;}, "Live Notifications", ":/settings/notification2.svg");
|
this->addTab([]{return new NotificationPage;}, "Live Notifications", ":/settings/notification2.svg");
|
||||||
this->addTab([]{return new ExternalToolsPage;}, "External tools", ":/settings/externaltools.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
|
#ifdef CHATTERINO_HAVE_PLUGINS
|
||||||
this->addTab([]{return new PluginsPage;}, "Plugins", ":/settings/plugins.svg");
|
this->addTab([]{return new PluginsPage;}, "Plugins", ":/settings/plugins.svg");
|
||||||
#endif
|
#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