diff --git a/core/app/CMakeLists.txt b/core/app/CMakeLists.txt index 779d2ebb3e..eb169c9bd7 100644 --- a/core/app/CMakeLists.txt +++ b/core/app/CMakeLists.txt @@ -1,586 +1,586 @@ # # Copyright (c) 2010-2018 by Gilles Caulier, # Copyright (c) 2015 by Veaceslav Munteanu, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. if (POLICY CMP0063) cmake_policy(SET CMP0063 NEW) endif (POLICY CMP0063) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/utils/digikam_version.h.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/utils/digikam_version.h) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/utils/digikam_dbconfig.h.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/utils/digikam_dbconfig.h) # digikam core set(DIGIKAMCORE_OBJECTS $ $ $ $ $ $ $ $ $ $ $ $ $ # widgets $ $ $ $ $ # utilities $ $ $ $ $ $ $ $ $ $ $ $ + $ utils/digikam_debug.cpp ) if(Marble_FOUND) set(DIGIKAMCORE_OBJECTS ${DIGIKAMCORE_OBJECTS} $ $ $ ) endif() if(KF5AkonadiContact_FOUND) set(DIGIKAMCORE_OBJECTS ${DIGIKAMCORE_OBJECTS} $ ) endif() if(KF5Sane_FOUND) set(DIGIKAMCORE_OBJECTS ${DIGIKAMCORE_OBJECTS} $ ) endif() if(FLEX_FOUND AND BISON_FOUND AND KF5ThreadWeaver_FOUND) set(DIGIKAMCORE_OBJECTS ${DIGIKAMCORE_OBJECTS} $ ) endif() if(LibXml2_FOUND AND LibXslt_FOUND) set(DIGIKAMCORE_OBJECTS ${DIGIKAMCORE_OBJECTS} $ ) endif() if(ENABLE_MEDIAPLAYER) set(DIGIKAMCORE_OBJECTS ${DIGIKAMCORE_OBJECTS} $ ) endif() include_directories($ $ $ $ $ $ $ $ $ $ $ $ $) if(ENABLE_QWEBENGINE) include_directories($) else() include_directories($) endif() if(KF5KIO_FOUND) include_directories($) endif() if(HAVE_OPENGL) include_directories($) endif() if(Gphoto2_FOUND) include_directories(${GPHOTO2_INCLUDE_DIRS}) endif() add_library(digikamcore SHARED ${DIGIKAMCORE_OBJECTS} ) add_dependencies(digikamcore digikam-gitversion) generate_export_header(digikamcore BASE_NAME digikam EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/utils/digikam_core_export.h") target_link_libraries(digikamcore PUBLIC Qt5::Core Qt5::Gui Qt5::Xml Qt5::XmlPatterns Qt5::Widgets Qt5::Sql Qt5::PrintSupport Qt5::Concurrent KF5::Solid KF5::WindowSystem KF5::ConfigGui KF5::CoreAddons KF5::Service KF5::XmlGui KF5::I18n # Required by CImg which use pthread internally. ${CMAKE_THREAD_LIBS_INIT} ${LCMS2_LIBRARIES} # filters ${TIFF_LIBRARIES} PNG::PNG ${JPEG_LIBRARIES} ${EXIV2_LIBRARIES} ${FFMPEG_LIBRARIES} ${OPENMP_LDFLAGS} libdng ) if(ENABLE_QWEBENGINE) target_link_libraries(digikamcore PUBLIC Qt5::WebEngineWidgets) else() target_link_libraries(digikamcore PUBLIC Qt5::WebKitWidgets) endif() if(ENABLE_DBUS) target_link_libraries(digikamcore PUBLIC Qt5::DBus) endif() if(KF5IconThemes_FOUND) target_link_libraries(digikamcore PUBLIC KF5::IconThemes) endif() if(KF5KIO_FOUND) target_link_libraries(digikamcore PUBLIC KF5::KIOCore) target_link_libraries(digikamcore PUBLIC KF5::KIOWidgets) endif() if(KF5Notifications_FOUND) target_link_libraries(digikamcore PUBLIC KF5::Notifications) endif() if(KF5NotifyConfig_FOUND) target_link_libraries(digikamcore PUBLIC KF5::NotifyConfig) endif() if(Marble_FOUND) target_link_libraries(digikamcore PUBLIC ${MARBLE_LIBRARIES}) endif() if(X11_FOUND) target_link_libraries(digikamcore PUBLIC Qt5::X11Extras ${X11_LIBRARIES}) endif() if(Jasper_FOUND) target_link_libraries(digikamcore PUBLIC ${JASPER_LIBRARIES}) endif() # LibLqr-1 library rules for content-aware filter if(Lqr-1_FOUND) target_link_libraries(digikamcore PRIVATE ${LQR-1_LIBRARIES}) endif() if(LensFun_FOUND) target_include_directories(digikamcore PUBLIC ${LENSFUN_INCLUDE_DIRS}) target_link_libraries(digikamcore PUBLIC ${LENSFUN_LIBRARIES}) endif() # for nrfilter if(OpenCV_FOUND) target_link_libraries(digikamcore PRIVATE ${OpenCV_LIBRARIES}) endif() if(KF5FileMetaData_FOUND) target_link_libraries(digikamcore PUBLIC baloowrap) endif() if(HAVE_OPENGL) target_link_libraries(digikamcore PUBLIC Qt5::OpenGL ${OPENGL_LIBRARIES} ) endif() if(KF5Sane_FOUND) target_link_libraries(digikamcore PUBLIC KF5::Sane) endif() if(KF5AkonadiContact_FOUND) target_link_libraries(digikamcore PUBLIC KF5::AkonadiContact) endif() if(KF5CalendarCore_FOUND) target_link_libraries(digikamcore PUBLIC KF5::CalendarCore) endif() if(FLEX_FOUND AND BISON_FOUND AND KF5ThreadWeaver_FOUND) target_link_libraries(digikamcore PUBLIC KF5::ThreadWeaver) endif() if(LibXml2_FOUND AND LibXslt_FOUND) target_link_libraries(digikamcore PUBLIC ${LIBXSLT_EXSLT_LIBRARIES} ${LIBXSLT_LIBRARIES} ${LIBXML2_LIBRARIES}) endif() if(KF5Vkontakte_FOUND) target_link_libraries(digikamcore PUBLIC KF5::Vkontakte) endif() if(APPLE) target_link_libraries(digikamcore PUBLIC /System/Library/Frameworks/AppKit.framework) endif() if(WIN32) target_link_libraries(digikamcore PUBLIC wsock32 ws2_32) endif() if(ENABLE_MEDIAPLAYER) target_link_libraries(digikamcore PUBLIC ${QTAV_LIBRARIES}) endif() set_target_properties(digikamcore PROPERTIES VERSION ${DIGIKAM_VERSION_SHORT} SOVERSION ${DIGIKAM_VERSION_SHORT}) install(TARGETS digikamcore ${INSTALL_TARGETS_DEFAULT_ARGS}) ########################## digiKam GUI sources ############################# if(ENABLE_DBUS) qt5_add_dbus_adaptor(digikamadaptor_SRCS main/org.kde.digikam.xml main/digikamapp.h Digikam::DigikamApp) endif() set(libdigikamgui_SRCS main/digikamapp.cpp main/digikamapp_solid.cpp main/digikamapp_camera.cpp main/digikamapp_import.cpp main/digikamapp_export.cpp main/digikamapp_config.cpp main/digikamapp_tools.cpp main/digikamapp_setup.cpp date/dpopupframe.cpp date/ddateedit.cpp date/ddatetable.cpp date/ddatetable_p.cpp date/ddatepicker.cpp date/ddatepicker_p.cpp date/ddatetimeedit.cpp date/ddatepickerpopup.cpp date/datefolderview.cpp date/monthwidget.cpp date/timelinewidget.cpp dragdrop/importdragdrop.cpp dragdrop/albumdragdrop.cpp dragdrop/ddragobjects.cpp dragdrop/imagedragdrop.cpp dragdrop/tagdragdrop.cpp filters/filtersidebarwidget.cpp filters/tagfilterview.cpp items/tooltipfiller.cpp items/digikamimageview.cpp items/digikamimageview_p.cpp items/digikamimagedelegate.cpp items/imagecategorizedview.cpp items/imagecategorydrawer.cpp items/imagedelegate.cpp items/imagethumbnailbar.cpp items/imagethumbnaildelegate.cpp items/imageviewutilities.cpp items/digikamimagefacedelegate.cpp items/overlays/assignnameoverlay.cpp items/overlays/facerejectionoverlay.cpp items/overlays/groupindicatoroverlay.cpp items/overlays/imagefsoverlay.cpp items/overlays/imageratingoverlay.cpp items/overlays/imagerotationoverlay.cpp items/overlays/imagecoordinatesoverlay.cpp items/overlays/imageselectionoverlay.cpp utils/contextmenuhelper.cpp utils/digikam_debug.cpp utils/componentsinfo.cpp utils/groupingviewimplementation.cpp views/tableview/tableview.cpp views/tableview/tableview_treeview.cpp views/tableview/tableview_treeview_delegate.cpp views/tableview/tableview_column_configuration_dialog.cpp views/tableview/tableview_model.cpp views/tableview/tableview_columns.cpp views/tableview/tableview_column_audiovideo.cpp views/tableview/tableview_column_file.cpp views/tableview/tableview_column_geo.cpp views/tableview/tableview_column_digikam.cpp views/tableview/tableview_column_item.cpp views/tableview/tableview_column_photo.cpp views/tableview/tableview_column_thumbnail.cpp views/tableview/tableview_columnfactory.cpp views/tableview/tableview_selection_model_syncer.cpp views/imagepreviewviewitem.cpp views/imagepreviewview.cpp views/welcomepageview.cpp views/leftsidebarwidgets.cpp views/digikamview.cpp views/trashview.cpp views/stackedview.cpp views/sidebarwidget.cpp views/digikammodelcollection.cpp views/slideshowbuilder.cpp ${digikamadaptor_SRCS} ) if(${Marble_FOUND}) set(libdigikamgui_SRCS ${libdigikamgui_SRCS} views/mapwidgetview.cpp ) endif() add_library(digikamgui_src OBJECT ${libdigikamgui_SRCS} ) ######################### digiKam GUI objects ############################ set(DIGIKAM_OBJECTS $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ - $ ) if(${Marble_FOUND}) set(DIGIKAM_OBJECTS ${DIGIKAM_OBJECTS} $ $ ) endif() #################### Digikam GUI shared Lib ################################ add_library(digikamgui SHARED ${DIGIKAM_OBJECTS} ) target_link_libraries(digikamgui PUBLIC digikamdatabase digikamcore Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Sql Qt5::PrintSupport KF5::Solid KF5::Service KF5::WindowSystem KF5::I18n ${OpenCV_LIBRARIES} ) if(ENABLE_QWEBENGINE) target_link_libraries(digikamgui PUBLIC Qt5::WebEngineWidgets) else() target_link_libraries(digikamgui PUBLIC Qt5::WebKitWidgets) endif() if(ENABLE_DBUS) target_link_libraries(digikamgui PUBLIC Qt5::DBus) endif() if(KF5IconThemes_FOUND) target_link_libraries(digikamgui PUBLIC KF5::IconThemes) endif() if(KF5KIO_FOUND) target_link_libraries(digikamgui PUBLIC KF5::KIOWidgets) endif() if(${Marble_FOUND}) target_link_libraries(digikamgui PUBLIC ${MARBLE_LIBRARIES}) endif() if(APPLE) target_link_libraries(digikamgui PRIVATE /System/Library/Frameworks/AppKit.framework) endif() if(HAVE_OPENGL) target_link_libraries(digikamgui PUBLIC Qt5::OpenGL ${OPENGL_LIBRARIES} ) endif() if(NOT WIN32) # To link under Solaris (see bug #274484) target_link_libraries(digikamgui PUBLIC ${MATH_LIBRARY}) endif() if(WIN32) set_target_properties(digikamgui PROPERTIES COMPILE_FLAGS -DJPEG_STATIC) endif() if(CMAKE_SYSTEM_NAME STREQUAL FreeBSD) target_link_libraries(digikamgui PRIVATE ${KVM_LIBRARY}) endif() if(Gphoto2_FOUND) # See bug #258931: libgphoto2 library must be the last arg for linker. # See bug #268267 : digiKam need to be linked to libusb to prevent crash # at gphoto2 init if opencv is linked with libdc1394. Libusb linking rules are # add to gphoto2 linking rules by Gphoto2 cmake detection script. target_link_libraries(digikamgui PUBLIC ${GPHOTO2_LIBRARIES}) endif() set_target_properties(digikamgui PROPERTIES VERSION ${DIGIKAM_VERSION_SHORT} SOVERSION ${DIGIKAM_VERSION_SHORT}) install(TARGETS digikamgui ${INSTALL_TARGETS_DEFAULT_ARGS}) #################### digiKam Executable #################################### set(digikam_SRCS main/main.cpp ) # this is only required by Win & OSX file(GLOB ICONS_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/../data/icons/apps/*-apps-digikam.png") ecm_add_app_icon(digikam_SRCS ICONS ${ICONS_SRCS}) add_executable(digikam ${digikam_SRCS}) add_dependencies(digikam digikam-gitversion) # To fill plist XML file for OSX ############ set(MACOSX_APP_NAME_STRING "digikam") set(MACOSX_APP_DESCRIPTION "Advanced digital photo management application") set(MACOSX_BUNDLE_LONG_VERSION_STRING ${DIGIKAM_VERSION_STRING}) set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${DIGIKAM_VERSION_SHORT}) set(MACOSX_BUNDLE_BUNDLE_VERSION ${DIGIKAM_VERSION_STRING}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/templates/Info.plist.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) set_target_properties(digikam PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) target_link_libraries(digikam PUBLIC digikamcore digikamgui libdng Qt5::Core Qt5::Gui Qt5::Widgets KF5::WindowSystem KF5::I18n ) if(ENABLE_DBUS) target_link_libraries(digikam PUBLIC Qt5::DBus) endif() if(KF5IconThemes_FOUND) target_link_libraries(digikam PUBLIC KF5::IconThemes) endif() if(KF5KIO_FOUND) target_link_libraries(digikam PUBLIC KF5::KIOWidgets) endif() install(TARGETS digikam ${INSTALL_TARGETS_DEFAULT_ARGS}) # Others Files to install ####################################################### install(PROGRAMS main/org.kde.digikam.desktop DESTINATION ${XDG_APPS_INSTALL_DIR}) install(FILES main/org.kde.digikam.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) install(FILES main/digikamui5.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/digikam) install(FILES main/digikam.notifyrc DESTINATION ${KNOTIFYRC_INSTALL_DIR}) diff --git a/core/utilities/timeadjust/clockphotodialog.cpp b/core/utilities/timeadjust/clockphotodialog.cpp index 2e43b38703..fe75d3e39c 100644 --- a/core/utilities/timeadjust/clockphotodialog.cpp +++ b/core/utilities/timeadjust/clockphotodialog.cpp @@ -1,301 +1,290 @@ /* ============================================================ * * This file is a part of digiKam project * http://www.digikam.org * * Date : 2009-05-31 * Description : Figure out camera clock delta from a clock picture. * * Copyright (C) 2009 by Pieter Edelman

* Copyright (C) 2011-2018 by Gilles Caulier * Copyright (C) 2014 by Michael G. Hansen * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General * Public License as published by the Free Software Foundation; * either version 2, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * ============================================================ */ #include "clockphotodialog.h" // Qt includes #include #include #include #include #include #include #include #include #include #include #include // KDE includes #include #include // Local includes -#include "albummanager.h" #include "dmetadata.h" #include "imagedialog.h" #include "timeadjustcontainer.h" #include "graphicsdimgview.h" #include "dimgpreviewitem.h" -#include "collectionmanager.h" #include "dxmlguiwindow.h" namespace Digikam { class Q_DECL_HIDDEN ClockPhotoDialog::Private { public: explicit Private() { buttons = 0; calendar = 0; dtLabel = 0; previewManager = 0; } DeltaTime deltaValues; QDialogButtonBox* buttons; QDateTimeEdit* calendar; QDateTime photoDateTime; QLabel* dtLabel; GraphicsDImgView* previewManager; }; ClockPhotoDialog::ClockPhotoDialog(QWidget* const parent, const QUrl& defaultUrl) : QDialog(parent), d(new Private) { // This dialog should be modal with three buttons: Ok, Cancel, and load // photo. For this third button, the User1 button from KDialog is used. // The Ok button is only enable when a photo is loaded. setWindowTitle(i18n("Determine Time Difference With Clock Photo")); d->buttons = new QDialogButtonBox(QDialogButtonBox::Apply | QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); d->buttons->button(QDialogButtonBox::Cancel)->setDefault(true); d->buttons->button(QDialogButtonBox::Ok)->setEnabled(false); setMinimumWidth(500); setMinimumHeight(500); d->buttons->button(QDialogButtonBox::Apply)->setText(i18n("Load different photo")); d->buttons->button(QDialogButtonBox::Apply)->setIcon(QIcon::fromTheme(QLatin1String("document-open"))); QWidget* const mainWidget = new QWidget(this); QVBoxLayout* const vBox = new QVBoxLayout(mainWidget); // Some explanation. QLabel* const explanationLabel = new QLabel(i18n("If you have a photo in your set with a clock or " "another external time source on it, you can load " "it here and set the indicator to the (date and) " "time displayed. The difference of your internal " "camera clock will be determined from this " "setting.")); explanationLabel->setWordWrap(true); vBox->addWidget(explanationLabel); d->previewManager = new GraphicsDImgView(this); d->previewManager->setItem(new DImgPreviewItem()); d->previewManager->setMinimumSize(QSize(200, 200)); vBox->addWidget(d->previewManager); // The date and time entry widget allows the user to enter the date and time // displayed in the image. The format is explicitly set, otherwise seconds // might not get displayed. d->dtLabel = new QLabel(); d->calendar = new QDateTimeEdit(); d->calendar->setDisplayFormat(QLatin1String("d MMMM yyyy, hh:mm:ss")); d->calendar->setCalendarPopup(true); d->calendar->setEnabled(false); QHBoxLayout* const hBox2 = new QHBoxLayout(mainWidget); hBox2->addStretch(); hBox2->addWidget(d->dtLabel); hBox2->addWidget(d->calendar); vBox->addLayout(hBox2); vBox->addWidget(d->buttons); setLayout(vBox); // Setup the signals and slots. connect(d->buttons->button(QDialogButtonBox::Ok), SIGNAL(clicked()), this, SLOT(slotOk())); connect(d->buttons->button(QDialogButtonBox::Cancel), SIGNAL(clicked()), this, SLOT(slotCancel())); connect(d->buttons->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(slotLoadPhoto())); // Show the window. loadSettings(); show(); if (defaultUrl.isValid()) { setImage(defaultUrl); } else { // No default url was given. // Upon initialization, present the user with a photo loading dialog. This // is done before the main dialog is drawn. slotLoadPhoto(); } } ClockPhotoDialog::~ClockPhotoDialog() { delete d; } DeltaTime ClockPhotoDialog::deltaValues() const { return d->deltaValues; } bool ClockPhotoDialog::setImage(const QUrl& imageFile) { bool success = false; QString msg = i18n("Could not load
" "image %1.
", imageFile.fileName()); d->previewManager->previewItem()->setPath(imageFile.toLocalFile(), true); // Try to read the datetime data. DMetadata meta; if (meta.load(imageFile.toLocalFile())) { d->photoDateTime = meta.getImageDateTime(); if (d->photoDateTime.isValid()) { msg = i18n("The clock date and time:"); // Set the datetime widget to the photo datetime. d->calendar->setDateTime(d->photoDateTime); d->calendar->setEnabled(true); success = true; } } d->dtLabel->setText(msg); // Disable all the GUI elements if loading failed. d->calendar->setEnabled(success); // enable the ok button if loading succeeded d->buttons->button(QDialogButtonBox::Ok)->setEnabled(success); return success; } void ClockPhotoDialog::loadSettings() { KConfigGroup group = KSharedConfig::openConfig()->group(QLatin1String("Clock Photo Dialog")); winId(); DXmlGuiWindow::restoreWindowSize(windowHandle(), group); resize(windowHandle()->size()); } void ClockPhotoDialog::saveSettings() { KConfigGroup group = KSharedConfig::openConfig()->group(QLatin1String("Clock Photo Dialog")); DXmlGuiWindow::saveWindowSize(windowHandle(), group); } void ClockPhotoDialog::slotLoadPhoto() { - QString place = QDir::homePath(); - QStringList pics = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation); - Album* const album = AlbumManager::instance()->currentAlbums().first(); + QUrl place; + QStringList pics = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation); - if (album->type() == Album::PHYSICAL) + if (pics.isEmpty()) { - PAlbum* const p = dynamic_cast(album); - - if (p) - { - place = p->folderPath(); - } + place = QUrl::fromLocalFile(QDir::homePath()); } else { - QStringList cols = CollectionManager::instance()->allAvailableAlbumRootPaths(); - - if (!cols.isEmpty()) - place = cols.first(); + place = QUrl::fromLocalFile(pics.first()); } - ImageDialog dlg(this, QUrl(), true, i18n("Select Image to Extract Clock Photo")); + ImageDialog dlg(this, place, true, i18n("Select Image to Extract Clock Photo")); if (!dlg.url().isEmpty()) { // If the user selected a proper photo, try to load it. setImage(dlg.url()); } } void ClockPhotoDialog::slotOk() { // Called when the ok button is pressed. Calculate the time difference // between the photo and the user set datetime information, and store it in // the public variables. // Determine the number of seconds between the dates. int delta = d->photoDateTime.secsTo(d->calendar->dateTime()); // If the photo datetime is newer than the user datetime, it results in // subtraction. if (delta < 0) { d->deltaValues.deltaNegative = true; delta *= -1; } else { d->deltaValues.deltaNegative = false; } // Calculate the number of days, hours, minutes and seconds. d->deltaValues.deltaDays = delta / 86400; delta = delta % 86400; d->deltaValues.deltaHours = delta / 3600; delta = delta % 3600; d->deltaValues.deltaMinutes = delta / 60; delta = delta % 60; d->deltaValues.deltaSeconds = delta; // Accept the dialog. saveSettings(); accept(); } /** If the cancel button is clicked, reject the dialog. */ void ClockPhotoDialog::slotCancel() { saveSettings(); reject(); } } // namespace Digikam