source: ntrip/trunk/GnssCenter/inpedit/keyword.cpp@ 5113

Last change on this file since 5113 was 5113, checked in by mervart, 9 years ago
File size: 5.8 KB
Line 
1
2/* -------------------------------------------------------------------------
3 * RTNet GUI
4 * -------------------------------------------------------------------------
5 *
6 * Class: t_keyword
7 *
8 * Purpose: Keyword in RTNet Input File
9 *
10 * Author: L. Mervart
11 *
12 * Created: 05-Jan-2013
13 *
14 * Changes:
15 *
16 * -----------------------------------------------------------------------*/
17
18#include "keyword.h"
19#include "lineedit.h"
20#include "selwin.h"
21#include "uniline.h"
22
23using namespace std;
24using namespace GnssCenter;
25
26// Constructor
27////////////////////////////////////////////////////////////////////////////
28t_keyword::t_keyword(QString line, QTextStream& inStream, QStringList& staticLines) {
29
30 _ok = false;
31 _widget = 0; // do not delete (it is owned by layout)
32
33 int numVal = 0;
34 QTextStream in(line.toAscii(), QIODevice::ReadOnly);
35 in >> _name >> numVal;
36
37 staticLines << _name;
38
39 if (!_name.isEmpty()) {
40 _ok = true;
41
42 if (numVal == 1) {
43 _origValues.append(in.readLine().trimmed());
44 }
45 else if (numVal > 1) {
46 for (int ii = 0; ii < numVal; ii++) {
47 _origValues.append(inStream.readLine().trimmed());
48 }
49 }
50
51 while (inStream.status() == QTextStream::Ok && !inStream.atEnd()) {
52 line = inStream.readLine();
53 staticLines << line;
54 line = line.trimmed();
55 if (line.isEmpty()) {
56 break;
57 }
58 else if (line[0] == '#') {
59 int pos = 0;
60 while (true) {
61 QRegExp rx("([^#;]*)\\s+=\\s+([^#;]*)");
62 pos = rx.indexIn(line, pos);
63 if (pos == -1) {
64 break;
65 }
66 else {
67 pos += rx.matchedLength();
68 }
69 QString descKey = rx.cap(1).trimmed();
70 QString descVal = rx.cap(2).trimmed();
71 _desc[descKey] = descVal;
72 }
73 }
74 }
75
76 // Remove leading and trailing double-quotes
77 // -----------------------------------------
78 _origValues.replaceInStrings(QRegExp("^\\s*\"|\"\\s*$"), QString());
79 }
80}
81
82// Destructor
83////////////////////////////////////////////////////////////////////////////
84t_keyword::~t_keyword() {
85}
86
87// Create Widget (it will be owned by layout)
88////////////////////////////////////////////////////////////////////////////
89QWidget* t_keyword::createWidget(const QString& fldMask) {
90
91 if (_widget != 0) {
92 // TODO: exception
93 }
94
95 QString widgetType = _desc.value("widget");
96
97 if (widgetType == "checkbox") {
98 QCheckBox* chBox = new QCheckBox();
99 if (_origValues.size() && _origValues[0] == "1") {
100 chBox->setChecked(true);
101 }
102 _widget = chBox;
103 }
104 else if (widgetType == "combobox") {
105 QComboBox* cmbBox = new QComboBox();
106 cmbBox->addItems(_desc.value("cards").split(QRegExp("\\s"), QString::SkipEmptyParts));
107 if (_origValues.size()) {
108 int index = cmbBox->findText(_origValues[0]);
109 if (index != -1) {
110 cmbBox->setCurrentIndex(index);
111 }
112 }
113 _widget = cmbBox;
114 }
115 else if (widgetType == "lineedit") {
116 t_lineEdit* lineEdit = new t_lineEdit();
117 if (_origValues.size()) {
118 lineEdit->setText(_origValues[0]);
119 }
120 _widget = lineEdit;
121 }
122 else if (widgetType == "radiobutton") {
123 QRadioButton* radButt = new QRadioButton();
124 if (_origValues.size() && _origValues[0] == "1") {
125 radButt->setChecked(true);
126 }
127 _widget = radButt;
128 }
129 else if (widgetType == "selwin") {
130 t_selWin* selWin = new t_selWin();
131 if (_origValues.size()) {
132 selWin->setFileName(_origValues[0]);
133 }
134 _widget = selWin;
135 }
136 else if (widgetType == "spinbox") {
137 QSpinBox* spinBox = new QSpinBox();
138 QStringList rangeStr = _desc.value("range").split(QRegExp("\\s"), QString::SkipEmptyParts);
139 if (rangeStr.size() >= 1) spinBox->setMinimum(rangeStr[0].toInt());
140 if (rangeStr.size() >= 2) spinBox->setMaximum(rangeStr[1].toInt());
141 if (rangeStr.size() >= 3) spinBox->setSingleStep(rangeStr[2].toInt());
142 if (_origValues.size()) {
143 spinBox->setValue(_origValues[0].toInt());
144 }
145 _widget = spinBox;
146 }
147 else if (widgetType == "uniline") {
148 _widget = new t_uniLine(fldMask, _origValues);
149 }
150
151 return _widget;
152}
153
154//
155////////////////////////////////////////////////////////////////////////////
156QStringList t_keyword::values() const {
157
158 QStringList values;
159
160 if (_widget == 0) {
161 // TODO: exception
162 }
163
164 QString widgetType = _desc.value("widget");
165
166 if (widgetType == "checkbox") {
167 QCheckBox* chBox = static_cast<QCheckBox*>(_widget);
168 if (chBox->isChecked()) {
169 values << "1";
170 }
171 else {
172 values << "0";
173 }
174 }
175 else if (widgetType == "combobox") {
176 QComboBox* cmbBox = static_cast<QComboBox*>(_widget);
177 values << cmbBox->currentText();
178 }
179 else if (widgetType == "lineedit") {
180 t_lineEdit* lineEdit = static_cast<t_lineEdit*>(_widget);
181 if (!lineEdit->text().isEmpty()) {
182 values << lineEdit->text();
183 }
184 }
185 else if (widgetType == "radiobutton") {
186 QRadioButton* radButt = static_cast<QRadioButton*>(_widget);
187 if (radButt->isChecked()) {
188 values << "1";
189 }
190 else {
191 values << "0";
192 }
193 }
194 else if (widgetType == "selwin") {
195 t_selWin* selWin = static_cast<t_selWin*>(_widget);
196 }
197 else if (widgetType == "spinbox") {
198 QSpinBox* spinBox = static_cast<QSpinBox*>(_widget);
199 values << QString("%1").arg(spinBox->value());
200 }
201 else if (widgetType == "uniline") {
202 t_uniLine* uniLine = static_cast<t_uniLine*>(_widget);
203 for (int iRow = 0; iRow < uniLine->rowCount(); iRow++) {
204 QString rowStr;
205 for (int iCol = 0; iCol < uniLine->columnCount()-2; iCol++) {
206 QTableWidgetItem* item = uniLine->item(iRow, iCol);
207 if (item) {
208 if (iCol != 0) rowStr += " \"";
209 rowStr += item->text().trimmed();
210 if (iCol != uniLine->columnCount()-3) rowStr += '\"';
211 }
212 }
213 values << rowStr;
214 }
215 }
216
217 return values;
218}
219
Note: See TracBrowser for help on using the repository browser.