2 * This file is part of CameraPlus.
4 * Copyright (C) 2012 Mohammed Sameer <msameer@foolab.org>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 MetaData::MetaData(QObject *parent) :
32 m_orientation(MetaData::Unknown),
33 m_captureDirection(0),
35 m_longitudeValid(false),
36 m_latitudeValid(false),
37 m_elevationValid(false),
38 m_captureDirectionValid(false),
39 m_horizontalErrorValid(false),
40 m_dateTimeEnabled(true) {
44 MetaData::~MetaData() {
48 Camera *MetaData::camera() const {
52 void MetaData::setCamera(Camera *camera) {
54 QObject::disconnect(m_cam, SIGNAL(deviceChanged()), this, SLOT(deviceChanged()));
60 QObject::connect(m_cam, SIGNAL(deviceChanged()), this, SLOT(deviceChanged()));
68 QString MetaData::manufacturer() const {
69 return m_manufacturer;
72 void MetaData::setManufacturer(const QString& manufacturer) {
73 if (m_manufacturer != manufacturer) {
74 m_manufacturer = manufacturer;
75 emit manufacturerChanged();
79 QString MetaData::model() const {
83 void MetaData::setModel(const QString& model) {
84 if (m_model != model) {
90 QString MetaData::country() const {
94 void MetaData::setCountry(const QString& country) {
95 if (m_country != country) {
97 emit countryChanged();
101 QString MetaData::city() const {
105 void MetaData::setCity(const QString& city) {
106 if (m_city != city) {
112 QString MetaData::suburb() const {
116 void MetaData::setSuburb(const QString& suburb) {
117 if (m_suburb != suburb) {
119 emit suburbChanged();
123 double MetaData::longitude() const {
127 void MetaData::setLongitude(double longitude) {
128 if (!qFuzzyCompare(m_longitude, longitude)) {
129 m_longitude = longitude;
130 emit longitudeChanged();
134 double MetaData::latitude() const {
138 void MetaData::setLatitude(double latitude) {
139 if (!qFuzzyCompare(m_latitude, latitude)) {
140 m_latitude = latitude;
141 emit latitudeChanged();
145 double MetaData::elevation() const {
149 void MetaData::setElevation(double elevation) {
150 if (!qFuzzyCompare(m_elevation, elevation)) {
151 m_elevation = elevation;
152 emit elevationChanged();
156 MetaData::Orientation MetaData::orientation() const {
157 return m_orientation;
160 void MetaData::setOrientation(const MetaData::Orientation& orientation) {
161 if (m_orientation != orientation) {
162 m_orientation = orientation;
163 emit orientationChanged();
167 QString MetaData::artist() const {
171 void MetaData::setArtist(const QString& artist) {
172 // TODO: there is a limit for the number of bytes in the artist
173 if (m_artist != artist) {
175 emit artistChanged();
179 int MetaData::captureDirection() const {
180 return m_captureDirection;
183 void MetaData::setCaptureDirection(int captureDirection) {
184 if (m_captureDirection != captureDirection) {
185 m_captureDirection = captureDirection;
186 emit captureDirectionChanged();
190 double MetaData::horizontalError() const {
191 return m_horizontalError;
194 void MetaData::setHorizontalError(double horizontalError) {
195 if (!qFuzzyCompare(m_horizontalError, horizontalError)) {
196 m_horizontalError = horizontalError;
197 emit horizontalErrorChanged();
201 void MetaData::setMetaData() {
208 if (!m_manufacturer.isEmpty()) {
209 m_data->setManufacturer(m_manufacturer);
212 if (!m_model.isEmpty()) {
213 m_data->setModel(m_model);
216 if (!m_country.isEmpty()) {
217 m_data->setCountry(m_country);
220 if (!m_city.isEmpty()) {
221 m_data->setCity(m_city);
224 if (!m_suburb.isEmpty()) {
225 m_data->setSuburb(m_suburb);
228 if (m_longitudeValid) {
229 m_data->setLongitude(m_longitude);
232 if (m_latitudeValid) {
233 m_data->setLatitude(m_latitude);
236 if (m_elevationValid) {
237 m_data->setElevation(m_elevation);
240 if (m_orientation != MetaData::Unknown) {
241 m_data->setOrientation((QtCamMetaData::Orientation)m_orientation);
244 // qDebug() << m_orientation << m_captureDirection << m_captureDirectionValid;
246 if (m_captureDirectionValid) {
247 // m_data->setCaptureDirection(m_captureDirection);
251 if (!m_artist.isEmpty()) {
252 m_data->setArtist(m_artist);
255 if (m_dateTimeEnabled) {
256 m_data->setDateTime(QDateTime::currentDateTime());
259 if (m_horizontalErrorValid) {
260 m_data->setHorizontalError(m_horizontalError);
264 void MetaData::deviceChanged() {
266 delete m_data; m_data = 0;
269 m_data = new QtCamMetaData(this);
270 m_data->setDevice(m_cam->device());
273 bool MetaData::isLongitudeValid() const {
274 return m_longitudeValid;
277 void MetaData::setLongitudeValid(bool valid) {
278 if (valid != m_longitudeValid) {
279 m_longitudeValid = valid;
280 emit longitudeValidChanged();
284 bool MetaData::isLatitudeValid() const {
285 return m_latitudeValid;
288 void MetaData::setLatitudeValid(bool valid) {
289 if (valid != m_latitudeValid) {
290 m_latitudeValid = valid;
291 emit latitudeValidChanged();
295 bool MetaData::isElevationValid() const {
296 return m_elevationValid;
299 void MetaData::setElevationValid(bool valid) {
300 if (valid != m_elevationValid) {
301 m_elevationValid = valid;
302 emit elevationValidChanged();
306 bool MetaData::isCaptureDirectionValid() const {
307 return m_captureDirectionValid;
310 void MetaData::setCaptureDirectionValid(bool valid) {
311 if (valid != m_captureDirectionValid) {
312 m_captureDirectionValid = valid;
313 emit captureDirectionValidChanged();
317 bool MetaData::isHorizontalErrorValid() const {
318 return m_horizontalErrorValid;
321 void MetaData::setHorizontalErrorValid(bool valid) {
322 if (valid != m_horizontalErrorValid) {
323 m_horizontalErrorValid = valid;
324 emit horizontalErrorValidChanged();
328 bool MetaData::isDateTimeEnabled() const {
329 return m_dateTimeEnabled;
332 void MetaData::setDateTimeEnabled(bool enabled) {
333 if (m_dateTimeEnabled != enabled) {
334 m_dateTimeEnabled = enabled;
335 emit dateTimeEnabledChanged();