18 #include "PropertyEditor.h"
22 #include <QPushButton>
23 #include <QTableWidget>
24 #include <QHBoxLayout>
26 #include <QFileDialog>
29 #include "PropertyButton.h"
30 #include "NCLStructure.h"
32 using namespace composer::language;
37 ui =
new Ui::PropertyEditorWidget();
40 connect(ui->tableWidget,
41 SIGNAL(itemChanged(QTableWidgetItem *)),
43 SLOT(updateWithItemChanges(QTableWidgetItem *)),
44 Qt::DirectConnection);
46 connect(ui->filterLineEdit,
47 SIGNAL(filterTextChanged(
const QString&)),
49 SLOT(filterProperties(
const QString&)));
51 internalPropertyChange =
false;
61 this->currentTagname = tagname;
65 propertyToLine.clear();
66 propertyToValue.clear();
68 while(ui->tableWidget->rowCount())
69 ui->tableWidget->removeRow(0);
74 map <QString, bool> *attrs =
75 NCLStructure::getInstance()->getAttributes(currentTagname);
79 map <QString, bool>::iterator it;
82 for(i=0,it = attrs->begin(); it != attrs->end(); ++it, i++)
84 QString currentAttr = (*it).first;
85 propertyToValue[currentAttr] =
"";
89 filterProperties(this->currentFilterString);
94 this->currentName = name;
95 ui->label->setText(currentTagname +
":" + currentName);
100 if(!errorMessage.isEmpty())
101 ui->label_ErrorMessage->setText(
" (" + errorMessage +
")");
103 ui->label_ErrorMessage->setText(
"");
105 if(!errorMessage.isNull() && !errorMessage.isEmpty())
107 ui->frame_Name->setStyleSheet(
"color: red;");
110 ui->frame_Name->setStyleSheet(
"color: black;");
121 if(propertyToValue.contains(property) && propertyToLine.contains(property))
123 int line = propertyToLine.value(property);
126 if(isURL(currentTagname, property))
129 (ui->tableWidget->cellWidget(line, 1));
133 if(item->text() != value)
136 item->setText(value);
137 propertyToValue[property] = value;
143 QTableWidgetItem *item = ui->tableWidget->item(line, 1);
147 if(item->text() != value)
149 internalPropertyChange =
true;
150 item->setText(value);
151 propertyToValue[property] = value;
158 void PropertyEditor::updateWithItemChanges(QTableWidgetItem *item)
161 int row = ui->tableWidget->row(item);
162 int column = ui->tableWidget->column(item);
164 if(column == 0)
return;
166 if(internalPropertyChange)
168 internalPropertyChange =
false;
172 QTableWidgetItem *leftItem = ui->tableWidget->item(row, column-1);
173 QString name =
"", value =
"";
177 name = leftItem->text();
183 value = item->text();
186 propertyToValue[name] = value;
187 emit propertyChanged(name, value);
190 void PropertyEditor::filterProperties(
const QString& text)
192 this->currentFilterString = text;
193 while(ui->tableWidget->rowCount())
194 ui->tableWidget->removeRow(0);
196 propertyToLine.clear();
199 foreach( attr, propertyToValue.keys() )
201 if(attr.toLower().startsWith(text.toLower()))
203 QTableWidgetItem *item =
new QTableWidgetItem(attr);
204 QTableWidgetItem *itemValue =
new QTableWidgetItem(propertyToValue[attr]);
206 ui->tableWidget->insertRow(ui->tableWidget->rowCount());
207 internalPropertyChange =
true;
208 ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, 0, item);
209 propertyToLine.insert(attr, ui->tableWidget->rowCount()-1);
211 internalPropertyChange =
true;
212 ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, 1, itemValue);
214 if(isURL(currentTagname, attr))
217 ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, 1,
220 control->setText(propertyToValue[attr]);
223 QObject::connect(control,SIGNAL(newValue(QString,QString)),
224 SIGNAL(propertyChanged(QString,QString)));
231 bool PropertyEditor::isURL(
const QString &tagname,
const QString &attr)
234 return (attr ==
"src" ||
235 attr ==
"focusSrc" ||
236 attr ==
"focusSelSrc" ||
237 attr ==
"documentURI");