Run clang-format
This commit is contained in:
parent
892d6a7fff
commit
1dc80b96d1
11 changed files with 378 additions and 356 deletions
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
211
src/ArtModel.cpp
211
src/ArtModel.cpp
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
23
src/main.cpp
23
src/main.cpp
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue