File indexing completed on 2025-02-02 04:11:21
0001 /* 0002 * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best> 0003 * 0004 * SPDX-License-Identifier: GPL-3.0-or-later 0005 */ 0006 0007 #include "document_metadata_dialog.hpp" 0008 #include "ui_document_metadata_dialog.h" 0009 #include <QEvent> 0010 0011 0012 using namespace glaxnimate::gui; 0013 using namespace glaxnimate; 0014 0015 class DocumentMetadataDialog::Private 0016 { 0017 public: 0018 Ui::DocumentMetadataDialog ui; 0019 model::Document* document; 0020 0021 void add_placeholder() 0022 { 0023 int row = ui.table_widget->rowCount() - 1; 0024 0025 auto name = new QTableWidgetItem(""); 0026 ui.table_widget->setItem(row, 0, name); 0027 0028 auto value = new QTableWidgetItem(); 0029 value->setData(Qt::DisplayRole, ""); 0030 value->setData(Qt::EditRole, ""); 0031 ui.table_widget->setItem(row, 1, value); 0032 } 0033 }; 0034 0035 DocumentMetadataDialog::DocumentMetadataDialog(model::Document* document, QWidget* parent) 0036 : QDialog(parent), d(std::make_unique<Private>()) 0037 { 0038 d->ui.setupUi(this); 0039 d->document = document; 0040 0041 d->ui.table_widget->setRowCount(d->document->metadata().size() + 1); 0042 int row = 0; 0043 for ( auto it = d->document->metadata().begin(); it != d->document->metadata().end(); ++it, row++ ) 0044 { 0045 auto name = new QTableWidgetItem(it.key()); 0046 0047 auto value = new QTableWidgetItem(); 0048 value->setData(Qt::DisplayRole, *it); 0049 value->setData(Qt::EditRole, *it); 0050 0051 0052 d->ui.table_widget->setItem(row, 0, name); 0053 d->ui.table_widget->setItem(row, 1, value); 0054 } 0055 0056 d->ui.edit_author->setText(d->document->info().author); 0057 d->ui.edit_description->setText(d->document->info().description); 0058 d->ui.edit_keywords->setPlainText(d->document->info().keywords.join("\n")); 0059 0060 d->add_placeholder(); 0061 } 0062 0063 DocumentMetadataDialog::~DocumentMetadataDialog() = default; 0064 0065 void DocumentMetadataDialog::changeEvent ( QEvent* e ) 0066 { 0067 QDialog::changeEvent(e); 0068 0069 if ( e->type() == QEvent::LanguageChange) 0070 { 0071 d->ui.retranslateUi(this); 0072 } 0073 } 0074 0075 void DocumentMetadataDialog::update_item(QTableWidgetItem* item) 0076 { 0077 int row = d->ui.table_widget->row(item); 0078 if ( row == d->ui.table_widget->rowCount() - 1 ) 0079 { 0080 if ( !item->data(Qt::EditRole).toString().isEmpty() ) 0081 { 0082 d->ui.table_widget->setRowCount(d->ui.table_widget->rowCount() + 1); 0083 d->add_placeholder(); 0084 } 0085 } 0086 else 0087 { 0088 int column = d->ui.table_widget->column(item); 0089 if ( column == 0 && item->data(Qt::EditRole).toString().isEmpty() ) 0090 { 0091 d->ui.table_widget->removeRow(d->ui.table_widget->row(item)); 0092 } 0093 } 0094 } 0095 0096 void DocumentMetadataDialog::button_clicked(QAbstractButton* button) 0097 { 0098 if ( d->ui.button_box->buttonRole(button) == QDialogButtonBox::AcceptRole ) 0099 { 0100 QVariantMap meta; 0101 for ( int row = 0; row < d->ui.table_widget->rowCount() - 1; row++ ) 0102 { 0103 QString name = d->ui.table_widget->item(row, 0)->data(Qt::EditRole).toString(); 0104 if ( name.isEmpty() ) 0105 continue; 0106 0107 meta[name] = d->ui.table_widget->item(row, 1)->data(Qt::EditRole); 0108 } 0109 0110 /// \todo undo commands (and macro) 0111 d->document->set_metadata(meta); 0112 d->document->info().author = d->ui.edit_author->text(); 0113 d->document->info().description = d->ui.edit_description->text(); 0114 d->document->info().keywords = d->ui.edit_keywords->toPlainText().split("\n"); 0115 accept(); 0116 } 0117 else 0118 { 0119 reject(); 0120 } 0121 } 0122