File indexing completed on 2024-05-05 16:27:56

0001 // SPDX-FileCopyrightText: 2003-2019 The KPhotoAlbum Development Team
0002 // SPDX-FileCopyrightText: 2020 Johannes Zarl-Zierl <johannes@zarl-zierl.at>
0003 //
0004 // SPDX-License-Identifier: GPL-2.0-or-later
0005 
0006 #include "GeoPositionPage.h"
0007 
0008 #include "BrowserWidget.h"
0009 #include "ImageViewPage.h"
0010 #include "Logging.h"
0011 #include "OverviewPage.h"
0012 #include "enums.h"
0013 
0014 #include <DB/ImageDB.h>
0015 #include <MainWindow/Window.h>
0016 #include <Map/GeoCoordinates.h>
0017 #include <Map/MapView.h>
0018 
0019 #include <KLocalizedString>
0020 
0021 Browser::GeoPositionPage::GeoPositionPage(const DB::ImageSearchInfo &info, BrowserWidget *browser)
0022     : BrowserPage(info, browser)
0023 {
0024     m_active = false;
0025 }
0026 
0027 void Browser::GeoPositionPage::activate()
0028 {
0029     if (!m_active) {
0030         MainWindow::Window::theMainWindow()->showPositionBrowser();
0031         auto map = MainWindow::Window::theMainWindow()->positionBrowserWidget();
0032         map->clear();
0033         map->addImages(searchInfo());
0034         map->zoomToMarkers();
0035 
0036         connect(map, &Map::MapView::newRegionSelected, this, &GeoPositionPage::slotNewRegionSelected);
0037         m_active = true;
0038     }
0039 }
0040 
0041 void Browser::GeoPositionPage::deactivate()
0042 {
0043     if (m_active) {
0044         m_active = false;
0045         auto map = MainWindow::Window::theMainWindow()->positionBrowserWidget();
0046         map->clear();
0047         map->disconnect(this);
0048     }
0049 }
0050 
0051 void Browser::GeoPositionPage::slotNewRegionSelected(Map::GeoCoordinates::LatLonBox coordinates)
0052 {
0053     const QString name = i18n("Geo Position");
0054     DB::ImageSearchInfo info = searchInfo();
0055 
0056     info.setRegionSelection(coordinates);
0057     const int numSelected = DB::ImageDB::instance()->search(info).size();
0058     if (numSelected > 0) {
0059         browser()->addAction(new Browser::OverviewPage(Breadcrumb(name), info, browser()));
0060         qCDebug(BrowserLog) << "Selected region" << coordinates << "with" << numSelected << "images.";
0061         if (numSelected <= Settings::SettingsData::instance()->autoShowThumbnailView()) {
0062             browser()->addAction(new ImageViewPage(info, browser()));
0063         }
0064     } else {
0065         qCDebug(BrowserLog) << "Ignoring region selection" << coordinates << "without images.";
0066     }
0067 }
0068 
0069 Browser::Viewer Browser::GeoPositionPage::viewer()
0070 {
0071     return ShowGeoPositionViewer;
0072 }
0073 
0074 bool Browser::GeoPositionPage::isSearchable() const
0075 {
0076     return false;
0077 }
0078 
0079 bool Browser::GeoPositionPage::showDuringMovement() const
0080 {
0081     return true;
0082 }
0083 // vi:expandtab:tabstop=4 shiftwidth=4:
0084 
0085 #include "moc_GeoPositionPage.cpp"