2
* \file frameobjectmodel.cpp
3
* Object model with frame information.
9
* Copyright (C) 2014 Urs Fleisch
11
* This file is part of Kid3.
13
* Kid3 is free software; you can redistribute it and/or modify
14
* it under the terms of the GNU General Public License as published by
15
* the Free Software Foundation; either version 2 of the License, or
16
* (at your option) any later version.
18
* Kid3 is distributed in the hope that it will be useful,
19
* but WITHOUT ANY WARRANTY; without even the implied warranty of
20
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
* GNU General Public License for more details.
23
* You should have received a copy of the GNU General Public License
24
* along with this program. If not, see <http://www.gnu.org/licenses/>.
27
#include "frameobjectmodel.h"
28
#include <QCoreApplication>
32
* @param parent parent object
34
FrameObjectModel::FrameObjectModel(QObject* parent) : QObject(parent)
41
FrameObjectModel::~FrameObjectModel()
47
* @return translated frame name.
49
QString FrameObjectModel::name() const
51
return m_frame.getExtendedType().getTranslatedName();
55
* Get internal frame name.
56
* @return internal frame name, e.g. "TXXX - User defined text information"
58
QString FrameObjectModel::internalName() const
60
QString name(m_frame.getInternalName());
62
name = m_frame.getName();
64
if (!name.isEmpty()) {
65
int nlPos = name.indexOf(QLatin1Char('\n'));
67
// probably "TXXX - User defined text information\nDescription" or
68
// "WXXX - User defined URL link\nDescription"
71
name = QCoreApplication::translate("@default", name.toLatin1().data());
78
* @return type, type Frame::Type.
80
int FrameObjectModel::type() const
82
return m_frame.getType();
87
* @return frame value.
89
QString FrameObjectModel::value() const
91
return m_frame.getValue();
98
void FrameObjectModel::setValue(const QString& value)
100
if (m_frame.getValue() != value) {
101
m_frame.setValueIfChanged(value);
102
emit valueChanged(m_frame.getValue());
110
QList<QObject*> FrameObjectModel::fields()
113
const int numFields = m_frame.getFieldList().size();
115
for (int i = 0; i < numFields; ++i) {
116
FrameFieldObject* fieldObj = new FrameFieldObject(i, this);
117
connect(fieldObj, SIGNAL(valueChanged(QVariant)),
118
this, SIGNAL(fieldsChanged()));
119
lst.append(fieldObj);
122
FrameFieldObject* fieldObj = new FrameFieldObject(-1, this);
123
connect(fieldObj, SIGNAL(valueChanged(QVariant)),
124
this, SIGNAL(fieldsChanged()));
125
lst.append(fieldObj);
134
void FrameObjectModel::setFrame(const Frame& frame)
140
* Get frame from object information.
143
Frame FrameObjectModel::getFrame() const
149
* Get binary data from data field.
150
* @return binary data, empty if not available.
152
QByteArray FrameObjectModel::getBinaryData() const
154
QVariant var(Frame::getField(m_frame, Frame::ID_Data));
156
return var.toByteArray();
164
* @param index index in field list
165
* @param parent parent object
167
FrameFieldObject::FrameFieldObject(int index, FrameObjectModel* parent) :
168
QObject(parent), m_index(index)
175
FrameFieldObject::~FrameFieldObject()
181
* @return translated field name.
183
QString FrameFieldObject::name() const
185
if (FrameObjectModel* fom = frameObject()) {
186
const Frame::FieldList& fields = fom->m_frame.getFieldList();
187
if (m_index >= 0 && m_index < fields.size()) {
188
return Frame::Field::getFieldIdName(
189
static_cast<Frame::FieldId>(fields.at(m_index).m_id));
197
* @return id, type Frame::FieldId.
199
int FrameFieldObject::id() const {
200
if (FrameObjectModel* fom = frameObject()) {
201
const Frame::FieldList& fields = fom->m_frame.getFieldList();
202
if (m_index >= 0 && m_index < fields.size()) {
203
return fields.at(m_index).m_id;
211
* @return field value.
213
QVariant FrameFieldObject::value() const {
214
if (FrameObjectModel* fom = frameObject()) {
215
const Frame::FieldList& fields = fom->m_frame.getFieldList();
216
if (m_index >= 0 && m_index < fields.size()) {
217
return fields.at(m_index).m_value;
229
void FrameFieldObject::setValue(const QVariant& value)
231
if (FrameObjectModel* fom = frameObject()) {
232
Frame::FieldList& fields = fom->m_frame.fieldList();
233
if (m_index >= 0 && m_index < fields.size()) {
234
Frame::Field& fld = fields[m_index];
235
if (fld.m_value != value) {
237
emit valueChanged(fld.m_value);
240
fom->setValue(value.toString());
247
* @return type, type Frame::Type.
249
int FrameFieldObject::type() const
251
if (FrameObjectModel* fom = frameObject()) {
254
return Frame::FT_UnknownFrame;