-
Notifications
You must be signed in to change notification settings - Fork 298
/
FunctionArgumentDialog.cpp
124 lines (108 loc) · 4.15 KB
/
FunctionArgumentDialog.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*
* This file is part of OpenModelica.
*
* Copyright (c) 1998-CurrentYear, Open Source Modelica Consortium (OSMC),
* c/o Linköpings universitet, Department of Computer and Information Science,
* SE-58183 Linköping, Sweden.
*
* All rights reserved.
*
* THIS PROGRAM IS PROVIDED UNDER THE TERMS OF GPL VERSION 3 LICENSE OR
* THIS OSMC PUBLIC LICENSE (OSMC-PL) VERSION 1.2.
* ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS PROGRAM CONSTITUTES
* RECIPIENT'S ACCEPTANCE OF THE OSMC PUBLIC LICENSE OR THE GPL VERSION 3,
* ACCORDING TO RECIPIENTS CHOICE.
*
* The OpenModelica software and the Open Source Modelica
* Consortium (OSMC) Public License (OSMC-PL) are obtained
* from OSMC, either from the above address,
* from the URLs: http://www.ida.liu.se/projects/OpenModelica or
* http://www.openmodelica.org, and in the OpenModelica distribution.
* GNU version 3 is obtained from: http://www.gnu.org/copyleft/gpl.html.
*
* This program is distributed WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE, EXCEPT AS EXPRESSLY SET FORTH
* IN THE BY RECIPIENT SELECTED SUBSIDIARY LICENSE CONDITIONS OF OSMC-PL.
*
* See the full OSMC Public License conditions for more details.
*
*/
#include "FunctionArgumentDialog.h"
#include "LibraryTreeWidget.h"
#include "Element/Element.h"
#include <QGridLayout>
#include <QLineEdit>
FunctionArgumentDialog::FunctionArgumentDialog(LibraryTreeItem *pLibraryTreeItem, QWidget *parent):
QDialog(parent), mpLibraryTreeItem(pLibraryTreeItem)
{
setWindowTitle(QString("%1 - %2 - %3").arg(Helper::applicationName, Helper::callFunction, pLibraryTreeItem->getNameStructure()));
setMinimumWidth(400);
QVBoxLayout *pMainLayout = new QVBoxLayout;
pMainLayout->setAlignment(Qt::AlignTop);
// Function description
QGroupBox *pDescriptionGroupBox = new QGroupBox(Helper::description);
QVBoxLayout *pDescriptionLayout = new QVBoxLayout;
pDescriptionGroupBox->setAlignment(Qt::AlignTop);
pDescriptionLayout->addWidget(new Label(mpLibraryTreeItem->mClassInformation.comment));
pDescriptionGroupBox->setLayout(pDescriptionLayout);
pMainLayout->addWidget(pDescriptionGroupBox);
// Function arguments
QList<ElementInfo*> components = mpLibraryTreeItem->getModelWidget()->getComponentsList();
QGroupBox *pInputsGroupBox = new QGroupBox(Helper::inputs);
QGridLayout *pInputsGridLayout = new QGridLayout;
pInputsGridLayout->setAlignment(Qt::AlignTop);
int row = 0;
for (int i = 0; i < components.size(); ++i) {
ElementInfo *pComponent = components[i];
if (!isInput(pComponent)) {
continue;
}
// input name
pInputsGridLayout->addWidget(new Label(pComponent->getName()), row, 0);
// input textbox
QLineEdit *pEditor = new QLineEdit();
mEditors.append(pEditor);
pInputsGridLayout->addWidget(pEditor, row, 1);
// input comment
pInputsGridLayout->addWidget(new Label(pComponent->getComment()), row, 2);
++row;
}
pInputsGroupBox->setLayout(pInputsGridLayout);
pMainLayout->addWidget(pInputsGroupBox);
QDialogButtonBox *pButtons = new QDialogButtonBox(
QDialogButtonBox::StandardButton::Ok |
QDialogButtonBox::StandardButton::Cancel);
pMainLayout->addWidget(pButtons);
connect(pButtons, SIGNAL(accepted()), SLOT(accept()));
connect(pButtons, SIGNAL(rejected()), SLOT(reject()));
setLayout(pMainLayout);
}
QString FunctionArgumentDialog::getFunctionCallCommand()
{
QString result = mpLibraryTreeItem->getNameStructure() + "(";
int inputArgIndex = 0;
QList<ElementInfo*> components = mpLibraryTreeItem->getModelWidget()->getComponentsList();
for (int i = 0; i < components.size(); ++i) {
ElementInfo *pComponent = components[i];
if (!isInput(pComponent)) {
continue;
}
QString value = mEditors[inputArgIndex]->text();
if (inputArgIndex != 0) {
result += ", ";
}
if (pComponent->getClassName() == "String") {
result += "\"" + value + "\"";
} else {
result += value;
}
++inputArgIndex;
}
result += ")";
return result;
}
bool FunctionArgumentDialog::isInput(ElementInfo *pComponentInfo)
{
return pComponentInfo->getCausality() == "input";
}