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"