File indexing completed on 2024-05-19 15:46:03

0001 /*
0002     SPDX-FileCopyrightText: 2019 Daniel Mensinger <daniel@mensinger-ka.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "mesonlisteditor.h"
0008 
0009 #include "ui_mesonlisteditor.h"
0010 
0011 QListWidgetItem* genItem(const QString& label)
0012 {
0013     auto* item = new QListWidgetItem(label);
0014     item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled);
0015     return item;
0016 }
0017 
0018 MesonListEditor::MesonListEditor(const QStringList& content, QWidget* parent)
0019     : QDialog(parent)
0020 {
0021     m_ui = new Ui::MesonListEditor;
0022     m_ui->setupUi(this);
0023 
0024     for (const auto& i : content) {
0025         m_ui->array->addItem(genItem(i));
0026     }
0027 
0028     currentItemChanged();
0029 }
0030 
0031 MesonListEditor::~MesonListEditor()
0032 {
0033     if (m_ui) {
0034         delete m_ui;
0035     }
0036 }
0037 
0038 QStringList MesonListEditor::content() const
0039 {
0040     QStringList content;
0041     content.reserve(m_ui->array->count());
0042     for (int i = 0; i < m_ui->array->count(); ++i) {
0043         content << m_ui->array->item(i)->text();
0044     }
0045     return content;
0046 }
0047 
0048 void MesonListEditor::add()
0049 {
0050     auto* item = genItem(i18n("<NEW>"));
0051     m_ui->array->addItem(item);
0052     m_ui->array->setCurrentItem(item);
0053     m_ui->array->editItem(item);
0054 }
0055 
0056 void MesonListEditor::moveItem(int src, int dst)
0057 {
0058     auto* item = m_ui->array->takeItem(src);
0059     if (!item) {
0060         return;
0061     }
0062 
0063     m_ui->array->insertItem(dst, item);
0064     m_ui->array->setCurrentItem(item);
0065 }
0066 
0067 void MesonListEditor::remove()
0068 {
0069     qDeleteAll(m_ui->array->selectedItems());
0070 }
0071 
0072 void MesonListEditor::first()
0073 {
0074     int row = m_ui->array->currentRow();
0075     moveItem(row, 0);
0076 }
0077 
0078 void MesonListEditor::up()
0079 {
0080     int row = m_ui->array->currentRow();
0081     moveItem(row, row - 1);
0082 }
0083 
0084 void MesonListEditor::down()
0085 {
0086     int row = m_ui->array->currentRow();
0087     moveItem(row, row + 1);
0088 }
0089 
0090 void MesonListEditor::last()
0091 {
0092     int row = m_ui->array->currentRow();
0093     moveItem(row, m_ui->array->count() - 1);
0094 }
0095 
0096 void MesonListEditor::currentItemChanged()
0097 {
0098     auto* current = m_ui->array->currentItem();
0099     if (!current || m_ui->array->count() == 0) {
0100         m_ui->b_first->setDisabled(true);
0101         m_ui->b_up->setDisabled(true);
0102         m_ui->b_down->setDisabled(true);
0103         m_ui->b_last->setDisabled(true);
0104         m_ui->b_del->setDisabled(true);
0105         return;
0106     }
0107 
0108     int row = m_ui->array->row(current);
0109 
0110     m_ui->b_del->setDisabled(false);
0111 
0112     if (m_ui->array->count() < 2) {
0113         m_ui->b_first->setDisabled(true);
0114         m_ui->b_up->setDisabled(true);
0115         m_ui->b_down->setDisabled(true);
0116         m_ui->b_last->setDisabled(true);
0117     } else if (row == 0) {
0118         m_ui->b_first->setDisabled(true);
0119         m_ui->b_up->setDisabled(true);
0120         m_ui->b_down->setDisabled(false);
0121         m_ui->b_last->setDisabled(false);
0122     } else if (row >= m_ui->array->count() - 1) {
0123         m_ui->b_first->setDisabled(false);
0124         m_ui->b_up->setDisabled(false);
0125         m_ui->b_down->setDisabled(true);
0126         m_ui->b_last->setDisabled(true);
0127     } else {
0128         m_ui->b_first->setDisabled(false);
0129         m_ui->b_up->setDisabled(false);
0130         m_ui->b_down->setDisabled(false);
0131         m_ui->b_last->setDisabled(false);
0132     }
0133 }
0134 
0135 #include "moc_mesonlisteditor.cpp"