38 QString validCharacters = QString(
" _0-9a-zA-Z=&|<>!+*/^%?:()");
39 validCharacters.append( getDecimalPointInUserLocale() );
40 validCharacters.append( getListSeparatorInUserLocale() );
41 QString validCharactersEscaped = QRegExp::escape(validCharacters);
42 validCharactersEscaped.append(
"\\-");
43 QRegExp regExp( QString(
"([%1])*").arg(validCharactersEscaped) );
44 validator =
new QRegExpValidator(regExp,
this);
50 void VuoInputEditorMathExpressionList::setUpDialog(QDialog &dialog,
json_object *originalValue,
json_object *details)
54 this->originalValue = originalValue;
56 dialog.installEventFilter(
this);
62 QLayout * VuoInputEditorMathExpressionList::setUpRow(QDialog &dialog, QLineEdit *lineEdit)
67 QLabel *errorLabel =
new QLabel(lineEdit);
68 errorLabel->setPixmap(*errorPixmap);
69 errorLabel->adjustSize();
70 errorLabel->move(lineEdit->width() - errorLabel->width() - rowLayout->spacing(),
71 (lineEdit->height() - errorLabel->height()) / 2.);
72 errorLabel->setVisible(
false);
73 errorSymbols.insert(rowLayout, errorLabel);
76 lineEdit->setValidator(validator);
77 connect(lineEdit, &QLineEdit::editingFinished,
this, &VuoInputEditorMathExpressionList::validate);
85 void VuoInputEditorMathExpressionList::tearDownRow(QLayout *rowLayout)
87 errorSymbols.remove(rowLayout);
94 json_object * VuoInputEditorMathExpressionList::getAcceptedValue(
void)
96 if (! isMathExpressionListValid())
105 QList<QString> VuoInputEditorMathExpressionList::convertToLineEditListFormat(
json_object *value)
107 QList<QString> lineEditTexts;
111 for (
unsigned long i = 1; i <= expressionCount; ++i)
114 QString expressionString = convertToUserLocale(expression);
115 lineEditTexts.append(expressionString);
118 return lineEditTexts;
124 json_object * VuoInputEditorMathExpressionList::convertFromLineEditListFormat(
const QList<QString> &lineEditTexts)
126 VuoList_VuoText expressions = getExpressionsFromLineEditTexts(lineEditTexts);
140 VuoList_VuoText VuoInputEditorMathExpressionList::getExpressionsFromLineEditTexts(
const QList<QString> &lineEditTexts)
144 foreach (QString lineEditText, lineEditTexts)
146 if (! lineEditText.isEmpty())
148 QString expressionString = convertFromUserLocale(lineEditText);
160 QString VuoInputEditorMathExpressionList::convertToUserLocale(QString valueInStandardLocale)
162 return valueInStandardLocale
163 .replace(
',', getListSeparatorInUserLocale())
164 .replace(
'.', getDecimalPointInUserLocale());
170 QString VuoInputEditorMathExpressionList::convertFromUserLocale(QString valueInUserLocale)
172 return valueInUserLocale
173 .replace(getDecimalPointInUserLocale(),
'.')
174 .replace(getListSeparatorInUserLocale(),
',');
180 QChar VuoInputEditorMathExpressionList::getDecimalPointInUserLocale(
void)
182 return QLocale().decimalPoint();
188 QChar VuoInputEditorMathExpressionList::getListSeparatorInUserLocale(
void)
190 return getDecimalPointInUserLocale() ==
'.' ?
',' :
';';
196 void VuoInputEditorMathExpressionList::validate()
198 validateMathExpressionList(
false);
204 void VuoInputEditorMathExpressionList::validateMathExpressionList(
bool shouldCheckForAtLeastOneExpression)
206 QString errorMessageString;
210 VuoList_VuoText expressions = getExpressionsFromLineEditTexts(lineEditTexts);
213 if (hasNoExpressions)
215 if (shouldCheckForAtLeastOneExpression)
216 errorMessageString =
"There must be at least one math expression.";
222 hasError = (error != NULL);
242 foreach (QLabel *errorSymbol, errorSymbols.values())
243 errorSymbol->setVisible(
false);
245 if (! errorMessageString.isEmpty())
247 errorMessage =
new QLabel(errorMessageString);
248 errorMessage->setWordWrap(
true);
251 if (errorExpressions)
254 for (
unsigned long i = 1; i <= count; ++i)
259 int nonEmptyStringIndex = 0;
260 for (index = 0; index < lineEditTexts.size(); ++index)
261 if (! lineEditTexts.at(index).isEmpty())
262 if (nonEmptyStringIndex++ == indexIgnoringEmptyStrings)
266 QLabel *errorSymbol = errorSymbols.value(rowLayout);
267 errorSymbol->setVisible(
true);
279 bool VuoInputEditorMathExpressionList::isMathExpressionListValid(
void)
285 return ! hasError && ! hasNoExpressions;
292 bool VuoInputEditorMathExpressionList::eventFilter(QObject *o, QEvent *event)
294 if (event->type() == QEvent::KeyPress)
296 QKeyEvent *keyEvent =
static_cast<QKeyEvent *
>(event);
297 if (keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return)
299 validateMathExpressionList(
true);
300 if (! isMathExpressionListValid())