File indexing completed on 2024-04-28 05:51:09

0001 /*
0002  *  SPDX-FileCopyrightText: 2002-2003 Jesper K. Pedersen <blackie@kde.org>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.0-only
0005  **/
0006 
0007 #include "kmultiformlistbox-windowed.h"
0008 
0009 #include <QVBoxLayout>
0010 
0011 #include <KGuiItem>
0012 #include <KLocalizedString>
0013 #include <KMessageBox>
0014 #include <KStandardGuiItem>
0015 #include <QListWidget>
0016 #include <QPushButton>
0017 
0018 #include "widgetwindow.h"
0019 #include "windowlistboxitem.h"
0020 
0021 KMultiFormListBoxWindowed::KMultiFormListBoxWindowed(KMultiFormListBoxFactory *factory,
0022                                                      QWidget *parent,
0023                                                      bool showUpDownButtons,
0024                                                      bool showHelpButton,
0025                                                      const QString &addButtonText)
0026     : QWidget(parent)
0027 {
0028     _layout = new QVBoxLayout(this);
0029 
0030     QHBoxLayout *innerLayout = new QHBoxLayout();
0031     _layout->addLayout(innerLayout);
0032 
0033     _listbox = new QListWidget(this);
0034     _listbox->setObjectName(QStringLiteral("listbox"));
0035     _listbox->setSelectionMode(QAbstractItemView::SingleSelection);
0036     innerLayout->addWidget(_listbox);
0037 
0038     QVBoxLayout *buttons = new QVBoxLayout();
0039     innerLayout->addLayout(buttons);
0040 
0041     QPushButton *but = new QPushButton(addButtonText, this);
0042     but->setObjectName(QStringLiteral("Add Button"));
0043     buttons->addWidget(but, 0);
0044     connect(but, &QAbstractButton::clicked, this, &KMultiFormListBoxWindowed::addNewElement);
0045 
0046     but = new QPushButton(i18n("Edit"), this);
0047     but->setObjectName(QStringLiteral("Edit Button"));
0048     buttons->addWidget(but, 0);
0049     connect(but, SIGNAL(clicked()), this, SLOT(slotEditSelected()));
0050     connect(_listbox, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(slotEditSelected(QListWidgetItem *)));
0051     _buttonList.append(but);
0052 
0053     but = new QPushButton(i18n("Delete"), this);
0054     but->setObjectName(QStringLiteral("Delete Button"));
0055     buttons->addWidget(but, 0);
0056     connect(but, &QAbstractButton::clicked, this, &KMultiFormListBoxWindowed::slotDeleteEntry);
0057     _buttonList.append(but);
0058 
0059     but = new QPushButton(i18n("Copy"), this);
0060     but->setObjectName(QStringLiteral("Copy Button"));
0061     buttons->addWidget(but, 0);
0062     connect(but, &QAbstractButton::clicked, this, &KMultiFormListBoxWindowed::slotCopySelected);
0063     _buttonList.append(but);
0064 
0065     if (showUpDownButtons) {
0066         but = new QPushButton(i18n("Up"), this);
0067         but->setObjectName(QStringLiteral("Up Button"));
0068         buttons->addWidget(but, 0);
0069         connect(but, &QAbstractButton::clicked, this, &KMultiFormListBoxWindowed::slotMoveItemUp);
0070         _buttonList.append(but);
0071 
0072         but = new QPushButton(i18n("Down"), this);
0073         but->setObjectName(QStringLiteral("Down Button"));
0074         buttons->addWidget(but, 0);
0075         connect(but, &QAbstractButton::clicked, this, &KMultiFormListBoxWindowed::slotMoveItemDown);
0076         _buttonList.append(but);
0077     }
0078 
0079     if (showHelpButton) {
0080         but = new QPushButton(this);
0081         KGuiItem::assign(but, KStandardGuiItem::help());
0082         but->setObjectName(QStringLiteral("Help Button"));
0083         buttons->addWidget(but, 0);
0084         connect(but, &QAbstractButton::clicked, this, &KMultiFormListBoxWindowed::showHelp);
0085     }
0086 
0087     buttons->addStretch(1);
0088     _factory = factory;
0089     slotUpdateButtonState();
0090 }
0091 
0092 KMultiFormListBoxEntryList KMultiFormListBoxWindowed::elements()
0093 {
0094     KMultiFormListBoxEntryList list;
0095     for (int i = 0; i < _listbox->count(); ++i) {
0096         WindowListboxItem *item = (WindowListboxItem *)_listbox->item(i);
0097         list.append(item->entry());
0098     }
0099     return list;
0100 }
0101 
0102 void KMultiFormListBoxWindowed::delElement(QWidget * /*elm*/)
0103 {
0104     // kDebug() << "KMultiFormListBoxWindowed::delElement NOT YET IMPLEMENTED";
0105     // TODO
0106 }
0107 
0108 void KMultiFormListBoxWindowed::delAnElement()
0109 {
0110     // kDebug() << "KMultiFormListBoxWindowed::delAnElement NOT YET IMPLEMENTED";
0111     // TODO
0112 }
0113 
0114 void KMultiFormListBoxWindowed::append(KMultiFormListBoxEntry *elm)
0115 {
0116     (void)new WidgetWindow(_factory, elm, _listbox);
0117     slotUpdateButtonState();
0118 }
0119 
0120 void KMultiFormListBoxWindowed::addNewElement()
0121 {
0122     // kDebug() << "addNewElement " << _factory << "," << _listbox ;
0123 
0124     QWidget *widget = new WidgetWindow(_factory, _listbox);
0125     widget->show();
0126     connect(widget, SIGNAL(finished()), this, SLOT(slotUpdateButtonState()));
0127 }
0128 
0129 void KMultiFormListBoxWindowed::addElement()
0130 {
0131     new WidgetWindow(_factory, _listbox);
0132     slotUpdateButtonState();
0133 }
0134 
0135 void KMultiFormListBoxWindowed::slotEditSelected(QListWidgetItem *item)
0136 {
0137     ((WindowListboxItem *)item)->displayWidget();
0138 }
0139 
0140 void KMultiFormListBoxWindowed::slotEditSelected()
0141 {
0142     WindowListboxItem *item = selected();
0143     if (item) {
0144         slotEditSelected(item);
0145     }
0146 }
0147 
0148 void KMultiFormListBoxWindowed::slotDeleteEntry()
0149 {
0150     WindowListboxItem *item = selected();
0151     if (item) {
0152         int answer = KMessageBox::warningContinueCancel(nullptr, i18n("Delete item \"%1\"?", item->text()), i18n("Delete Item"), KStandardGuiItem::del());
0153         if (answer == KMessageBox::Continue) {
0154             delete item;
0155             slotUpdateButtonState();
0156         }
0157     }
0158 }
0159 
0160 void KMultiFormListBoxWindowed::slotCopySelected()
0161 {
0162     WindowListboxItem *item = selected();
0163     if (item) {
0164         item->cloneItem();
0165     }
0166 }
0167 
0168 WindowListboxItem *KMultiFormListBoxWindowed::selected()
0169 {
0170     /*
0171     int i = _listbox->currentItem();
0172     if (i == -1) {
0173     return 0;
0174     } else {
0175     return (WindowListboxItem *) _listbox->item(i);
0176     }
0177     */
0178     return (WindowListboxItem *)_listbox->currentItem();
0179 }
0180 
0181 void KMultiFormListBoxWindowed::slotMoveItemUp()
0182 {
0183     WindowListboxItem *item = selected();
0184     if (item == nullptr) {
0185         return;
0186     }
0187 
0188     int index = _listbox->row(item);
0189     if (index != 0) {
0190         _listbox->takeItem(index);
0191         _listbox->insertItem(index - 1, item);
0192         _listbox->setCurrentItem(item);
0193     }
0194 }
0195 
0196 void KMultiFormListBoxWindowed::slotMoveItemDown()
0197 {
0198     WindowListboxItem *item = selected();
0199     if (item == nullptr) {
0200         return;
0201     }
0202 
0203     int index = _listbox->row(item);
0204     if (index < _listbox->count()) {
0205         _listbox->takeItem(index);
0206         _listbox->insertItem(index + 1, item);
0207         _listbox->setCurrentItem(item);
0208     }
0209 }
0210 
0211 void KMultiFormListBoxWindowed::slotUpdateButtonState()
0212 {
0213     bool on = (_listbox->count() != 0);
0214     const int nbButton = _buttonList.count();
0215     for (int i = 0; i < nbButton; i++) {
0216         _buttonList.at(i)->setEnabled(on);
0217     }
0218 }
0219 
0220 #include "moc_kmultiformlistbox-windowed.cpp"