File indexing completed on 2024-04-21 03:51:02
0001 /* 0002 options to enable/disable columns for the languages 0003 SPDX-FileCopyrightText: 2008 Javier goday <jgoday@gmail.com> 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "vocabularycolumnsdialog.h" 0008 0009 // parley imports 0010 #include "documentsettings.h" 0011 #include "vocabularymodel.h" 0012 0013 // KDE imports 0014 #include <KEduVocDocument> 0015 #include <KLocalizedString> 0016 #include <KTitleWidget> 0017 0018 // Qt imports 0019 #include <QDialogButtonBox> 0020 #include <QGridLayout> 0021 #include <QGroupBox> 0022 #include <QHeaderView> 0023 #include <QStandardItem> 0024 #include <QStandardItemModel> 0025 #include <QTreeView> 0026 #include <QVBoxLayout> 0027 0028 const int COLUMNS_LIMIT = 1; // columns for row 0029 0030 using namespace Editor; 0031 0032 VocabularyColumnsDialog::VocabularyColumnsDialog(KEduVocDocument *doc, QWidget *parent) 0033 : QDialog(parent) 0034 , m_doc{doc} 0035 , m_models() 0036 { 0037 QDialogButtonBox *button_dialog = new QDialogButtonBox; 0038 button_dialog->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); 0039 0040 m_box = new QGridLayout(); 0041 m_settings = new DocumentSettings(m_doc->url().url()); 0042 0043 setWindowTitle(i18nc("@title:window", "Vocabulary Columns")); 0044 0045 QWidget *main_widget = new QWidget(this); 0046 main_widget->setLayout(m_box); 0047 0048 QVBoxLayout *layout = new QVBoxLayout; 0049 layout->addWidget(main_widget); 0050 layout->addWidget(button_dialog); 0051 0052 setLayout(layout); 0053 0054 connect(button_dialog, &QDialogButtonBox::accepted, this, &VocabularyColumnsDialog::accept); 0055 connect(button_dialog, &QDialogButtonBox::rejected, this, &VocabularyColumnsDialog::reject); 0056 0057 KTitleWidget *titleWidget = new KTitleWidget(this); 0058 titleWidget->setText(i18n("Enable/Disable the columns for each language")); 0059 titleWidget->setIcon(QIcon::fromTheme(QStringLiteral("view-file-columns")), KTitleWidget::ImageRight); 0060 m_box->addWidget(titleWidget, 0, 0, 1, 2); 0061 0062 createLanguagesLayout(); 0063 } 0064 0065 VocabularyColumnsDialog::~VocabularyColumnsDialog() 0066 { 0067 delete m_settings; 0068 } 0069 0070 void VocabularyColumnsDialog::accept() 0071 { 0072 saveVisibleColumns(); 0073 QDialog::accept(); 0074 } 0075 0076 void VocabularyColumnsDialog::createLanguagesLayout() 0077 { 0078 int row = 1; 0079 int column = 0; 0080 for (int i = 0; i < m_doc->identifierCount(); i++) { 0081 m_models[i] = new QStandardItemModel(this); 0082 0083 QGroupBox *box = new QGroupBox(m_doc->identifier(i).name(), nullptr); 0084 QVBoxLayout *box_layout = new QVBoxLayout(nullptr); 0085 0086 m_box->addWidget(box, row, column); 0087 0088 if (column < COLUMNS_LIMIT) { 0089 column++; 0090 } else { 0091 row++; 0092 column = 0; 0093 } 0094 0095 box->setLayout(box_layout); 0096 0097 addLanguage(i, box_layout); 0098 } 0099 } 0100 0101 void VocabularyColumnsDialog::addLanguage(int i, QVBoxLayout *parent) 0102 { 0103 for (int c = 1; c < VocabularyModel::EntryColumnsMAX; c++) { 0104 QStandardItem *item_data = new QStandardItem(VocabularyModel::columnTitle(m_doc, i, c, /*addLocaleSuffix*/ false)); 0105 item_data->setData(QVariant(c - 1), VocabularyColumnsDialog::ColumnRole); 0106 item_data->setData(QVariant(i), VocabularyColumnsDialog::LanguageRole); 0107 item_data->setCheckable(true); 0108 item_data->setEditable(false); 0109 0110 // check if the column is active 0111 if (m_settings->visibleColumns().size() >= (i * 8 + c)) { 0112 item_data->setCheckState(m_settings->visibleColumns().at(i * 8 + c) == 1 ? Qt::Checked : Qt::Unchecked); 0113 } 0114 0115 m_models[i]->insertRow(c - 1, item_data); 0116 } 0117 0118 QTreeView *treeView = new QTreeView(this); 0119 treeView->header()->hide(); 0120 treeView->setModel(m_models[i]); 0121 0122 parent->addWidget(treeView); 0123 } 0124 0125 void VocabularyColumnsDialog::saveVisibleColumns() 0126 { 0127 QList<int> columns; 0128 0129 for (int i = 0; i < m_doc->identifierCount(); i++) { // each model for every language 0130 columns << 1; 0131 for (int row = 0; row < m_models[i]->rowCount(); row++) { // the columns for one language 0132 int enabled = (m_models[i]->item(row)->checkState() == Qt::Checked) ? 1 : 0; 0133 columns << enabled; 0134 } 0135 } 0136 0137 // i think that this is not the place for this 0138 m_settings->setVisibleColumns(columns); 0139 m_settings->save(); 0140 } 0141 0142 #include "moc_vocabularycolumnsdialog.cpp"