File indexing completed on 2024-05-12 16:43:54

0001 /*
0002     SPDX-FileCopyrightText: 2014 Christian Dávid <christian-david@web.de>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "payeeidentifierselectiondelegate.h"
0007 
0008 #include <KLocalizedString>
0009 
0010 #include "models/payeeidentifiercontainermodel.h"
0011 #include "payeeidentifier/ibanbic/ibanbic.h"
0012 #include "payeeidentifier/nationalaccount/nationalaccount.h"
0013 
0014 
0015 payeeIdentifierTypeSelectionWidget::payeeIdentifierTypeSelectionWidget(QWidget* parent)
0016     : QComboBox(parent)
0017 {
0018     connect(this, SIGNAL(activated(int)), this, SLOT(itemSelected(int)));
0019 }
0020 
0021 void payeeIdentifierTypeSelectionWidget::itemSelected(int index)
0022 {
0023     if (index != 0) {
0024         emit commitData(this);
0025         setCurrentIndex(0);
0026     }
0027 }
0028 
0029 payeeIdentifierSelectionDelegate::payeeIdentifierSelectionDelegate(QObject* parent)
0030     : QStyledItemDelegate(parent)
0031 {
0032 }
0033 
0034 QWidget* payeeIdentifierSelectionDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
0035 {
0036     Q_UNUSED(option);
0037     Q_UNUSED(index);
0038 
0039     payeeIdentifierTypeSelectionWidget* comboBox = new payeeIdentifierTypeSelectionWidget(parent);
0040     comboBox->setFrame(false);
0041     connect(comboBox, SIGNAL(commitData(QWidget*)), this, SIGNAL(commitData(QWidget*)));
0042 
0043     comboBox->addItem(i18n("Please select the account number type"));
0044 
0045     const QMap<QString, QString> availableDelegates {
0046         {payeeIdentifiers::ibanBic::staticPayeeIdentifierIid(),         i18n("IBAN and BIC")},
0047         {payeeIdentifiers::nationalAccount::staticPayeeIdentifierIid(), i18n("National Account Number")}
0048     };
0049 
0050     for (auto delegate = availableDelegates.cbegin(); delegate != availableDelegates.cend(); ++delegate )
0051         comboBox->addItem(delegate.value(), delegate.key());
0052 
0053     return comboBox;
0054 }
0055 
0056 void payeeIdentifierSelectionDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const
0057 {
0058     QComboBox *const comboBox = qobject_cast<QComboBox*>(editor);
0059     const QString selectedPidType = comboBox->model()->data(comboBox->model()->index(comboBox->currentIndex(), 0), Qt::UserRole).toString();
0060     payeeIdentifier orig = model->data(index, payeeIdentifierContainerModel::payeeIdentifier).value<payeeIdentifier>();
0061 
0062     payeeIdentifier ident;
0063     if (selectedPidType == payeeIdentifiers::ibanBic::staticPayeeIdentifierIid())
0064         ident = payeeIdentifier(orig.id(), new payeeIdentifiers::ibanBic());
0065     else if (selectedPidType == payeeIdentifiers::nationalAccount::staticPayeeIdentifierIid())
0066         ident = payeeIdentifier(orig.id(), new payeeIdentifiers::nationalAccount());
0067 
0068     model->setData(index, QVariant::fromValue<payeeIdentifier>(ident), payeeIdentifierContainerModel::payeeIdentifier);
0069 }
0070 
0071 void payeeIdentifierSelectionDelegate::updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& /*index*/) const
0072 {
0073     editor->setGeometry(option.rect);
0074 }
0075 
0076 QSize payeeIdentifierSelectionDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const
0077 {
0078     return QStyledItemDelegate::sizeHint(option, index);
0079 }