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"