Run clang-format

This commit is contained in:
Joshua Goins 2023-08-31 13:39:59 +02:00
parent 892d6a7fff
commit 1dc80b96d1
11 changed files with 378 additions and 356 deletions

View file

@ -15,23 +15,25 @@
#include <QPushButton> #include <QPushButton>
#include <QScrollArea> #include <QScrollArea>
ArtConfigWindow::ArtConfigWindow(const QString& filename, QWidget* parent) : QDialog(parent) { ArtConfigWindow::ArtConfigWindow(const QString &filename, QWidget *parent)
setWindowModality(Qt::WindowModality::WindowModal); : QDialog(parent)
setWindowTitle(filename); {
setWindowModality(Qt::WindowModality::WindowModal);
setWindowTitle(filename);
auto mainLayout = new QHBoxLayout(); auto mainLayout = new QHBoxLayout();
setLayout(mainLayout); setLayout(mainLayout);
auto formLayout = new QFormLayout(); auto formLayout = new QFormLayout();
auto formLayoutWidget = new QWidget(); auto formLayoutWidget = new QWidget();
formLayoutWidget->setMaximumWidth(450); formLayoutWidget->setMaximumWidth(450);
formLayoutWidget->setLayout(formLayout); formLayoutWidget->setLayout(formLayout);
mainLayout->addWidget(formLayoutWidget); mainLayout->addWidget(formLayoutWidget);
auto galleryScrollArea = new QScrollArea(); auto galleryScrollArea = new QScrollArea();
formLayout->addWidget(galleryScrollArea); formLayout->addWidget(galleryScrollArea);
m_newBannerEdit = new QLineEdit(); m_newBannerEdit = new QLineEdit();
formLayout->addRow(i18nc("@label:textbox", "New Banner"), m_newBannerEdit); formLayout->addRow(i18nc("@label:textbox", "New Banner"), m_newBannerEdit);
m_commissionsOpen = new QCheckBox(); m_commissionsOpen = new QCheckBox();
@ -51,35 +53,36 @@ ArtConfigWindow::ArtConfigWindow(const QString& filename, QWidget* parent) : QDi
}); });
bottomButtonLayout->addWidget(saveButton); bottomButtonLayout->addWidget(saveButton);
if(QFile::exists(filename)) { if (QFile::exists(filename)) {
loadData(filename); loadData(filename);
} }
} }
void ArtConfigWindow::loadData(const QString& filename) { void ArtConfigWindow::loadData(const QString &filename)
qDebug() << "Loading data from" << filename; {
qDebug() << "Loading data from" << filename;
QFile artFile(filename); QFile artFile(filename);
artFile.open(QFile::ReadOnly); artFile.open(QFile::ReadOnly);
QJsonDocument artJson = QJsonDocument::fromJson(artFile.readAll()); QJsonDocument artJson = QJsonDocument::fromJson(artFile.readAll());
m_newBannerEdit->setText(artJson[QStringLiteral("new-banner")].toString()); m_newBannerEdit->setText(artJson[QStringLiteral("new-banner")].toString());
m_commissionsOpen->setChecked(artJson[QStringLiteral("commissions")].toBool()); m_commissionsOpen->setChecked(artJson[QStringLiteral("commissions")].toBool());
} }
void ArtConfigWindow::saveData(const QString& filename) { void ArtConfigWindow::saveData(const QString &filename)
qDebug() << "Saving data to" << filename; {
qDebug() << "Saving data to" << filename;
QJsonObject object; QJsonObject object;
object[QStringLiteral("new-banner")] = m_newBannerEdit->text(); object[QStringLiteral("new-banner")] = m_newBannerEdit->text();
object[QStringLiteral("commissions")] = m_commissionsOpen->isChecked(); object[QStringLiteral("commissions")] = m_commissionsOpen->isChecked();
QJsonDocument jsonDoc(object); QJsonDocument jsonDoc(object);
QFile file(filename); QFile file(filename);
file.open(QFile::WriteOnly); file.open(QFile::WriteOnly);
file.write(jsonDoc.toJson()); file.write(jsonDoc.toJson());
file.close(); file.close();
close(); close();
} }

View file

@ -6,22 +6,23 @@
#include <QCheckBox> #include <QCheckBox>
#include <QDateEdit> #include <QDateEdit>
#include <QDialog>
#include <QJsonObject> #include <QJsonObject>
#include <QLineEdit> #include <QLineEdit>
#include <QListWidget> #include <QListWidget>
#include <QStringListModel> #include <QStringListModel>
#include <QTextEdit> #include <QTextEdit>
#include <QDialog>
class ArtConfigWindow : public QDialog { class ArtConfigWindow : public QDialog
Q_OBJECT {
Q_OBJECT
public: public:
explicit ArtConfigWindow(const QString& filename, QWidget* parent = nullptr); explicit ArtConfigWindow(const QString &filename, QWidget *parent = nullptr);
private: private:
void loadData(const QString& filename); void loadData(const QString &filename);
void saveData(const QString& filename); void saveData(const QString &filename);
QLineEdit* m_newBannerEdit = nullptr; QLineEdit *m_newBannerEdit = nullptr;
QCheckBox* m_commissionsOpen = nullptr; QCheckBox *m_commissionsOpen = nullptr;
}; };

View file

@ -22,23 +22,23 @@ ArtDetailWindow::ArtDetailWindow(const QString &filename, const QDir &assetDirec
: QDialog(parent) : QDialog(parent)
{ {
setMinimumWidth(800); setMinimumWidth(800);
setMinimumHeight(600); setMinimumHeight(600);
setWindowModality(Qt::WindowModality::WindowModal); setWindowModality(Qt::WindowModality::WindowModal);
setWindowTitle(filename); setWindowTitle(filename);
QFileInfo info(filename); QFileInfo info(filename);
QString withoutExtension = info.completeBaseName(); QString withoutExtension = info.completeBaseName();
auto mainLayout = new QHBoxLayout(); auto mainLayout = new QHBoxLayout();
setLayout(mainLayout); setLayout(mainLayout);
auto formLayout = new QFormLayout(); auto formLayout = new QFormLayout();
auto formLayoutWidget = new QWidget(); auto formLayoutWidget = new QWidget();
formLayoutWidget->setMaximumWidth(450); formLayoutWidget->setMaximumWidth(450);
formLayoutWidget->setLayout(formLayout); formLayoutWidget->setLayout(formLayout);
mainLayout->addWidget(formLayoutWidget); mainLayout->addWidget(formLayoutWidget);
QImage image; QImage image;
image.load(assetDirectory.absoluteFilePath(QStringLiteral("%1.webp").arg(withoutExtension))); image.load(assetDirectory.absoluteFilePath(QStringLiteral("%1.webp").arg(withoutExtension)));
auto previewBox = new QGroupBox(i18nc("@title:group", "Preview")); auto previewBox = new QGroupBox(i18nc("@title:group", "Preview"));
@ -47,20 +47,20 @@ ArtDetailWindow::ArtDetailWindow(const QString &filename, const QDir &assetDirec
auto previewLayout = new QVBoxLayout(); auto previewLayout = new QVBoxLayout();
previewBox->setLayout(previewLayout); previewBox->setLayout(previewLayout);
auto imageView = new ImageLabel(); auto imageView = new ImageLabel();
imageView->setPixmap(QPixmap::fromImage(image)); imageView->setPixmap(QPixmap::fromImage(image));
previewLayout->addWidget(imageView); previewLayout->addWidget(imageView);
m_titleEdit = new QLineEdit(); m_titleEdit = new QLineEdit();
formLayout->addRow(i18nc("@label:textbox", "Title"), m_titleEdit); formLayout->addRow(i18nc("@label:textbox", "Title"), m_titleEdit);
m_knowExactDateBox = new QCheckBox(); m_knowExactDateBox = new QCheckBox();
connect(m_knowExactDateBox, &QCheckBox::toggled, this, [this](bool checked) { connect(m_knowExactDateBox, &QCheckBox::toggled, this, [this](bool checked) {
if (checked) { if (checked) {
m_dateEdit->setDisplayFormat(QStringLiteral("yyyy-MM-dd")); m_dateEdit->setDisplayFormat(QStringLiteral("yyyy-MM-dd"));
} else { } else {
m_dateEdit->setDisplayFormat(QStringLiteral("yyyy")); m_dateEdit->setDisplayFormat(QStringLiteral("yyyy"));
} }
}); });
formLayout->addRow(i18nc("@option:check", "Know Exact Date?"), m_knowExactDateBox); formLayout->addRow(i18nc("@option:check", "Know Exact Date?"), m_knowExactDateBox);
@ -68,15 +68,15 @@ ArtDetailWindow::ArtDetailWindow(const QString &filename, const QDir &assetDirec
m_dateEdit->setCalendarPopup(true); m_dateEdit->setCalendarPopup(true);
formLayout->addRow(QStringLiteral("Date"), m_dateEdit); formLayout->addRow(QStringLiteral("Date"), m_dateEdit);
m_altTextEdit = new QTextEdit(); m_altTextEdit = new QTextEdit();
m_altTextEdit->setAcceptRichText(false); m_altTextEdit->setAcceptRichText(false);
formLayout->addRow(QStringLiteral("Alt Text"), m_altTextEdit); formLayout->addRow(QStringLiteral("Alt Text"), m_altTextEdit);
m_descriptionEdit = new QTextEdit(); m_descriptionEdit = new QTextEdit();
m_descriptionEdit->setAcceptRichText(false); m_descriptionEdit->setAcceptRichText(false);
formLayout->addRow(QStringLiteral("Description"), m_descriptionEdit); formLayout->addRow(QStringLiteral("Description"), m_descriptionEdit);
m_nsfwBox = new QCheckBox(); m_nsfwBox = new QCheckBox();
formLayout->addRow(i18nc("@option:check", "Is NSFW?"), m_nsfwBox); formLayout->addRow(i18nc("@option:check", "Is NSFW?"), m_nsfwBox);
m_mastodonUrlEdit = new QLineEdit(); m_mastodonUrlEdit = new QLineEdit();
@ -97,17 +97,17 @@ ArtDetailWindow::ArtDetailWindow(const QString &filename, const QDir &assetDirec
auto characterList = new QListView(); auto characterList = new QListView();
m_characterListModel = new QStringListModel(); m_characterListModel = new QStringListModel();
characterList->setModel(m_characterListModel); characterList->setModel(m_characterListModel);
charactersLayout->addWidget(characterList); charactersLayout->addWidget(characterList);
auto characterButtonLayout = new QHBoxLayout(); auto characterButtonLayout = new QHBoxLayout();
charactersLayout->addLayout(characterButtonLayout); charactersLayout->addLayout(characterButtonLayout);
auto addCharacterButton = new QPushButton(QIcon::fromTheme(QStringLiteral("list-add")), i18nc("@action:button", "Add")); auto addCharacterButton = new QPushButton(QIcon::fromTheme(QStringLiteral("list-add")), i18nc("@action:button", "Add"));
connect(addCharacterButton, &QPushButton::clicked, this, [this] { connect(addCharacterButton, &QPushButton::clicked, this, [this] {
auto tmp = m_characterListModel->stringList(); auto tmp = m_characterListModel->stringList();
; ;
tmp.push_back(QStringLiteral("New Character")); tmp.push_back(QStringLiteral("New Character"));
m_characterListModel->setStringList(tmp); m_characterListModel->setStringList(tmp);
}); });
characterButtonLayout->addWidget(addCharacterButton); characterButtonLayout->addWidget(addCharacterButton);
characterButtonLayout->addStretch(1); characterButtonLayout->addStretch(1);
@ -117,9 +117,9 @@ ArtDetailWindow::ArtDetailWindow(const QString &filename, const QDir &assetDirec
if (characterList->selectionModel()->hasSelection()) { if (characterList->selectionModel()->hasSelection()) {
const QString toRemove = characterList->selectionModel()->selectedRows()[0].data().toString(); const QString toRemove = characterList->selectionModel()->selectedRows()[0].data().toString();
auto tmp = m_characterListModel->stringList(); auto tmp = m_characterListModel->stringList();
tmp.removeOne(toRemove); tmp.removeOne(toRemove);
m_characterListModel->setStringList(tmp); m_characterListModel->setStringList(tmp);
} }
}); });
characterButtonLayout->addWidget(removeCharacterButton); characterButtonLayout->addWidget(removeCharacterButton);
@ -130,17 +130,17 @@ ArtDetailWindow::ArtDetailWindow(const QString &filename, const QDir &assetDirec
auto tagsList = new QListView(); auto tagsList = new QListView();
m_tagsListModel = new QStringListModel(); m_tagsListModel = new QStringListModel();
tagsList->setModel(m_tagsListModel); tagsList->setModel(m_tagsListModel);
tagLayout->addWidget(tagsList); tagLayout->addWidget(tagsList);
auto tagButtonLayout = new QHBoxLayout(); auto tagButtonLayout = new QHBoxLayout();
tagLayout->addLayout(tagButtonLayout); tagLayout->addLayout(tagButtonLayout);
auto addTagButton = new QPushButton(QIcon::fromTheme(QStringLiteral("list-add")), i18nc("@action:button", "Add")); auto addTagButton = new QPushButton(QIcon::fromTheme(QStringLiteral("list-add")), i18nc("@action:button", "Add"));
connect(addTagButton, &QPushButton::clicked, this, [this] { connect(addTagButton, &QPushButton::clicked, this, [this] {
auto tmp = m_tagsListModel->stringList(); auto tmp = m_tagsListModel->stringList();
; ;
tmp.push_back(QStringLiteral("New Tag")); tmp.push_back(QStringLiteral("New Tag"));
m_tagsListModel->setStringList(tmp); m_tagsListModel->setStringList(tmp);
}); });
tagButtonLayout->addWidget(addTagButton); tagButtonLayout->addWidget(addTagButton);
tagButtonLayout->addStretch(1); tagButtonLayout->addStretch(1);
@ -150,15 +150,15 @@ ArtDetailWindow::ArtDetailWindow(const QString &filename, const QDir &assetDirec
if (tagsList->selectionModel()->hasSelection()) { if (tagsList->selectionModel()->hasSelection()) {
const QString toRemove = tagsList->selectionModel()->selectedRows()[0].data().toString(); const QString toRemove = tagsList->selectionModel()->selectedRows()[0].data().toString();
auto tmp = m_tagsListModel->stringList(); auto tmp = m_tagsListModel->stringList();
tmp.removeOne(toRemove); tmp.removeOne(toRemove);
m_tagsListModel->setStringList(tmp); m_tagsListModel->setStringList(tmp);
} }
}); });
tagButtonLayout->addWidget(removeTagButton); tagButtonLayout->addWidget(removeTagButton);
auto bottomButtonLayout = new QHBoxLayout(); auto bottomButtonLayout = new QHBoxLayout();
formLayout->addRow(bottomButtonLayout); formLayout->addRow(bottomButtonLayout);
auto cancelButton = new QPushButton(QIcon::fromTheme(QStringLiteral("dialog-close")), i18nc("@action:button", "Cancel")); auto cancelButton = new QPushButton(QIcon::fromTheme(QStringLiteral("dialog-close")), i18nc("@action:button", "Cancel"));
connect(cancelButton, &QPushButton::clicked, this, &ArtDetailWindow::close); connect(cancelButton, &QPushButton::clicked, this, &ArtDetailWindow::close);
@ -171,120 +171,121 @@ ArtDetailWindow::ArtDetailWindow(const QString &filename, const QDir &assetDirec
}); });
bottomButtonLayout->addWidget(saveButton); bottomButtonLayout->addWidget(saveButton);
if(QFile::exists(filename)) { if (QFile::exists(filename)) {
loadData(filename); loadData(filename);
} }
} }
void ArtDetailWindow::loadData(const QString& filename) { void ArtDetailWindow::loadData(const QString &filename)
qDebug() << "Loading data from" << filename; {
qDebug() << "Loading data from" << filename;
QFile artFile(filename); QFile artFile(filename);
artFile.open(QFile::ReadOnly); artFile.open(QFile::ReadOnly);
QJsonDocument artJson = QJsonDocument::fromJson(artFile.readAll()); QJsonDocument artJson = QJsonDocument::fromJson(artFile.readAll());
if(artJson.object().contains(QStringLiteral("title"))) if (artJson.object().contains(QStringLiteral("title")))
m_titleEdit->setText(artJson[QStringLiteral("title")].toString()); m_titleEdit->setText(artJson[QStringLiteral("title")].toString());
if(artJson.object().contains(QStringLiteral("alt_text"))) if (artJson.object().contains(QStringLiteral("alt_text")))
m_altTextEdit->setText(artJson[QStringLiteral("alt_text")].toString()); m_altTextEdit->setText(artJson[QStringLiteral("alt_text")].toString());
if(artJson.object().contains(QStringLiteral("description"))) if (artJson.object().contains(QStringLiteral("description")))
m_descriptionEdit->setText(artJson[QStringLiteral("description")].toString()); m_descriptionEdit->setText(artJson[QStringLiteral("description")].toString());
m_knowExactDateBox->setChecked(artJson[QStringLiteral("date")].toString().contains(QStringLiteral("-"))); m_knowExactDateBox->setChecked(artJson[QStringLiteral("date")].toString().contains(QStringLiteral("-")));
if(m_knowExactDateBox->isChecked()) { if (m_knowExactDateBox->isChecked()) {
m_dateEdit->setDate(QDate::fromString(artJson[QStringLiteral("date")].toString(), QStringLiteral("yyyy-MM-dd"))); m_dateEdit->setDate(QDate::fromString(artJson[QStringLiteral("date")].toString(), QStringLiteral("yyyy-MM-dd")));
m_dateEdit->setDisplayFormat(QStringLiteral("yyyy-MM-dd")); m_dateEdit->setDisplayFormat(QStringLiteral("yyyy-MM-dd"));
} else { } else {
m_dateEdit->setDate(QDate::fromString(artJson[QStringLiteral("date")].toString(), QStringLiteral("yyyy"))); m_dateEdit->setDate(QDate::fromString(artJson[QStringLiteral("date")].toString(), QStringLiteral("yyyy")));
m_dateEdit->setDisplayFormat(QStringLiteral("yyyy")); m_dateEdit->setDisplayFormat(QStringLiteral("yyyy"));
} }
if(artJson.object().contains(QStringLiteral("nsfw"))) if (artJson.object().contains(QStringLiteral("nsfw")))
m_nsfwBox->setChecked(artJson[QStringLiteral("nsfw")].toBool()); m_nsfwBox->setChecked(artJson[QStringLiteral("nsfw")].toBool());
if(artJson.object().contains(QStringLiteral("mastodon_url"))) if (artJson.object().contains(QStringLiteral("mastodon_url")))
m_mastodonUrlEdit->setText(artJson[QStringLiteral("mastodon_url")].toString()); m_mastodonUrlEdit->setText(artJson[QStringLiteral("mastodon_url")].toString());
if(artJson.object().contains(QStringLiteral("pixiv_url"))) if (artJson.object().contains(QStringLiteral("pixiv_url")))
m_pixivUrlEdit->setText(artJson[QStringLiteral("pixiv_url")].toString()); m_pixivUrlEdit->setText(artJson[QStringLiteral("pixiv_url")].toString());
if(artJson.object().contains(QStringLiteral("newgrounds_url"))) if (artJson.object().contains(QStringLiteral("newgrounds_url")))
m_newgroundsUrlEdit->setText(artJson[QStringLiteral("newgrounds_url")].toString()); m_newgroundsUrlEdit->setText(artJson[QStringLiteral("newgrounds_url")].toString());
if(artJson.object().contains(QStringLiteral("program"))) if (artJson.object().contains(QStringLiteral("program")))
m_programEdit->setText(artJson[QStringLiteral("program")].toString()); m_programEdit->setText(artJson[QStringLiteral("program")].toString());
if(artJson.object().contains(QStringLiteral("characters"))) { if (artJson.object().contains(QStringLiteral("characters"))) {
QStringList list; QStringList list;
for(auto character : artJson[QStringLiteral("characters")].toArray()) { for (auto character : artJson[QStringLiteral("characters")].toArray()) {
list.append(character.toString()); list.append(character.toString());
} }
m_characterListModel->setStringList(list); m_characterListModel->setStringList(list);
} }
if(artJson.object().contains(QStringLiteral("tags"))) { if (artJson.object().contains(QStringLiteral("tags"))) {
QStringList list; QStringList list;
for(auto tag : artJson[QStringLiteral("tags")].toArray()) { for (auto tag : artJson[QStringLiteral("tags")].toArray()) {
list.append(tag.toString()); list.append(tag.toString());
} }
m_tagsListModel->setStringList(list); m_tagsListModel->setStringList(list);
} }
} }
void ArtDetailWindow::saveData(const QString& filename) { void ArtDetailWindow::saveData(const QString &filename)
qDebug() << "Saving data to" << filename; {
qDebug() << "Saving data to" << filename;
QJsonObject object; QJsonObject object;
if(!m_titleEdit->text().isEmpty()) if (!m_titleEdit->text().isEmpty())
object[QStringLiteral("title")] = m_titleEdit->text(); object[QStringLiteral("title")] = m_titleEdit->text();
if(!m_altTextEdit->document()->isEmpty()) if (!m_altTextEdit->document()->isEmpty())
object[QStringLiteral("alt_text")] = m_altTextEdit->document()->toPlainText(); object[QStringLiteral("alt_text")] = m_altTextEdit->document()->toPlainText();
if(!m_descriptionEdit->document()->isEmpty()) if (!m_descriptionEdit->document()->isEmpty())
object[QStringLiteral("description")] = m_descriptionEdit->document()->toPlainText(); object[QStringLiteral("description")] = m_descriptionEdit->document()->toPlainText();
if(m_knowExactDateBox->isChecked()) { if (m_knowExactDateBox->isChecked()) {
object[QStringLiteral("date")] = m_dateEdit->date().toString(QStringLiteral("yyyy-MM-dd")); object[QStringLiteral("date")] = m_dateEdit->date().toString(QStringLiteral("yyyy-MM-dd"));
} else { } else {
object[QStringLiteral("date")] = m_dateEdit->date().toString(QStringLiteral("yyyy")); object[QStringLiteral("date")] = m_dateEdit->date().toString(QStringLiteral("yyyy"));
} }
if(m_nsfwBox->isChecked()) if (m_nsfwBox->isChecked())
object[QStringLiteral("nsfw")] = m_nsfwBox->isChecked(); object[QStringLiteral("nsfw")] = m_nsfwBox->isChecked();
if(!m_mastodonUrlEdit->text().isEmpty()) if (!m_mastodonUrlEdit->text().isEmpty())
object[QStringLiteral("mastodon_url")] = m_mastodonUrlEdit->text(); object[QStringLiteral("mastodon_url")] = m_mastodonUrlEdit->text();
if(!m_pixivUrlEdit->text().isEmpty()) if (!m_pixivUrlEdit->text().isEmpty())
object[QStringLiteral("pixiv_url")] = m_pixivUrlEdit->text(); object[QStringLiteral("pixiv_url")] = m_pixivUrlEdit->text();
if(!m_newgroundsUrlEdit->text().isEmpty()) if (!m_newgroundsUrlEdit->text().isEmpty())
object[QStringLiteral("newgrounds_url")] = m_newgroundsUrlEdit->text(); object[QStringLiteral("newgrounds_url")] = m_newgroundsUrlEdit->text();
if(!m_programEdit->text().isEmpty()) if (!m_programEdit->text().isEmpty())
object[QStringLiteral("program")] = m_programEdit->text(); object[QStringLiteral("program")] = m_programEdit->text();
auto tags = m_tagsListModel->stringList(); auto tags = m_tagsListModel->stringList();
if(!tags.isEmpty()) { if (!tags.isEmpty()) {
object[QStringLiteral("tags")] = QJsonArray::fromStringList(tags); object[QStringLiteral("tags")] = QJsonArray::fromStringList(tags);
} }
auto characters = m_characterListModel->stringList(); auto characters = m_characterListModel->stringList();
if(!characters.isEmpty()) { if (!characters.isEmpty()) {
object[QStringLiteral("characters")] = QJsonArray::fromStringList(characters); object[QStringLiteral("characters")] = QJsonArray::fromStringList(characters);
} }
QJsonDocument jsonDoc(object); QJsonDocument jsonDoc(object);
QFile file(filename); QFile file(filename);
file.open(QFile::WriteOnly); file.open(QFile::WriteOnly);
file.write(jsonDoc.toJson()); file.write(jsonDoc.toJson());
file.close(); file.close();
close(); close();
} }

View file

@ -14,27 +14,28 @@
#include <QStringListModel> #include <QStringListModel>
#include <QTextEdit> #include <QTextEdit>
class ArtDetailWindow : public QDialog { class ArtDetailWindow : public QDialog
Q_OBJECT {
Q_OBJECT
public: public:
ArtDetailWindow(const QString &filename, const QDir &assetDirectory, QWidget *parent = nullptr); ArtDetailWindow(const QString &filename, const QDir &assetDirectory, QWidget *parent = nullptr);
private: private:
void loadData(const QString& filename); void loadData(const QString &filename);
void saveData(const QString& filename); void saveData(const QString &filename);
QLineEdit *m_titleEdit; QLineEdit *m_titleEdit;
QTextEdit *m_altTextEdit; QTextEdit *m_altTextEdit;
QTextEdit *m_descriptionEdit; QTextEdit *m_descriptionEdit;
QCheckBox *m_knowExactDateBox; QCheckBox *m_knowExactDateBox;
QDateEdit *m_dateEdit; QDateEdit *m_dateEdit;
QLineEdit *m_newgroundsUrlEdit; QLineEdit *m_newgroundsUrlEdit;
QLineEdit *m_pixivUrlEdit; QLineEdit *m_pixivUrlEdit;
QLineEdit *m_mastodonUrlEdit; QLineEdit *m_mastodonUrlEdit;
QLineEdit *m_programEdit; QLineEdit *m_programEdit;
QCheckBox* m_nsfwBox; QCheckBox *m_nsfwBox;
QStringListModel* m_characterListModel; QStringListModel *m_characterListModel;
QStringListModel* m_tagsListModel; QStringListModel *m_tagsListModel;
}; };

View file

@ -18,137 +18,142 @@ ArtModel::ArtModel(const QDir &definitionDirectory, const QDir &assetDirectory)
: QAbstractTableModel() : QAbstractTableModel()
{ {
piecesFuture = new QFutureWatcher<ArtPiece>(this); piecesFuture = new QFutureWatcher<ArtPiece>(this);
connect(piecesFuture, &QFutureWatcher<ArtPiece>::resultReadyAt, this, &ArtModel::pieceFinished); connect(piecesFuture, &QFutureWatcher<ArtPiece>::resultReadyAt, this, &ArtModel::pieceFinished);
connect(piecesFuture, &QFutureWatcher<ArtPiece>::finished, this, &ArtModel::finished); connect(piecesFuture, &QFutureWatcher<ArtPiece>::finished, this, &ArtModel::finished);
struct PieceInformation { struct PieceInformation {
QString definition; QString definition;
QString asset; QString asset;
}; };
QVector<PieceInformation> pieceList; QVector<PieceInformation> pieceList;
QDirIterator it(definitionDirectory); QDirIterator it(definitionDirectory);
while (it.hasNext()) { while (it.hasNext()) {
QFileInfo info(it.next()); QFileInfo info(it.next());
if(!info.isFile()) { if (!info.isFile()) {
continue; continue;
} }
pieceList.push_back(PieceInformation{definitionDirectory.absoluteFilePath(info.baseName()), assetDirectory.absoluteFilePath(info.baseName())}); pieceList.push_back(PieceInformation{definitionDirectory.absoluteFilePath(info.baseName()), assetDirectory.absoluteFilePath(info.baseName())});
beginInsertRows(QModelIndex(), m_artPieces.size(), m_artPieces.size() + 1); beginInsertRows(QModelIndex(), m_artPieces.size(), m_artPieces.size() + 1);
m_artPieces.push_back(ArtPiece{}); m_artPieces.push_back(ArtPiece{});
endInsertRows(); endInsertRows();
} }
std::function<ArtPiece(const PieceInformation& info)> loadPiece = [this](const PieceInformation& info) -> ArtPiece { std::function<ArtPiece(const PieceInformation &info)> loadPiece = [this](const PieceInformation &info) -> ArtPiece {
ArtPiece p; ArtPiece p;
loadData(p, info.definition, info.asset); loadData(p, info.definition, info.asset);
p.image.load(p.filename); p.image.load(p.filename);
p.thumbnail = QPixmap::fromImage(p.image).scaled(100, 100, Qt::AspectRatioMode::KeepAspectRatio).toImage(); p.thumbnail = QPixmap::fromImage(p.image).scaled(100, 100, Qt::AspectRatioMode::KeepAspectRatio).toImage();
return p; return p;
}; };
piecesFuture->setFuture(QtConcurrent::mapped(pieceList, loadPiece)); piecesFuture->setFuture(QtConcurrent::mapped(pieceList, loadPiece));
} }
int ArtModel::rowCount(const QModelIndex &parent) const { int ArtModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent); Q_UNUSED(parent);
return m_artPieces.size(); return m_artPieces.size();
} }
int ArtModel::columnCount(const QModelIndex &parent) const { int ArtModel::columnCount(const QModelIndex &parent) const
{
Q_UNUSED(parent); Q_UNUSED(parent);
return 4; return 4;
} }
QVariant ArtModel::data(const QModelIndex &index, int role) const { QVariant ArtModel::data(const QModelIndex &index, int role) const
if (!index.isValid()) {
return {}; if (!index.isValid())
return {};
if (role == Qt::DisplayRole) { if (role == Qt::DisplayRole) {
switch(index.column()) { switch (index.column()) {
case 0: case 0:
return m_artPieces[index.row()].filename; return m_artPieces[index.row()].filename;
case 1: case 1:
return {}; return {};
case 2: case 2:
return m_artPieces[index.row()].title; return m_artPieces[index.row()].title;
case 3: case 3:
return m_artPieces[index.row()].hasAltText; return m_artPieces[index.row()].hasAltText;
}
} else if (role == Qt::UserRole) {
return m_artPieces[index.row()].object;
} else if (role == Qt::DecorationRole) {
switch(index.column()) {
case 1:
return m_artPieces[index.row()].thumbnail;
case 3:
return m_artPieces[index.row()].hasAltText ? QIcon::fromTheme(QStringLiteral("emblem-checked")) : QIcon::fromTheme(QStringLiteral("emblem-error"));
}
} else if (role == Qt::UserRole + 1) {
return m_artPieces[index.row()].jsonFilename;
}
return {};
}
QVariant ArtModel::headerData(int section, Qt::Orientation orientation, int role) const {
if (orientation == Qt::Orientation::Horizontal && role == Qt::DisplayRole) {
switch(section) {
case 0:
return i18nc("@title:column", "Filename");
case 1:
return i18nc("@title:column", "Image");
case 2:
return i18nc("@title:column", "Title");
case 3:
return i18nc("@title:column", "Has Alt Text");
default:
Q_UNREACHABLE();
} }
} } else if (role == Qt::UserRole) {
return m_artPieces[index.row()].object;
} else if (role == Qt::DecorationRole) {
switch (index.column()) {
case 1:
return m_artPieces[index.row()].thumbnail;
case 3:
return m_artPieces[index.row()].hasAltText ? QIcon::fromTheme(QStringLiteral("emblem-checked")) : QIcon::fromTheme(QStringLiteral("emblem-error"));
}
} else if (role == Qt::UserRole + 1) {
return m_artPieces[index.row()].jsonFilename;
}
return QAbstractTableModel::headerData(section, orientation, role); return {};
} }
QVariant ArtModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (orientation == Qt::Orientation::Horizontal && role == Qt::DisplayRole) {
switch (section) {
case 0:
return i18nc("@title:column", "Filename");
case 1:
return i18nc("@title:column", "Image");
case 2:
return i18nc("@title:column", "Title");
case 3:
return i18nc("@title:column", "Has Alt Text");
default:
Q_UNREACHABLE();
}
}
void ArtModel::loadData(ArtPiece& piece, const QString& filename, const QString& assetFilename) { return QAbstractTableModel::headerData(section, orientation, role);
piece.jsonFilename = filename + ".json";
piece.filename = assetFilename;
QFile artFile(piece.jsonFilename);
artFile.open(QFile::ReadOnly);
QJsonDocument artJson = QJsonDocument::fromJson(artFile.readAll());
if(artJson[QStringLiteral("date")].toString().contains(QStringLiteral("-"))) {
piece.date = QDate::fromString(artJson[QStringLiteral("date")].toString(), QStringLiteral("yyyy-MM-dd"));
} else {
piece.date = QDate::fromString(artJson[QStringLiteral("date")].toString(), QStringLiteral("yyyy"));
}
if (artJson.object().contains(QStringLiteral("title"))) {
piece.title = artJson.object()[QStringLiteral("title")].toString();
}
if(artJson.object().contains(QStringLiteral("alt_text"))) {
piece.hasAltText = true;
}
}
void ArtModel::pieceFinished(int row) {
m_artPieces[row] = piecesFuture->resultAt(row);
Q_EMIT dataChanged(index(row, 0), index(row + 1, 0));
} }
void ArtModel::finished() { void ArtModel::loadData(ArtPiece &piece, const QString &filename, const QString &assetFilename)
std::sort(m_artPieces.begin(), m_artPieces.end(), [](ArtPiece& a, ArtPiece& b) {
{ piece.jsonFilename = filename + ".json";
return a.date > b.date; piece.filename = assetFilename;
});
Q_EMIT dataChanged(index(0, 0), index(m_artPieces.size(), 0)); QFile artFile(piece.jsonFilename);
artFile.open(QFile::ReadOnly);
QJsonDocument artJson = QJsonDocument::fromJson(artFile.readAll());
if (artJson[QStringLiteral("date")].toString().contains(QStringLiteral("-"))) {
piece.date = QDate::fromString(artJson[QStringLiteral("date")].toString(), QStringLiteral("yyyy-MM-dd"));
} else {
piece.date = QDate::fromString(artJson[QStringLiteral("date")].toString(), QStringLiteral("yyyy"));
}
if (artJson.object().contains(QStringLiteral("title"))) {
piece.title = artJson.object()[QStringLiteral("title")].toString();
}
if (artJson.object().contains(QStringLiteral("alt_text"))) {
piece.hasAltText = true;
}
}
void ArtModel::pieceFinished(int row)
{
m_artPieces[row] = piecesFuture->resultAt(row);
Q_EMIT dataChanged(index(row, 0), index(row + 1, 0));
}
void ArtModel::finished()
{
std::sort(m_artPieces.begin(), m_artPieces.end(), [](ArtPiece &a, ArtPiece &b) {
return a.date > b.date;
});
Q_EMIT dataChanged(index(0, 0), index(m_artPieces.size(), 0));
} }

View file

@ -11,34 +11,35 @@
#include <QJsonObject> #include <QJsonObject>
struct ArtPiece { struct ArtPiece {
QString filename, jsonFilename; QString filename, jsonFilename;
QString title; QString title;
QJsonObject object; QJsonObject object;
QDate date; QDate date;
QImage image, thumbnail; QImage image, thumbnail;
bool hasAltText = false; bool hasAltText = false;
}; };
class ArtModel : public QAbstractTableModel { class ArtModel : public QAbstractTableModel
Q_OBJECT {
Q_OBJECT
public: public:
explicit ArtModel(const QDir &definitionDirectory, const QDir &assetDirectory); explicit ArtModel(const QDir &definitionDirectory, const QDir &assetDirectory);
[[nodiscard]] int rowCount(const QModelIndex &parent) const override; [[nodiscard]] int rowCount(const QModelIndex &parent) const override;
[[nodiscard]] int columnCount(const QModelIndex &parent) const override; [[nodiscard]] int columnCount(const QModelIndex &parent) const override;
[[nodiscard]] QVariant data(const QModelIndex &index, int role) const override; [[nodiscard]] QVariant data(const QModelIndex &index, int role) const override;
[[nodiscard]] QVariant headerData(int section, Qt::Orientation orientation, int role) const override; [[nodiscard]] QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
private: private:
void loadData(ArtPiece& piece, const QString& filename, const QString& assetFilename); void loadData(ArtPiece &piece, const QString &filename, const QString &assetFilename);
void pieceFinished(int index); void pieceFinished(int index);
void finished(); void finished();
QFutureWatcher<ArtPiece>* piecesFuture; QFutureWatcher<ArtPiece> *piecesFuture;
QList<ArtPiece> m_artPieces; QList<ArtPiece> m_artPieces;
}; };

View file

@ -32,23 +32,23 @@ MainWindow::MainWindow(const QDir &definitionDirectory, const QDir &assetDirecto
auto model = new ArtModel(definitionDirectory, assetDirectory); auto model = new ArtModel(definitionDirectory, assetDirectory);
auto pieceListView = new QTableView(); auto pieceListView = new QTableView();
pieceListView->setModel(model); pieceListView->setModel(model);
pieceListView->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows); pieceListView->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows);
pieceListView->setSelectionMode(QAbstractItemView::SingleSelection); pieceListView->setSelectionMode(QAbstractItemView::SingleSelection);
QHeaderView *verticalHeader = pieceListView->verticalHeader(); QHeaderView *verticalHeader = pieceListView->verticalHeader();
verticalHeader->setSectionResizeMode(QHeaderView::ResizeToContents); verticalHeader->setSectionResizeMode(QHeaderView::ResizeToContents);
QHeaderView *horizontalHeader = pieceListView->horizontalHeader(); QHeaderView *horizontalHeader = pieceListView->horizontalHeader();
horizontalHeader->setSectionResizeMode(QHeaderView::ResizeToContents); horizontalHeader->setSectionResizeMode(QHeaderView::ResizeToContents);
connect(pieceListView, &QListView::clicked, this, [this, assetDirectory](QModelIndex index) { connect(pieceListView, &QListView::clicked, this, [this, assetDirectory](QModelIndex index) {
const QString filename = index.data(Qt::UserRole + 1).toString(); const QString filename = index.data(Qt::UserRole + 1).toString();
const QJsonObject object = index.data(Qt::UserRole).toJsonObject(); const QJsonObject object = index.data(Qt::UserRole).toJsonObject();
auto window = new ArtDetailWindow(filename, assetDirectory, this); auto window = new ArtDetailWindow(filename, assetDirectory, this);
window->show(); window->show();
}); });
setCentralWidget(pieceListView); setCentralWidget(pieceListView);
} }

View file

@ -7,8 +7,9 @@
#include <QDir> #include <QDir>
#include <QMainWindow> #include <QMainWindow>
class MainWindow : public QMainWindow { class MainWindow : public QMainWindow
Q_OBJECT {
Q_OBJECT
public: public:
explicit MainWindow(const QDir &definitionDirectory, const QDir &assetDirectory, const QDir &dataDirectory); explicit MainWindow(const QDir &definitionDirectory, const QDir &assetDirectory, const QDir &dataDirectory);
}; };

View file

@ -4,30 +4,37 @@
#include "imagelabel.h" #include "imagelabel.h"
ImageLabel::ImageLabel(QWidget *parent) : QLabel(parent) { ImageLabel::ImageLabel(QWidget *parent)
this->setMinimumSize(1, 1); : QLabel(parent)
setScaledContents(false); {
this->setMinimumSize(1, 1);
setScaledContents(false);
} }
void ImageLabel::setPixmap(const QPixmap &p) { void ImageLabel::setPixmap(const QPixmap &p)
pix = p; {
QLabel::setPixmap(scaledPixmap()); pix = p;
QLabel::setPixmap(scaledPixmap());
} }
int ImageLabel::heightForWidth(int width) const { int ImageLabel::heightForWidth(int width) const
return pix.isNull() ? this->height() : ((qreal) pix.height() * width) / pix.width(); {
return pix.isNull() ? this->height() : ((qreal)pix.height() * width) / pix.width();
} }
QSize ImageLabel::sizeHint() const { QSize ImageLabel::sizeHint() const
const int w = this->width(); {
return {w, heightForWidth(w)}; const int w = this->width();
return {w, heightForWidth(w)};
} }
QPixmap ImageLabel::scaledPixmap() const { QPixmap ImageLabel::scaledPixmap() const
return pix.scaled(this->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation); {
return pix.scaled(this->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
} }
void ImageLabel::resizeEvent(QResizeEvent *e) { void ImageLabel::resizeEvent(QResizeEvent *e)
{
Q_UNUSED(e); Q_UNUSED(e);
if (!pix.isNull()) { if (!pix.isNull()) {
QLabel::setPixmap(scaledPixmap()); QLabel::setPixmap(scaledPixmap());

View file

@ -6,19 +6,20 @@
#include <QLabel> #include <QLabel>
class ImageLabel : public QLabel { class ImageLabel : public QLabel
Q_OBJECT {
Q_OBJECT
public: public:
explicit ImageLabel(QWidget *parent = nullptr); explicit ImageLabel(QWidget *parent = nullptr);
[[nodiscard]] int heightForWidth(int width) const override; [[nodiscard]] int heightForWidth(int width) const override;
[[nodiscard]] QSize sizeHint() const override; [[nodiscard]] QSize sizeHint() const override;
[[nodiscard]] QPixmap scaledPixmap() const; [[nodiscard]] QPixmap scaledPixmap() const;
public Q_SLOTS: public Q_SLOTS:
void setPixmap(const QPixmap &); void setPixmap(const QPixmap &);
void resizeEvent(QResizeEvent *) override; void resizeEvent(QResizeEvent *) override;
private: private:
QPixmap pix; QPixmap pix;
}; };

View file

@ -9,7 +9,8 @@
#include "MainWindow.h" #include "MainWindow.h"
int main(int argc, char *argv[]) { int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
@ -24,17 +25,17 @@ int main(int argc, char *argv[]) {
const auto args = parser.positionalArguments(); const auto args = parser.positionalArguments();
if (args.empty()) { if (args.empty()) {
return -1; return -1;
} }
const QDir sitePath = args[0]; const QDir sitePath = args[0];
const QString defPath = sitePath.absoluteFilePath(QStringLiteral("art")); const QString defPath = sitePath.absoluteFilePath(QStringLiteral("art"));
const QDir assetPath = sitePath.absoluteFilePath(QStringLiteral("assets")); const QDir assetPath = sitePath.absoluteFilePath(QStringLiteral("assets"));
const QString artAssetPath = assetPath.absoluteFilePath(QStringLiteral("art")); const QString artAssetPath = assetPath.absoluteFilePath(QStringLiteral("art"));
const QString dataPath = sitePath.absoluteFilePath(QStringLiteral("data")); const QString dataPath = sitePath.absoluteFilePath(QStringLiteral("data"));
MainWindow window(defPath, artAssetPath, dataPath); MainWindow window(defPath, artAssetPath, dataPath);
window.show(); window.show();
return QApplication::exec(); return QApplication::exec();
} }