2
* Copyright (c) 2007 Cyrille Berger <cberger@cberger.net>
2
* Copyright (c) 2007,2010 Cyrille Berger <cberger@cberger.net>
4
4
* This program is free software; you can redistribute it and/or modify
5
5
* it under the terms of the GNU Lesser General Public License as published by
33
33
#include <kis_meta_data_schema_registry.h>
35
35
#include "kis_entry_editor.h"
36
#include <qtableview.h>
37
#include "kis_meta_data_model.h"
38
#include <QHeaderView>
37
40
struct KisMetaDataEditor::Private {
38
41
KisMetaData::Store* originalStore;
39
42
KisMetaData::Store* store;
40
QMultiHash<KisMetaData::Value*, KisEntryEditor*> entryEditors;
43
QMultiHash<QString, KisEntryEditor*> entryEditors;
92
95
const QString editorSignal = '2' + elem.attribute("editorSignal");
93
96
const QString propertyName = elem.attribute("propertyName");
94
97
const QString structureField = elem.attribute("structureField");
99
int arrayIndex = elem.attribute("arrayIndex", "-1").toInt(&ok);
100
if (!ok) arrayIndex = -1;
101
dbgPlugins << ppVar(editorName) << ppVar(arrayIndex);
96
103
QWidget* obj = widget->findChild<QWidget*>(editorName);
100
107
if (!d->store->containsEntry(schema, entryName)) {
101
108
dbgPlugins << " Store does not have yet entry :" << entryName << " in" << schemaUri << " ==" << schema->generateQualifiedName(entryName);
103
KisMetaData::Value& value = d->store->getEntry(schema, entryName).value();
104
KisEntryEditor* ee = 0;
105
if (value.type() == KisMetaData::Value::Structure && !structureField.isEmpty()) {
106
QMap<QString, KisMetaData::Value>* structure = value.asStructure();
107
ee = new KisEntryEditor(obj, &(*structure)[ structureField ], propertyName);
109
ee = new KisEntryEditor(obj, &value, propertyName);
110
QString key = schema->generateQualifiedName(entryName);
111
KisEntryEditor* ee = new KisEntryEditor(obj, d->store, key, propertyName, structureField, arrayIndex);
111
112
connect(obj, editorSignal.toAscii(), ee, SLOT(valueEdited()));
112
QList<KisEntryEditor*> otherEditors = d->entryEditors.values(&value);
113
QList<KisEntryEditor*> otherEditors = d->entryEditors.values(key);
113
114
foreach(KisEntryEditor* oe, otherEditors) {
114
115
connect(ee, SIGNAL(valueHasBeenEdited()), oe, SLOT(valueChanged()));
115
116
connect(oe, SIGNAL(valueHasBeenEdited()), ee, SLOT(valueChanged()));
117
d->entryEditors.insert(&value, ee);
118
d->entryEditors.insert(key, ee);
119
120
dbgPlugins << "Unknown schema :" << schemaUri;
136
QTableView* tableView = new QTableView;
137
KisMetaDataModel* model = new KisMetaDataModel(d->store);
138
tableView->setModel(model);
139
tableView->verticalHeader()->setVisible(false);
140
tableView->resizeColumnsToContents();
141
KPageWidgetItem *page = new KPageWidgetItem(tableView, i18n("List"));
142
page->setIcon(KIcon("format-list-unordered"));
135
146
KisMetaDataEditor::~KisMetaDataEditor()