aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/desktop-utils/lumina-photo/mainUI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src-qt5/desktop-utils/lumina-photo/mainUI.cpp')
-rw-r--r--src-qt5/desktop-utils/lumina-photo/mainUI.cpp243
1 files changed, 243 insertions, 0 deletions
diff --git a/src-qt5/desktop-utils/lumina-photo/mainUI.cpp b/src-qt5/desktop-utils/lumina-photo/mainUI.cpp
new file mode 100644
index 00000000..781e8d0b
--- /dev/null
+++ b/src-qt5/desktop-utils/lumina-photo/mainUI.cpp
@@ -0,0 +1,243 @@
+//===========================================
+// Lumina-Desktop source code
+// Copyright (c) 2018, Loïc Bartoletti
+// Available under the 3-clause BSD license
+// See the LICENSE file for full details
+//===========================================
+#include "mainUI.h"
+#include "ui_mainUI.h"
+#include <QDebug>
+
+#include <LUtils.h>
+#include <LuminaXDG.h>
+#include <QDesktopServices>
+#include <QFileDialog>
+#include <QImageWriter>
+#include <QInputDialog>
+#include <QMessageBox>
+#include <QUrl>
+
+#include <QtPrintSupport>
+
+MainUI::MainUI () : QMainWindow (), ui (new Ui::MainUI ())
+{
+ settings = LUtils::openSettings ("lumina-desktop", "lumina-photo", this);
+ ppath = settings->value ("previous-path", QDir::homePath ()).toString ();
+ pfilter = settings->value ("previous-filter", "image/jpeg").toString ();
+
+ ui->setupUi (this);
+ // Any special UI changes
+
+ graphicsScene = new QGraphicsScene ();
+ ui->photoView->setScene (graphicsScene);
+
+ setupConnections ();
+ setupIcons ();
+ setupFilters ();
+}
+
+MainUI::~MainUI ()
+{
+}
+
+void MainUI::loadArguments (QStringList args)
+{
+ files.clear ();
+ // Parse out the arguments
+ for (int i = 0; i < args.length (); i++)
+ {
+ if (!QImageReader::imageFormat (args[i]).isEmpty ())
+ {
+ files.append (args[i]);
+ }
+ }
+ if (files.count () > 0)
+ {
+ idx = 0;
+ loadFile (files.at (0));
+ }
+}
+
+void MainUI::setupConnections ()
+{
+ connect (ui->actionZoom_In, SIGNAL (triggered ()), this, SLOT (zoomInToggled ()));
+ connect (ui->actionZoom_Out, SIGNAL (triggered ()), this, SLOT (zoomOutToggled ()));
+ connect (ui->action_Fit_to_windows, SIGNAL (triggered ()), this, SLOT (fitZoomToggled ()));
+ connect (ui->action_Normal_Zoom, SIGNAL (triggered ()), this, SLOT (normalZoomToggled ()));
+ connect (ui->action_Exit, SIGNAL (triggered ()), this, SLOT (closeApplication ()));
+ connect (ui->action_Open, SIGNAL (triggered ()), this, SLOT (open ()));
+ connect (ui->action_Save_as, SIGNAL (triggered ()), this, SLOT (save ()));
+ connect (ui->action_Print, SIGNAL (triggered ()), this, SLOT (print ()));
+ connect (ui->actionNext, SIGNAL (triggered ()), this, SLOT (nextToggled ()));
+ connect (ui->actionBack, SIGNAL (triggered ()), this, SLOT (backToggled ()));
+ connect (ui->actionFirst, SIGNAL (triggered ()), this, SLOT (firstToggled ()));
+ connect (ui->actionLast, SIGNAL (triggered ()), this, SLOT (lastToggled ()));
+}
+
+void MainUI::setupIcons ()
+{
+ ui->action_Exit->setIcon (LXDG::findIcon ("application-close", "dialog-close"));
+ ui->action_Fit_to_windows->setIcon (LXDG::findIcon ("zoom-fit-best", ""));
+ ui->action_Normal_Zoom->setIcon (LXDG::findIcon ("zoom-original", ""));
+ ui->actionZoom_In->setIcon (LXDG::findIcon ("zoom-in", ""));
+ ui->actionZoom_Out->setIcon (LXDG::findIcon ("zoom-out", ""));
+ ui->actionFirst->setIcon (LXDG::findIcon ("arrow-left-double", ""));
+ ui->actionBack->setIcon (LXDG::findIcon ("arrow-left", ""));
+ ui->actionLast->setIcon (LXDG::findIcon ("arrow-right-double", ""));
+ ui->actionNext->setIcon (LXDG::findIcon ("arrow-right", ""));
+}
+
+void MainUI::setupFilters ()
+{
+ foreach (const QByteArray &mimeTypeName, QImageReader::supportedMimeTypes ())
+ mimeTypeFiltersReader.append (mimeTypeName);
+
+ mimeTypeFiltersReader.sort ();
+
+ foreach (const QByteArray &mimeTypeName, QImageWriter::supportedMimeTypes ())
+ mimeTypeFiltersWriter.append (mimeTypeName);
+
+ mimeTypeFiltersWriter.sort ();
+}
+// ==== PRIVATE SLOTS ====
+void MainUI::fitZoomToggled ()
+{
+ ui->photoView->zoomFit ();
+}
+
+void MainUI::normalZoomToggled ()
+{
+ ui->photoView->zoomNormal ();
+}
+
+void MainUI::zoomOutToggled ()
+{
+ ui->photoView->zoomOut ();
+}
+
+void MainUI::zoomInToggled ()
+{
+ ui->photoView->zoomIn ();
+}
+
+void MainUI::firstToggled ()
+{
+ if (idx != 0)
+ {
+ idx = 0;
+ loadFile (files.at (idx));
+ }
+}
+
+void MainUI::lastToggled ()
+{
+ if (idx != files.count () - 1)
+ {
+ idx = files.count () - 1;
+ loadFile (files.at (idx));
+ }
+}
+
+void MainUI::backToggled ()
+{
+ if (idx > 0)
+ {
+ idx -= 1;
+ loadFile (files.at (idx));
+ }
+}
+
+void MainUI::nextToggled ()
+{
+ if (idx < files.count () - 1)
+ {
+ idx += 1;
+ loadFile (files.at (idx));
+ }
+}
+
+void MainUI::closeApplication ()
+{
+ this->close ();
+}
+
+bool MainUI::loadFile (const QString file)
+{
+ // Load the file as-is
+ QImageReader reader (file);
+ reader.setAutoTransform (true);
+ actualImage = reader.read ();
+ if (actualImage.isNull ())
+ {
+ QMessageBox::information (
+ this, QGuiApplication::applicationDisplayName (),
+ tr ("Cannot load %1: %2").arg (QDir::toNativeSeparators (file), reader.errorString ()));
+ return false;
+ }
+ graphicsScene->clear ();
+ graphicsScene->setSceneRect (actualImage.rect ());
+ graphicsScene->addPixmap (QPixmap::fromImage (actualImage));
+
+ ui->photoView->zoomFit ();
+ return true;
+}
+
+void MainUI::open ()
+{
+ QFileDialog dialog (this, tr ("Open File"), ppath);
+ dialog.setFileMode (QFileDialog::ExistingFiles);
+ dialog.setAcceptMode (QFileDialog::AcceptOpen);
+ dialog.setMimeTypeFilters (mimeTypeFiltersReader);
+ dialog.selectMimeTypeFilter (pfilter);
+ if (dialog.exec ())
+ {
+ files.clear ();
+ files = dialog.selectedFiles ();
+ idx = 0;
+
+ ppath = files.at (idx).section ("/", 0, -2); // just the directory
+ settings->setValue ("previous-path", ppath);
+ pfilter = dialog.selectedMimeTypeFilter ();
+ settings->setValue ("previous-filter", pfilter);
+ loadFile (files.at (idx));
+ }
+}
+
+bool MainUI::save ()
+{
+ QFileDialog dialog (this, tr ("Save as"), ppath);
+ dialog.setFileMode (QFileDialog::AnyFile);
+ dialog.setAcceptMode (QFileDialog::AcceptSave);
+ dialog.setMimeTypeFilters (mimeTypeFiltersWriter);
+ if (dialog.exec ())
+ {
+ QString filename = dialog.selectedFiles ().first ();
+ QImageWriter writer (filename);
+
+ if (!writer.write (actualImage))
+ {
+ QMessageBox::information (this, QGuiApplication::applicationDisplayName (),
+ tr ("Cannot write %1: %2").arg (QDir::toNativeSeparators (filename)),
+ writer.errorString ());
+ return false;
+ }
+ }
+
+ return true;
+}
+
+void MainUI::print ()
+{
+ QPrinter printer;
+ QPrintDialog dialog (&printer, this);
+ if (dialog.exec ())
+ {
+ QPainter painter (&printer);
+ QRect rect = painter.viewport ();
+ QSize size = actualImage.size ();
+ size.scale (rect.size (), Qt::KeepAspectRatio);
+ painter.setViewport (rect.x (), rect.y (), size.width (), size.height ());
+ painter.setWindow (actualImage.rect ());
+ painter.drawPixmap (0, 0, QPixmap::fromImage (actualImage));
+ }
+}
bgstack15