git-svn-id: svn://db.shs.com.ru/libs@473 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
72
qad/widgets/propertystorage_editor.cpp
Normal file
72
qad/widgets/propertystorage_editor.cpp
Normal file
@@ -0,0 +1,72 @@
|
||||
#include "propertystorage_editor.h"
|
||||
#include "qvariantedit.h"
|
||||
#include <QGridLayout>
|
||||
#include <QToolButton>
|
||||
|
||||
|
||||
PropertyStorageEditor::PropertyStorageEditor(QWidget * parent): QWidget(parent) {
|
||||
setLayout(new QGridLayout());
|
||||
layout()->setContentsMargins(0, 0, 0, 0);
|
||||
storage = 0;
|
||||
}
|
||||
|
||||
|
||||
PropertyStorageEditor::~PropertyStorageEditor() {
|
||||
clear();
|
||||
}
|
||||
|
||||
|
||||
void PropertyStorageEditor::clear() {
|
||||
qDeleteAll(_widgets);
|
||||
_widgets.clear();
|
||||
}
|
||||
|
||||
|
||||
bool PropertyStorageEditor::isEmpty() const {
|
||||
return ((QGridLayout*)layout())->count() == 0;
|
||||
}
|
||||
|
||||
|
||||
void PropertyStorageEditor::setStorage(PropertyStorage * s) {
|
||||
clear();
|
||||
storage = s;
|
||||
if (!storage) return;
|
||||
int r = 0;
|
||||
QGridLayout * layoutProps = (QGridLayout*)layout();
|
||||
foreach (const PropertyStorage::Property & p, *storage) {
|
||||
QLabel * lbl = new QLabel(p.name);
|
||||
_widgets << lbl;
|
||||
lbl->setAlignment(Qt::AlignVCenter | Qt::AlignRight);
|
||||
layoutProps->addWidget(lbl, r, 0);
|
||||
QVariantEdit * ve = new QVariantEdit();
|
||||
ve->setValue(p.value);
|
||||
ve->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
|
||||
ve->setMinimumWidth(50);
|
||||
connect(ve, SIGNAL(valueChanged(QVariant)), this, SIGNAL(changed()));
|
||||
layoutProps->addWidget(ve, r, 1); _widgets << ve;
|
||||
lbl = new QLabel(p.comment); lbl->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
|
||||
layoutProps->addWidget(lbl, r, 2); _widgets << lbl;
|
||||
++r;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PropertyStorageEditor::applyProperties() {
|
||||
if (!storage) return;
|
||||
QList<PropertyStorage::Property> & props(storage->properties());
|
||||
QGridLayout * layoutProps = (QGridLayout*)layout();
|
||||
for (int r = 0; r < layoutProps->rowCount(); ++r) {
|
||||
if (layoutProps->itemAtPosition(r, 0) == 0 || layoutProps->itemAtPosition(r, 1) == 0) continue;
|
||||
QLabel * lbl = qobject_cast<QLabel * >(layoutProps->itemAtPosition(r, 0)->widget());
|
||||
QVariantEdit * ve = qobject_cast<QVariantEdit * >(layoutProps->itemAtPosition(r, 1)->widget());
|
||||
if (lbl == 0 || ve == 0) continue;
|
||||
QString pn = lbl->text();
|
||||
for (int i = 0; i < props.size(); ++i) {
|
||||
PropertyStorage::Property & p(props[i]);
|
||||
if (p.name == pn) {
|
||||
p.value = ve->value();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user