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

View file

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

View file

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

View file

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

View file

@ -18,137 +18,142 @@ ArtModel::ArtModel(const QDir &definitionDirectory, const QDir &assetDirectory)
: QAbstractTableModel()
{
piecesFuture = new QFutureWatcher<ArtPiece>(this);
connect(piecesFuture, &QFutureWatcher<ArtPiece>::resultReadyAt, this, &ArtModel::pieceFinished);
connect(piecesFuture, &QFutureWatcher<ArtPiece>::finished, this, &ArtModel::finished);
connect(piecesFuture, &QFutureWatcher<ArtPiece>::resultReadyAt, this, &ArtModel::pieceFinished);
connect(piecesFuture, &QFutureWatcher<ArtPiece>::finished, this, &ArtModel::finished);
struct PieceInformation {
QString definition;
QString asset;
};
QVector<PieceInformation> pieceList;
QDirIterator it(definitionDirectory);
while (it.hasNext()) {
QFileInfo info(it.next());
if(!info.isFile()) {
continue;
}
struct PieceInformation {
QString definition;
QString asset;
};
QVector<PieceInformation> pieceList;
QDirIterator it(definitionDirectory);
while (it.hasNext()) {
QFileInfo info(it.next());
if (!info.isFile()) {
continue;
}
pieceList.push_back(PieceInformation{definitionDirectory.absoluteFilePath(info.baseName()), assetDirectory.absoluteFilePath(info.baseName())});
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 {
ArtPiece p;
loadData(p, info.definition, info.asset);
std::function<ArtPiece(const PieceInformation &info)> loadPiece = [this](const PieceInformation &info) -> ArtPiece {
ArtPiece p;
loadData(p, info.definition, info.asset);
p.image.load(p.filename);
p.thumbnail = QPixmap::fromImage(p.image).scaled(100, 100, Qt::AspectRatioMode::KeepAspectRatio).toImage();
p.image.load(p.filename);
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);
return m_artPieces.size();
}
int ArtModel::columnCount(const QModelIndex &parent) const {
int ArtModel::columnCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return 4;
}
QVariant ArtModel::data(const QModelIndex &index, int role) const {
if (!index.isValid())
return {};
QVariant ArtModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return {};
if (role == Qt::DisplayRole) {
switch(index.column()) {
case 0:
return m_artPieces[index.row()].filename;
case 1:
return {};
case 2:
return m_artPieces[index.row()].title;
case 3:
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();
if (role == Qt::DisplayRole) {
switch (index.column()) {
case 0:
return m_artPieces[index.row()].filename;
case 1:
return {};
case 2:
return m_artPieces[index.row()].title;
case 3:
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 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) {
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));
return QAbstractTableModel::headerData(section, orientation, role);
}
void ArtModel::finished() {
std::sort(m_artPieces.begin(), m_artPieces.end(), [](ArtPiece& a, ArtPiece& b)
{
return a.date > b.date;
});
void ArtModel::loadData(ArtPiece &piece, const QString &filename, const QString &assetFilename)
{
piece.jsonFilename = filename + ".json";
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>
struct ArtPiece {
QString filename, jsonFilename;
QString title;
QJsonObject object;
QString filename, jsonFilename;
QString title;
QJsonObject object;
QDate date;
QImage image, thumbnail;
QDate date;
QImage image, thumbnail;
bool hasAltText = false;
bool hasAltText = false;
};
class ArtModel : public QAbstractTableModel {
Q_OBJECT
class ArtModel : public QAbstractTableModel
{
Q_OBJECT
public:
explicit ArtModel(const QDir &definitionDirectory, const QDir &assetDirectory);
[[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 headerData(int section, Qt::Orientation orientation, 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;
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 finished();
void pieceFinished(int index);
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 pieceListView = new QTableView();
pieceListView->setModel(model);
pieceListView->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows);
pieceListView->setSelectionMode(QAbstractItemView::SingleSelection);
pieceListView->setModel(model);
pieceListView->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows);
pieceListView->setSelectionMode(QAbstractItemView::SingleSelection);
QHeaderView *verticalHeader = pieceListView->verticalHeader();
verticalHeader->setSectionResizeMode(QHeaderView::ResizeToContents);
QHeaderView *verticalHeader = pieceListView->verticalHeader();
verticalHeader->setSectionResizeMode(QHeaderView::ResizeToContents);
QHeaderView *horizontalHeader = pieceListView->horizontalHeader();
horizontalHeader->setSectionResizeMode(QHeaderView::ResizeToContents);
QHeaderView *horizontalHeader = pieceListView->horizontalHeader();
horizontalHeader->setSectionResizeMode(QHeaderView::ResizeToContents);
connect(pieceListView, &QListView::clicked, this, [this, assetDirectory](QModelIndex index) {
const QString filename = index.data(Qt::UserRole + 1).toString();
const QJsonObject object = index.data(Qt::UserRole).toJsonObject();
connect(pieceListView, &QListView::clicked, this, [this, assetDirectory](QModelIndex index) {
const QString filename = index.data(Qt::UserRole + 1).toString();
const QJsonObject object = index.data(Qt::UserRole).toJsonObject();
auto window = new ArtDetailWindow(filename, assetDirectory, this);
window->show();
});
auto window = new ArtDetailWindow(filename, assetDirectory, this);
window->show();
});
setCentralWidget(pieceListView);
setCentralWidget(pieceListView);
}

View file

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

View file

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

View file

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

View file

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