20 p.setBrush(Qt::green);
21 p.drawEllipse(0, 0, 16, 16);
23 p.setBrush(Qt::white);
24 p.drawRect(3, 6, 10, 4);
25 p.drawRect(6, 3, 4, 10);
37 p.drawEllipse(0, 0, 16, 16);
39 p.setBrush(Qt::white);
40 p.drawRect(3, 6, 10, 4);
44 const int VuoInputEditorWithLineEditList::horizontalSpacing = 5;
45 const int VuoInputEditorWithLineEditList::verticalSpacing = 4;
53 this->allowAddingAndRemovingRows = allowAddingAndRemovingRows;
54 this->lineEditWidth = lineEditWidth;
64 dialogLayout =
new QVBoxLayout;
65 dialogLayout->setContentsMargins(0,0,0,0);
66 dialogLayout->setSizeConstraint(QLayout::SetFixedSize);
68 QWidget *dialogTopLevelWidget =
new QWidget(&dialog);
69 dialogTopLevelWidget->setLayout(dialogLayout);
70 dialogTopLevelWidget->show();
72 if (allowAddingAndRemovingRows)
75 addButton =
new QToolButton;
76 addButton->setIcon(*addIcon);
77 addButton->adjustSize();
78 addButton->setFixedSize(addButton->size());
79 addButton->setFocusPolicy( (Qt::FocusPolicy)(addButton->focusPolicy() & ~Qt::TabFocus) );
80 connect(addButton, &QAbstractButton::clicked,
this, &VuoInputEditorWithLineEditList::addRow);
83 QHBoxLayout *addButtonLayout =
new QHBoxLayout;
84 addButtonLayout->addSpacing(lineEditWidth);
85 addButtonLayout->addStretch();
86 addButtonLayout->addWidget(addButton);
87 addButtonLayout->setSpacing(horizontalSpacing);
88 addButtonLayout->setSizeConstraint(QLayout::SetFixedSize);
90 dialogLayout->addLayout(addButtonLayout);
94 foreach (QString value, values)
97 lineEdits.back()->setText(value);
100 if (! lineEdits.empty())
102 lineEdits.front()->setFocus();
103 lineEdits.front()->selectAll();
112 void VuoInputEditorWithLineEditList::addRow(
void)
116 QLineEdit *lineEdit =
new QLineEdit;
117 lineEdit->adjustSize();
118 lineEdit->resize(lineEditWidth, lineEdit->height());
119 lineEdit->setFixedSize(lineEdit->size());
120 lineEdits.append(lineEdit);
122 QLayout *rowLayout =
setUpRow(*dialog, lineEdit);
123 rowLayouts.append(rowLayout);
124 rowLayout->setSizeConstraint(QLayout::SetFixedSize);
126 dialogLayout->insertLayout(rowLayouts.size() - 1, rowLayout);
128 for (
int i = 0; i < rowLayout->count(); ++i)
130 QWidget *widgetInRow = rowLayout->itemAt(i)->widget();
133 if (widgetInRow != lineEdit)
134 widgetInRow->setFocusPolicy( (Qt::FocusPolicy)(widgetInRow->focusPolicy() & ~Qt::TabFocus) );
141 lineEdit->setFocus();
149 void VuoInputEditorWithLineEditList::removeRow(
void)
151 QAbstractButton *eventSender =
dynamic_cast<QAbstractButton *
>(sender());
152 int index = removeButtons.indexOf(eventSender);
154 QLayout *rowLayout = rowLayouts.at(index);
157 QLayoutItem *itemInRow;
158 while ((itemInRow = rowLayout->takeAt(0)) != NULL)
160 if (itemInRow->widget())
162 rowLayout->removeWidget( itemInRow->widget() );
163 delete itemInRow->widget();
168 dialogLayout->removeItem(rowLayout);
171 rowLayouts.removeAt(index);
172 lineEdits.removeAt(index);
173 removeButtons.removeAt(index);
175 if (index < lineEdits.size())
176 lineEdits.at(index)->setFocus();
177 else if (index > 0 && index == lineEdits.size())
178 lineEdits.back()->setFocus();
191 QHBoxLayout *rowLayout =
new QHBoxLayout;
192 rowLayout->setSpacing(horizontalSpacing);
193 rowLayout->addWidget(lineEdit);
195 if (allowAddingAndRemovingRows)
198 QToolButton *removeButton =
new QToolButton;
199 removeButton->setIcon(*removeIcon);
200 removeButton->adjustSize();
201 removeButton->setFixedSize(removeButton->size());
202 removeButton->move(lineEditWidth + horizontalSpacing, 0);
203 connect(removeButton, &QToolButton::clicked,
this, &VuoInputEditorWithLineEditList::removeRow);
204 removeButtons.append(removeButton);
207 rowLayout->addStretch();
208 rowLayout->addWidget(removeButton);
234 if (index < 0 || index >= rowLayouts.size())
237 return rowLayouts.at(index);
245 dialogLayout->addWidget(widget);
246 widget->setFocusPolicy( (Qt::FocusPolicy)(widget->focusPolicy() & ~Qt::TabFocus) );
259 dialogLayout->removeWidget(widget);
277 QList<QString> texts;
278 foreach (QLineEdit *lineEdit, lineEdits)
280 texts.append(lineEdit->text());
289 void VuoInputEditorWithLineEditList::updateUI(
void)
291 static_cast<QWidget *
>(dialogLayout->parent())->adjustSize();
294 if (! lineEdits.empty())
296 foreach (QLineEdit *lineEdit, lineEdits)
297 lineEdit->removeEventFilter(
this);
299 QLineEdit *firstLineEdit = lineEdits.front();
300 QLineEdit *lastLineEdit = lineEdits.back();