File indexing completed on 2024-05-05 04:39:48

0001 /*
0002     SPDX-FileCopyrightText: 2012 Miha Čančula <miha@noughmad.eu>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "classmemberspage.h"
0008 #include "debug.h"
0009 
0010 #include <KEditListWidget>
0011 #include <QLineEdit>
0012 #include <KLocalizedString>
0013 
0014 #include <QVBoxLayout>
0015 
0016 using namespace KDevelop;
0017 
0018 class KDevelop::ClassMembersPagePrivate
0019 {
0020 public:
0021     KEditListWidget* editListWidget;
0022 };
0023 
0024 ClassMembersPage::ClassMembersPage(QWidget* parent)
0025 : QWidget(parent)
0026 , d(new ClassMembersPagePrivate)
0027 {
0028     d->editListWidget = new KEditListWidget(this);
0029     d->editListWidget->lineEdit()->setPlaceholderText(i18nc("@info:placeholder", "Variable type and identifier"));
0030 
0031     auto* layout = new QVBoxLayout(this);
0032     layout->setContentsMargins(0, 0, 0, 0);
0033     layout->addWidget(d->editListWidget);
0034     setLayout(layout);
0035 }
0036 
0037 ClassMembersPage::~ClassMembersPage()
0038 {
0039     delete d;
0040 }
0041 
0042 void ClassMembersPage::setMembers(const VariableDescriptionList& members)
0043 {
0044     QStringList memberItems;
0045     memberItems.reserve(members.size());
0046     for (const VariableDescription& variable : members) {
0047         QStringList items;
0048         items.reserve(3);
0049         if (!variable.access.isEmpty())
0050         {
0051             items << variable.access;
0052         }
0053         if (!variable.type.isEmpty())
0054         {
0055             items << variable.type;
0056         }
0057         items << variable.name;
0058         memberItems << items.join(QLatin1Char(' '));
0059     }
0060     d->editListWidget->setItems(memberItems);
0061 }
0062 
0063 VariableDescriptionList ClassMembersPage::members() const
0064 {
0065     VariableDescriptionList list;
0066     const auto items = d->editListWidget->items();
0067     for (const QString& item : items) {
0068         VariableDescription var;
0069         QStringList parts = item.split(QLatin1Char(' '));
0070         switch (parts.size())
0071         {
0072             case 1:
0073                 var.name = parts[0];
0074                 break;
0075 
0076             case 2:
0077                 var.type = parts[0];
0078                 var.name = parts[1];
0079                 break;
0080 
0081             case 3:
0082                 var.access = parts[0];
0083                 var.type = parts[1];
0084                 var.name = parts[2];
0085                 break;
0086 
0087             default:
0088                 qCDebug(PLUGIN_FILETEMPLATES) << "Malformed class member" << item;
0089                 break;
0090         }
0091 
0092         if (!var.name.isEmpty())
0093         {
0094             list << var;
0095         }
0096     }
0097     return list;
0098 }
0099 
0100 void ClassMembersPage::setFocusToFirstEditWidget()
0101 {
0102     d->editListWidget->lineEdit()->setFocus();
0103 }
0104 
0105 #include "moc_classmemberspage.cpp"