File indexing completed on 2024-04-28 15:52:01

0001 /*
0002     SPDX-FileCopyrightText: 2015 Laurent Montel <montel@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "widgetconfigurationtoolsbase.h"
0008 
0009 #include <KLocalizedString>
0010 #include <QIcon>
0011 
0012 #include <QDialogButtonBox>
0013 #include <QHBoxLayout>
0014 #include <QListWidget>
0015 #include <QListWidgetItem>
0016 #include <QPushButton>
0017 #include <QVBoxLayout>
0018 
0019 WidgetConfigurationToolsBase::WidgetConfigurationToolsBase(QWidget *parent)
0020     : QWidget(parent)
0021 {
0022     QHBoxLayout *hBoxLayout = new QHBoxLayout(this);
0023     m_list = new QListWidget(this);
0024     m_list->setIconSize(QSize(32, 32));
0025     hBoxLayout->addWidget(m_list);
0026 
0027     QVBoxLayout *vBoxLayout = new QVBoxLayout();
0028     m_btnAdd = new QPushButton(i18n("&Add..."), this);
0029     m_btnAdd->setIcon(QIcon::fromTheme(QStringLiteral("list-add")));
0030     vBoxLayout->addWidget(m_btnAdd);
0031     m_btnEdit = new QPushButton(i18n("&Edit..."), this);
0032     m_btnEdit->setIcon(QIcon::fromTheme(QStringLiteral("edit-rename")));
0033     m_btnEdit->setEnabled(false);
0034     vBoxLayout->addWidget(m_btnEdit);
0035     m_btnRemove = new QPushButton(i18n("&Remove"), this);
0036     m_btnRemove->setIcon(QIcon::fromTheme(QStringLiteral("list-remove")));
0037     m_btnRemove->setEnabled(false);
0038     vBoxLayout->addWidget(m_btnRemove);
0039     m_btnMoveUp = new QPushButton(i18n("Move &Up"), this);
0040     m_btnMoveUp->setIcon(QIcon::fromTheme(QStringLiteral("arrow-up")));
0041     m_btnMoveUp->setEnabled(false);
0042     vBoxLayout->addWidget(m_btnMoveUp);
0043     m_btnMoveDown = new QPushButton(i18n("Move &Down"), this);
0044     m_btnMoveDown->setIcon(QIcon::fromTheme(QStringLiteral("arrow-down")));
0045     m_btnMoveDown->setEnabled(false);
0046     vBoxLayout->addWidget(m_btnMoveDown);
0047     vBoxLayout->addStretch();
0048     hBoxLayout->addLayout(vBoxLayout);
0049 
0050     connect(m_list, &QListWidget::itemDoubleClicked, this, &WidgetConfigurationToolsBase::slotEdit);
0051     connect(m_list, &QListWidget::currentRowChanged, this, &WidgetConfigurationToolsBase::updateButtons);
0052     connect(m_btnAdd, &QPushButton::clicked, this, &WidgetConfigurationToolsBase::slotAdd);
0053     connect(m_btnEdit, &QPushButton::clicked, this, &WidgetConfigurationToolsBase::slotEdit);
0054     connect(m_btnRemove, &QPushButton::clicked, this, &WidgetConfigurationToolsBase::slotRemove);
0055     connect(m_btnMoveUp, &QPushButton::clicked, this, &WidgetConfigurationToolsBase::slotMoveUp);
0056     connect(m_btnMoveDown, &QPushButton::clicked, this, &WidgetConfigurationToolsBase::slotMoveDown);
0057 }
0058 
0059 WidgetConfigurationToolsBase::~WidgetConfigurationToolsBase()
0060 {
0061 }
0062 
0063 void WidgetConfigurationToolsBase::updateButtons()
0064 {
0065     const int row = m_list->currentRow();
0066     const int last = m_list->count() - 1;
0067 
0068     m_btnEdit->setEnabled(row != -1);
0069     m_btnRemove->setEnabled(row != -1);
0070     m_btnMoveUp->setEnabled(row > 0);
0071     m_btnMoveDown->setEnabled(row != -1 && row != last);
0072 }
0073 
0074 void WidgetConfigurationToolsBase::slotRemove()
0075 {
0076     const int row = m_list->currentRow();
0077     delete m_list->takeItem(row);
0078     updateButtons();
0079     Q_EMIT changed();
0080 }
0081 
0082 void WidgetConfigurationToolsBase::slotMoveUp()
0083 {
0084     const int row = m_list->currentRow();
0085     m_list->insertItem(row, m_list->takeItem(row - 1));
0086     m_list->scrollToItem(m_list->currentItem());
0087     updateButtons();
0088     Q_EMIT changed();
0089 }
0090 
0091 void WidgetConfigurationToolsBase::slotMoveDown()
0092 {
0093     const int row = m_list->currentRow();
0094     m_list->insertItem(row, m_list->takeItem(row + 1));
0095     m_list->scrollToItem(m_list->currentItem());
0096     updateButtons();
0097     Q_EMIT changed();
0098 }