Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_meta_data_entry.cc
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2007 Cyrille Berger <cberger@cberger.net>
3 *
4 * SPDX-License-Identifier: LGPL-2.1-or-later
5 */
6
8#include <QString>
9
10#include <kis_debug.h>
11
12#include "kis_meta_data_value.h"
14
15using namespace KisMetaData;
16
17struct Q_DECL_HIDDEN Entry::Private {
18 QString name;
19 const Schema* schema;
21 bool valid;
22};
23
24Entry::Entry() :
25 d(new Private)
26{
27 d->schema = 0;
28 d->valid = false;
29}
30
31Entry::Entry(const Schema* schema, QString name, const Value& value) :
32 d(new Private)
33{
34 Q_ASSERT(!name.isEmpty());
35 if (!isValidName(name)) {
36 errKrita << "Invalid metadata name:" << name;
37 d->name = QString("INVALID: %1").arg(name);
38 }
39 else {
40 d->name = name;
41 }
42 d->schema = schema;
43 d->value = value;
44 d->valid = true;
45}
46
47Entry::Entry(const Entry& e) : d(new Private())
48{
49 d->valid = false;
50 *this = e;
51}
52
54{
55 delete d;
56}
57
58QString Entry::name() const
59{
60 return d->name;
61}
62
63const Schema* Entry::schema() const
64{
65 Q_ASSERT(d->schema);
66 return d->schema;
67}
68
70{
71 Q_ASSERT(schema);
72 d->schema = schema;
73}
74
75QString Entry::qualifiedName() const
76{
77 Q_ASSERT(d->schema);
78 return d->schema->generateQualifiedName(d->name);
79}
80
81const Value& Entry::value() const
82{
83 return d->value;
84}
85
87{
88 return d->value;
89}
90
91bool Entry::isValid() const
92{
93 return d->valid;
94}
95
96bool Entry::isValidName(const QString& _name)
97{
98 if (_name.length() < 1) {
99 dbgMetaData << "Too small";
100 return false;
101 }
102 if (!_name[0].isLetter()) {
103 dbgMetaData << _name << " doesn't start by a letter";
104 return false;
105 }
106 for (int i = 1; i < _name.length(); ++i) {
107 QChar c = _name[i];
108 if (!c.isLetterOrNumber()) {
109 dbgMetaData << _name << " " << i << "th character isn't a letter or a digit";
110 return false;
111 }
112 }
113 return true;
114}
115
116
117bool Entry::operator==(const Entry& e) const
118{
119 return qualifiedName() == e.qualifiedName();
120}
121
123{
124 if (e.isValid()) {
125 Q_ASSERT(!isValid() || *this == e);
126 d->name = e.d->name;
127 d->schema = e.d->schema;
128 d->value = e.d->value;
129 d->valid = true;
130 }
131 return *this;
132}
133
134QDebug operator<<(QDebug debug, const Entry &c)
135{
136 debug.nospace() << "Name: " << c.name() << " Qualified name: " << c.qualifiedName() << " Value: " << c.value();
137 return debug.space();
138}
float value(const T *src, size_t ch)
QDebug KRITACOMMAND_EXPORT operator<<(QDebug dbg, const KisCumulativeUndoData &data)
QString name() const
void setSchema(const KisMetaData::Schema *schema)
const KisMetaData::Value & value() const
const KisMetaData::Schema * schema() const
Entry & operator=(const Entry &entry)
static bool isValidName(const QString &_name)
QString qualifiedName() const
bool operator==(const Entry &) const
#define errKrita
Definition kis_debug.h:107
#define dbgMetaData
Definition kis_debug.h:61
const Schema * schema