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

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