Compare commits
	
		
			1 Commits
		
	
	
		
			0.5.3
			...
			qt-5-15-re
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| dd5602b290 | 
							
								
								
									
										4
									
								
								.github/workflows/macos.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						@ -10,9 +10,7 @@ jobs:
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: actions/checkout@v1
 | 
			
		||||
    - name: Install Qt
 | 
			
		||||
      uses: jurplel/install-qt-action@v2
 | 
			
		||||
      with:
 | 
			
		||||
        version: '5.15.2'
 | 
			
		||||
      uses: jurplel/install-qt-action@v2.10.0
 | 
			
		||||
    - name: Run a qt project
 | 
			
		||||
      run: |
 | 
			
		||||
        cmake ./
 | 
			
		||||
 | 
			
		||||
@ -28,9 +28,9 @@ endif ()
 | 
			
		||||
#LibExiv2_FOUND
 | 
			
		||||
set (PPIC_CPP_FILES
 | 
			
		||||
    app/main.cpp
 | 
			
		||||
    app/framelesshandler.cpp
 | 
			
		||||
    app/framelesswindow.cpp
 | 
			
		||||
    app/mainwindow.cpp
 | 
			
		||||
    app/actionmanager.cpp
 | 
			
		||||
    app/graphicsview.cpp
 | 
			
		||||
    app/graphicsscene.cpp
 | 
			
		||||
    app/bottombuttongroup.cpp
 | 
			
		||||
@ -43,13 +43,12 @@ set (PPIC_CPP_FILES
 | 
			
		||||
    app/metadatamodel.cpp
 | 
			
		||||
    app/metadatadialog.cpp
 | 
			
		||||
    app/exiv2wrapper.cpp
 | 
			
		||||
    app/playlistmanager.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
set (PPIC_HEADER_FILES
 | 
			
		||||
    app/framelesshandler.h
 | 
			
		||||
    app/framelesswindow.h
 | 
			
		||||
    app/mainwindow.h
 | 
			
		||||
    app/actionmanager.h
 | 
			
		||||
    app/graphicsview.h
 | 
			
		||||
    app/graphicsscene.h
 | 
			
		||||
    app/bottombuttongroup.h
 | 
			
		||||
@ -62,7 +61,6 @@ set (PPIC_HEADER_FILES
 | 
			
		||||
    app/metadatamodel.h
 | 
			
		||||
    app/metadatadialog.h
 | 
			
		||||
    app/exiv2wrapper.h
 | 
			
		||||
    app/playlistmanager.h
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
set (PPIC_QRC_FILES
 | 
			
		||||
@ -76,7 +74,7 @@ set (PPIC_RC_FILES
 | 
			
		||||
set (EXE_NAME ppic)
 | 
			
		||||
 | 
			
		||||
# Translation
 | 
			
		||||
file (GLOB PPIC_TS_FILES app/translations/*.ts)
 | 
			
		||||
file (GLOB PPIC_TS_FILES translations/*.ts)
 | 
			
		||||
set (PPIC_CPP_FILES_FOR_I18N ${PPIC_CPP_FILES})
 | 
			
		||||
 | 
			
		||||
qt5_create_translation(PPIC_QM_FILES ${PPIC_CPP_FILES_FOR_I18N} ${PPIC_TS_FILES})
 | 
			
		||||
@ -201,7 +199,7 @@ elseif (UNIX)
 | 
			
		||||
 | 
			
		||||
    # install app metadata file for appstream (and some other stuff using this metadata like snapcraft)
 | 
			
		||||
    install (
 | 
			
		||||
        FILES dist/appstream/net.blumia.pineapple-pictures.metainfo.xml
 | 
			
		||||
        FILES dist/appstream/net.blumia.pineapple-pictures.appdata.xml
 | 
			
		||||
        DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo"
 | 
			
		||||
    )
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								README.md
									
									
									
									
									
								
							
							
						
						@ -6,18 +6,13 @@ Yet another image viewer.
 | 
			
		||||
|macOS Build||
 | 
			
		||||
|Ubuntu 20.04 Build||
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
## Summary
 | 
			
		||||
 | 
			
		||||
Pineapple Pictures is a lightweight image viewer that allows you view JPEG, PNG, GIF, SVG, PSD, KRA, XCF, TGA, AVIF and some other frequently used image formats files quickly and easily, and also provide a Stay-on-Top window setting that allows you pin the window so you can use it to pin a reference image at the top and then you can work with other software.
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
## Get it!
 | 
			
		||||
 | 
			
		||||
 - [GitHub Release Page](https://github.com/BLumia/pineapple-pictures/releases)
 | 
			
		||||
 - [SourceForge](https://sourceforge.net/projects/pineapple-pictures/)
 | 
			
		||||
 - Archlinux AUR: [pineapple-pictures](https://aur.archlinux.org/packages/pineapple-pictures/) | [pineapple-pictures-git](https://aur.archlinux.org/packages/pineapple-pictures-git/)
 | 
			
		||||
 - Debian (since bullseye) or Ubuntu (since 21.04): `sudo apt install pineapple-pictures`
 | 
			
		||||
 - Debian (sid / testing): `sudo apt install pineapple-pictures`
 | 
			
		||||
 - [Itch.io Store](https://blumia.itch.io/pineapple-pictures)
 | 
			
		||||
 | 
			
		||||
## Help Translation!
 | 
			
		||||
@ -64,7 +59,7 @@ The normal build steps for Linux is also applied to Windows, but since Windows d
 | 
			
		||||
 | 
			
		||||
For the Windows binary I provided, kimageformats plugin is used (for formats like kra, xcf, psd and etc.). You can take `appveyor.yml` as a reference to learn what I did when building the Windows binary.
 | 
			
		||||
 | 
			
		||||
[KDE Craft](https://community.kde.org/Craft) environment also can be used to build and package this program. I did also created a blueprint for building this project that you can found it at [here](https://github.com/BearKidsTeam/craft-shmooprint-bkt). It's not the way I used to create the release binary, but still worth trying.
 | 
			
		||||
[KDE Craft](https://community.kde.org/Craft) environment also can be used to build and package this program. I did also created a blueprint for building this project, but since I don't have a CI to run KDE Craft build, the blueprint repo are not provided here. Maybe sometimes later.
 | 
			
		||||
 | 
			
		||||
### macOS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -6,18 +6,13 @@
 | 
			
		||||
|macOS Build||
 | 
			
		||||
|Ubuntu 20.04 Build||
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
## 简介
 | 
			
		||||
 | 
			
		||||
菠萝看图是一个轻量图像查看器,允许你简单快捷的查看 JPEG, PNG, GIF, SVG, PSD, KRA, XCF, TGA, AVIF 等常用格式的图像文件,并提供了置顶窗口的选项以便你在使用其它软件时也可以将参考图片固定在顶端。
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
## 立即获取!
 | 
			
		||||
 | 
			
		||||
 - [GitHub Release 页面](https://github.com/BLumia/pineapple-pictures/releases) | [gitee 发布页面](https://gitee.com/blumia/pineapple-pictures/releases)
 | 
			
		||||
 - [SourceForge](https://sourceforge.net/projects/pineapple-pictures/)
 | 
			
		||||
 - Archlinux AUR: [pineapple-pictures](https://aur.archlinux.org/packages/pineapple-pictures/) | [pineapple-pictures-git](https://aur.archlinux.org/packages/pineapple-pictures-git/)
 | 
			
		||||
 - Debian (自 bullseye 起) 或 Ubuntu (自 21.04 起): `sudo apt install pineapple-pictures`
 | 
			
		||||
 - Debian (sid / testing): `sudo apt install pineapple-pictures`
 | 
			
		||||
 - [Itch.io 商店](https://blumia.itch.io/pineapple-pictures)
 | 
			
		||||
 | 
			
		||||
## 帮助翻译!
 | 
			
		||||
@ -64,7 +59,7 @@ $ cmake --build . # 如果你使用 Makefile 作为 CMake 生成器,也可以
 | 
			
		||||
 | 
			
		||||
我们所提供的预编译好的 Windows 程序包含了 kimageformats 插件来提供额外(kra, xcf, psd 等)格式的支持。您可以参考 `appveyor.yml` 来查看我们是如何构建并打包 Windows 可执行程序的。
 | 
			
		||||
 | 
			
		||||
[KDE Craft](https://community.kde.org/Craft) 环境也可以被用来构建此应用程序。我也创建了一个蓝图来进行此项目的构建和打包,可参见[这里](https://github.com/BearKidsTeam/craft-shmooprint-bkt)。尽管这不是我用于构建发布二进制所使用的方案,但仍值得一试。
 | 
			
		||||
[KDE Craft](https://community.kde.org/Craft) 环境也可以被用来构建此应用程序。我也创建了一个蓝图来进行此项目的构建和打包。但由于暂时并未配置 CI 部署此环境来进行 KDE Craft 环境下的构建,故对应的蓝图仓库也尚未公开提供,或许后续会开放出来。
 | 
			
		||||
 | 
			
		||||
### macOS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -25,18 +25,16 @@ AboutDialog::AboutDialog(QWidget *parent)
 | 
			
		||||
    const QStringList helpStr {
 | 
			
		||||
        QStringLiteral("<p>%1</p>").arg(tr("Launch application with image file path as argument to load the file.")),
 | 
			
		||||
        QStringLiteral("<p>%1</p>").arg(tr("Drag and drop image file onto the window is also supported.")),
 | 
			
		||||
        QStringLiteral("<p>%1</p>").arg(tr("None of the operations in this application will alter the pictures on disk.")),
 | 
			
		||||
        QStringLiteral("<p>%1</p>").arg(tr("Context menu option explanation:")),
 | 
			
		||||
        QStringLiteral("<ul>"),
 | 
			
		||||
        // blumia: Chain two arg() here since it seems lupdate will remove one of them if we use
 | 
			
		||||
        //         the old `arg(QCoreApp::translate(), tr())` way, but it's worth to mention
 | 
			
		||||
        //         `arg(QCoreApp::translate(), this->tr())` works, but lupdate will complain about the usage.
 | 
			
		||||
        QStringLiteral("<li><b>%1</b>:<br/>%2</li>")
 | 
			
		||||
                .arg(QCoreApplication::translate("MainWindow", "Stay on top"))
 | 
			
		||||
                .arg(tr("Make window stay on top of all other windows.")),
 | 
			
		||||
        QStringLiteral("<li><b>%1</b>:<br/>%2</li>")
 | 
			
		||||
                .arg(QCoreApplication::translate("MainWindow", "Protected mode"))
 | 
			
		||||
                .arg(tr("Avoid close window accidentally. (eg. by double clicking the window)")),
 | 
			
		||||
        QStringLiteral("<li><b>%1</b>:<br/>%2</li>").arg(
 | 
			
		||||
            QCoreApplication::translate("MainWindow", "Stay on top"),
 | 
			
		||||
            this->tr("Make window stay on top of all other windows.")
 | 
			
		||||
        ),
 | 
			
		||||
        QStringLiteral("<li><b>%1</b>:<br/>%2</li>").arg(
 | 
			
		||||
            QCoreApplication::translate("MainWindow", "Protected mode"),
 | 
			
		||||
            this->tr("Avoid close window accidentally. (eg. by double clicking the window)")
 | 
			
		||||
        ),
 | 
			
		||||
        QStringLiteral("</ul>")
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
@ -133,7 +131,7 @@ SOFTWARE.
 | 
			
		||||
 | 
			
		||||
    m_licenseTextEdit->setText(licenseStr.join('\n').arg(qApp->applicationDisplayName(), mitLicense));
 | 
			
		||||
 | 
			
		||||
    m_3rdPartyLibsTextEdit->setText(thirdPartyLibsStr.join('\n').arg(QStringLiteral("<i>%1</i>").arg(qApp->applicationDisplayName())));
 | 
			
		||||
    m_3rdPartyLibsTextEdit->setText(thirdPartyLibsStr.join('\n').arg(QStringLiteral("<i>%1</i>")).arg(qApp->applicationDisplayName()));
 | 
			
		||||
    m_3rdPartyLibsTextEdit->setOpenExternalLinks(true);
 | 
			
		||||
 | 
			
		||||
    m_tabWidget->addTab(m_helpTextEdit, tr("&Help"));
 | 
			
		||||
 | 
			
		||||
@ -1,118 +0,0 @@
 | 
			
		||||
#include "actionmanager.h"
 | 
			
		||||
 | 
			
		||||
#include "mainwindow.h"
 | 
			
		||||
 | 
			
		||||
#include <QCoreApplication>
 | 
			
		||||
 | 
			
		||||
#define ICON_NAME(name)\
 | 
			
		||||
    QStringLiteral(":/icons/" #name "")
 | 
			
		||||
 | 
			
		||||
#define SETUP_NEW_ACTION(window, action)\
 | 
			
		||||
    action->setObjectName(QString::fromUtf8( #action ));\
 | 
			
		||||
    window->addAction(action);
 | 
			
		||||
 | 
			
		||||
#define CREATE_NEW_ACTION(window, action)\
 | 
			
		||||
    action = new QAction(window);\
 | 
			
		||||
    SETUP_NEW_ACTION(window, action)
 | 
			
		||||
 | 
			
		||||
#define CREATE_NEW_ICON_ACTION(window, action, iconname)\
 | 
			
		||||
    action = new QAction(QIcon(ICON_NAME(iconname)), QString(), window);\
 | 
			
		||||
    SETUP_NEW_ACTION(window, action)
 | 
			
		||||
 | 
			
		||||
ActionManager::ActionManager()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ActionManager::~ActionManager()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ActionManager::setupAction(MainWindow *mainWindow)
 | 
			
		||||
{
 | 
			
		||||
    CREATE_NEW_ICON_ACTION(mainWindow, actionActualSize, zoom-original);
 | 
			
		||||
    CREATE_NEW_ICON_ACTION(mainWindow, actionToggleMaximize, view-fullscreen);
 | 
			
		||||
    CREATE_NEW_ICON_ACTION(mainWindow, actionZoomIn, zoom-in);
 | 
			
		||||
    CREATE_NEW_ICON_ACTION(mainWindow, actionZoomOut, zoom-out);
 | 
			
		||||
    CREATE_NEW_ICON_ACTION(mainWindow, actionToggleCheckerboard, view-background-checkerboard);
 | 
			
		||||
    CREATE_NEW_ICON_ACTION(mainWindow, actionRotateClockwise, object-rotate-right);
 | 
			
		||||
 | 
			
		||||
    CREATE_NEW_ACTION(mainWindow, actionPrevPicture);
 | 
			
		||||
    CREATE_NEW_ACTION(mainWindow, actionNextPicture);
 | 
			
		||||
 | 
			
		||||
    CREATE_NEW_ACTION(mainWindow, actionOpen);
 | 
			
		||||
    CREATE_NEW_ACTION(mainWindow, actionHorizontalFlip);
 | 
			
		||||
    CREATE_NEW_ACTION(mainWindow, actionFitInView);
 | 
			
		||||
    CREATE_NEW_ACTION(mainWindow, actionFitByWidth);
 | 
			
		||||
    CREATE_NEW_ACTION(mainWindow, actionCopyPixmap);
 | 
			
		||||
    CREATE_NEW_ACTION(mainWindow, actionCopyFilePath);
 | 
			
		||||
    CREATE_NEW_ACTION(mainWindow, actionPaste);
 | 
			
		||||
    CREATE_NEW_ACTION(mainWindow, actionToggleStayOnTop);
 | 
			
		||||
    CREATE_NEW_ACTION(mainWindow, actionToggleProtectMode);
 | 
			
		||||
    CREATE_NEW_ACTION(mainWindow, actionSettings);
 | 
			
		||||
    CREATE_NEW_ACTION(mainWindow, actionHelp);
 | 
			
		||||
    CREATE_NEW_ACTION(mainWindow, actionProperties);
 | 
			
		||||
    CREATE_NEW_ACTION(mainWindow, actionQuitApp);
 | 
			
		||||
 | 
			
		||||
    retranslateUi(mainWindow);
 | 
			
		||||
 | 
			
		||||
    QMetaObject::connectSlotsByName(mainWindow);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ActionManager::retranslateUi(MainWindow *mainWindow)
 | 
			
		||||
{
 | 
			
		||||
    Q_UNUSED(mainWindow);
 | 
			
		||||
 | 
			
		||||
    actionOpen->setText(QCoreApplication::translate("MainWindow", "&Open...", nullptr));
 | 
			
		||||
 | 
			
		||||
    actionActualSize->setText(QCoreApplication::translate("MainWindow", "Actual size", nullptr));
 | 
			
		||||
    actionToggleMaximize->setText(QCoreApplication::translate("MainWindow", "Toggle maximize", nullptr));
 | 
			
		||||
    actionZoomIn->setText(QCoreApplication::translate("MainWindow", "Zoom in", nullptr));
 | 
			
		||||
    actionZoomOut->setText(QCoreApplication::translate("MainWindow", "Zoom out", nullptr));
 | 
			
		||||
    actionToggleCheckerboard->setText(QCoreApplication::translate("MainWindow", "Toggle Checkerboard", nullptr));
 | 
			
		||||
    actionRotateClockwise->setText(QCoreApplication::translate("MainWindow", "Rotate right", nullptr));
 | 
			
		||||
 | 
			
		||||
    actionPrevPicture->setText(QCoreApplication::translate("MainWindow", "Previous image", nullptr));
 | 
			
		||||
    actionNextPicture->setText(QCoreApplication::translate("MainWindow", "Next image", nullptr));
 | 
			
		||||
 | 
			
		||||
    actionHorizontalFlip->setText(QCoreApplication::translate("MainWindow", "Flip &Horizontally", nullptr));
 | 
			
		||||
    actionFitInView->setText("Fit in view"); // TODO: what should it called?
 | 
			
		||||
    actionFitByWidth->setText("Fit by width"); // TODO: what should it called?
 | 
			
		||||
    actionCopyPixmap->setText(QCoreApplication::translate("MainWindow", "Copy P&ixmap", nullptr));
 | 
			
		||||
    actionCopyFilePath->setText(QCoreApplication::translate("MainWindow", "Copy &File Path", nullptr));
 | 
			
		||||
    actionPaste->setText(QCoreApplication::translate("MainWindow", "&Paste", nullptr));
 | 
			
		||||
    actionToggleStayOnTop->setText(QCoreApplication::translate("MainWindow", "Stay on top", nullptr));
 | 
			
		||||
    actionToggleProtectMode->setText(QCoreApplication::translate("MainWindow", "Protected mode", nullptr));
 | 
			
		||||
    actionSettings->setText(QCoreApplication::translate("MainWindow", "Configure...", nullptr));
 | 
			
		||||
    actionHelp->setText(QCoreApplication::translate("MainWindow", "Help", nullptr));
 | 
			
		||||
    actionProperties->setText(QCoreApplication::translate("MainWindow", "Properties", nullptr));
 | 
			
		||||
    actionQuitApp->setText(QCoreApplication::translate("MainWindow", "Quit", nullptr));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ActionManager::setupShortcuts()
 | 
			
		||||
{
 | 
			
		||||
    actionOpen->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_O));
 | 
			
		||||
    actionActualSize->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_0));
 | 
			
		||||
    actionZoomIn->setShortcut(QKeySequence(QKeySequence::ZoomIn));
 | 
			
		||||
    actionZoomOut->setShortcut(QKeySequence(QKeySequence::ZoomOut));
 | 
			
		||||
    actionPrevPicture->setShortcuts({
 | 
			
		||||
        QKeySequence(Qt::Key_PageUp),
 | 
			
		||||
        QKeySequence(Qt::Key_Left),
 | 
			
		||||
    });
 | 
			
		||||
    actionNextPicture->setShortcuts({
 | 
			
		||||
        QKeySequence(Qt::Key_PageDown),
 | 
			
		||||
        QKeySequence(Qt::Key_Right),
 | 
			
		||||
    });
 | 
			
		||||
    actionHorizontalFlip->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_R));
 | 
			
		||||
    actionCopyPixmap->setShortcut(QKeySequence(QKeySequence::Copy));
 | 
			
		||||
    actionPaste->setShortcut(QKeySequence::Paste);
 | 
			
		||||
    actionHelp->setShortcut(QKeySequence::HelpContents);
 | 
			
		||||
    actionSettings->setShortcut(QKeySequence::Preferences);
 | 
			
		||||
    actionProperties->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_I));
 | 
			
		||||
    actionQuitApp->setShortcuts({
 | 
			
		||||
        QKeySequence(Qt::Key_Space),
 | 
			
		||||
        QKeySequence(Qt::Key_Escape)
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,45 +0,0 @@
 | 
			
		||||
#ifndef ACTIONMANAGER_H
 | 
			
		||||
#define ACTIONMANAGER_H
 | 
			
		||||
 | 
			
		||||
#include <QAction>
 | 
			
		||||
 | 
			
		||||
class MainWindow;
 | 
			
		||||
 | 
			
		||||
class ActionManager
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    ActionManager();
 | 
			
		||||
    ~ActionManager();
 | 
			
		||||
 | 
			
		||||
    void setupAction(MainWindow * mainWindow);
 | 
			
		||||
    void retranslateUi(MainWindow *MainWindow);
 | 
			
		||||
    void setupShortcuts();
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    QAction *actionOpen;
 | 
			
		||||
 | 
			
		||||
    QAction *actionActualSize;
 | 
			
		||||
    QAction *actionToggleMaximize;
 | 
			
		||||
    QAction *actionZoomIn;
 | 
			
		||||
    QAction *actionZoomOut;
 | 
			
		||||
    QAction *actionToggleCheckerboard;
 | 
			
		||||
    QAction *actionRotateClockwise;
 | 
			
		||||
 | 
			
		||||
    QAction *actionPrevPicture;
 | 
			
		||||
    QAction *actionNextPicture;
 | 
			
		||||
 | 
			
		||||
    QAction *actionHorizontalFlip;
 | 
			
		||||
    QAction *actionFitInView;
 | 
			
		||||
    QAction *actionFitByWidth;
 | 
			
		||||
    QAction *actionCopyPixmap;
 | 
			
		||||
    QAction *actionCopyFilePath;
 | 
			
		||||
    QAction *actionPaste;
 | 
			
		||||
    QAction *actionToggleStayOnTop;
 | 
			
		||||
    QAction *actionToggleProtectMode;
 | 
			
		||||
    QAction *actionSettings;
 | 
			
		||||
    QAction *actionHelp;
 | 
			
		||||
    QAction *actionProperties;
 | 
			
		||||
    QAction *actionQuitApp;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // ACTIONMANAGER_H
 | 
			
		||||
@ -4,11 +4,11 @@
 | 
			
		||||
 | 
			
		||||
#include <functional>
 | 
			
		||||
 | 
			
		||||
#include <QToolButton>
 | 
			
		||||
#include <QPushButton>
 | 
			
		||||
#include <QVBoxLayout>
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
 | 
			
		||||
BottomButtonGroup::BottomButtonGroup(const std::vector<QAction *> &actionList, QWidget *parent)
 | 
			
		||||
BottomButtonGroup::BottomButtonGroup(QWidget *parent)
 | 
			
		||||
    : QGroupBox (parent)
 | 
			
		||||
    , m_opacityHelper(new OpacityHelper(this))
 | 
			
		||||
{
 | 
			
		||||
@ -23,24 +23,37 @@ BottomButtonGroup::BottomButtonGroup(const std::vector<QAction *> &actionList, Q
 | 
			
		||||
                        "border-style: none;"
 | 
			
		||||
                        "background-color:rgba(0,0,0,120)"
 | 
			
		||||
                        "}"
 | 
			
		||||
                        "QToolButton {"
 | 
			
		||||
                        "background:transparent;"
 | 
			
		||||
                        "}"
 | 
			
		||||
                        "QToolButton:!focus {"
 | 
			
		||||
                        "QPushButton {"
 | 
			
		||||
                        "background-color:rgba(225,255,255,0);"
 | 
			
		||||
                        "color: white;"
 | 
			
		||||
                        "border-style: none;"
 | 
			
		||||
                        "}");
 | 
			
		||||
 | 
			
		||||
    auto newActionBtn = [this](QAction * action) -> QToolButton * {
 | 
			
		||||
        QToolButton * btn = new QToolButton(this);
 | 
			
		||||
        btn->setDefaultAction(action);
 | 
			
		||||
    auto newBtn = [](QString text, std::function<void()> func) -> QPushButton * {
 | 
			
		||||
        QPushButton * btn = new QPushButton(QIcon(QStringLiteral(":/icons/") + text), "");
 | 
			
		||||
        btn->setIconSize(QSize(40, 40));
 | 
			
		||||
        btn->setFixedSize(40, 40);
 | 
			
		||||
        QObject::connect(btn, &QAbstractButton::clicked, btn, func);
 | 
			
		||||
        return btn;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    for (QAction * action : actionList) {
 | 
			
		||||
        addButton(newActionBtn(action));
 | 
			
		||||
    }
 | 
			
		||||
    addButton(newBtn("zoom-original", [this]() {
 | 
			
		||||
        emit resetToOriginalBtnClicked();
 | 
			
		||||
    }));
 | 
			
		||||
    addButton(newBtn("view-fullscreen", [this]() {
 | 
			
		||||
        emit toggleWindowMaximum();
 | 
			
		||||
    }));
 | 
			
		||||
    addButton(newBtn("zoom-in", [this]() {
 | 
			
		||||
        emit zoomInBtnClicked();
 | 
			
		||||
    }));
 | 
			
		||||
    addButton(newBtn("zoom-out", [this]() {
 | 
			
		||||
        emit zoomOutBtnClicked();
 | 
			
		||||
    }));
 | 
			
		||||
    addButton(newBtn("view-background-checkerboard", [this]() {
 | 
			
		||||
        emit toggleCheckerboardBtnClicked();
 | 
			
		||||
    }));
 | 
			
		||||
    addButton(newBtn("object-rotate-right", [this]() {
 | 
			
		||||
        emit rotateRightBtnClicked();
 | 
			
		||||
    }));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BottomButtonGroup::setOpacity(qreal opacity, bool animated)
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,6 @@
 | 
			
		||||
#ifndef BOTTOMBUTTONGROUP_H
 | 
			
		||||
#define BOTTOMBUTTONGROUP_H
 | 
			
		||||
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
#include <QAbstractButton>
 | 
			
		||||
#include <QGroupBox>
 | 
			
		||||
 | 
			
		||||
@ -11,11 +9,19 @@ class BottomButtonGroup : public QGroupBox
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
public:
 | 
			
		||||
    explicit BottomButtonGroup(const std::vector<QAction *> & actionList, QWidget *parent = nullptr);
 | 
			
		||||
    explicit BottomButtonGroup(QWidget *parent = nullptr);
 | 
			
		||||
 | 
			
		||||
    void setOpacity(qreal opacity, bool animated = true);
 | 
			
		||||
    void addButton(QAbstractButton *button);
 | 
			
		||||
 | 
			
		||||
signals:
 | 
			
		||||
    void resetToOriginalBtnClicked();
 | 
			
		||||
    void toggleWindowMaximum();
 | 
			
		||||
    void zoomInBtnClicked();
 | 
			
		||||
    void zoomOutBtnClicked();
 | 
			
		||||
    void toggleCheckerboardBtnClicked();
 | 
			
		||||
    void rotateRightBtnClicked();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    OpacityHelper * m_opacityHelper;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -34,7 +34,7 @@ void Exiv2Wrapper::cacheSection(Collection collection)
 | 
			
		||||
        QString label = QString::fromLocal8Bit(it->tagLabel().c_str());
 | 
			
		||||
        std::ostringstream stream;
 | 
			
		||||
        stream << *it;
 | 
			
		||||
        QString value = QString::fromUtf8(stream.str().c_str());
 | 
			
		||||
        QString value = QString::fromLocal8Bit(stream.str().c_str());
 | 
			
		||||
        m_metadataValue.insert(key, value);
 | 
			
		||||
        m_metadataLabel.insert(key, label);
 | 
			
		||||
 | 
			
		||||
@ -99,24 +99,3 @@ QString Exiv2Wrapper::value(const QString &key) const
 | 
			
		||||
    return m_metadataValue.value(key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString Exiv2Wrapper::XmpValue(const QString &rawValue)
 | 
			
		||||
{
 | 
			
		||||
    QString ignored;
 | 
			
		||||
    return Exiv2Wrapper::XmpValue(rawValue, ignored);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString Exiv2Wrapper::XmpValue(const QString &rawValue, QString &language)
 | 
			
		||||
{
 | 
			
		||||
    if (rawValue.size() > 6 && rawValue.startsWith(QLatin1String("lang=\""))) {
 | 
			
		||||
        int pos = rawValue.indexOf('"', 6);
 | 
			
		||||
 | 
			
		||||
        if (pos != -1) {
 | 
			
		||||
            language = rawValue.mid(6, pos - 6);
 | 
			
		||||
            return (rawValue.mid(pos + 2));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    language.clear();
 | 
			
		||||
    return rawValue;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -23,9 +23,6 @@ public:
 | 
			
		||||
    QString label(const QString & key) const;
 | 
			
		||||
    QString value(const QString & key) const;
 | 
			
		||||
 | 
			
		||||
    static QString XmpValue(const QString &rawValue);
 | 
			
		||||
    static QString XmpValue(const QString &rawValue, QString & language);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    std::unique_ptr<Exiv2::Image> m_exivImage;
 | 
			
		||||
    QMap<QString, QString> m_metadataValue;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										149
									
								
								app/framelesshandler.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,149 @@
 | 
			
		||||
#include "framelesshandler.h"
 | 
			
		||||
 | 
			
		||||
#include <QMouseEvent>
 | 
			
		||||
#include <QWidget>
 | 
			
		||||
#include <QWindow>
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
#include <QApplication>
 | 
			
		||||
 | 
			
		||||
FramelessHandler::FramelessHandler(QWidget *parent)
 | 
			
		||||
    : QObject(parent)
 | 
			
		||||
    , m_parentWidget(parent)
 | 
			
		||||
{
 | 
			
		||||
    m_parentWidget->setMouseTracking(true);
 | 
			
		||||
    m_parentWidget->installEventFilter(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool FramelessHandler::eventFilter(QObject *o, QEvent *evt)
 | 
			
		||||
{
 | 
			
		||||
    if (evt->type() != QEvent::MouseButtonPress &&
 | 
			
		||||
            evt->type() != QEvent::MouseButtonRelease &&
 | 
			
		||||
            evt->type() != QEvent::MouseMove) {
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Q_ASSERT(o == m_parentWidget);
 | 
			
		||||
 | 
			
		||||
    if (QApplication::activePopupWidget()) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    switch (evt->type()) {
 | 
			
		||||
    case QEvent::MouseButtonPress: {
 | 
			
		||||
        if (m_parentWidget->isMaximized()) break;
 | 
			
		||||
        QMouseEvent *e = static_cast<QMouseEvent *>(evt);
 | 
			
		||||
        const QRect widgetRect = m_parentWidget->rect();
 | 
			
		||||
        const QPoint cursorPoint = m_parentWidget->mapFromGlobal(e->globalPos());
 | 
			
		||||
        if (!widgetRect.contains(cursorPoint)) return false;
 | 
			
		||||
        if (e->button() & Qt::LeftButton) {
 | 
			
		||||
            m_oldMousePos = e->pos();
 | 
			
		||||
            m_clickedOnWindow = true;
 | 
			
		||||
            mouseMoveEvent(e);
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
    } break;
 | 
			
		||||
    case QEvent::MouseButtonRelease: {
 | 
			
		||||
        if (m_parentWidget->isMaximized()) break;
 | 
			
		||||
        QMouseEvent *e = static_cast<QMouseEvent *>(evt);
 | 
			
		||||
        if (e->button() & Qt::LeftButton) {
 | 
			
		||||
            qDebug() << "released";
 | 
			
		||||
            m_clickedOnWindow = false;
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
    } break;
 | 
			
		||||
    case QEvent::MouseMove: {
 | 
			
		||||
        if (m_parentWidget->isMaximized()) break;
 | 
			
		||||
        QMouseEvent *e = static_cast<QMouseEvent *>(evt);
 | 
			
		||||
        mouseMoveEvent(e);
 | 
			
		||||
        return true;
 | 
			
		||||
    } break;
 | 
			
		||||
    default:
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void FramelessHandler::mouseMoveEvent(QMouseEvent * evt)
 | 
			
		||||
{
 | 
			
		||||
    QPoint pos = m_parentWidget->mapFromGlobal(evt->globalPos());
 | 
			
		||||
    Qt::Edges mode = Qt::Edges();
 | 
			
		||||
    if (pos.x() <= m_borderWidth) {
 | 
			
		||||
        mode.setFlag(Qt::LeftEdge);
 | 
			
		||||
    } else if (pos.x() >= m_parentWidget->width() - m_borderWidth) {
 | 
			
		||||
        mode.setFlag(Qt::RightEdge);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (pos.y() <= m_borderWidth) {
 | 
			
		||||
        mode.setFlag(Qt::TopEdge);
 | 
			
		||||
    } else if (pos.y() >= m_parentWidget->height() - m_borderWidth) {
 | 
			
		||||
        mode.setFlag(Qt::BottomEdge);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setMouseCursor(mode);
 | 
			
		||||
 | 
			
		||||
    if ((evt->button() & Qt::LeftButton) == Qt::NoButton && !m_clickedOnWindow) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
qDebug() << evt->button() << m_clickedOnWindow;
 | 
			
		||||
 | 
			
		||||
    if (mode) {
 | 
			
		||||
        startSystemResize(mode);
 | 
			
		||||
    } else {
 | 
			
		||||
        if (!startSystemMove()) {
 | 
			
		||||
            m_parentWidget->move(evt->globalPos() - m_oldMousePos);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void FramelessHandler::setMouseCursor(Qt::Edges edge)
 | 
			
		||||
{
 | 
			
		||||
    switch (edge) {
 | 
			
		||||
    case Qt::TopEdge:
 | 
			
		||||
    case Qt::BottomEdge:
 | 
			
		||||
        m_parentWidget->setCursor(Qt::SizeVerCursor);
 | 
			
		||||
        m_parentWidget->window()->setCursor(Qt::SizeVerCursor);
 | 
			
		||||
        break;
 | 
			
		||||
    case Qt::LeftEdge:
 | 
			
		||||
    case Qt::RightEdge:
 | 
			
		||||
        m_parentWidget->setCursor(Qt::SizeHorCursor);
 | 
			
		||||
        m_parentWidget->window()->setCursor(Qt::SizeHorCursor);
 | 
			
		||||
        break;
 | 
			
		||||
    case Qt::TopEdge | Qt::LeftEdge:
 | 
			
		||||
    case Qt::BottomEdge | Qt::RightEdge:
 | 
			
		||||
        m_parentWidget->setCursor(Qt::SizeFDiagCursor);
 | 
			
		||||
        m_parentWidget->window()->setCursor(Qt::SizeFDiagCursor);
 | 
			
		||||
        break;
 | 
			
		||||
    case Qt::BottomEdge | Qt::LeftEdge:
 | 
			
		||||
    case Qt::TopEdge | Qt::RightEdge:
 | 
			
		||||
        m_parentWidget->setCursor(Qt::SizeBDiagCursor);
 | 
			
		||||
        m_parentWidget->window()->setCursor(Qt::SizeBDiagCursor);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        m_parentWidget->setCursor(Qt::ArrowCursor);
 | 
			
		||||
        m_parentWidget->window()->setCursor(Qt::ArrowCursor);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //    qDebug() << "setMouseCursor" << edge;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool FramelessHandler::startSystemResize(Qt::Edges edges)
 | 
			
		||||
{
 | 
			
		||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
 | 
			
		||||
    return m_parentWidget->window()->windowHandle()->startSystemResize(edges);
 | 
			
		||||
#endif // QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool FramelessHandler::startSystemMove()
 | 
			
		||||
{
 | 
			
		||||
#if not QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
 | 
			
		||||
    return m_parentWidget->window()->windowHandle()->startSystemMove();
 | 
			
		||||
#endif // QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										36
									
								
								app/framelesshandler.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,36 @@
 | 
			
		||||
#ifndef FRAMELESSHANDLER_H
 | 
			
		||||
#define FRAMELESSHANDLER_H
 | 
			
		||||
 | 
			
		||||
#include <QObject>
 | 
			
		||||
#include <QPoint>
 | 
			
		||||
 | 
			
		||||
// This concept takes from Qt's QWidgetResizeHandler, but it's not
 | 
			
		||||
// a public Qt API so we cannot relay on it...
 | 
			
		||||
 | 
			
		||||
QT_BEGIN_NAMESPACE
 | 
			
		||||
class QMouseEvent;
 | 
			
		||||
QT_END_NAMESPACE
 | 
			
		||||
 | 
			
		||||
class FramelessHandler : public QObject
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
public:
 | 
			
		||||
    explicit FramelessHandler(QWidget *parent = nullptr);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    bool eventFilter(QObject *o, QEvent *event) override;
 | 
			
		||||
 | 
			
		||||
    void mouseMoveEvent(QMouseEvent *evt);
 | 
			
		||||
    void setMouseCursor(Qt::Edges edge);
 | 
			
		||||
 | 
			
		||||
    bool startSystemResize(Qt::Edges edges);
 | 
			
		||||
    bool startSystemMove();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    QWidget * m_parentWidget = nullptr;
 | 
			
		||||
    QPoint m_oldMousePos;
 | 
			
		||||
    bool m_clickedOnWindow = false;
 | 
			
		||||
    static constexpr int m_borderWidth = 8;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // FRAMELESSHANDLER_H
 | 
			
		||||
@ -1,23 +1,16 @@
 | 
			
		||||
#include "framelesswindow.h"
 | 
			
		||||
#include "framelesshandler.h"
 | 
			
		||||
 | 
			
		||||
#include <QApplication>
 | 
			
		||||
#include <QVBoxLayout>
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#endif // _WIN32
 | 
			
		||||
 | 
			
		||||
FramelessWindow::FramelessWindow(QWidget *parent)
 | 
			
		||||
    : QWidget(parent)
 | 
			
		||||
    , m_centralLayout(new QVBoxLayout(this))
 | 
			
		||||
    , m_framelessHandler(new FramelessHandler(this))
 | 
			
		||||
{
 | 
			
		||||
    // We should use Qt::WindowMinMaxButtonsHint here but there is a bug in Qt
 | 
			
		||||
    // that will make pressing Meta+Up cause the app fullscreen under Windows,
 | 
			
		||||
    // so for now we only use the Qt::WindowMinimizeButtonHint flag here.
 | 
			
		||||
    // https://bugreports.qt.io/browse/QTBUG-91226
 | 
			
		||||
    this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint);
 | 
			
		||||
 | 
			
		||||
    m_centralLayout->setContentsMargins(QMargins());
 | 
			
		||||
    m_centralLayout->setMargin(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void FramelessWindow::setCentralWidget(QWidget *widget)
 | 
			
		||||
@ -30,90 +23,3 @@ void FramelessWindow::setCentralWidget(QWidget *widget)
 | 
			
		||||
    m_centralLayout->addWidget(widget);
 | 
			
		||||
    m_centralWidget = widget;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool FramelessWindow::nativeEvent(const QByteArray &eventType, void *message, NATIVE_RESULT *result)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
    // https://stackoverflow.com/questions/43505580/qt-windows-resizable-frameless-window
 | 
			
		||||
    // Too lazy to do this now.. just stackoverflow it and did a copy and paste..
 | 
			
		||||
    Q_UNUSED(eventType)
 | 
			
		||||
    MSG* msg = static_cast<MSG*>(message);
 | 
			
		||||
 | 
			
		||||
    if (msg->message == WM_NCHITTEST) {
 | 
			
		||||
        if (isMaximized()) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        *result = 0;
 | 
			
		||||
        const LONG borderWidth = 8;
 | 
			
		||||
        RECT winrect;
 | 
			
		||||
        GetWindowRect(reinterpret_cast<HWND>(winId()), &winrect);
 | 
			
		||||
 | 
			
		||||
        // must be short to correctly work with multiple monitors (negative coordinates)
 | 
			
		||||
        short x = msg->lParam & 0x0000FFFF;
 | 
			
		||||
        short y = (msg->lParam & 0xFFFF0000) >> 16;
 | 
			
		||||
 | 
			
		||||
        bool resizeWidth = minimumWidth() != maximumWidth();
 | 
			
		||||
        bool resizeHeight = minimumHeight() != maximumHeight();
 | 
			
		||||
        if (resizeWidth) {
 | 
			
		||||
            //left border
 | 
			
		||||
            if (x >= winrect.left && x < winrect.left + borderWidth) {
 | 
			
		||||
                *result = HTLEFT;
 | 
			
		||||
            }
 | 
			
		||||
            //right border
 | 
			
		||||
            if (x < winrect.right && x >= winrect.right - borderWidth) {
 | 
			
		||||
                *result = HTRIGHT;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (resizeHeight) {
 | 
			
		||||
            //bottom border
 | 
			
		||||
            if (y < winrect.bottom && y >= winrect.bottom - borderWidth) {
 | 
			
		||||
                *result = HTBOTTOM;
 | 
			
		||||
            }
 | 
			
		||||
            //top border
 | 
			
		||||
            if (y >= winrect.top && y < winrect.top + borderWidth) {
 | 
			
		||||
                *result = HTTOP;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (resizeWidth && resizeHeight) {
 | 
			
		||||
            //bottom left corner
 | 
			
		||||
            if (x >= winrect.left && x < winrect.left + borderWidth &&
 | 
			
		||||
                    y < winrect.bottom && y >= winrect.bottom - borderWidth)
 | 
			
		||||
            {
 | 
			
		||||
                *result = HTBOTTOMLEFT;
 | 
			
		||||
            }
 | 
			
		||||
            //bottom right corner
 | 
			
		||||
            if (x < winrect.right && x >= winrect.right - borderWidth &&
 | 
			
		||||
                    y < winrect.bottom && y >= winrect.bottom - borderWidth)
 | 
			
		||||
            {
 | 
			
		||||
                *result = HTBOTTOMRIGHT;
 | 
			
		||||
            }
 | 
			
		||||
            //top left corner
 | 
			
		||||
            if (x >= winrect.left && x < winrect.left + borderWidth &&
 | 
			
		||||
                    y >= winrect.top && y < winrect.top + borderWidth)
 | 
			
		||||
            {
 | 
			
		||||
                *result = HTTOPLEFT;
 | 
			
		||||
            }
 | 
			
		||||
            //top right corner
 | 
			
		||||
            if (x < winrect.right && x >= winrect.right - borderWidth &&
 | 
			
		||||
                    y >= winrect.top && y < winrect.top + borderWidth)
 | 
			
		||||
            {
 | 
			
		||||
                *result = HTTOPRIGHT;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (*result != 0)
 | 
			
		||||
            return true;
 | 
			
		||||
 | 
			
		||||
        QWidget *action = QApplication::widgetAt(QCursor::pos());
 | 
			
		||||
        if (action == this) {
 | 
			
		||||
            *result = HTCAPTION;
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return false;
 | 
			
		||||
#else
 | 
			
		||||
    return QWidget::nativeEvent(eventType, message, result);
 | 
			
		||||
#endif // _WIN32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -3,16 +3,11 @@
 | 
			
		||||
 | 
			
		||||
#include <QWidget>
 | 
			
		||||
 | 
			
		||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
 | 
			
		||||
    typedef qintptr NATIVE_RESULT;
 | 
			
		||||
#else
 | 
			
		||||
    typedef long NATIVE_RESULT;
 | 
			
		||||
#endif // QT_VERSION_CHECK(6, 0, 0)
 | 
			
		||||
 | 
			
		||||
QT_BEGIN_NAMESPACE
 | 
			
		||||
class QVBoxLayout;
 | 
			
		||||
QT_END_NAMESPACE
 | 
			
		||||
 | 
			
		||||
class FramelessHandler;
 | 
			
		||||
class FramelessWindow : public QWidget
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
@ -21,12 +16,12 @@ public:
 | 
			
		||||
 | 
			
		||||
    void setCentralWidget(QWidget * widget);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    bool nativeEvent(const QByteArray& eventType, void* message, NATIVE_RESULT* result) override;
 | 
			
		||||
signals:
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    QVBoxLayout * m_centralLayout = nullptr;
 | 
			
		||||
    QWidget * m_centralWidget = nullptr; // just a pointer, doesn't take the ownership.
 | 
			
		||||
    FramelessHandler * m_framelessHandler = nullptr;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // FRAMELESSWINDOW_H
 | 
			
		||||
 | 
			
		||||
@ -10,38 +10,6 @@
 | 
			
		||||
#include <QLabel>
 | 
			
		||||
#include <QPainter>
 | 
			
		||||
 | 
			
		||||
class PGraphicsPixmapItem : public QGraphicsPixmapItem
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    PGraphicsPixmapItem(const QPixmap &pixmap, QGraphicsItem *parent = nullptr)
 | 
			
		||||
        : QGraphicsPixmapItem(pixmap, parent)
 | 
			
		||||
    {}
 | 
			
		||||
 | 
			
		||||
    void setScaleHint(float scaleHint) {
 | 
			
		||||
        m_scaleHint = scaleHint;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
 | 
			
		||||
               QWidget *widget) override
 | 
			
		||||
    {
 | 
			
		||||
        if (transformationMode() == Qt::FastTransformation) {
 | 
			
		||||
            return QGraphicsPixmapItem::paint(painter, option, widget);
 | 
			
		||||
        } else {
 | 
			
		||||
//            painter->setRenderHints(QPainter::Antialiasing);
 | 
			
		||||
            QSizeF resizedScale(boundingRect().size());
 | 
			
		||||
            resizedScale *= m_scaleHint;
 | 
			
		||||
            painter->drawPixmap(QRectF(offset(), boundingRect().size()).toRect(),
 | 
			
		||||
                                pixmap().scaled(resizedScale.toSize(),
 | 
			
		||||
                                                Qt::KeepAspectRatio,
 | 
			
		||||
                                                Qt::SmoothTransformation)
 | 
			
		||||
                                );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    float m_scaleHint = 1;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GraphicsScene::GraphicsScene(QObject *parent)
 | 
			
		||||
    : QGraphicsScene(parent)
 | 
			
		||||
{
 | 
			
		||||
@ -56,8 +24,7 @@ GraphicsScene::~GraphicsScene()
 | 
			
		||||
void GraphicsScene::showImage(const QPixmap &pixmap)
 | 
			
		||||
{
 | 
			
		||||
    this->clear();
 | 
			
		||||
    PGraphicsPixmapItem * pixmapItem = new PGraphicsPixmapItem(pixmap);
 | 
			
		||||
    this->addItem(pixmapItem);
 | 
			
		||||
    QGraphicsPixmapItem * pixmapItem = this->addPixmap(pixmap);
 | 
			
		||||
    pixmapItem->setShapeMode(QGraphicsPixmapItem::BoundingRectShape);
 | 
			
		||||
    m_theThing = pixmapItem;
 | 
			
		||||
    this->setSceneRect(m_theThing->boundingRect());
 | 
			
		||||
@ -81,11 +48,11 @@ void GraphicsScene::showSvg(const QString &filepath)
 | 
			
		||||
    this->setSceneRect(m_theThing->boundingRect());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsScene::showAnimated(const QString &filepath)
 | 
			
		||||
void GraphicsScene::showGif(const QString &filepath)
 | 
			
		||||
{
 | 
			
		||||
    this->clear();
 | 
			
		||||
    QMovie * movie = new QMovie(filepath);
 | 
			
		||||
    QLabel * label = new QLabel;
 | 
			
		||||
    QMovie * movie = new QMovie(filepath, QByteArray(), label);
 | 
			
		||||
    label->setStyleSheet("background-color:rgba(225,255,255,0);");
 | 
			
		||||
    label->setMovie(movie);
 | 
			
		||||
    this->addWidget(label);
 | 
			
		||||
@ -95,12 +62,11 @@ void GraphicsScene::showAnimated(const QString &filepath)
 | 
			
		||||
    this->setSceneRect(m_theThing->boundingRect());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool GraphicsScene::trySetTransformationMode(Qt::TransformationMode mode, float scaleHint)
 | 
			
		||||
bool GraphicsScene::trySetTransformationMode(Qt::TransformationMode mode)
 | 
			
		||||
{
 | 
			
		||||
    PGraphicsPixmapItem * pixmapItem = qgraphicsitem_cast<PGraphicsPixmapItem *>(m_theThing);
 | 
			
		||||
    QGraphicsPixmapItem * pixmapItem = qgraphicsitem_cast<QGraphicsPixmapItem *>(m_theThing);
 | 
			
		||||
    if (pixmapItem) {
 | 
			
		||||
        pixmapItem->setTransformationMode(mode);
 | 
			
		||||
        pixmapItem->setScaleHint(scaleHint);
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -109,11 +75,6 @@ bool GraphicsScene::trySetTransformationMode(Qt::TransformationMode mode, float
 | 
			
		||||
 | 
			
		||||
QPixmap GraphicsScene::renderToPixmap()
 | 
			
		||||
{
 | 
			
		||||
    PGraphicsPixmapItem * pixmapItem = qgraphicsitem_cast<PGraphicsPixmapItem *>(m_theThing);
 | 
			
		||||
    if (pixmapItem) {
 | 
			
		||||
        return pixmapItem->pixmap();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    QPixmap pixmap(sceneRect().toRect().size());
 | 
			
		||||
    pixmap.fill(Qt::transparent);
 | 
			
		||||
    QPainter p(&pixmap);
 | 
			
		||||
 | 
			
		||||
@ -13,9 +13,9 @@ public:
 | 
			
		||||
    void showImage(const QPixmap &pixmap);
 | 
			
		||||
    void showText(const QString &text);
 | 
			
		||||
    void showSvg(const QString &filepath);
 | 
			
		||||
    void showAnimated(const QString &filepath);
 | 
			
		||||
    void showGif(const QString &filepath);
 | 
			
		||||
 | 
			
		||||
    bool trySetTransformationMode(Qt::TransformationMode mode, float scaleHint);
 | 
			
		||||
    bool trySetTransformationMode(Qt::TransformationMode mode);
 | 
			
		||||
 | 
			
		||||
    QPixmap renderToPixmap();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -7,14 +7,6 @@
 | 
			
		||||
#include <QScrollBar>
 | 
			
		||||
#include <QMimeData>
 | 
			
		||||
#include <QImageReader>
 | 
			
		||||
#include <QStyleOptionGraphicsItem>
 | 
			
		||||
 | 
			
		||||
// TODO: remove this once we drop older Qt support.
 | 
			
		||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)
 | 
			
		||||
#define COMPAT_CONSTCOLOR constexpr
 | 
			
		||||
#else
 | 
			
		||||
#define COMPAT_CONSTCOLOR const
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
GraphicsView::GraphicsView(QWidget *parent)
 | 
			
		||||
    : QGraphicsView (parent)
 | 
			
		||||
@ -33,32 +25,30 @@ GraphicsView::GraphicsView(QWidget *parent)
 | 
			
		||||
    connect(verticalScrollBar(), &QScrollBar::valueChanged, this, &GraphicsView::viewportRectChanged);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::showFileFromPath(const QString &filePath, bool doRequestGallery)
 | 
			
		||||
void GraphicsView::showFileFromUrl(const QUrl &url, bool doRequestGallery)
 | 
			
		||||
{
 | 
			
		||||
    emit navigatorViewRequired(false, transform());
 | 
			
		||||
    emit navigatorViewRequired(false, 0);
 | 
			
		||||
 | 
			
		||||
    QString filePath(url.toLocalFile());
 | 
			
		||||
 | 
			
		||||
    if (filePath.endsWith(".svg")) {
 | 
			
		||||
        showSvg(filePath);
 | 
			
		||||
    } else if (filePath.endsWith(".gif")) {
 | 
			
		||||
        showGif(filePath);
 | 
			
		||||
    } else {
 | 
			
		||||
        QImageReader imageReader(filePath);
 | 
			
		||||
        imageReader.setAutoTransform(true);
 | 
			
		||||
        imageReader.setDecideFormatFromContent(true);
 | 
			
		||||
 | 
			
		||||
        // Since if the image format / plugin does not support this feature, imageFormat() will returns an invalid format.
 | 
			
		||||
        // So we cannot use imageFormat() and check if it returns QImage::Format_Invalid to detect if we support the file.
 | 
			
		||||
        // QImage::Format imageFormat = imageReader.imageFormat();
 | 
			
		||||
        if (imageReader.format().isEmpty()) {
 | 
			
		||||
            doRequestGallery = false;
 | 
			
		||||
            showText(tr("File is not a valid image"));
 | 
			
		||||
        } else if (imageReader.supportsAnimation() && imageReader.imageCount() > 1) {
 | 
			
		||||
            showAnimated(filePath);
 | 
			
		||||
        } else if (!imageReader.canRead()) {
 | 
			
		||||
            doRequestGallery = false;
 | 
			
		||||
        } else if (!imageReader.supportsAnimation() && !imageReader.canRead()) {
 | 
			
		||||
            showText(tr("Image data is invalid or currently unsupported"));
 | 
			
		||||
        } else {
 | 
			
		||||
            const QPixmap & pixmap = QPixmap::fromImageReader(&imageReader);
 | 
			
		||||
            if (pixmap.isNull()) {
 | 
			
		||||
                doRequestGallery = false;
 | 
			
		||||
                showText(tr("Image data is invalid or currently unsupported"));
 | 
			
		||||
            } else {
 | 
			
		||||
                showImage(pixmap);
 | 
			
		||||
@ -75,35 +65,35 @@ void GraphicsView::showImage(const QPixmap &pixmap)
 | 
			
		||||
{
 | 
			
		||||
    resetTransform();
 | 
			
		||||
    scene()->showImage(pixmap);
 | 
			
		||||
    displayScene();
 | 
			
		||||
    checkAndDoFitInView();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::showImage(const QImage &image)
 | 
			
		||||
{
 | 
			
		||||
    resetTransform();
 | 
			
		||||
    scene()->showImage(QPixmap::fromImage(image));
 | 
			
		||||
    displayScene();
 | 
			
		||||
    checkAndDoFitInView();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::showText(const QString &text)
 | 
			
		||||
{
 | 
			
		||||
    resetTransform();
 | 
			
		||||
    scene()->showText(text);
 | 
			
		||||
    displayScene();
 | 
			
		||||
    checkAndDoFitInView();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::showSvg(const QString &filepath)
 | 
			
		||||
{
 | 
			
		||||
    resetTransform();
 | 
			
		||||
    scene()->showSvg(filepath);
 | 
			
		||||
    displayScene();
 | 
			
		||||
    checkAndDoFitInView();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::showAnimated(const QString &filepath)
 | 
			
		||||
void GraphicsView::showGif(const QString &filepath)
 | 
			
		||||
{
 | 
			
		||||
    resetTransform();
 | 
			
		||||
    scene()->showAnimated(filepath);
 | 
			
		||||
    displayScene();
 | 
			
		||||
    scene()->showGif(filepath);
 | 
			
		||||
    checkAndDoFitInView();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GraphicsScene *GraphicsView::scene() const
 | 
			
		||||
@ -118,11 +108,17 @@ void GraphicsView::setScene(GraphicsScene *scene)
 | 
			
		||||
 | 
			
		||||
qreal GraphicsView::scaleFactor() const
 | 
			
		||||
{
 | 
			
		||||
    return QStyleOptionGraphicsItem::levelOfDetailFromTransform(transform());
 | 
			
		||||
    int angle = static_cast<int>(m_rotateAngle);
 | 
			
		||||
    if (angle == 0 || angle == 180) {
 | 
			
		||||
        return qAbs(transform().m11());
 | 
			
		||||
    } else {
 | 
			
		||||
        return qAbs(transform().m12());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::resetTransform()
 | 
			
		||||
{
 | 
			
		||||
    m_rotateAngle = 0;
 | 
			
		||||
    QGraphicsView::resetTransform();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -131,39 +127,20 @@ void GraphicsView::zoomView(qreal scaleFactor)
 | 
			
		||||
    m_enableFitInView = false;
 | 
			
		||||
    scale(scaleFactor, scaleFactor);
 | 
			
		||||
    applyTransformationModeByScaleFactor();
 | 
			
		||||
    emit navigatorViewRequired(!isThingSmallerThanWindowWith(transform()), transform());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// This is always according to user's view.
 | 
			
		||||
// the direction of the rotation will NOT be clockwise because the y-axis points downwards.
 | 
			
		||||
void GraphicsView::rotateView(bool clockwise)
 | 
			
		||||
{
 | 
			
		||||
    resetScale();
 | 
			
		||||
 | 
			
		||||
    QTransform tf(0,                  clockwise ? 1 : -1, 0,
 | 
			
		||||
                  clockwise ? -1 : 1, 0,                  0,
 | 
			
		||||
                  0,                  0,                  1);
 | 
			
		||||
    tf = transform() * tf;
 | 
			
		||||
    setTransform(tf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::flipView(bool horizontal)
 | 
			
		||||
{
 | 
			
		||||
    QTransform tf(horizontal ? -1 : 1, 0,                   0,
 | 
			
		||||
                  0,                   horizontal ? 1 : -1, 0,
 | 
			
		||||
                  0,                   0,                   1);
 | 
			
		||||
    tf = transform() * tf;
 | 
			
		||||
    setTransform(tf);
 | 
			
		||||
 | 
			
		||||
    // Ensure the navigation view is also flipped.
 | 
			
		||||
    emit navigatorViewRequired(!isThingSmallerThanWindowWith(transform()), transform());
 | 
			
		||||
    emit navigatorViewRequired(!isThingSmallerThanWindowWith(transform()), m_rotateAngle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::resetScale()
 | 
			
		||||
{
 | 
			
		||||
    setTransform(resetScale(transform()));
 | 
			
		||||
    applyTransformationModeByScaleFactor();
 | 
			
		||||
    emit navigatorViewRequired(!isThingSmallerThanWindowWith(transform()), transform());
 | 
			
		||||
    resetWithScaleAndRotate(1, m_rotateAngle);
 | 
			
		||||
    emit navigatorViewRequired(!isThingSmallerThanWindowWith(transform()), m_rotateAngle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::rotateView(qreal rotateAngel)
 | 
			
		||||
{
 | 
			
		||||
    m_rotateAngle += rotateAngel;
 | 
			
		||||
    m_rotateAngle = static_cast<int>(m_rotateAngle) % 360;
 | 
			
		||||
    resetWithScaleAndRotate(1, m_rotateAngle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::fitInView(const QRectF &rect, Qt::AspectRatioMode aspectRadioMode)
 | 
			
		||||
@ -172,72 +149,21 @@ void GraphicsView::fitInView(const QRectF &rect, Qt::AspectRatioMode aspectRadio
 | 
			
		||||
    applyTransformationModeByScaleFactor();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::fitByOrientation(Qt::Orientation ori, bool scaleDownOnly)
 | 
			
		||||
void GraphicsView::checkAndDoFitInView(bool markItOnAnyway)
 | 
			
		||||
{
 | 
			
		||||
    resetScale();
 | 
			
		||||
 | 
			
		||||
    QRectF viewRect = this->viewport()->rect().adjusted(2, 2, -2, -2);
 | 
			
		||||
    QRectF imageRect = transform().mapRect(sceneRect());
 | 
			
		||||
 | 
			
		||||
    qreal ratio;
 | 
			
		||||
 | 
			
		||||
    if (ori == Qt::Horizontal) {
 | 
			
		||||
        ratio = viewRect.width() / imageRect.width();
 | 
			
		||||
    } else {
 | 
			
		||||
        ratio = viewRect.height() / imageRect.height();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (scaleDownOnly && ratio > 1) ratio = 1;
 | 
			
		||||
 | 
			
		||||
    scale(ratio, ratio);
 | 
			
		||||
    centerOn(imageRect.top(), 0);
 | 
			
		||||
    m_enableFitInView = false;
 | 
			
		||||
 | 
			
		||||
    applyTransformationModeByScaleFactor();
 | 
			
		||||
    emit navigatorViewRequired(!isThingSmallerThanWindowWith(transform()), transform());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::displayScene()
 | 
			
		||||
{
 | 
			
		||||
    if (isSceneBiggerThanView()) {
 | 
			
		||||
    if (!isThingSmallerThanWindowWith(transform())) {
 | 
			
		||||
        m_enableFitInView = true;
 | 
			
		||||
        fitInView(sceneRect(), Qt::KeepAspectRatio);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_enableFitInView = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool GraphicsView::isSceneBiggerThanView() const
 | 
			
		||||
{
 | 
			
		||||
    if (!isThingSmallerThanWindowWith(transform())) {
 | 
			
		||||
        return true;
 | 
			
		||||
    } else {
 | 
			
		||||
        return false;
 | 
			
		||||
    if (markItOnAnyway) {
 | 
			
		||||
        m_enableFitInView = true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Automately do fit in view when viewport(window) smaller than image original size.
 | 
			
		||||
void GraphicsView::setEnableAutoFitInView(bool enable)
 | 
			
		||||
void GraphicsView::toggleCheckerboard()
 | 
			
		||||
{
 | 
			
		||||
    m_enableFitInView = enable;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline double zeroOrOne(double number)
 | 
			
		||||
{
 | 
			
		||||
    return qFuzzyIsNull(number) ? 0 : (number > 0 ? 1 : -1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Note: this only works if we only have 90 degree based rotation
 | 
			
		||||
//       and no shear/translate.
 | 
			
		||||
QTransform GraphicsView::resetScale(const QTransform & orig)
 | 
			
		||||
{
 | 
			
		||||
    return QTransform(zeroOrOne(orig.m11()), zeroOrOne(orig.m12()),
 | 
			
		||||
                      zeroOrOne(orig.m21()), zeroOrOne(orig.m22()),
 | 
			
		||||
                      orig.dx(),             orig.dy());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::toggleCheckerboard(bool invertCheckerboardColor)
 | 
			
		||||
{
 | 
			
		||||
    setCheckerboardEnabled(!m_checkerboardEnabled, invertCheckerboardColor);
 | 
			
		||||
    setCheckerboardEnabled(!m_checkerboardEnabled);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::mousePressEvent(QMouseEvent *event)
 | 
			
		||||
@ -263,13 +189,9 @@ void GraphicsView::mouseMoveEvent(QMouseEvent *event)
 | 
			
		||||
 | 
			
		||||
void GraphicsView::mouseReleaseEvent(QMouseEvent *event)
 | 
			
		||||
{
 | 
			
		||||
    if (event->button() == Qt::ForwardButton || event->button() == Qt::BackButton) {
 | 
			
		||||
    QGraphicsItem *item = itemAt(event->pos());
 | 
			
		||||
    if (!item) {
 | 
			
		||||
        event->ignore();
 | 
			
		||||
    } else {
 | 
			
		||||
        QGraphicsItem *item = itemAt(event->pos());
 | 
			
		||||
        if (!item) {
 | 
			
		||||
            event->ignore();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return QGraphicsView::mouseReleaseEvent(event);
 | 
			
		||||
@ -284,18 +206,17 @@ void GraphicsView::wheelEvent(QWheelEvent *event)
 | 
			
		||||
void GraphicsView::resizeEvent(QResizeEvent *event)
 | 
			
		||||
{
 | 
			
		||||
    if (m_enableFitInView) {
 | 
			
		||||
        bool originalSizeSmallerThanWindow = isThingSmallerThanWindowWith(resetScale(transform()));
 | 
			
		||||
        if (originalSizeSmallerThanWindow && scaleFactor() >= 1) {
 | 
			
		||||
        QTransform tf;
 | 
			
		||||
        tf.rotate(m_rotateAngle);
 | 
			
		||||
        if (isThingSmallerThanWindowWith(tf) && scaleFactor() >= 1) {
 | 
			
		||||
            // no longer need to do fitInView()
 | 
			
		||||
            // but we leave the m_enableFitInView value unchanged in case
 | 
			
		||||
            // user resize down the window again.
 | 
			
		||||
        } else if (originalSizeSmallerThanWindow && scaleFactor() < 1) {
 | 
			
		||||
            resetScale();
 | 
			
		||||
        } else {
 | 
			
		||||
            fitInView(sceneRect(), Qt::KeepAspectRatio);
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        emit navigatorViewRequired(!isThingSmallerThanWindowWith(transform()), transform());
 | 
			
		||||
        emit navigatorViewRequired(!isThingSmallerThanWindowWith(transform()), m_rotateAngle);
 | 
			
		||||
    }
 | 
			
		||||
    return QGraphicsView::resizeEvent(event);
 | 
			
		||||
}
 | 
			
		||||
@ -332,7 +253,7 @@ void GraphicsView::dropEvent(QDropEvent *event)
 | 
			
		||||
        if (urls.isEmpty()) {
 | 
			
		||||
            showText(tr("File url list is empty"));
 | 
			
		||||
        } else {
 | 
			
		||||
            showFileFromPath(urls.first().toLocalFile(), true);
 | 
			
		||||
            showFileFromUrl(urls.first(), true);
 | 
			
		||||
        }
 | 
			
		||||
    } else if (mimeData->hasImage()) {
 | 
			
		||||
        QImage img = qvariant_cast<QImage>(mimeData->imageData());
 | 
			
		||||
@ -373,19 +294,17 @@ bool GraphicsView::shouldIgnoreMousePressMoveEvent(const QMouseEvent *event) con
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::setCheckerboardEnabled(bool enabled, bool invertColor)
 | 
			
		||||
void GraphicsView::setCheckerboardEnabled(bool enabled)
 | 
			
		||||
{
 | 
			
		||||
    m_checkerboardEnabled = enabled;
 | 
			
		||||
    m_isLastCheckerboardColorInverted = invertColor;
 | 
			
		||||
    if (m_checkerboardEnabled) {
 | 
			
		||||
        // Prepare background check-board pattern
 | 
			
		||||
        QPixmap tilePixmap(0x20, 0x20);
 | 
			
		||||
        tilePixmap.fill(invertColor ? QColor(220, 220, 220, 170) : QColor(35, 35, 35, 170));
 | 
			
		||||
        tilePixmap.fill(QColor(35, 35, 35, 170));
 | 
			
		||||
        QPainter tilePainter(&tilePixmap);
 | 
			
		||||
        COMPAT_CONSTCOLOR QColor color(45, 45, 45, 170);
 | 
			
		||||
        COMPAT_CONSTCOLOR QColor invertedColor(210, 210, 210, 170);
 | 
			
		||||
        tilePainter.fillRect(0, 0, 0x10, 0x10, invertColor ? invertedColor : color);
 | 
			
		||||
        tilePainter.fillRect(0x10, 0x10, 0x10, 0x10, invertColor ? invertedColor : color);
 | 
			
		||||
        QColor color(45, 45, 45, 170);
 | 
			
		||||
        tilePainter.fillRect(0, 0, 0x10, 0x10, color);
 | 
			
		||||
        tilePainter.fillRect(0x10, 0x10, 0x10, 0x10, color);
 | 
			
		||||
        tilePainter.end();
 | 
			
		||||
 | 
			
		||||
        setBackgroundBrush(tilePixmap);
 | 
			
		||||
@ -397,8 +316,15 @@ void GraphicsView::setCheckerboardEnabled(bool enabled, bool invertColor)
 | 
			
		||||
void GraphicsView::applyTransformationModeByScaleFactor()
 | 
			
		||||
{
 | 
			
		||||
    if (this->scaleFactor() < 1) {
 | 
			
		||||
        scene()->trySetTransformationMode(Qt::SmoothTransformation, this->scaleFactor());
 | 
			
		||||
        scene()->trySetTransformationMode(Qt::SmoothTransformation);
 | 
			
		||||
    } else {
 | 
			
		||||
        scene()->trySetTransformationMode(Qt::FastTransformation, this->scaleFactor());
 | 
			
		||||
        scene()->trySetTransformationMode(Qt::FastTransformation);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GraphicsView::resetWithScaleAndRotate(qreal scaleFactor, qreal rotateAngle)
 | 
			
		||||
{
 | 
			
		||||
    QGraphicsView::resetTransform();
 | 
			
		||||
    scale(scaleFactor, scaleFactor);
 | 
			
		||||
    rotate(rotateAngle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -11,13 +11,13 @@ class GraphicsView : public QGraphicsView
 | 
			
		||||
public:
 | 
			
		||||
    GraphicsView(QWidget *parent = nullptr);
 | 
			
		||||
 | 
			
		||||
    void showFileFromPath(const QString &filePath, bool requestGallery = false);
 | 
			
		||||
    void showFileFromUrl(const QUrl &url, bool requestGallery = false);
 | 
			
		||||
 | 
			
		||||
    void showImage(const QPixmap &pixmap);
 | 
			
		||||
    void showImage(const QImage &image);
 | 
			
		||||
    void showText(const QString &text);
 | 
			
		||||
    void showSvg(const QString &filepath);
 | 
			
		||||
    void showAnimated(const QString &filepath);
 | 
			
		||||
    void showGif(const QString &filepath);
 | 
			
		||||
 | 
			
		||||
    GraphicsScene * scene() const;
 | 
			
		||||
    void setScene(GraphicsScene *scene);
 | 
			
		||||
@ -26,25 +26,19 @@ public:
 | 
			
		||||
 | 
			
		||||
    void resetTransform();
 | 
			
		||||
    void zoomView(qreal scaleFactor);
 | 
			
		||||
    void rotateView(bool clockwise = true);
 | 
			
		||||
    void flipView(bool horizontal = true);
 | 
			
		||||
    void resetScale();
 | 
			
		||||
    void rotateView(qreal rotateAngel);
 | 
			
		||||
    void fitInView(const QRectF &rect, Qt::AspectRatioMode aspectRadioMode = Qt::IgnoreAspectRatio);
 | 
			
		||||
    void fitByOrientation(Qt::Orientation ori = Qt::Horizontal, bool scaleDownOnly = false);
 | 
			
		||||
 | 
			
		||||
    void displayScene();
 | 
			
		||||
    bool isSceneBiggerThanView() const;
 | 
			
		||||
    void setEnableAutoFitInView(bool enable = true);
 | 
			
		||||
 | 
			
		||||
    static QTransform resetScale(const QTransform & orig);
 | 
			
		||||
    void checkAndDoFitInView(bool markItOnAnyway = true);
 | 
			
		||||
 | 
			
		||||
signals:
 | 
			
		||||
    void navigatorViewRequired(bool required, QTransform transform);
 | 
			
		||||
    void navigatorViewRequired(bool required, qreal angle);
 | 
			
		||||
    void viewportRectChanged();
 | 
			
		||||
    void requestGallery(const QString &filePath);
 | 
			
		||||
 | 
			
		||||
public slots:
 | 
			
		||||
    void toggleCheckerboard(bool invertCheckerboardColor = false);
 | 
			
		||||
    void toggleCheckerboard();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    void mousePressEvent(QMouseEvent * event) override;
 | 
			
		||||
@ -59,15 +53,14 @@ private:
 | 
			
		||||
 | 
			
		||||
    bool isThingSmallerThanWindowWith(const QTransform &transform) const;
 | 
			
		||||
    bool shouldIgnoreMousePressMoveEvent(const QMouseEvent *event) const;
 | 
			
		||||
    void setCheckerboardEnabled(bool enabled, bool invertColor = false);
 | 
			
		||||
    void setCheckerboardEnabled(bool enabled);
 | 
			
		||||
    void applyTransformationModeByScaleFactor();
 | 
			
		||||
 | 
			
		||||
    // Consider switch to 3 state for "no fit", "always fit" and "fit when view is smaller"?
 | 
			
		||||
    // ... or even more? e.g. "fit/snap width" things...
 | 
			
		||||
    // Currently it's "no fit" when it's false and "fit when view is smaller" when it's true.
 | 
			
		||||
    void resetWithScaleAndRotate(qreal scaleFactor, qreal rotateAngle);
 | 
			
		||||
 | 
			
		||||
    bool m_enableFitInView = false;
 | 
			
		||||
    bool m_checkerboardEnabled = false;
 | 
			
		||||
    bool m_isLastCheckerboardColorInverted = false;
 | 
			
		||||
    qreal m_rotateAngle = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // GRAPHICSVIEW_H
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								app/main.cpp
									
									
									
									
									
								
							
							
						
						@ -1,7 +1,4 @@
 | 
			
		||||
#include "mainwindow.h"
 | 
			
		||||
 | 
			
		||||
#include "playlistmanager.h"
 | 
			
		||||
 | 
			
		||||
#include <QApplication>
 | 
			
		||||
#include <QCommandLineParser>
 | 
			
		||||
#include <QDir>
 | 
			
		||||
@ -37,12 +34,18 @@ int main(int argc, char *argv[])
 | 
			
		||||
 | 
			
		||||
    parser.process(a);
 | 
			
		||||
 | 
			
		||||
    QStringList urlStrList = parser.positionalArguments();
 | 
			
		||||
    QList<QUrl> urlList;
 | 
			
		||||
    for (const QString & str : urlStrList) {
 | 
			
		||||
        QUrl url = QUrl::fromLocalFile(str);
 | 
			
		||||
        if (url.isValid()) {
 | 
			
		||||
            urlList.append(url);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    MainWindow w;
 | 
			
		||||
    w.show();
 | 
			
		||||
 | 
			
		||||
    QStringList urlStrList = parser.positionalArguments();
 | 
			
		||||
    QList<QUrl> && urlList = PlaylistManager::convertToUrlList(urlStrList);
 | 
			
		||||
 | 
			
		||||
    if (!urlList.isEmpty()) {
 | 
			
		||||
        w.showUrls(urlList);
 | 
			
		||||
        w.adjustWindowSizeBySceneRect();
 | 
			
		||||
 | 
			
		||||
@ -10,8 +10,6 @@
 | 
			
		||||
#include "aboutdialog.h"
 | 
			
		||||
#include "metadatamodel.h"
 | 
			
		||||
#include "metadatadialog.h"
 | 
			
		||||
#include "actionmanager.h"
 | 
			
		||||
#include "playlistmanager.h"
 | 
			
		||||
 | 
			
		||||
#include <QMouseEvent>
 | 
			
		||||
#include <QMovie>
 | 
			
		||||
@ -22,18 +20,18 @@
 | 
			
		||||
#include <QScreen>
 | 
			
		||||
#include <QMenu>
 | 
			
		||||
#include <QShortcut>
 | 
			
		||||
#include <QDir>
 | 
			
		||||
#include <QCollator>
 | 
			
		||||
#include <QClipboard>
 | 
			
		||||
#include <QMimeData>
 | 
			
		||||
#include <QWindow>
 | 
			
		||||
#include <QFile>
 | 
			
		||||
#include <QTimer>
 | 
			
		||||
#include <QFileDialog>
 | 
			
		||||
#include <QStandardPaths>
 | 
			
		||||
 | 
			
		||||
MainWindow::MainWindow(QWidget *parent)
 | 
			
		||||
    : FramelessWindow(parent)
 | 
			
		||||
    , m_am(new ActionManager)
 | 
			
		||||
    , m_pm(new PlaylistManager(PlaylistManager::PL_SAMEFOLDER, this))
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#endif // _WIN32
 | 
			
		||||
 | 
			
		||||
MainWindow::MainWindow(QWidget *parent) :
 | 
			
		||||
    FramelessWindow(parent)
 | 
			
		||||
{
 | 
			
		||||
    if (Settings::instance()->stayOnTop()) {
 | 
			
		||||
        this->setWindowFlag(Qt::WindowStaysOnTopHint);
 | 
			
		||||
@ -44,8 +42,6 @@ MainWindow::MainWindow(QWidget *parent)
 | 
			
		||||
    this->setWindowIcon(QIcon(":/icons/app-icon.svg"));
 | 
			
		||||
    this->setMouseTracking(true);
 | 
			
		||||
 | 
			
		||||
    m_pm->setAutoLoadFilterSuffix({"*.jpg", "*.jpeg", "*.jfif", "*.png", "*.gif", "*.svg", "*.bmp", "*.webp"});
 | 
			
		||||
 | 
			
		||||
    m_fadeOutAnimation = new QPropertyAnimation(this, "windowOpacity");
 | 
			
		||||
    m_fadeOutAnimation->setDuration(300);
 | 
			
		||||
    m_fadeOutAnimation->setStartValue(1);
 | 
			
		||||
@ -53,7 +49,7 @@ MainWindow::MainWindow(QWidget *parent)
 | 
			
		||||
    m_floatUpAnimation = new QPropertyAnimation(this, "geometry");
 | 
			
		||||
    m_floatUpAnimation->setDuration(300);
 | 
			
		||||
    m_floatUpAnimation->setEasingCurve(QEasingCurve::OutCirc);
 | 
			
		||||
    m_exitAnimationGroup = new QParallelAnimationGroup(this);
 | 
			
		||||
    m_exitAnimationGroup = new QParallelAnimationGroup;
 | 
			
		||||
    m_exitAnimationGroup->addAnimation(m_fadeOutAnimation);
 | 
			
		||||
    m_exitAnimationGroup->addAnimation(m_floatUpAnimation);
 | 
			
		||||
    connect(m_exitAnimationGroup, &QParallelAnimationGroup::finished,
 | 
			
		||||
@ -72,8 +68,9 @@ MainWindow::MainWindow(QWidget *parent)
 | 
			
		||||
    m_gv->fitInView(m_gv->sceneRect(), Qt::KeepAspectRatio);
 | 
			
		||||
 | 
			
		||||
    connect(m_graphicsView, &GraphicsView::navigatorViewRequired,
 | 
			
		||||
            this, [ = ](bool required, QTransform tf){
 | 
			
		||||
        m_gv->setTransform(GraphicsView::resetScale(tf));
 | 
			
		||||
            this, [ = ](bool required, qreal angle){
 | 
			
		||||
        m_gv->resetTransform();
 | 
			
		||||
        m_gv->rotate(angle);
 | 
			
		||||
        m_gv->fitInView(m_gv->sceneRect(), Qt::KeepAspectRatio);
 | 
			
		||||
        m_gv->setVisible(required);
 | 
			
		||||
        m_gv->updateMainViewportRegion();
 | 
			
		||||
@ -108,35 +105,56 @@ MainWindow::MainWindow(QWidget *parent)
 | 
			
		||||
    connect(m_nextButton, &QAbstractButton::clicked,
 | 
			
		||||
            this, &MainWindow::galleryNext);
 | 
			
		||||
 | 
			
		||||
    m_am->setupAction(this);
 | 
			
		||||
    m_bottomButtonGroup = new BottomButtonGroup(this);
 | 
			
		||||
 | 
			
		||||
    m_bottomButtonGroup = new BottomButtonGroup({
 | 
			
		||||
        m_am->actionActualSize,
 | 
			
		||||
        m_am->actionToggleMaximize,
 | 
			
		||||
        m_am->actionZoomIn,
 | 
			
		||||
        m_am->actionZoomOut,
 | 
			
		||||
        m_am->actionToggleCheckerboard,
 | 
			
		||||
        m_am->actionRotateClockwise
 | 
			
		||||
    }, this);
 | 
			
		||||
    connect(m_bottomButtonGroup, &BottomButtonGroup::resetToOriginalBtnClicked,
 | 
			
		||||
            this, [ = ](){ m_graphicsView->resetScale(); });
 | 
			
		||||
    connect(m_bottomButtonGroup, &BottomButtonGroup::toggleWindowMaximum,
 | 
			
		||||
            this, &MainWindow::toggleMaximize);
 | 
			
		||||
    connect(m_bottomButtonGroup, &BottomButtonGroup::zoomInBtnClicked,
 | 
			
		||||
            this, [ = ](){ m_graphicsView->zoomView(1.25); });
 | 
			
		||||
    connect(m_bottomButtonGroup, &BottomButtonGroup::zoomOutBtnClicked,
 | 
			
		||||
            this, [ = ](){ m_graphicsView->zoomView(0.75); });
 | 
			
		||||
    connect(m_bottomButtonGroup, &BottomButtonGroup::toggleCheckerboardBtnClicked,
 | 
			
		||||
            this, [ = ](){ m_graphicsView->toggleCheckerboard(); });
 | 
			
		||||
    connect(m_bottomButtonGroup, &BottomButtonGroup::rotateRightBtnClicked,
 | 
			
		||||
            this, [ = ](){
 | 
			
		||||
        m_graphicsView->resetScale();
 | 
			
		||||
        m_graphicsView->rotateView(90);
 | 
			
		||||
        m_graphicsView->checkAndDoFitInView();
 | 
			
		||||
        m_gv->setVisible(false);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    m_bottomButtonGroup->setOpacity(0, false);
 | 
			
		||||
    m_gv->setOpacity(0, false);
 | 
			
		||||
    m_closeButton->setOpacity(0, false);
 | 
			
		||||
 | 
			
		||||
    connect(m_pm, &PlaylistManager::loaded, this, [this](int galleryFileCount) {
 | 
			
		||||
        m_prevButton->setVisible(galleryFileCount > 1);
 | 
			
		||||
        m_nextButton->setVisible(galleryFileCount > 1);
 | 
			
		||||
    connect(this, &MainWindow::galleryLoaded, this, [this]() {
 | 
			
		||||
        m_prevButton->setVisible(isGalleryAvailable());
 | 
			
		||||
        m_nextButton->setVisible(isGalleryAvailable());
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    QShortcut * quitAppShorucut = new QShortcut(QKeySequence(Qt::Key_Space), this);
 | 
			
		||||
    connect(quitAppShorucut, &QShortcut::activated,
 | 
			
		||||
            std::bind(&MainWindow::quitAppAction, this, false));
 | 
			
		||||
 | 
			
		||||
    QShortcut * quitAppShorucut2 = new QShortcut(QKeySequence(Qt::Key_Escape), this);
 | 
			
		||||
    connect(quitAppShorucut2, &QShortcut::activated,
 | 
			
		||||
            std::bind(&MainWindow::quitAppAction, this, false));
 | 
			
		||||
 | 
			
		||||
    QShortcut * prevPictureShorucut = new QShortcut(QKeySequence(Qt::Key_PageUp), this);
 | 
			
		||||
    connect(prevPictureShorucut, &QShortcut::activated,
 | 
			
		||||
            this, &MainWindow::galleryPrev);
 | 
			
		||||
 | 
			
		||||
    QShortcut * nextPictureShorucut = new QShortcut(QKeySequence(Qt::Key_PageDown), this);
 | 
			
		||||
    connect(nextPictureShorucut, &QShortcut::activated,
 | 
			
		||||
            this, &MainWindow::galleryNext);
 | 
			
		||||
 | 
			
		||||
    QShortcut * fullscreenShorucut = new QShortcut(QKeySequence(QKeySequence::FullScreen), this);
 | 
			
		||||
    connect(fullscreenShorucut, &QShortcut::activated,
 | 
			
		||||
            this, &MainWindow::toggleFullscreen);
 | 
			
		||||
 | 
			
		||||
    centerWindow();
 | 
			
		||||
 | 
			
		||||
    QTimer::singleShot(0, this, [this](){
 | 
			
		||||
        m_am->setupShortcuts();
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MainWindow::~MainWindow()
 | 
			
		||||
@ -148,11 +166,11 @@ void MainWindow::showUrls(const QList<QUrl> &urls)
 | 
			
		||||
{
 | 
			
		||||
    if (!urls.isEmpty()) {
 | 
			
		||||
        if (urls.count() == 1) {
 | 
			
		||||
            m_graphicsView->showFileFromPath(urls.first().toLocalFile(), true);
 | 
			
		||||
            m_graphicsView->showFileFromUrl(urls.first(), true);
 | 
			
		||||
        } else {
 | 
			
		||||
            m_graphicsView->showFileFromPath(urls.first().toLocalFile(), false);
 | 
			
		||||
            m_pm->setPlaylist(urls);
 | 
			
		||||
            m_pm->setCurrentIndex(0);
 | 
			
		||||
            m_graphicsView->showFileFromUrl(urls.first(), false);
 | 
			
		||||
            m_files = urls;
 | 
			
		||||
            m_currentFileIndex = 0;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        m_graphicsView->showText(tr("File url list is empty"));
 | 
			
		||||
@ -193,44 +211,77 @@ void MainWindow::adjustWindowSizeBySceneRect()
 | 
			
		||||
// can be empty if it is NOT from a local file.
 | 
			
		||||
QUrl MainWindow::currentImageFileUrl() const
 | 
			
		||||
{
 | 
			
		||||
    QUrl url;
 | 
			
		||||
    std::tie(std::ignore, url) = m_pm->currentFileUrl();
 | 
			
		||||
    if (m_currentFileIndex != -1) {
 | 
			
		||||
        return m_files.value(m_currentFileIndex);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return url;
 | 
			
		||||
    return QUrl();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::clearGallery()
 | 
			
		||||
{
 | 
			
		||||
    m_pm->clear();
 | 
			
		||||
    m_currentFileIndex = -1;
 | 
			
		||||
    m_files.clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::loadGalleryBySingleLocalFile(const QString &path)
 | 
			
		||||
{
 | 
			
		||||
    m_pm->setCurrentFile(path);
 | 
			
		||||
    QFileInfo info(path);
 | 
			
		||||
    QDir dir(info.path());
 | 
			
		||||
    QString currentFileName = info.fileName();
 | 
			
		||||
    QStringList entryList = dir.entryList({"*.jpg", "*.jpeg", "*.jfif", "*.png", "*.gif", "*.svg", "*.bmp"},
 | 
			
		||||
                                          QDir::Files | QDir::NoSymLinks, QDir::NoSort);
 | 
			
		||||
 | 
			
		||||
    QCollator collator;
 | 
			
		||||
    collator.setNumericMode(true);
 | 
			
		||||
 | 
			
		||||
    std::sort(entryList.begin(), entryList.end(), collator);
 | 
			
		||||
 | 
			
		||||
    clearGallery();
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < entryList.count(); i++) {
 | 
			
		||||
        const QString & fileName = entryList.at(i);
 | 
			
		||||
        const QString & oneEntry = dir.absoluteFilePath(fileName);
 | 
			
		||||
        const QUrl & url = QUrl::fromLocalFile(oneEntry);
 | 
			
		||||
        m_files.append(url);
 | 
			
		||||
        if (fileName == currentFileName) {
 | 
			
		||||
            m_currentFileIndex = i;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    emit galleryLoaded();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::galleryPrev()
 | 
			
		||||
{
 | 
			
		||||
    int index;
 | 
			
		||||
    QString filePath;
 | 
			
		||||
    std::tie(index, filePath) = m_pm->previousFile();
 | 
			
		||||
 | 
			
		||||
    if (index >= 0) {
 | 
			
		||||
        m_graphicsView->showFileFromPath(filePath, false);
 | 
			
		||||
        m_pm->setCurrentIndex(index);
 | 
			
		||||
    int count = m_files.count();
 | 
			
		||||
    if (!isGalleryAvailable()) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_currentFileIndex = m_currentFileIndex - 1 < 0 ? count - 1 : m_currentFileIndex - 1;
 | 
			
		||||
 | 
			
		||||
    m_graphicsView->showFileFromUrl(m_files.at(m_currentFileIndex), false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::galleryNext()
 | 
			
		||||
{
 | 
			
		||||
    int index;
 | 
			
		||||
    QString filePath;
 | 
			
		||||
    std::tie(index, filePath) = m_pm->nextFile();
 | 
			
		||||
 | 
			
		||||
    if (index >= 0) {
 | 
			
		||||
        m_graphicsView->showFileFromPath(filePath, false);
 | 
			
		||||
        m_pm->setCurrentIndex(index);
 | 
			
		||||
    int count = m_files.count();
 | 
			
		||||
    if (!isGalleryAvailable()) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_currentFileIndex = m_currentFileIndex + 1 == count ? 0 : m_currentFileIndex + 1;
 | 
			
		||||
 | 
			
		||||
    m_graphicsView->showFileFromUrl(m_files.at(m_currentFileIndex), false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MainWindow::isGalleryAvailable()
 | 
			
		||||
{
 | 
			
		||||
    if (m_currentFileIndex < 0 || m_files.isEmpty() || m_currentFileIndex >= m_files.count()) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::showEvent(QShowEvent *event)
 | 
			
		||||
@ -240,7 +291,7 @@ void MainWindow::showEvent(QShowEvent *event)
 | 
			
		||||
    return FramelessWindow::showEvent(event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::enterEvent(QT_ENTER_EVENT *event)
 | 
			
		||||
void MainWindow::enterEvent(QEvent *event)
 | 
			
		||||
{
 | 
			
		||||
    m_bottomButtonGroup->setOpacity(1);
 | 
			
		||||
    m_gv->setOpacity(1);
 | 
			
		||||
@ -264,59 +315,8 @@ void MainWindow::leaveEvent(QEvent *event)
 | 
			
		||||
    return FramelessWindow::leaveEvent(event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::mousePressEvent(QMouseEvent *event)
 | 
			
		||||
{
 | 
			
		||||
    if (event->buttons() & Qt::LeftButton && !isMaximized()) {
 | 
			
		||||
        m_clickedOnWindow = true;
 | 
			
		||||
        m_oldMousePos = event->pos();
 | 
			
		||||
//        qDebug() << m_oldMousePos << m_graphicsView->transform().m11()
 | 
			
		||||
//                 << m_graphicsView->transform().m22() << m_graphicsView->matrix().m12();
 | 
			
		||||
        event->accept();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return FramelessWindow::mousePressEvent(event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::mouseMoveEvent(QMouseEvent *event)
 | 
			
		||||
{
 | 
			
		||||
    if (event->buttons() & Qt::LeftButton && m_clickedOnWindow && !isMaximized()) {
 | 
			
		||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
 | 
			
		||||
        if (!window()->windowHandle()->startSystemMove()) {
 | 
			
		||||
            move(event->globalPos() - m_oldMousePos);
 | 
			
		||||
        }
 | 
			
		||||
#else
 | 
			
		||||
        move(event->globalPos() - m_oldMousePos);
 | 
			
		||||
#endif // QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
 | 
			
		||||
        event->accept();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return FramelessWindow::mouseMoveEvent(event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
 | 
			
		||||
{
 | 
			
		||||
    m_clickedOnWindow = false;
 | 
			
		||||
 | 
			
		||||
    // It seems the forward/back mouse button won't generate a key event [1] so we can't use
 | 
			
		||||
    // QShortcut or QKeySequence to indicate these shortcuts, so we do it here.
 | 
			
		||||
    // Reference:
 | 
			
		||||
    // [1]: https://codereview.qt-project.org/c/qt/qtbase/+/177475
 | 
			
		||||
    if (event->button() == Qt::ForwardButton || event->button() == Qt::BackButton) {
 | 
			
		||||
        event->button() == Qt::BackButton ? galleryPrev() : galleryNext();
 | 
			
		||||
        event->accept();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return FramelessWindow::mouseReleaseEvent(event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::mouseDoubleClickEvent(QMouseEvent *event)
 | 
			
		||||
{
 | 
			
		||||
    // The forward/back mouse button can also used to trigger a mouse double-click event
 | 
			
		||||
    // Since we use that for gallery navigation so we ignore these two buttons.
 | 
			
		||||
    if (event->buttons() & Qt::ForwardButton || event->buttons() & Qt::BackButton) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    switch (Settings::instance()->doubleClickBehavior()) {
 | 
			
		||||
    case ActionCloseWindow:
 | 
			
		||||
        quitAppAction();
 | 
			
		||||
@ -338,33 +338,19 @@ void MainWindow::mouseDoubleClickEvent(QMouseEvent *event)
 | 
			
		||||
void MainWindow::wheelEvent(QWheelEvent *event)
 | 
			
		||||
{
 | 
			
		||||
    QPoint numDegrees = event->angleDelta() / 8;
 | 
			
		||||
    bool needWeelEvent = false, wheelUp = false;
 | 
			
		||||
    bool actionIsZoom = event->modifiers().testFlag(Qt::ControlModifier)
 | 
			
		||||
            || Settings::instance()->mouseWheelBehavior() == ActionZoomImage;
 | 
			
		||||
    bool needZoom = false, zoomIn = false;
 | 
			
		||||
 | 
			
		||||
    // NOTE: Only checking angleDelta since the QWheelEvent::pixelDelta() doc says
 | 
			
		||||
    //       pixelDelta() value is driver specific and unreliable on X11...
 | 
			
		||||
    //       We are not scrolling the canvas, just zoom in or out, so it probably
 | 
			
		||||
    //       doesn't matter here.
 | 
			
		||||
    if (!numDegrees.isNull() && numDegrees.y() != 0) {
 | 
			
		||||
        needWeelEvent = true;
 | 
			
		||||
        wheelUp = numDegrees.y() > 0;
 | 
			
		||||
        needZoom = true;
 | 
			
		||||
        zoomIn = numDegrees.y() > 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (needWeelEvent) {
 | 
			
		||||
        if (actionIsZoom) {
 | 
			
		||||
            if (wheelUp) {
 | 
			
		||||
                on_actionZoomIn_triggered();
 | 
			
		||||
            } else {
 | 
			
		||||
                on_actionZoomOut_triggered();
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            if (wheelUp) {
 | 
			
		||||
                galleryPrev();
 | 
			
		||||
            } else {
 | 
			
		||||
                galleryNext();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    if (needZoom) {
 | 
			
		||||
        m_graphicsView->zoomView(zoomIn ? 1.25 : 0.8);
 | 
			
		||||
        event->accept();
 | 
			
		||||
    } else {
 | 
			
		||||
        FramelessWindow::wheelEvent(event);
 | 
			
		||||
@ -386,49 +372,97 @@ void MainWindow::contextMenuEvent(QContextMenuEvent *event)
 | 
			
		||||
    QImage clipboardImage;
 | 
			
		||||
    QUrl clipboardFileUrl;
 | 
			
		||||
 | 
			
		||||
    QAction * copyPixmap = m_am->actionCopyPixmap;
 | 
			
		||||
    QAction * copyFilePath = m_am->actionCopyFilePath;
 | 
			
		||||
    const QMimeData * clipboardData = QApplication::clipboard()->mimeData();
 | 
			
		||||
    if (clipboardData->hasImage()) {
 | 
			
		||||
        QVariant imageVariant(clipboardData->imageData());
 | 
			
		||||
        if (imageVariant.isValid()) {
 | 
			
		||||
            clipboardImage = qvariant_cast<QImage>(imageVariant);
 | 
			
		||||
        }
 | 
			
		||||
    } else if (clipboardData->hasText()) {
 | 
			
		||||
        QString clipboardText(clipboardData->text());
 | 
			
		||||
        if (clipboardText.startsWith("PICTURE:")) {
 | 
			
		||||
            QString maybeFilename(clipboardText.mid(8));
 | 
			
		||||
            if (QFile::exists(maybeFilename)) {
 | 
			
		||||
                clipboardFileUrl = QUrl::fromLocalFile(maybeFilename);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    QAction * copyPixmap = new QAction(tr("Copy P&ixmap"));
 | 
			
		||||
    connect(copyPixmap, &QAction::triggered, this, [ = ](){
 | 
			
		||||
        QClipboard *cb = QApplication::clipboard();
 | 
			
		||||
        cb->setPixmap(m_graphicsView->scene()->renderToPixmap());
 | 
			
		||||
    });
 | 
			
		||||
    QAction * copyFilePath = new QAction(tr("Copy &File Path"));
 | 
			
		||||
    connect(copyFilePath, &QAction::triggered, this, [ = ](){
 | 
			
		||||
        QClipboard *cb = QApplication::clipboard();
 | 
			
		||||
        cb->setText(currentFileUrl.toLocalFile());
 | 
			
		||||
    });
 | 
			
		||||
    copyMenu->addAction(copyPixmap);
 | 
			
		||||
    if (currentFileUrl.isValid()) {
 | 
			
		||||
        copyMenu->addAction(copyFilePath);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    QAction * paste = m_am->actionPaste;
 | 
			
		||||
    QAction * pasteImage = new QAction(tr("&Paste Image"));
 | 
			
		||||
    connect(pasteImage, &QAction::triggered, this, [ = ](){
 | 
			
		||||
        clearGallery();
 | 
			
		||||
        m_graphicsView->showImage(clipboardImage);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    QAction * stayOnTopMode = m_am->actionToggleStayOnTop;
 | 
			
		||||
    QAction * pasteImageFile = new QAction(tr("&Paste Image File"));
 | 
			
		||||
    connect(pasteImageFile, &QAction::triggered, this, [ = ](){
 | 
			
		||||
        m_graphicsView->showFileFromUrl(clipboardFileUrl, true);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    QAction * stayOnTopMode = new QAction(tr("Stay on top"));
 | 
			
		||||
    connect(stayOnTopMode, &QAction::triggered, this, [ = ](){
 | 
			
		||||
        toggleStayOnTop();
 | 
			
		||||
    });
 | 
			
		||||
    stayOnTopMode->setCheckable(true);
 | 
			
		||||
    stayOnTopMode->setChecked(stayOnTop());
 | 
			
		||||
 | 
			
		||||
    QAction * protectedMode = m_am->actionToggleProtectMode;
 | 
			
		||||
    QAction * protectedMode = new QAction(tr("Protected mode"));
 | 
			
		||||
    connect(protectedMode, &QAction::triggered, this, [ = ](){
 | 
			
		||||
        toggleProtectedMode();
 | 
			
		||||
    });
 | 
			
		||||
    protectedMode->setCheckable(true);
 | 
			
		||||
    protectedMode->setChecked(m_protectedMode);
 | 
			
		||||
 | 
			
		||||
    QAction * toggleSettings = m_am->actionSettings;
 | 
			
		||||
    QAction * helpAction = m_am->actionHelp;
 | 
			
		||||
    QAction * propertiesAction = m_am->actionProperties;
 | 
			
		||||
    QAction * toggleSettings = new QAction(tr("Configure..."));
 | 
			
		||||
    connect(toggleSettings, &QAction::triggered, this, [ = ](){
 | 
			
		||||
        SettingsDialog * sd = new SettingsDialog(this);
 | 
			
		||||
        sd->exec();
 | 
			
		||||
        sd->deleteLater();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
    menu->addAction(m_am->actionOpen);
 | 
			
		||||
#endif // 0
 | 
			
		||||
    QAction * helpAction = new QAction(tr("Help"));
 | 
			
		||||
    connect(helpAction, &QAction::triggered, this, [ = ](){
 | 
			
		||||
        AboutDialog * ad = new AboutDialog(this);
 | 
			
		||||
        ad->exec();
 | 
			
		||||
        ad->deleteLater();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    QAction * propertiesAction = new QAction(tr("Properties"));
 | 
			
		||||
    connect(propertiesAction, &QAction::triggered, this, [ = ](){
 | 
			
		||||
        MetadataModel * md = new MetadataModel();
 | 
			
		||||
        md->setFile(currentFileUrl.toLocalFile());
 | 
			
		||||
 | 
			
		||||
        MetadataDialog * ad = new MetadataDialog(this);
 | 
			
		||||
        ad->setMetadataModel(md);
 | 
			
		||||
        ad->exec();
 | 
			
		||||
        ad->deleteLater();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    if (copyMenu->actions().count() == 1) {
 | 
			
		||||
        menu->addActions(copyMenu->actions());
 | 
			
		||||
    } else {
 | 
			
		||||
        menu->addMenu(copyMenu);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (canPaste()) {
 | 
			
		||||
        menu->addAction(paste);
 | 
			
		||||
    if (!clipboardImage.isNull()) {
 | 
			
		||||
        menu->addAction(pasteImage);
 | 
			
		||||
    } else if (clipboardFileUrl.isValid()) {
 | 
			
		||||
        menu->addAction(pasteImageFile);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    menu->addSeparator();
 | 
			
		||||
 | 
			
		||||
    menu->addAction(m_am->actionHorizontalFlip);
 | 
			
		||||
#if 0
 | 
			
		||||
    menu->addAction(m_am->actionFitInView);
 | 
			
		||||
    menu->addAction(m_am->actionFitByWidth);
 | 
			
		||||
#endif // 0
 | 
			
		||||
    menu->addSeparator();
 | 
			
		||||
    menu->addAction(stayOnTopMode);
 | 
			
		||||
    menu->addAction(protectedMode);
 | 
			
		||||
@ -441,11 +475,15 @@ void MainWindow::contextMenuEvent(QContextMenuEvent *event)
 | 
			
		||||
    }
 | 
			
		||||
    menu->exec(mapToGlobal(event->pos()));
 | 
			
		||||
    menu->deleteLater();
 | 
			
		||||
    copyMenu->deleteLater();
 | 
			
		||||
 | 
			
		||||
    return FramelessWindow::contextMenuEvent(event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QSize MainWindow::sizeHint() const
 | 
			
		||||
{
 | 
			
		||||
    return QSize(710, 530);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::centerWindow()
 | 
			
		||||
{
 | 
			
		||||
    this->setGeometry(
 | 
			
		||||
@ -471,9 +509,9 @@ void MainWindow::closeWindow()
 | 
			
		||||
void MainWindow::updateWidgetsPosition()
 | 
			
		||||
{
 | 
			
		||||
    m_closeButton->move(width() - m_closeButton->width(), 0);
 | 
			
		||||
    m_prevButton->move(25, (height() - m_prevButton->sizeHint().height()) / 2);
 | 
			
		||||
    m_nextButton->move(width() - m_nextButton->sizeHint().width() - 25,
 | 
			
		||||
                       (height() - m_prevButton->sizeHint().height()) / 2);
 | 
			
		||||
    m_prevButton->move(25, (height() - m_prevButton->height()) / 2);
 | 
			
		||||
    m_nextButton->move(width() - m_nextButton->width() - 25,
 | 
			
		||||
                       (height() - m_prevButton->height()) / 2);
 | 
			
		||||
    m_bottomButtonGroup->move((width() - m_bottomButtonGroup->width()) / 2,
 | 
			
		||||
                              height() - m_bottomButtonGroup->height());
 | 
			
		||||
    m_gv->move(width() - m_gv->width(), height() - m_gv->height());
 | 
			
		||||
@ -493,29 +531,11 @@ void MainWindow::toggleStayOnTop()
 | 
			
		||||
    show();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MainWindow::stayOnTop() const
 | 
			
		||||
bool MainWindow::stayOnTop()
 | 
			
		||||
{
 | 
			
		||||
    return windowFlags().testFlag(Qt::WindowStaysOnTopHint);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MainWindow::canPaste() const
 | 
			
		||||
{
 | 
			
		||||
    const QMimeData * clipboardData = QApplication::clipboard()->mimeData();
 | 
			
		||||
    if (clipboardData->hasImage()) {
 | 
			
		||||
        return true;
 | 
			
		||||
    } else if (clipboardData->hasText()) {
 | 
			
		||||
        QString clipboardText(clipboardData->text());
 | 
			
		||||
        if (clipboardText.startsWith("PICTURE:")) {
 | 
			
		||||
            QString maybeFilename(clipboardText.mid(8));
 | 
			
		||||
            if (QFile::exists(maybeFilename)) {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::quitAppAction(bool force)
 | 
			
		||||
{
 | 
			
		||||
    if (!m_protectedMode || force) {
 | 
			
		||||
@ -540,170 +560,3 @@ void MainWindow::toggleMaximize()
 | 
			
		||||
        showMaximized();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QSize MainWindow::sizeHint() const
 | 
			
		||||
{
 | 
			
		||||
    return QSize(710, 530);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionOpen_triggered()
 | 
			
		||||
{
 | 
			
		||||
    QStringList picturesLocations = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
 | 
			
		||||
    QUrl pictureUrl = picturesLocations.isEmpty() ? QUrl::fromLocalFile(picturesLocations.first())
 | 
			
		||||
                                                  : QUrl::fromLocalFile(QDir::homePath());
 | 
			
		||||
    QList<QUrl> urls(QFileDialog::getOpenFileUrls(this, QString(), pictureUrl));
 | 
			
		||||
    if (!urls.isEmpty()) {
 | 
			
		||||
        showUrls(urls);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionActualSize_triggered()
 | 
			
		||||
{
 | 
			
		||||
    m_graphicsView->resetScale();
 | 
			
		||||
    m_graphicsView->setEnableAutoFitInView(false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionToggleMaximize_triggered()
 | 
			
		||||
{
 | 
			
		||||
    toggleMaximize();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionZoomIn_triggered()
 | 
			
		||||
{
 | 
			
		||||
    if (m_graphicsView->scaleFactor() < 1000) {
 | 
			
		||||
        m_graphicsView->zoomView(1.25);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionZoomOut_triggered()
 | 
			
		||||
{
 | 
			
		||||
    m_graphicsView->zoomView(0.8);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionHorizontalFlip_triggered()
 | 
			
		||||
{
 | 
			
		||||
    m_graphicsView->flipView();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionFitInView_triggered()
 | 
			
		||||
{
 | 
			
		||||
    m_graphicsView->fitInView(m_gv->sceneRect(), Qt::KeepAspectRatio);
 | 
			
		||||
    m_graphicsView->setEnableAutoFitInView(m_graphicsView->scaleFactor() <= 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionFitByWidth_triggered()
 | 
			
		||||
{
 | 
			
		||||
    m_graphicsView->fitByOrientation();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionCopyPixmap_triggered()
 | 
			
		||||
{
 | 
			
		||||
    QClipboard *cb = QApplication::clipboard();
 | 
			
		||||
    cb->setPixmap(m_graphicsView->scene()->renderToPixmap());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionCopyFilePath_triggered()
 | 
			
		||||
{
 | 
			
		||||
    QUrl currentFileUrl(currentImageFileUrl());
 | 
			
		||||
    if (currentFileUrl.isValid()) {
 | 
			
		||||
        QClipboard *cb = QApplication::clipboard();
 | 
			
		||||
        cb->setText(currentFileUrl.toLocalFile());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionPaste_triggered()
 | 
			
		||||
{
 | 
			
		||||
    QImage clipboardImage;
 | 
			
		||||
    QUrl clipboardFileUrl;
 | 
			
		||||
 | 
			
		||||
    const QMimeData * clipboardData = QApplication::clipboard()->mimeData();
 | 
			
		||||
    if (clipboardData->hasImage()) {
 | 
			
		||||
        QVariant imageVariant(clipboardData->imageData());
 | 
			
		||||
        if (imageVariant.isValid()) {
 | 
			
		||||
            clipboardImage = qvariant_cast<QImage>(imageVariant);
 | 
			
		||||
        }
 | 
			
		||||
    } else if (clipboardData->hasText()) {
 | 
			
		||||
        QString clipboardText(clipboardData->text());
 | 
			
		||||
        if (clipboardText.startsWith("PICTURE:")) {
 | 
			
		||||
            QString maybeFilename(clipboardText.mid(8));
 | 
			
		||||
            if (QFile::exists(maybeFilename)) {
 | 
			
		||||
                clipboardFileUrl = QUrl::fromLocalFile(maybeFilename);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!clipboardImage.isNull()) {
 | 
			
		||||
        m_graphicsView->showImage(clipboardImage);
 | 
			
		||||
        clearGallery();
 | 
			
		||||
    } else if (clipboardFileUrl.isValid()) {
 | 
			
		||||
        QString localFile(clipboardFileUrl.toLocalFile());
 | 
			
		||||
        m_graphicsView->showFileFromPath(localFile, true);
 | 
			
		||||
        m_pm->setCurrentFile(localFile);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionToggleCheckerboard_triggered()
 | 
			
		||||
{
 | 
			
		||||
    // TODO: is that okay to do this since we plan to support custom shortcuts?
 | 
			
		||||
    m_graphicsView->toggleCheckerboard(QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionRotateClockwise_triggered()
 | 
			
		||||
{
 | 
			
		||||
    m_graphicsView->rotateView();
 | 
			
		||||
    m_graphicsView->displayScene();
 | 
			
		||||
    m_gv->setVisible(false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionPrevPicture_triggered()
 | 
			
		||||
{
 | 
			
		||||
    galleryPrev();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionNextPicture_triggered()
 | 
			
		||||
{
 | 
			
		||||
    galleryNext();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionToggleStayOnTop_triggered()
 | 
			
		||||
{
 | 
			
		||||
    toggleStayOnTop();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionToggleProtectMode_triggered()
 | 
			
		||||
{
 | 
			
		||||
    toggleProtectedMode();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionSettings_triggered()
 | 
			
		||||
{
 | 
			
		||||
    SettingsDialog * sd = new SettingsDialog(this);
 | 
			
		||||
    sd->exec();
 | 
			
		||||
    sd->deleteLater();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionHelp_triggered()
 | 
			
		||||
{
 | 
			
		||||
    AboutDialog * ad = new AboutDialog(this);
 | 
			
		||||
    ad->exec();
 | 
			
		||||
    ad->deleteLater();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionProperties_triggered()
 | 
			
		||||
{
 | 
			
		||||
    QUrl currentFileUrl = currentImageFileUrl();
 | 
			
		||||
    if (!currentFileUrl.isValid()) return;
 | 
			
		||||
 | 
			
		||||
    MetadataModel * md = new MetadataModel();
 | 
			
		||||
    md->setFile(currentFileUrl.toLocalFile());
 | 
			
		||||
 | 
			
		||||
    MetadataDialog * ad = new MetadataDialog(this);
 | 
			
		||||
    ad->setMetadataModel(md);
 | 
			
		||||
    ad->exec();
 | 
			
		||||
    ad->deleteLater();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::on_actionQuitApp_triggered()
 | 
			
		||||
{
 | 
			
		||||
    quitAppAction(false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -7,19 +7,11 @@
 | 
			
		||||
#include <QPropertyAnimation>
 | 
			
		||||
#include <QPushButton>
 | 
			
		||||
 | 
			
		||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
 | 
			
		||||
    typedef QEnterEvent QT_ENTER_EVENT;
 | 
			
		||||
#else
 | 
			
		||||
    typedef QEvent QT_ENTER_EVENT;
 | 
			
		||||
#endif // QT_VERSION_CHECK(6, 0, 0)
 | 
			
		||||
 | 
			
		||||
QT_BEGIN_NAMESPACE
 | 
			
		||||
class QGraphicsOpacityEffect;
 | 
			
		||||
class QGraphicsView;
 | 
			
		||||
QT_END_NAMESPACE
 | 
			
		||||
 | 
			
		||||
class ActionManager;
 | 
			
		||||
class PlaylistManager;
 | 
			
		||||
class ToolButton;
 | 
			
		||||
class GraphicsView;
 | 
			
		||||
class NavigatorView;
 | 
			
		||||
@ -40,64 +32,33 @@ public:
 | 
			
		||||
    void loadGalleryBySingleLocalFile(const QString &path);
 | 
			
		||||
    void galleryPrev();
 | 
			
		||||
    void galleryNext();
 | 
			
		||||
    bool isGalleryAvailable();
 | 
			
		||||
 | 
			
		||||
signals:
 | 
			
		||||
    void galleryLoaded();
 | 
			
		||||
 | 
			
		||||
protected slots:
 | 
			
		||||
    void showEvent(QShowEvent *event) override;
 | 
			
		||||
    void enterEvent(QT_ENTER_EVENT *event) override;
 | 
			
		||||
    void enterEvent(QEvent *event) override;
 | 
			
		||||
    void leaveEvent(QEvent *event) override;
 | 
			
		||||
    void mousePressEvent(QMouseEvent *event) override;
 | 
			
		||||
    void mouseMoveEvent(QMouseEvent *event) override;
 | 
			
		||||
    void mouseReleaseEvent(QMouseEvent *event) override;
 | 
			
		||||
    void mouseDoubleClickEvent(QMouseEvent *event) override;
 | 
			
		||||
    void wheelEvent(QWheelEvent *event) override;
 | 
			
		||||
    void resizeEvent(QResizeEvent *event) override;
 | 
			
		||||
    void contextMenuEvent(QContextMenuEvent *event) override;
 | 
			
		||||
 | 
			
		||||
    QSize sizeHint() const override;
 | 
			
		||||
 | 
			
		||||
    void centerWindow();
 | 
			
		||||
    void closeWindow();
 | 
			
		||||
    void updateWidgetsPosition();
 | 
			
		||||
    void toggleProtectedMode();
 | 
			
		||||
    void toggleStayOnTop();
 | 
			
		||||
    bool stayOnTop() const;
 | 
			
		||||
    bool canPaste() const;
 | 
			
		||||
    bool stayOnTop();
 | 
			
		||||
    void quitAppAction(bool force = false);
 | 
			
		||||
    void toggleFullscreen();
 | 
			
		||||
    void toggleMaximize();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    QSize sizeHint() const override;
 | 
			
		||||
 | 
			
		||||
private slots:
 | 
			
		||||
    void on_actionOpen_triggered();
 | 
			
		||||
 | 
			
		||||
    void on_actionActualSize_triggered();
 | 
			
		||||
    void on_actionToggleMaximize_triggered();
 | 
			
		||||
    void on_actionZoomIn_triggered();
 | 
			
		||||
    void on_actionZoomOut_triggered();
 | 
			
		||||
    void on_actionToggleCheckerboard_triggered();
 | 
			
		||||
    void on_actionRotateClockwise_triggered();
 | 
			
		||||
 | 
			
		||||
    void on_actionPrevPicture_triggered();
 | 
			
		||||
    void on_actionNextPicture_triggered();
 | 
			
		||||
 | 
			
		||||
    void on_actionHorizontalFlip_triggered();
 | 
			
		||||
    void on_actionFitInView_triggered();
 | 
			
		||||
    void on_actionFitByWidth_triggered();
 | 
			
		||||
    void on_actionCopyPixmap_triggered();
 | 
			
		||||
    void on_actionCopyFilePath_triggered();
 | 
			
		||||
    void on_actionPaste_triggered();
 | 
			
		||||
    void on_actionToggleStayOnTop_triggered();
 | 
			
		||||
    void on_actionToggleProtectMode_triggered();
 | 
			
		||||
    void on_actionSettings_triggered();
 | 
			
		||||
    void on_actionHelp_triggered();
 | 
			
		||||
    void on_actionProperties_triggered();
 | 
			
		||||
    void on_actionQuitApp_triggered();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    ActionManager *m_am;
 | 
			
		||||
    PlaylistManager *m_pm;
 | 
			
		||||
 | 
			
		||||
    QPoint m_oldMousePos;
 | 
			
		||||
    QPropertyAnimation *m_fadeOutAnimation;
 | 
			
		||||
    QPropertyAnimation *m_floatUpAnimation;
 | 
			
		||||
    QParallelAnimationGroup *m_exitAnimationGroup;
 | 
			
		||||
@ -108,7 +69,9 @@ private:
 | 
			
		||||
    NavigatorView *m_gv;
 | 
			
		||||
    BottomButtonGroup *m_bottomButtonGroup;
 | 
			
		||||
    bool m_protectedMode = false;
 | 
			
		||||
    bool m_clickedOnWindow = false;
 | 
			
		||||
 | 
			
		||||
    QList<QUrl> m_files;
 | 
			
		||||
    int m_currentFileIndex = -1;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // MAINWINDOW_H
 | 
			
		||||
 | 
			
		||||
@ -37,19 +37,15 @@ void MetadataModel::setFile(const QString &imageFilePath)
 | 
			
		||||
    appendSection(QStringLiteral("Image"), tr("Image", "Section name."));
 | 
			
		||||
    appendSection(QStringLiteral("Camera"), tr("Camera", "Section name."));
 | 
			
		||||
    appendSection(QStringLiteral("AdvancedPhoto"), tr("Advanced photo", "Section name."));
 | 
			
		||||
#if 0
 | 
			
		||||
    appendSection(QStringLiteral("GPS"), tr("GPS", "Section name."));
 | 
			
		||||
#endif // 0
 | 
			
		||||
    appendSection(QStringLiteral("File"), tr("File", "Section name."));
 | 
			
		||||
 | 
			
		||||
    if (imgReader.supportsOption(QImageIOHandler::Size)) {
 | 
			
		||||
        appendProperty(QStringLiteral("Image"), QStringLiteral("Image.Dimensions"),
 | 
			
		||||
                       tr("Dimensions"), imageDimensionsString);
 | 
			
		||||
        appendProperty(QStringLiteral("Image"), QStringLiteral("Image.SizeRatio"),
 | 
			
		||||
                       tr("Aspect ratio"), imageRatioString);
 | 
			
		||||
    }
 | 
			
		||||
    if (imgReader.supportsAnimation() && imgReader.imageCount() > 1) {
 | 
			
		||||
        appendProperty(QStringLiteral("Image"), QStringLiteral("Image.FrameCount"),
 | 
			
		||||
                       tr("Frame count"), QString::number(imgReader.imageCount()));
 | 
			
		||||
    }
 | 
			
		||||
    appendProperty(QStringLiteral("Image"), QStringLiteral("Image.Dimensions"),
 | 
			
		||||
                   tr("Dimensions"), imageDimensionsString);
 | 
			
		||||
    appendProperty(QStringLiteral("Image"), QStringLiteral("Image.SizeRatio"),
 | 
			
		||||
                   tr("Aspect Ratio"), imageRatioString);
 | 
			
		||||
 | 
			
		||||
    appendProperty(QStringLiteral("File"), QStringLiteral("File.Name"),
 | 
			
		||||
                   tr("Name"), fileInfo.fileName());
 | 
			
		||||
@ -60,22 +56,16 @@ void MetadataModel::setFile(const QString &imageFilePath)
 | 
			
		||||
    appendProperty(QStringLiteral("File"), QStringLiteral("File.Size"),
 | 
			
		||||
                   tr("Size"), sizeString);
 | 
			
		||||
    appendProperty(QStringLiteral("File"), QStringLiteral("File.CreatedTime"),
 | 
			
		||||
                   tr("Date created"), birthTimeString);
 | 
			
		||||
                   tr("Date Created"), birthTimeString);
 | 
			
		||||
    appendProperty(QStringLiteral("File"), QStringLiteral("File.LastModified"),
 | 
			
		||||
                   tr("Date modified"), lastModifiedTimeString);
 | 
			
		||||
                   tr("Date Modified"), lastModifiedTimeString);
 | 
			
		||||
 | 
			
		||||
    Exiv2Wrapper wrapper;
 | 
			
		||||
    if (wrapper.load(imageFilePath)) {
 | 
			
		||||
        wrapper.cacheSections();
 | 
			
		||||
 | 
			
		||||
        appendExivPropertyIfExist(wrapper, QStringLiteral("Description"),
 | 
			
		||||
                                  QStringLiteral("Xmp.dc.title"), tr("Title"), true);
 | 
			
		||||
        appendExivPropertyIfExist(wrapper, QStringLiteral("Description"),
 | 
			
		||||
                                  QStringLiteral("Exif.Image.ImageDescription"), tr("Subject"), true);
 | 
			
		||||
        appendExivPropertyIfExist(wrapper, QStringLiteral("Description"),
 | 
			
		||||
                                  QStringLiteral("Exif.Image.Rating"), tr("Rating"));
 | 
			
		||||
        appendExivPropertyIfExist(wrapper, QStringLiteral("Description"),
 | 
			
		||||
                                  QStringLiteral("Xmp.dc.subject"), tr("Tags"));
 | 
			
		||||
        appendPropertyIfNotEmpty(QStringLiteral("Description"), QStringLiteral("Description.Comments"),
 | 
			
		||||
                                 tr("Comments"), wrapper.comment());
 | 
			
		||||
 | 
			
		||||
@ -83,14 +73,8 @@ void MetadataModel::setFile(const QString &imageFilePath)
 | 
			
		||||
                                  QStringLiteral("Exif.Image.Artist"), tr("Authors"));
 | 
			
		||||
        appendExivPropertyIfExist(wrapper, QStringLiteral("Origin"),
 | 
			
		||||
                                  QStringLiteral("Exif.Photo.DateTimeOriginal"), tr("Date taken"));
 | 
			
		||||
        // FIXME: We may fetch the same type of metadata from different metadata collection.
 | 
			
		||||
        //        Current implementation is not pretty and may need to do a rework...
 | 
			
		||||
        // appendExivPropertyIfExist(wrapper, QStringLiteral("Origin"),
 | 
			
		||||
        //                                  QStringLiteral("Xmp.xmp.CreatorTool"), tr("Program name"));
 | 
			
		||||
        appendExivPropertyIfExist(wrapper, QStringLiteral("Origin"),
 | 
			
		||||
                                  QStringLiteral("Exif.Image.Software"), tr("Program name"));
 | 
			
		||||
        appendExivPropertyIfExist(wrapper, QStringLiteral("Origin"),
 | 
			
		||||
                                  QStringLiteral("Exif.Image.Copyright"), tr("Copyright"));
 | 
			
		||||
 | 
			
		||||
        appendExivPropertyIfExist(wrapper, QStringLiteral("Image"),
 | 
			
		||||
                                  QStringLiteral("Exif.Image.XResolution"), tr("Horizontal resolution"));
 | 
			
		||||
@ -140,20 +124,6 @@ void MetadataModel::setFile(const QString &imageFilePath)
 | 
			
		||||
                                  QStringLiteral("Exif.Photo.DigitalZoomRatio"), tr("Digital zoom"));
 | 
			
		||||
        appendExivPropertyIfExist(wrapper, QStringLiteral("AdvancedPhoto"),
 | 
			
		||||
                                  QStringLiteral("Exif.Photo.ExifVersion"), tr("EXIF version"));
 | 
			
		||||
 | 
			
		||||
        appendExivPropertyIfExist(wrapper, QStringLiteral("GPS"),
 | 
			
		||||
                                  QStringLiteral("Exif.GPSInfo.GPSLatitudeRef"), tr("Latitude reference"));
 | 
			
		||||
        appendExivPropertyIfExist(wrapper, QStringLiteral("GPS"),
 | 
			
		||||
                                  QStringLiteral("Exif.GPSInfo.GPSLatitude"), tr("Latitude"));
 | 
			
		||||
        appendExivPropertyIfExist(wrapper, QStringLiteral("GPS"),
 | 
			
		||||
                                  QStringLiteral("Exif.GPSInfo.GPSLongitudeRef"), tr("Longitude reference"));
 | 
			
		||||
        appendExivPropertyIfExist(wrapper, QStringLiteral("GPS"),
 | 
			
		||||
                                  QStringLiteral("Exif.GPSInfo.GPSLongitude"), tr("Longitude"));
 | 
			
		||||
        appendExivPropertyIfExist(wrapper, QStringLiteral("GPS"),
 | 
			
		||||
                                  QStringLiteral("Exif.GPSInfo.GPSAltitudeRef"), tr("Altitude reference"));
 | 
			
		||||
        appendExivPropertyIfExist(wrapper, QStringLiteral("GPS"),
 | 
			
		||||
                                  QStringLiteral("Exif.GPSInfo.GPSAltitude"), tr("Altitude"));
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -183,14 +153,14 @@ QString MetadataModel::imageSizeRatio(const QSize &size)
 | 
			
		||||
    return tr("%1 : %2").arg(QString::number(size.width() / gcd), QString::number(size.height() / gcd));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MetadataModel::appendSection(const QString §ionKey, QStringView sectionDisplayName)
 | 
			
		||||
bool MetadataModel::appendSection(const QString §ionKey, const QString §ionDisplayName)
 | 
			
		||||
{
 | 
			
		||||
    if (m_sections.contains(sectionKey)) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_sections.append(sectionKey);
 | 
			
		||||
    m_sectionProperties[sectionKey] = qMakePair<QString, QList<QString> >(sectionDisplayName.toString(), {});
 | 
			
		||||
    m_sectionProperties[sectionKey] = qMakePair<QString, QList<QString> >(sectionDisplayName, {});
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
@ -202,7 +172,7 @@ bool MetadataModel::appendPropertyIfNotEmpty(const QString §ionKey, const QS
 | 
			
		||||
    return appendProperty(sectionKey, propertyKey, propertyDisplayName, propertyValue);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MetadataModel::appendProperty(const QString §ionKey, const QString &propertyKey, QStringView propertyDisplayName, QStringView propertyValue)
 | 
			
		||||
bool MetadataModel::appendProperty(const QString §ionKey, const QString &propertyKey, const QString &propertyDisplayName, const QString &propertyValue)
 | 
			
		||||
{
 | 
			
		||||
    if (!m_sections.contains(sectionKey)) {
 | 
			
		||||
        return false;
 | 
			
		||||
@ -213,18 +183,28 @@ bool MetadataModel::appendProperty(const QString §ionKey, const QString &pro
 | 
			
		||||
        propertyList.append(propertyKey);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_properties[propertyKey] = qMakePair<QString, QString>(propertyDisplayName.toString(), propertyValue.toString());
 | 
			
		||||
    m_properties[propertyKey] = qMakePair<QString, QString>(propertyDisplayName, propertyValue);
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MetadataModel::appendExivPropertyIfExist(const Exiv2Wrapper &wrapper, const QString §ionKey, const QString &exiv2propertyKey, const QString &propertyDisplayName, bool isXmpString)
 | 
			
		||||
bool MetadataModel::updateProperty(const QString &propertyKey, const QString &propertyValue)
 | 
			
		||||
{
 | 
			
		||||
    if (m_properties.contains(propertyKey)) {
 | 
			
		||||
        m_properties[propertyKey].second = propertyValue;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool MetadataModel::appendExivPropertyIfExist(const Exiv2Wrapper &wrapper, const QString §ionKey, const QString &exiv2propertyKey, const QString &propertyDisplayName)
 | 
			
		||||
{
 | 
			
		||||
    const QString & value = wrapper.value(exiv2propertyKey);
 | 
			
		||||
    if (!value.isEmpty()) {
 | 
			
		||||
        appendProperty(sectionKey, exiv2propertyKey,
 | 
			
		||||
                       propertyDisplayName.isEmpty() ? wrapper.label(exiv2propertyKey) : propertyDisplayName,
 | 
			
		||||
                       isXmpString ? Exiv2Wrapper::XmpValue(value) : value);
 | 
			
		||||
                       value);
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
@ -15,14 +15,14 @@ public:
 | 
			
		||||
    void setFile(const QString & imageFilePath);
 | 
			
		||||
    static QString imageSize(const QSize &size);
 | 
			
		||||
    static QString imageSizeRatio(const QSize &size);
 | 
			
		||||
    bool appendSection(const QString & sectionKey, QStringView sectionDisplayName);
 | 
			
		||||
    bool appendSection(const QString & sectionKey, const QString & sectionDisplayName);
 | 
			
		||||
    bool appendPropertyIfNotEmpty(const QString & sectionKey, const QString & propertyKey,
 | 
			
		||||
                                  const QString & propertyDisplayName, const QString & propertyValue = QString());
 | 
			
		||||
    bool appendProperty(const QString & sectionKey, const QString & propertyKey,
 | 
			
		||||
                        QStringView propertyDisplayName, QStringView propertyValue = QString());
 | 
			
		||||
                        const QString & propertyDisplayName, const QString & propertyValue = QString());
 | 
			
		||||
    bool updateProperty(const QString & propertyKey, const QString & propertyValue);
 | 
			
		||||
    bool appendExivPropertyIfExist(const Exiv2Wrapper & wrapper, const QString & sectionKey,
 | 
			
		||||
                                   const QString & exiv2propertyKey, const QString & propertyDisplayName = QString(),
 | 
			
		||||
                                   bool isXmpString = false);
 | 
			
		||||
                                   const QString & exiv2propertyKey, const QString & propertyDisplayName = QString());
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    enum RowType : quintptr {
 | 
			
		||||
 | 
			
		||||
@ -32,7 +32,6 @@ void NavigatorView::updateMainViewportRegion()
 | 
			
		||||
{
 | 
			
		||||
    if (m_mainView != nullptr) {
 | 
			
		||||
        m_viewportRegion = mapFromScene(m_mainView->mapToScene(m_mainView->rect()));
 | 
			
		||||
        update();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -45,7 +44,7 @@ void NavigatorView::mousePressEvent(QMouseEvent *event)
 | 
			
		||||
        update();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    event->accept();
 | 
			
		||||
    return QGraphicsView::mousePressEvent(event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NavigatorView::mouseMoveEvent(QMouseEvent *event)
 | 
			
		||||
@ -53,17 +52,16 @@ void NavigatorView::mouseMoveEvent(QMouseEvent *event)
 | 
			
		||||
    if (m_mouseDown && m_mainView) {
 | 
			
		||||
        m_mainView->centerOn(mapToScene(event->pos()));
 | 
			
		||||
        update();
 | 
			
		||||
        event->accept();
 | 
			
		||||
    } else {
 | 
			
		||||
        event->ignore();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return QGraphicsView::mouseMoveEvent(event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NavigatorView::mouseReleaseEvent(QMouseEvent *event)
 | 
			
		||||
{
 | 
			
		||||
    m_mouseDown = false;
 | 
			
		||||
 | 
			
		||||
    event->accept();
 | 
			
		||||
    return QGraphicsView::mouseReleaseEvent(event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NavigatorView::wheelEvent(QWheelEvent *event)
 | 
			
		||||
 | 
			
		||||
@ -1,164 +0,0 @@
 | 
			
		||||
#include "playlistmanager.h"
 | 
			
		||||
 | 
			
		||||
#include <QCollator>
 | 
			
		||||
#include <QDir>
 | 
			
		||||
#include <QFileInfo>
 | 
			
		||||
#include <QUrl>
 | 
			
		||||
 | 
			
		||||
PlaylistManager::PlaylistManager(PlaylistType type, QObject *parent)
 | 
			
		||||
    : QObject(parent)
 | 
			
		||||
    , m_type(type)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PlaylistManager::~PlaylistManager()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PlaylistManager::setPlaylistType(PlaylistManager::PlaylistType type)
 | 
			
		||||
{
 | 
			
		||||
    m_type = type;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PlaylistManager::PlaylistType PlaylistManager::playlistType() const
 | 
			
		||||
{
 | 
			
		||||
    return m_type;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QStringList PlaylistManager::autoLoadFilterSuffix() const
 | 
			
		||||
{
 | 
			
		||||
    return m_autoLoadSuffix;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PlaylistManager::setAutoLoadFilterSuffix(const QStringList & nameFilters)
 | 
			
		||||
{
 | 
			
		||||
    m_autoLoadSuffix = nameFilters;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PlaylistManager::clear()
 | 
			
		||||
{
 | 
			
		||||
    m_currentIndex = -1;
 | 
			
		||||
    m_playlist.clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PlaylistManager::setPlaylist(const QList<QUrl> &urls)
 | 
			
		||||
{
 | 
			
		||||
    m_playlist = urls;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PlaylistManager::setCurrentFile(const QString & filePath)
 | 
			
		||||
{
 | 
			
		||||
    QFileInfo info(filePath);
 | 
			
		||||
    QDir dir(info.path());
 | 
			
		||||
    QString && currentFileName = info.fileName();
 | 
			
		||||
 | 
			
		||||
    switch (playlistType()) {
 | 
			
		||||
    case PL_SAMEFOLDER: {
 | 
			
		||||
        if (dir.path() == m_currentDir) {
 | 
			
		||||
            int index = indexOf(filePath);
 | 
			
		||||
            m_currentIndex = index == -1 ? appendFile(filePath) : index;
 | 
			
		||||
        } else {
 | 
			
		||||
            QStringList entryList = dir.entryList(
 | 
			
		||||
                        m_autoLoadSuffix,
 | 
			
		||||
                        QDir::Files | QDir::NoSymLinks, QDir::NoSort);
 | 
			
		||||
 | 
			
		||||
            QCollator collator;
 | 
			
		||||
            collator.setNumericMode(true);
 | 
			
		||||
 | 
			
		||||
            std::sort(entryList.begin(), entryList.end(), collator);
 | 
			
		||||
 | 
			
		||||
            clear();
 | 
			
		||||
 | 
			
		||||
            int index = -1;
 | 
			
		||||
            for (int i = 0; i < entryList.count(); i++) {
 | 
			
		||||
                const QString & fileName = entryList.at(i);
 | 
			
		||||
                const QString & oneEntry = dir.absoluteFilePath(fileName);
 | 
			
		||||
                const QUrl & url = QUrl::fromLocalFile(oneEntry);
 | 
			
		||||
                m_playlist.append(url);
 | 
			
		||||
                if (fileName == currentFileName) {
 | 
			
		||||
                    index = i;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            m_currentIndex = index == -1 ? appendFile(filePath) : index;
 | 
			
		||||
            m_currentDir = dir.path();
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    case PL_USERPLAYLIST:{
 | 
			
		||||
        int index = indexOf(filePath);
 | 
			
		||||
        m_currentIndex = index == -1 ? appendFile(filePath) : index;
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    default:
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    emit loaded(m_playlist.count());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PlaylistManager::setCurrentIndex(int index)
 | 
			
		||||
{
 | 
			
		||||
    if (index < 0 || index >= m_playlist.count()) return;
 | 
			
		||||
    m_currentIndex = index;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int PlaylistManager::appendFile(const QString &filePath)
 | 
			
		||||
{
 | 
			
		||||
    int index = m_playlist.length();
 | 
			
		||||
    m_playlist.append(QUrl::fromLocalFile(filePath));
 | 
			
		||||
 | 
			
		||||
    return index;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int PlaylistManager::indexOf(const QString &filePath)
 | 
			
		||||
{
 | 
			
		||||
    const QUrl & url = QUrl::fromLocalFile(filePath);
 | 
			
		||||
    return m_playlist.indexOf(url);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::tuple<int, QString> PlaylistManager::previousFile() const
 | 
			
		||||
{
 | 
			
		||||
    int count = m_playlist.count();
 | 
			
		||||
    if (count == 0) return std::make_tuple(-1, QString());
 | 
			
		||||
 | 
			
		||||
    int index = m_currentIndex - 1 < 0 ? count - 1 : m_currentIndex - 1;
 | 
			
		||||
    return std::make_tuple(index, m_playlist.at(index).toLocalFile());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::tuple<int, QString> PlaylistManager::nextFile() const
 | 
			
		||||
{
 | 
			
		||||
    int count = m_playlist.count();
 | 
			
		||||
    if (count == 0) return std::make_tuple(-1, QString());
 | 
			
		||||
 | 
			
		||||
    int index = m_currentIndex + 1 == count ? 0 : m_currentIndex + 1;
 | 
			
		||||
    return std::make_tuple(index, m_playlist.at(index).toLocalFile());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::tuple<int, QString> PlaylistManager::currentFile() const
 | 
			
		||||
{
 | 
			
		||||
    if (m_playlist.count() == 0) return std::make_tuple(-1, QString());
 | 
			
		||||
 | 
			
		||||
    return std::make_tuple(m_currentIndex, m_playlist.at(m_currentIndex).toLocalFile());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::tuple<int, QUrl> PlaylistManager::currentFileUrl() const
 | 
			
		||||
{
 | 
			
		||||
    if (m_playlist.count() == 0) return std::make_tuple(-1, QUrl());
 | 
			
		||||
 | 
			
		||||
    return std::make_tuple(m_currentIndex, m_playlist.at(m_currentIndex));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QList<QUrl> PlaylistManager::convertToUrlList(const QStringList &files)
 | 
			
		||||
{
 | 
			
		||||
    QList<QUrl> urlList;
 | 
			
		||||
    for (const QString & str : qAsConst(files)) {
 | 
			
		||||
        QUrl url = QUrl::fromLocalFile(str);
 | 
			
		||||
        if (url.isValid()) {
 | 
			
		||||
            urlList.append(url);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return urlList;
 | 
			
		||||
}
 | 
			
		||||
@ -1,48 +0,0 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <QObject>
 | 
			
		||||
 | 
			
		||||
class PlaylistManager : public QObject
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
public:
 | 
			
		||||
    enum PlaylistType {
 | 
			
		||||
        PL_USERPLAYLIST, // Regular playlist, managed by user.
 | 
			
		||||
        PL_SAMEFOLDER // PlaylistManager managed playlist, loaded from files from same folder.
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    explicit PlaylistManager(PlaylistType type = PL_USERPLAYLIST, QObject *parent = nullptr);
 | 
			
		||||
    ~PlaylistManager();
 | 
			
		||||
 | 
			
		||||
    void setPlaylistType(PlaylistType type);
 | 
			
		||||
    PlaylistType playlistType() const;
 | 
			
		||||
 | 
			
		||||
    QStringList autoLoadFilterSuffix() const;
 | 
			
		||||
    void setAutoLoadFilterSuffix(const QStringList &nameFilters);
 | 
			
		||||
 | 
			
		||||
    void clear();
 | 
			
		||||
 | 
			
		||||
    void setPlaylist(const QList<QUrl> & urls);
 | 
			
		||||
    void setCurrentFile(const QString & filePath);
 | 
			
		||||
    void setCurrentIndex(int index);
 | 
			
		||||
    int appendFile(const QString & filePath);
 | 
			
		||||
    int indexOf(const QString & filePath);
 | 
			
		||||
 | 
			
		||||
    std::tuple<int, QString> previousFile() const;
 | 
			
		||||
    std::tuple<int, QString> nextFile() const;
 | 
			
		||||
    std::tuple<int, QString> currentFile() const;
 | 
			
		||||
    std::tuple<int, QUrl> currentFileUrl() const;
 | 
			
		||||
 | 
			
		||||
    static QList<QUrl> convertToUrlList(const QStringList & files);
 | 
			
		||||
 | 
			
		||||
signals:
 | 
			
		||||
    void loaded(int length);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    QList<QUrl> m_playlist;
 | 
			
		||||
    PlaylistType m_type;
 | 
			
		||||
    QString m_currentDir;
 | 
			
		||||
    int m_currentIndex = -1;
 | 
			
		||||
    QStringList m_autoLoadSuffix = {};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -28,13 +28,6 @@ DoubleClickBehavior Settings::doubleClickBehavior()
 | 
			
		||||
    return stringToDoubleClickBehavior(result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MouseWheelBehavior Settings::mouseWheelBehavior()
 | 
			
		||||
{
 | 
			
		||||
    QString result = m_qsettings->value("mouse_wheel_behavior", "close").toString().toLower();
 | 
			
		||||
 | 
			
		||||
    return stringToMouseWheelBehavior(result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Settings::setStayOnTop(bool on)
 | 
			
		||||
{
 | 
			
		||||
    m_qsettings->setValue("stay_on_top", on);
 | 
			
		||||
@ -47,12 +40,6 @@ void Settings::setDoubleClickBehavior(DoubleClickBehavior dcb)
 | 
			
		||||
    m_qsettings->sync();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Settings::setMouseWheelBehavior(MouseWheelBehavior mwb)
 | 
			
		||||
{
 | 
			
		||||
    m_qsettings->setValue("mouse_wheel_behavior", mouseWheelBehaviorToString(mwb));
 | 
			
		||||
    m_qsettings->sync();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString Settings::doubleClickBehaviorToString(DoubleClickBehavior dcb)
 | 
			
		||||
{
 | 
			
		||||
    static QMap<DoubleClickBehavior, QString> _map {
 | 
			
		||||
@ -64,16 +51,6 @@ QString Settings::doubleClickBehaviorToString(DoubleClickBehavior dcb)
 | 
			
		||||
    return _map.value(dcb, "close");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString Settings::mouseWheelBehaviorToString(MouseWheelBehavior mwb)
 | 
			
		||||
{
 | 
			
		||||
    static QMap<MouseWheelBehavior, QString> _map {
 | 
			
		||||
        {ActionZoomImage, "zoom"},
 | 
			
		||||
        {ActionPrevNextImage, "switch"}
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return _map.value(mwb, "zoom");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DoubleClickBehavior Settings::stringToDoubleClickBehavior(QString str)
 | 
			
		||||
{
 | 
			
		||||
    static QMap<QString, DoubleClickBehavior> _map {
 | 
			
		||||
@ -85,16 +62,6 @@ DoubleClickBehavior Settings::stringToDoubleClickBehavior(QString str)
 | 
			
		||||
    return _map.value(str, ActionCloseWindow);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MouseWheelBehavior Settings::stringToMouseWheelBehavior(QString str)
 | 
			
		||||
{
 | 
			
		||||
    static QMap<QString, MouseWheelBehavior> _map {
 | 
			
		||||
        {"zoom", ActionZoomImage},
 | 
			
		||||
        {"switch", ActionPrevNextImage}
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return _map.value(str, ActionZoomImage);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Settings::Settings()
 | 
			
		||||
    : QObject(qApp)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
@ -8,16 +8,8 @@ enum DoubleClickBehavior {
 | 
			
		||||
    ActionCloseWindow,
 | 
			
		||||
    ActionMaximizeWindow,
 | 
			
		||||
 | 
			
		||||
    DCActionStart = ActionDoNothing,
 | 
			
		||||
    DCActionEnd = ActionMaximizeWindow
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum MouseWheelBehavior {
 | 
			
		||||
    ActionZoomImage,
 | 
			
		||||
    ActionPrevNextImage,
 | 
			
		||||
 | 
			
		||||
    MWActionStart = ActionZoomImage,
 | 
			
		||||
    MWActionEnd = ActionPrevNextImage
 | 
			
		||||
    ActionStart = ActionDoNothing,
 | 
			
		||||
    ActionEnd = ActionMaximizeWindow
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class Settings : public QObject
 | 
			
		||||
@ -28,16 +20,12 @@ public:
 | 
			
		||||
 | 
			
		||||
    bool stayOnTop();
 | 
			
		||||
    DoubleClickBehavior doubleClickBehavior();
 | 
			
		||||
    MouseWheelBehavior mouseWheelBehavior();
 | 
			
		||||
 | 
			
		||||
    void setStayOnTop(bool on);
 | 
			
		||||
    void setDoubleClickBehavior(DoubleClickBehavior dcb);
 | 
			
		||||
    void setMouseWheelBehavior(MouseWheelBehavior mwb);
 | 
			
		||||
 | 
			
		||||
    static QString doubleClickBehaviorToString(DoubleClickBehavior dcb);
 | 
			
		||||
    static QString mouseWheelBehaviorToString(MouseWheelBehavior mwb);
 | 
			
		||||
    static DoubleClickBehavior stringToDoubleClickBehavior(QString str);
 | 
			
		||||
    static MouseWheelBehavior stringToMouseWheelBehavior(QString str);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    Settings();
 | 
			
		||||
 | 
			
		||||
@ -11,44 +11,29 @@ SettingsDialog::SettingsDialog(QWidget *parent)
 | 
			
		||||
    : QDialog(parent)
 | 
			
		||||
    , m_stayOnTop(new QCheckBox)
 | 
			
		||||
    , m_doubleClickBehavior(new QComboBox)
 | 
			
		||||
    , m_mouseWheelBehavior(new QComboBox)
 | 
			
		||||
{
 | 
			
		||||
    this->setWindowTitle(tr("Settings"));
 | 
			
		||||
 | 
			
		||||
    QFormLayout * settingsForm = new QFormLayout(this);
 | 
			
		||||
 | 
			
		||||
    static QMap<DoubleClickBehavior, QString> _dc_map {
 | 
			
		||||
    static QMap<DoubleClickBehavior, QString> _map {
 | 
			
		||||
        { ActionDoNothing, tr("Do nothing") },
 | 
			
		||||
        { ActionCloseWindow, tr("Close the window") },
 | 
			
		||||
        { ActionMaximizeWindow, tr("Toggle maximize") }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static QMap<MouseWheelBehavior, QString> _mw_map {
 | 
			
		||||
        { ActionZoomImage, tr("Zoom in and out") },
 | 
			
		||||
        { ActionPrevNextImage, tr("View next or previous item") }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    QStringList dcbDropDown;
 | 
			
		||||
    for (int dcb = DCActionStart; dcb <= DCActionEnd; dcb++) {
 | 
			
		||||
        dcbDropDown.append(_dc_map.value(static_cast<DoubleClickBehavior>(dcb)));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    QStringList mwbDropDown;
 | 
			
		||||
    for (int mwb = MWActionStart; mwb <= MWActionEnd; mwb++) {
 | 
			
		||||
        mwbDropDown.append(_mw_map.value(static_cast<MouseWheelBehavior>(mwb)));
 | 
			
		||||
    QStringList dropDown;
 | 
			
		||||
    for (int dcb = ActionStart; dcb <= ActionEnd; dcb++) {
 | 
			
		||||
        dropDown.append(_map.value(static_cast<DoubleClickBehavior>(dcb)));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    settingsForm->addRow(tr("Stay on top when start-up"), m_stayOnTop);
 | 
			
		||||
    settingsForm->addRow(tr("Double-click behavior"), m_doubleClickBehavior);
 | 
			
		||||
    settingsForm->addRow(tr("Mouse wheel behavior"), m_mouseWheelBehavior);
 | 
			
		||||
 | 
			
		||||
    m_stayOnTop->setChecked(Settings::instance()->stayOnTop());
 | 
			
		||||
    m_doubleClickBehavior->setModel(new QStringListModel(dcbDropDown));
 | 
			
		||||
    m_doubleClickBehavior->setModel(new QStringListModel(dropDown));
 | 
			
		||||
    DoubleClickBehavior dcb = Settings::instance()->doubleClickBehavior();
 | 
			
		||||
    m_doubleClickBehavior->setCurrentIndex(static_cast<int>(dcb));
 | 
			
		||||
    m_mouseWheelBehavior->setModel(new QStringListModel(mwbDropDown));
 | 
			
		||||
    MouseWheelBehavior mwb = Settings::instance()->mouseWheelBehavior();
 | 
			
		||||
    m_mouseWheelBehavior->setCurrentIndex(static_cast<int>(mwb));
 | 
			
		||||
 | 
			
		||||
    connect(m_stayOnTop, &QCheckBox::stateChanged, this, [ = ](int state){
 | 
			
		||||
        Settings::instance()->setStayOnTop(state == Qt::Checked);
 | 
			
		||||
@ -58,10 +43,6 @@ SettingsDialog::SettingsDialog(QWidget *parent)
 | 
			
		||||
        Settings::instance()->setDoubleClickBehavior(static_cast<DoubleClickBehavior>(index));
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    connect(m_mouseWheelBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){
 | 
			
		||||
        Settings::instance()->setMouseWheelBehavior(static_cast<MouseWheelBehavior>(index));
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    this->setMinimumSize(300, 61); // not sure why it complain "Unable to set geometry"
 | 
			
		||||
    setWindowFlag(Qt::WindowContextHelpButtonHint, false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,6 @@ public slots:
 | 
			
		||||
private:
 | 
			
		||||
    QCheckBox * m_stayOnTop = nullptr;
 | 
			
		||||
    QComboBox * m_doubleClickBehavior = nullptr;
 | 
			
		||||
    QComboBox * m_mouseWheelBehavior = nullptr;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // SETTINGSDIALOG_H
 | 
			
		||||
 | 
			
		||||
@ -1,674 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!DOCTYPE TS>
 | 
			
		||||
<TS version="2.1" language="es">
 | 
			
		||||
<context>
 | 
			
		||||
    <name>AboutDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <source>About</source>
 | 
			
		||||
        <translation>Acerca de</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <source>Launch application with image file path as argument to load the file.</source>
 | 
			
		||||
        <translation>Lanza la aplicación con la ruta del archivo de imagen como argumento para cargar el archivo.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Drag and drop image file onto the window is also supported.</source>
 | 
			
		||||
        <translation>También se admite la función de arrastrar y soltar el archivo de imagen en la ventana.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>None of the operations in this application will alter the pictures on disk.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="29"/>
 | 
			
		||||
        <source>Context menu option explanation:</source>
 | 
			
		||||
        <translation>Explicación de la opción del menú contextual:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <source>Make window stay on top of all other windows.</source>
 | 
			
		||||
        <translation>Haz que la ventana se quede encima de todas las demás ventanas.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="39"/>
 | 
			
		||||
        <source>Avoid close window accidentally. (eg. by double clicking the window)</source>
 | 
			
		||||
        <translation>Evita cerrar la ventana accidentalmente. (por ejemplo, haciendo doble clic en la ventana)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="47"/>
 | 
			
		||||
        <source>Version: %1</source>
 | 
			
		||||
        <translation>Versión: %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <source>Copyright (c) 2020 %1</source>
 | 
			
		||||
        <translation>Derechos reservados (c) 2020 %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <source>Logo designed by %1</source>
 | 
			
		||||
        <translation>Logo diseñado por %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="54"/>
 | 
			
		||||
        <source>Built with Qt %1 (%2)</source>
 | 
			
		||||
        <translation>Construido con Qt %1 (%2)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="55"/>
 | 
			
		||||
        <source>Source code</source>
 | 
			
		||||
        <translation>Código fuente</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <source>Contributors</source>
 | 
			
		||||
        <translation>Colaboradores</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="67"/>
 | 
			
		||||
        <source>List of contributors on GitHub</source>
 | 
			
		||||
        <translation>Lista de colaboradores en GitHub</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="68"/>
 | 
			
		||||
        <source>Thanks to all people who contributed to this project.</source>
 | 
			
		||||
        <translation>Gracias a todas las personas que contibuyen a este proyecto.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="72"/>
 | 
			
		||||
        <source>Translators</source>
 | 
			
		||||
        <translation>Traductores</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="73"/>
 | 
			
		||||
        <source>I would like to thank the following people who volunteered to translate this application.</source>
 | 
			
		||||
        <translation>Me gustaría dar las gracias a las siguientes personas que se ofrecieron a traducir esta solicitud.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="117"/>
 | 
			
		||||
        <source>%1 is built on the following free software libraries:</source>
 | 
			
		||||
        <comment>Free as in freedom</comment>
 | 
			
		||||
        <translation>%1 está construido sobre las siguientes bibliotecas de software libre:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <source>&Special Thanks</source>
 | 
			
		||||
        <translation>&Agradecimiento especial</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="143"/>
 | 
			
		||||
        <source>&Third-party Libraries</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <source>Your Rights</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <source>%1 is released under the MIT License.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <source>This license grants people a number of freedoms:</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <source>You are free to use %1, for any purpose</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <source>You are free to distribute %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="85"/>
 | 
			
		||||
        <source>You can study how %1 works and change it</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <source>You can distribute changed versions of %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="88"/>
 | 
			
		||||
        <source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="116"/>
 | 
			
		||||
        <source>Third-party Libraries used by %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <source>&Help</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <source>&About</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="142"/>
 | 
			
		||||
        <source>&License</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsScene</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsscene.cpp" line="48"/>
 | 
			
		||||
        <source>Drag image here</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsView</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="329"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="52"/>
 | 
			
		||||
        <source>File is not a valid image</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="57"/>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="62"/>
 | 
			
		||||
        <source>Image data is invalid or currently unsupported</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="337"/>
 | 
			
		||||
        <source>Image data is invalid</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="344"/>
 | 
			
		||||
        <source>Not supported mimedata: %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MainWindow</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="163"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="374"/>
 | 
			
		||||
        <source>&Copy</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="73"/>
 | 
			
		||||
        <source>Copy P&ixmap</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="74"/>
 | 
			
		||||
        <source>Copy &File Path</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="80"/>
 | 
			
		||||
        <source>Properties</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="76"/>
 | 
			
		||||
        <source>Stay on top</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="38"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="77"/>
 | 
			
		||||
        <source>Protected mode</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="65"/>
 | 
			
		||||
        <source>Zoom in</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="66"/>
 | 
			
		||||
        <source>Zoom out</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="70"/>
 | 
			
		||||
        <source>Flip &Horizontally</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="75"/>
 | 
			
		||||
        <source>&Paste</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="67"/>
 | 
			
		||||
        <source>Toggle Checkerboard</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="63"/>
 | 
			
		||||
        <source>Actual size</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="64"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="68"/>
 | 
			
		||||
        <source>Rotate right</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="78"/>
 | 
			
		||||
        <source>Configure...</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="79"/>
 | 
			
		||||
        <source>Help</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="81"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <source>Image Metadata</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataModel</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <source>Origin</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <source>Image</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <source>File</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <source>Camera</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <source>%1 File</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <source>Advanced photo</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="40"/>
 | 
			
		||||
        <source>GPS</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="44"/>
 | 
			
		||||
        <source>Dimensions</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Aspect ratio</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="49"/>
 | 
			
		||||
        <source>Frame count</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <source>Item type</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <source>Folder path</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <source>Size</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date created</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="63"/>
 | 
			
		||||
        <source>Date modified</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Title</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="72"/>
 | 
			
		||||
        <source>Subject</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="74"/>
 | 
			
		||||
        <source>Rating</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="76"/>
 | 
			
		||||
        <source>Tags</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="78"/>
 | 
			
		||||
        <source>Comments</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="81"/>
 | 
			
		||||
        <source>Authors</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="83"/>
 | 
			
		||||
        <source>Date taken</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <source>Program name</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Copyright</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="94"/>
 | 
			
		||||
        <source>Horizontal resolution</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="96"/>
 | 
			
		||||
        <source>Vertical resolution</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="98"/>
 | 
			
		||||
        <source>Resolution unit</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="100"/>
 | 
			
		||||
        <source>Colour representation</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <source>Camera maker</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <source>Camera model</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <source>F-stop</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <source>Exposure time</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="111"/>
 | 
			
		||||
        <source>ISO speed</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="113"/>
 | 
			
		||||
        <source>Exposure bias</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="115"/>
 | 
			
		||||
        <source>Focal length</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="117"/>
 | 
			
		||||
        <source>Max aperture</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="119"/>
 | 
			
		||||
        <source>Metering mode</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="121"/>
 | 
			
		||||
        <source>Flash mode</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="123"/>
 | 
			
		||||
        <source>35mm focal length</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <source>Lens model</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="128"/>
 | 
			
		||||
        <source>Brightness</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="130"/>
 | 
			
		||||
        <source>Exposure program</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="132"/>
 | 
			
		||||
        <source>Saturation</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="134"/>
 | 
			
		||||
        <source>Sharpness</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="136"/>
 | 
			
		||||
        <source>White balance</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="138"/>
 | 
			
		||||
        <source>Digital zoom</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="140"/>
 | 
			
		||||
        <source>EXIF version</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="143"/>
 | 
			
		||||
        <source>Latitude reference</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="145"/>
 | 
			
		||||
        <source>Latitude</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="147"/>
 | 
			
		||||
        <source>Longitude reference</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="149"/>
 | 
			
		||||
        <source>Longitude</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="151"/>
 | 
			
		||||
        <source>Altitude reference</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>Altitude</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="163"/>
 | 
			
		||||
        <source>%1 x %2</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="181"/>
 | 
			
		||||
        <source>%1 : %2</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <source>Property</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <source>Value</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SettingsDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="16"/>
 | 
			
		||||
        <source>Settings</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <source>Do nothing</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <source>Close the window</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="23"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Zoom in and out</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="28"/>
 | 
			
		||||
        <source>View next or previous item</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="41"/>
 | 
			
		||||
        <source>Stay on top when start-up</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="42"/>
 | 
			
		||||
        <source>Double-click behavior</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="43"/>
 | 
			
		||||
        <source>Mouse wheel behavior</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>main</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="31"/>
 | 
			
		||||
        <source>Pineapple Pictures</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="35"/>
 | 
			
		||||
        <source>File list.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
</TS>
 | 
			
		||||
@ -1,674 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!DOCTYPE TS>
 | 
			
		||||
<TS version="2.1" language="id">
 | 
			
		||||
<context>
 | 
			
		||||
    <name>AboutDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <source>About</source>
 | 
			
		||||
        <translation>Tentang</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <source>Launch application with image file path as argument to load the file.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Drag and drop image file onto the window is also supported.</source>
 | 
			
		||||
        <translation>Tarik dan lepaskan gambar ke jendela juga didukung.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>None of the operations in this application will alter the pictures on disk.</source>
 | 
			
		||||
        <translation>Semua operasi pada aplikasi ini tidak akan mengubah gambar pada diska.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="29"/>
 | 
			
		||||
        <source>Context menu option explanation:</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <source>Make window stay on top of all other windows.</source>
 | 
			
		||||
        <translation>Buat jendela tetap di atas semua jendela lainnya.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="39"/>
 | 
			
		||||
        <source>Avoid close window accidentally. (eg. by double clicking the window)</source>
 | 
			
		||||
        <translation>Hindari penutupan jendela secara tidak sengaja (contoh dengan mengklik jendela dua kali)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="47"/>
 | 
			
		||||
        <source>Version: %1</source>
 | 
			
		||||
        <translation>Versi: %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <source>Copyright (c) 2020 %1</source>
 | 
			
		||||
        <translation>Hak Cipta (c) 2020 %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <source>Logo designed by %1</source>
 | 
			
		||||
        <translation>Logo didesain oleh %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="54"/>
 | 
			
		||||
        <source>Built with Qt %1 (%2)</source>
 | 
			
		||||
        <translation>Dibuat dengan Qt %1 (%2)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="55"/>
 | 
			
		||||
        <source>Source code</source>
 | 
			
		||||
        <translation>Kode sumber</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <source>Contributors</source>
 | 
			
		||||
        <translation>Kontributor-kontributor</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="67"/>
 | 
			
		||||
        <source>List of contributors on GitHub</source>
 | 
			
		||||
        <translation>Daftar kontributor di GitHub</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="68"/>
 | 
			
		||||
        <source>Thanks to all people who contributed to this project.</source>
 | 
			
		||||
        <translation>Terima kasih kepada semua orang yang telah berkontribusi ke proyek ini.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="72"/>
 | 
			
		||||
        <source>Translators</source>
 | 
			
		||||
        <translation>Penerjemah</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="73"/>
 | 
			
		||||
        <source>I would like to thank the following people who volunteered to translate this application.</source>
 | 
			
		||||
        <translation>Saya ingin berterima kasih orang-orang berikut yang secara sukarela menerjemahkan aplikasi ini.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="117"/>
 | 
			
		||||
        <source>%1 is built on the following free software libraries:</source>
 | 
			
		||||
        <comment>Free as in freedom</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <source>&Special Thanks</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="143"/>
 | 
			
		||||
        <source>&Third-party Libraries</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <source>Your Rights</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <source>%1 is released under the MIT License.</source>
 | 
			
		||||
        <translation>%1 diluncurkan di bawah lisensi MIT.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <source>This license grants people a number of freedoms:</source>
 | 
			
		||||
        <translation>Lisensi ini memberikan orang-orang beberapa kebebasan:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <source>You are free to use %1, for any purpose</source>
 | 
			
		||||
        <translation>Anda bebas menggunakan %1, untuk tujuan apapun</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <source>You are free to distribute %1</source>
 | 
			
		||||
        <translation>Anda bebas mendistribusikan %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="85"/>
 | 
			
		||||
        <source>You can study how %1 works and change it</source>
 | 
			
		||||
        <translation>Anda dapat mempelajari bagaimana cara %1 bekerja dan mengubahnya</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <source>You can distribute changed versions of %1</source>
 | 
			
		||||
        <translation>Anda dapat mendistribusikan versi %1 yang telah diubah</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="88"/>
 | 
			
		||||
        <source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="116"/>
 | 
			
		||||
        <source>Third-party Libraries used by %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <source>&Help</source>
 | 
			
		||||
        <translation>&Dukungan</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <source>&About</source>
 | 
			
		||||
        <translation>Tentan&g</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="142"/>
 | 
			
		||||
        <source>&License</source>
 | 
			
		||||
        <translation>&Lisensi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsScene</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsscene.cpp" line="48"/>
 | 
			
		||||
        <source>Drag image here</source>
 | 
			
		||||
        <translation>Tarik gambar ke sini</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsView</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="329"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="52"/>
 | 
			
		||||
        <source>File is not a valid image</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="57"/>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="62"/>
 | 
			
		||||
        <source>Image data is invalid or currently unsupported</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="337"/>
 | 
			
		||||
        <source>Image data is invalid</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="344"/>
 | 
			
		||||
        <source>Not supported mimedata: %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MainWindow</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="163"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="374"/>
 | 
			
		||||
        <source>&Copy</source>
 | 
			
		||||
        <translation>&Salin</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="73"/>
 | 
			
		||||
        <source>Copy P&ixmap</source>
 | 
			
		||||
        <translation>Salin P&ixmap</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="74"/>
 | 
			
		||||
        <source>Copy &File Path</source>
 | 
			
		||||
        <translation>Salin &Path Berkas</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="80"/>
 | 
			
		||||
        <source>Properties</source>
 | 
			
		||||
        <translation>Properti</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="76"/>
 | 
			
		||||
        <source>Stay on top</source>
 | 
			
		||||
        <translation>Tetap di atas</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="38"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="77"/>
 | 
			
		||||
        <source>Protected mode</source>
 | 
			
		||||
        <translation>Mode Terlindungi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="65"/>
 | 
			
		||||
        <source>Zoom in</source>
 | 
			
		||||
        <translation>Perbesar</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="66"/>
 | 
			
		||||
        <source>Zoom out</source>
 | 
			
		||||
        <translation>Perkecil</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="70"/>
 | 
			
		||||
        <source>Flip &Horizontally</source>
 | 
			
		||||
        <translation>Putar Secara &Horizontal</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="75"/>
 | 
			
		||||
        <source>&Paste</source>
 | 
			
		||||
        <translation>&Tempel</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="67"/>
 | 
			
		||||
        <source>Toggle Checkerboard</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="63"/>
 | 
			
		||||
        <source>Actual size</source>
 | 
			
		||||
        <translation>Ukuran asli</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="64"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="68"/>
 | 
			
		||||
        <source>Rotate right</source>
 | 
			
		||||
        <translation>Putar ke kanan</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="78"/>
 | 
			
		||||
        <source>Configure...</source>
 | 
			
		||||
        <translation>Konfigurasi...</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="79"/>
 | 
			
		||||
        <source>Help</source>
 | 
			
		||||
        <translation>Dukungan</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="81"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation>Keluar</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <source>Image Metadata</source>
 | 
			
		||||
        <translation>Metadata Gambar</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataModel</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <source>Origin</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <source>Image</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Gambar</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <source>File</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Berkas</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <source>Camera</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Kamera</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <source>%1 File</source>
 | 
			
		||||
        <translation>%1 Berkas</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Keterangan</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <source>Advanced photo</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="40"/>
 | 
			
		||||
        <source>GPS</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>GPS</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="44"/>
 | 
			
		||||
        <source>Dimensions</source>
 | 
			
		||||
        <translation>Dimensi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Aspect ratio</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="49"/>
 | 
			
		||||
        <source>Frame count</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation>Nama</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <source>Item type</source>
 | 
			
		||||
        <translation>Jenis item</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <source>Folder path</source>
 | 
			
		||||
        <translation>Path folder</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <source>Size</source>
 | 
			
		||||
        <translation>Ukuran</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date created</source>
 | 
			
		||||
        <translation>Tanggal dibuat</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="63"/>
 | 
			
		||||
        <source>Date modified</source>
 | 
			
		||||
        <translation>Tanggal dimodifikasi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Title</source>
 | 
			
		||||
        <translation>Judul</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="72"/>
 | 
			
		||||
        <source>Subject</source>
 | 
			
		||||
        <translation>Subyek</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="74"/>
 | 
			
		||||
        <source>Rating</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="76"/>
 | 
			
		||||
        <source>Tags</source>
 | 
			
		||||
        <translation>Tag</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="78"/>
 | 
			
		||||
        <source>Comments</source>
 | 
			
		||||
        <translation>Komentar</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="81"/>
 | 
			
		||||
        <source>Authors</source>
 | 
			
		||||
        <translation>Penulis</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="83"/>
 | 
			
		||||
        <source>Date taken</source>
 | 
			
		||||
        <translation>Tanggal diambil</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <source>Program name</source>
 | 
			
		||||
        <translation>Nama program</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Copyright</source>
 | 
			
		||||
        <translation>Hak cipta</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="94"/>
 | 
			
		||||
        <source>Horizontal resolution</source>
 | 
			
		||||
        <translation>Resolusi horizontal</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="96"/>
 | 
			
		||||
        <source>Vertical resolution</source>
 | 
			
		||||
        <translation>Resolusi vertikal</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="98"/>
 | 
			
		||||
        <source>Resolution unit</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="100"/>
 | 
			
		||||
        <source>Colour representation</source>
 | 
			
		||||
        <translation type="unfinished">Representasi warna</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <source>Camera maker</source>
 | 
			
		||||
        <translation>Pembuat kamera</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <source>Camera model</source>
 | 
			
		||||
        <translation>Model kamera</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <source>F-stop</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <source>Exposure time</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="111"/>
 | 
			
		||||
        <source>ISO speed</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="113"/>
 | 
			
		||||
        <source>Exposure bias</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="115"/>
 | 
			
		||||
        <source>Focal length</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="117"/>
 | 
			
		||||
        <source>Max aperture</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="119"/>
 | 
			
		||||
        <source>Metering mode</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="121"/>
 | 
			
		||||
        <source>Flash mode</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="123"/>
 | 
			
		||||
        <source>35mm focal length</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <source>Lens model</source>
 | 
			
		||||
        <translation>Model lensa</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="128"/>
 | 
			
		||||
        <source>Brightness</source>
 | 
			
		||||
        <translation>Kecerahan</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="130"/>
 | 
			
		||||
        <source>Exposure program</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="132"/>
 | 
			
		||||
        <source>Saturation</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="134"/>
 | 
			
		||||
        <source>Sharpness</source>
 | 
			
		||||
        <translation>Ketajaman</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="136"/>
 | 
			
		||||
        <source>White balance</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="138"/>
 | 
			
		||||
        <source>Digital zoom</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="140"/>
 | 
			
		||||
        <source>EXIF version</source>
 | 
			
		||||
        <translation>Versi EXIF</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="143"/>
 | 
			
		||||
        <source>Latitude reference</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="145"/>
 | 
			
		||||
        <source>Latitude</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="147"/>
 | 
			
		||||
        <source>Longitude reference</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="149"/>
 | 
			
		||||
        <source>Longitude</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="151"/>
 | 
			
		||||
        <source>Altitude reference</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>Altitude</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="163"/>
 | 
			
		||||
        <source>%1 x %2</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="181"/>
 | 
			
		||||
        <source>%1 : %2</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <source>Property</source>
 | 
			
		||||
        <translation>Properti</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <source>Value</source>
 | 
			
		||||
        <translation>Nilai</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SettingsDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="16"/>
 | 
			
		||||
        <source>Settings</source>
 | 
			
		||||
        <translation>Pengaturan</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <source>Do nothing</source>
 | 
			
		||||
        <translation>Jangan lakukan apapun</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <source>Close the window</source>
 | 
			
		||||
        <translation>Tutup jendela</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="23"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Zoom in and out</source>
 | 
			
		||||
        <translation>Perbesar dan perkecil</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="28"/>
 | 
			
		||||
        <source>View next or previous item</source>
 | 
			
		||||
        <translation>Lihat item berikutnya atau sebelumnya</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="41"/>
 | 
			
		||||
        <source>Stay on top when start-up</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="42"/>
 | 
			
		||||
        <source>Double-click behavior</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="43"/>
 | 
			
		||||
        <source>Mouse wheel behavior</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>main</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="31"/>
 | 
			
		||||
        <source>Pineapple Pictures</source>
 | 
			
		||||
        <translation>Pineapple Pictures</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="35"/>
 | 
			
		||||
        <source>File list.</source>
 | 
			
		||||
        <translation>Daftar berkas.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
</TS>
 | 
			
		||||
@ -1,674 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!DOCTYPE TS>
 | 
			
		||||
<TS version="2.1" language="nl">
 | 
			
		||||
<context>
 | 
			
		||||
    <name>AboutDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <source>About</source>
 | 
			
		||||
        <translation>Over</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <source>Launch application with image file path as argument to load the file.</source>
 | 
			
		||||
        <translation>Start het programma met het opgegeven afbeeldingsbestandspad.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Drag and drop image file onto the window is also supported.</source>
 | 
			
		||||
        <translation>U kunt tevens afbeeldingen naar het venster slepen.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>None of the operations in this application will alter the pictures on disk.</source>
 | 
			
		||||
        <translation>Geen van de handelingen in dit programma veranderen de afbeeldingen op de schijf.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="29"/>
 | 
			
		||||
        <source>Context menu option explanation:</source>
 | 
			
		||||
        <translation>Rechtermuisknopmenu-uitleg:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <source>Make window stay on top of all other windows.</source>
 | 
			
		||||
        <translation>Houdt het venster boven andere vensters.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="39"/>
 | 
			
		||||
        <source>Avoid close window accidentally. (eg. by double clicking the window)</source>
 | 
			
		||||
        <translation>Voorkomt per ongeluk sluiten (bijv. door te dubbelklikken op het venster).</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="47"/>
 | 
			
		||||
        <source>Version: %1</source>
 | 
			
		||||
        <translation>Versie: %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <source>Copyright (c) 2020 %1</source>
 | 
			
		||||
        <translation>Copyright (c) 2020 %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <source>Logo designed by %1</source>
 | 
			
		||||
        <translation>Logo gemaakt door %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="54"/>
 | 
			
		||||
        <source>Built with Qt %1 (%2)</source>
 | 
			
		||||
        <translation>Gebouwd met Qt %1 (%2)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="55"/>
 | 
			
		||||
        <source>Source code</source>
 | 
			
		||||
        <translation>Broncode</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <source>Contributors</source>
 | 
			
		||||
        <translation>Bijdragers</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="67"/>
 | 
			
		||||
        <source>List of contributors on GitHub</source>
 | 
			
		||||
        <translation>Lijst met bijdragers op GitHub</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="68"/>
 | 
			
		||||
        <source>Thanks to all people who contributed to this project.</source>
 | 
			
		||||
        <translation>Met dank aan alle personen die hebben bijgedragen aan dit project.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="72"/>
 | 
			
		||||
        <source>Translators</source>
 | 
			
		||||
        <translation>Vertalers</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="73"/>
 | 
			
		||||
        <source>I would like to thank the following people who volunteered to translate this application.</source>
 | 
			
		||||
        <translation>Ik wil graag de volgende mensen bedanken die vrijwillig hebben bijgedragen aan vertalingen.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="117"/>
 | 
			
		||||
        <source>%1 is built on the following free software libraries:</source>
 | 
			
		||||
        <comment>Free as in freedom</comment>
 | 
			
		||||
        <translation>%1 is gebouwd met de volgende vrijesoftwarebibliotheken:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <source>&Special Thanks</source>
 | 
			
		||||
        <translation>&Met dank aan</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="143"/>
 | 
			
		||||
        <source>&Third-party Libraries</source>
 | 
			
		||||
        <translation>Ex&terne bibliotheken</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <source>Your Rights</source>
 | 
			
		||||
        <translation>Uw rechten</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <source>%1 is released under the MIT License.</source>
 | 
			
		||||
        <translation>%1 is uitgebracht onder de MIT-licentie.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <source>This license grants people a number of freedoms:</source>
 | 
			
		||||
        <translation>Deze licentie biedt een hoop vrijheden:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <source>You are free to use %1, for any purpose</source>
 | 
			
		||||
        <translation>U mag %1 gratis gebruiken, voor welk doeleinde dan ook</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <source>You are free to distribute %1</source>
 | 
			
		||||
        <translation>U mag %1 vrij verspreiden</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="85"/>
 | 
			
		||||
        <source>You can study how %1 works and change it</source>
 | 
			
		||||
        <translation>U kunt bekijken hoe %1 werkt en aanpassingen doen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <source>You can distribute changed versions of %1</source>
 | 
			
		||||
        <translation>U mag aangepaste versie van %1 vrij verspreiden</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="88"/>
 | 
			
		||||
        <source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
 | 
			
		||||
        <translation>De MIT-licentie garandeert u deze vrijheid, en niemand mag deze vrijheid wegnemen.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="116"/>
 | 
			
		||||
        <source>Third-party Libraries used by %1</source>
 | 
			
		||||
        <translation>Door %1 gebruikte externe bibliotheken</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <source>&Help</source>
 | 
			
		||||
        <translation>&Hulp</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <source>&About</source>
 | 
			
		||||
        <translation>&Over</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="142"/>
 | 
			
		||||
        <source>&License</source>
 | 
			
		||||
        <translation>&Licentie</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsScene</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsscene.cpp" line="48"/>
 | 
			
		||||
        <source>Drag image here</source>
 | 
			
		||||
        <translation>Sleep een afbeelding hierheen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsView</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="329"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation>De bestandspadlijst is leeg</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="52"/>
 | 
			
		||||
        <source>File is not a valid image</source>
 | 
			
		||||
        <translation>Het bestand is geen afbeelding</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="57"/>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="62"/>
 | 
			
		||||
        <source>Image data is invalid or currently unsupported</source>
 | 
			
		||||
        <translation>De afbeeldingsgegevens zijn beschadigd of worden niet ondersteund</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="337"/>
 | 
			
		||||
        <source>Image data is invalid</source>
 | 
			
		||||
        <translation>Beschadigde afbeeldingsgegevens</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="344"/>
 | 
			
		||||
        <source>Not supported mimedata: %1</source>
 | 
			
		||||
        <translation>Niet-ondersteunde mime-gegevens: %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MainWindow</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="163"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation>De bestandspadlijst is leeg</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="374"/>
 | 
			
		||||
        <source>&Copy</source>
 | 
			
		||||
        <translation>&Kopiëren</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="73"/>
 | 
			
		||||
        <source>Copy P&ixmap</source>
 | 
			
		||||
        <translation>P&ixmap kopiëren</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="74"/>
 | 
			
		||||
        <source>Copy &File Path</source>
 | 
			
		||||
        <translation>&Bestandspad kopiëren</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="80"/>
 | 
			
		||||
        <source>Properties</source>
 | 
			
		||||
        <translation>Eigenschappen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="76"/>
 | 
			
		||||
        <source>Stay on top</source>
 | 
			
		||||
        <translation>Altijd bovenop</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="38"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="77"/>
 | 
			
		||||
        <source>Protected mode</source>
 | 
			
		||||
        <translation>Beschermde modus</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="65"/>
 | 
			
		||||
        <source>Zoom in</source>
 | 
			
		||||
        <translation>Inzoomen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="66"/>
 | 
			
		||||
        <source>Zoom out</source>
 | 
			
		||||
        <translation>Uitzoomen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="70"/>
 | 
			
		||||
        <source>Flip &Horizontally</source>
 | 
			
		||||
        <translation>&Horizontaal spiegelen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="75"/>
 | 
			
		||||
        <source>&Paste</source>
 | 
			
		||||
        <translation>&Plakken</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="67"/>
 | 
			
		||||
        <source>Toggle Checkerboard</source>
 | 
			
		||||
        <translation>Schaakbordpatroon aan/uit</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="63"/>
 | 
			
		||||
        <source>Actual size</source>
 | 
			
		||||
        <translation>Ware grootte</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="64"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation>Maximaliseren aan/uit</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="68"/>
 | 
			
		||||
        <source>Rotate right</source>
 | 
			
		||||
        <translation>Naar rechts draaien</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="78"/>
 | 
			
		||||
        <source>Configure...</source>
 | 
			
		||||
        <translation>Instellen...</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="79"/>
 | 
			
		||||
        <source>Help</source>
 | 
			
		||||
        <translation>Hulp</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="81"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation>Afsluiten</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <source>Image Metadata</source>
 | 
			
		||||
        <translation>Afbeeldingsmetagegevens</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataModel</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <source>Origin</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Oorsprong</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <source>Image</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Afbeelding</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <source>File</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Bestand</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <source>Camera</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Camera</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <source>%1 File</source>
 | 
			
		||||
        <translation>%1-bestand</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Omschrijving</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <source>Advanced photo</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Uitgebreide foto</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="40"/>
 | 
			
		||||
        <source>GPS</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>GPS</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="44"/>
 | 
			
		||||
        <source>Dimensions</source>
 | 
			
		||||
        <translation>Afmetingen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Aspect ratio</source>
 | 
			
		||||
        <translation>Beeldverhouding</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="49"/>
 | 
			
		||||
        <source>Frame count</source>
 | 
			
		||||
        <translation>Aantal frames</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation>Naam</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <source>Item type</source>
 | 
			
		||||
        <translation>Soort item</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <source>Folder path</source>
 | 
			
		||||
        <translation>Bestandspad</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <source>Size</source>
 | 
			
		||||
        <translation>Grootte</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date created</source>
 | 
			
		||||
        <translation>Gemaakt op</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="63"/>
 | 
			
		||||
        <source>Date modified</source>
 | 
			
		||||
        <translation>Bewerkt op</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Title</source>
 | 
			
		||||
        <translation>Naam</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="72"/>
 | 
			
		||||
        <source>Subject</source>
 | 
			
		||||
        <translation>Onderwerp</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="74"/>
 | 
			
		||||
        <source>Rating</source>
 | 
			
		||||
        <translation>Waardering</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="76"/>
 | 
			
		||||
        <source>Tags</source>
 | 
			
		||||
        <translation>Labels</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="78"/>
 | 
			
		||||
        <source>Comments</source>
 | 
			
		||||
        <translation>Opmerkingen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="81"/>
 | 
			
		||||
        <source>Authors</source>
 | 
			
		||||
        <translation>Makers</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="83"/>
 | 
			
		||||
        <source>Date taken</source>
 | 
			
		||||
        <translation>Genomen op</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <source>Program name</source>
 | 
			
		||||
        <translation>Programmanaam</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Copyright</source>
 | 
			
		||||
        <translation>Copyright</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="94"/>
 | 
			
		||||
        <source>Horizontal resolution</source>
 | 
			
		||||
        <translation>Horizontale resolutie</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="96"/>
 | 
			
		||||
        <source>Vertical resolution</source>
 | 
			
		||||
        <translation>Verticale resolutie</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="98"/>
 | 
			
		||||
        <source>Resolution unit</source>
 | 
			
		||||
        <translation>Resolutie-eenheid</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="100"/>
 | 
			
		||||
        <source>Colour representation</source>
 | 
			
		||||
        <translation>Kleurweergave</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <source>Camera maker</source>
 | 
			
		||||
        <translation>Camerafabrikant</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <source>Camera model</source>
 | 
			
		||||
        <translation>Cameramodel</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <source>F-stop</source>
 | 
			
		||||
        <translation>Openingsverhouding</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <source>Exposure time</source>
 | 
			
		||||
        <translation>Belichtingstijd</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="111"/>
 | 
			
		||||
        <source>ISO speed</source>
 | 
			
		||||
        <translation>ISO-snelheid</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="113"/>
 | 
			
		||||
        <source>Exposure bias</source>
 | 
			
		||||
        <translation>Belichtingsvertekening</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="115"/>
 | 
			
		||||
        <source>Focal length</source>
 | 
			
		||||
        <translation>Focale lengte</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="117"/>
 | 
			
		||||
        <source>Max aperture</source>
 | 
			
		||||
        <translation>Max. opening</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="119"/>
 | 
			
		||||
        <source>Metering mode</source>
 | 
			
		||||
        <translation>Metermodus</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="121"/>
 | 
			
		||||
        <source>Flash mode</source>
 | 
			
		||||
        <translation>Flitsmodus</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="123"/>
 | 
			
		||||
        <source>35mm focal length</source>
 | 
			
		||||
        <translation>35mm focale lengte</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <source>Lens model</source>
 | 
			
		||||
        <translation>Lensmodel</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="128"/>
 | 
			
		||||
        <source>Brightness</source>
 | 
			
		||||
        <translation>Helderheid</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="130"/>
 | 
			
		||||
        <source>Exposure program</source>
 | 
			
		||||
        <translation>Belichtingsprogramma</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="132"/>
 | 
			
		||||
        <source>Saturation</source>
 | 
			
		||||
        <translation>Verzadiging</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="134"/>
 | 
			
		||||
        <source>Sharpness</source>
 | 
			
		||||
        <translation>Scherpte</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="136"/>
 | 
			
		||||
        <source>White balance</source>
 | 
			
		||||
        <translation>Witbalans</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="138"/>
 | 
			
		||||
        <source>Digital zoom</source>
 | 
			
		||||
        <translation>Digitale zoom</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="140"/>
 | 
			
		||||
        <source>EXIF version</source>
 | 
			
		||||
        <translation>EXIF-versie</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="143"/>
 | 
			
		||||
        <source>Latitude reference</source>
 | 
			
		||||
        <translation>Breedtegraadverwijzing</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="145"/>
 | 
			
		||||
        <source>Latitude</source>
 | 
			
		||||
        <translation>Breedtegraad</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="147"/>
 | 
			
		||||
        <source>Longitude reference</source>
 | 
			
		||||
        <translation>Lengtegraadverwijzing</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="149"/>
 | 
			
		||||
        <source>Longitude</source>
 | 
			
		||||
        <translation>Lengtegraad</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="151"/>
 | 
			
		||||
        <source>Altitude reference</source>
 | 
			
		||||
        <translation>Hoogteverwijzing</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>Altitude</source>
 | 
			
		||||
        <translation>Hoogte</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="163"/>
 | 
			
		||||
        <source>%1 x %2</source>
 | 
			
		||||
        <translation>%1 x %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="181"/>
 | 
			
		||||
        <source>%1 : %2</source>
 | 
			
		||||
        <translation>%1 : %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <source>Property</source>
 | 
			
		||||
        <translation>Eigenschap</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <source>Value</source>
 | 
			
		||||
        <translation>Waarde</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SettingsDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="16"/>
 | 
			
		||||
        <source>Settings</source>
 | 
			
		||||
        <translation>Instellingen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <source>Do nothing</source>
 | 
			
		||||
        <translation>Niets doen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <source>Close the window</source>
 | 
			
		||||
        <translation>Venster sluiten</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="23"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation>Maximaliseren/Demaximaliseren</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Zoom in and out</source>
 | 
			
		||||
        <translation>In-/Uitzoomen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="28"/>
 | 
			
		||||
        <source>View next or previous item</source>
 | 
			
		||||
        <translation>Ga naar volgende of vorige item</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="41"/>
 | 
			
		||||
        <source>Stay on top when start-up</source>
 | 
			
		||||
        <translation>Automatisch altijd bovenop</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="42"/>
 | 
			
		||||
        <source>Double-click behavior</source>
 | 
			
		||||
        <translation>Dubbelklikgedrag</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="43"/>
 | 
			
		||||
        <source>Mouse wheel behavior</source>
 | 
			
		||||
        <translation>Scrollwielgedrag</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>main</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="31"/>
 | 
			
		||||
        <source>Pineapple Pictures</source>
 | 
			
		||||
        <translation>Pineapple Afbeeldingen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="35"/>
 | 
			
		||||
        <source>File list.</source>
 | 
			
		||||
        <translation>Bestandslijst.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
</TS>
 | 
			
		||||
@ -1,674 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!DOCTYPE TS>
 | 
			
		||||
<TS version="2.1" language="ru">
 | 
			
		||||
<context>
 | 
			
		||||
    <name>AboutDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <source>About</source>
 | 
			
		||||
        <translation>О программе</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <source>Launch application with image file path as argument to load the file.</source>
 | 
			
		||||
        <translation>Запустите приложение, указав путь к файлу изображения в качестве аргумента для загрузки файла.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Drag and drop image file onto the window is also supported.</source>
 | 
			
		||||
        <translation>Также поддерживается перетаскивание файла изображения в окно.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>None of the operations in this application will alter the pictures on disk.</source>
 | 
			
		||||
        <translation>Ни одна из операций в этом приложении не изменит изображения на диске.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="29"/>
 | 
			
		||||
        <source>Context menu option explanation:</source>
 | 
			
		||||
        <translation>Пояснение к параметрам контекстного меню:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <source>Make window stay on top of all other windows.</source>
 | 
			
		||||
        <translation>Расположить окно поверх всех остальных окон.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="39"/>
 | 
			
		||||
        <source>Avoid close window accidentally. (eg. by double clicking the window)</source>
 | 
			
		||||
        <translation>Избегать случайного закрытия окна. (например, двойным щелчком по окну)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="47"/>
 | 
			
		||||
        <source>Version: %1</source>
 | 
			
		||||
        <translation>Версия: %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <source>Copyright (c) 2020 %1</source>
 | 
			
		||||
        <translation>Авторское право (c) 2020 %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <source>Logo designed by %1</source>
 | 
			
		||||
        <translation>Логотип разработан %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="54"/>
 | 
			
		||||
        <source>Built with Qt %1 (%2)</source>
 | 
			
		||||
        <translation>Создано с использованием Qt %1 (%2)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="55"/>
 | 
			
		||||
        <source>Source code</source>
 | 
			
		||||
        <translation>Исходный код</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <source>Contributors</source>
 | 
			
		||||
        <translation>Участники</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="67"/>
 | 
			
		||||
        <source>List of contributors on GitHub</source>
 | 
			
		||||
        <translation>Список участников на GitHub</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="68"/>
 | 
			
		||||
        <source>Thanks to all people who contributed to this project.</source>
 | 
			
		||||
        <translation>Спасибо всем, кто внес свой вклад в этот проект.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="72"/>
 | 
			
		||||
        <source>Translators</source>
 | 
			
		||||
        <translation>Переводчики</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="73"/>
 | 
			
		||||
        <source>I would like to thank the following people who volunteered to translate this application.</source>
 | 
			
		||||
        <translation>Я бы хотел поблагодарить следующих людей, которые приняли участие в переводе этого приложения.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="117"/>
 | 
			
		||||
        <source>%1 is built on the following free software libraries:</source>
 | 
			
		||||
        <comment>Free as in freedom</comment>
 | 
			
		||||
        <translation>%1 создан на следующих бесплатных библиотеках программного обеспечения:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <source>&Special Thanks</source>
 | 
			
		||||
        <translation>&Особая благодарность</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="143"/>
 | 
			
		||||
        <source>&Third-party Libraries</source>
 | 
			
		||||
        <translation>&Сторонние библиотеки</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <source>Your Rights</source>
 | 
			
		||||
        <translation>Ваши Права</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <source>%1 is released under the MIT License.</source>
 | 
			
		||||
        <translation>%1 выпущен под лицензией MIT.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <source>This license grants people a number of freedoms:</source>
 | 
			
		||||
        <translation>Эта лицензия дает людям ряд свобод:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <source>You are free to use %1, for any purpose</source>
 | 
			
		||||
        <translation>Вы можете свободно использовать %1 для любых целей</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <source>You are free to distribute %1</source>
 | 
			
		||||
        <translation>Вы можете свободно распространять %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="85"/>
 | 
			
		||||
        <source>You can study how %1 works and change it</source>
 | 
			
		||||
        <translation>Вы можете изучать, как работает %1, и изменять его</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <source>You can distribute changed versions of %1</source>
 | 
			
		||||
        <translation>Вы можете распространять измененные версии %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="88"/>
 | 
			
		||||
        <source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
 | 
			
		||||
        <translation>Лицензия MIT гарантирует вам эту свободу. Никому и никогда не разрешается забирать ее.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="116"/>
 | 
			
		||||
        <source>Third-party Libraries used by %1</source>
 | 
			
		||||
        <translation>Сторонние библиотеки, используемые %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <source>&Help</source>
 | 
			
		||||
        <translation>&Помощь</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <source>&About</source>
 | 
			
		||||
        <translation>&О программе</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="142"/>
 | 
			
		||||
        <source>&License</source>
 | 
			
		||||
        <translation>&Лицензия</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsScene</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsscene.cpp" line="48"/>
 | 
			
		||||
        <source>Drag image here</source>
 | 
			
		||||
        <translation>Перетащите изображение сюда</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsView</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="329"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation>Список URL-адресов файлов пуст</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="52"/>
 | 
			
		||||
        <source>File is not a valid image</source>
 | 
			
		||||
        <translation>Файл не является допустимым изображением</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="57"/>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="62"/>
 | 
			
		||||
        <source>Image data is invalid or currently unsupported</source>
 | 
			
		||||
        <translation>Параметры изображения недействительны или не поддерживаются в настоящее время</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="337"/>
 | 
			
		||||
        <source>Image data is invalid</source>
 | 
			
		||||
        <translation>Параметры изображения недействительны</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="344"/>
 | 
			
		||||
        <source>Not supported mimedata: %1</source>
 | 
			
		||||
        <translation>Неподдерживаемые mimedata: %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MainWindow</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="163"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation>Список URL-адресов файлов пуст</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="374"/>
 | 
			
		||||
        <source>&Copy</source>
 | 
			
		||||
        <translation>&Скопировать</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="73"/>
 | 
			
		||||
        <source>Copy P&ixmap</source>
 | 
			
		||||
        <translation>Скопировать P&ixmap</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="74"/>
 | 
			
		||||
        <source>Copy &File Path</source>
 | 
			
		||||
        <translation>Скопировать &путь к файлу</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="80"/>
 | 
			
		||||
        <source>Properties</source>
 | 
			
		||||
        <translation>Свойства</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="76"/>
 | 
			
		||||
        <source>Stay on top</source>
 | 
			
		||||
        <translation>Поверх всех окон</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="38"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="77"/>
 | 
			
		||||
        <source>Protected mode</source>
 | 
			
		||||
        <translation>Защищенный режим</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="65"/>
 | 
			
		||||
        <source>Zoom in</source>
 | 
			
		||||
        <translation>Увеличить</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="66"/>
 | 
			
		||||
        <source>Zoom out</source>
 | 
			
		||||
        <translation>Уменьшить</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="70"/>
 | 
			
		||||
        <source>Flip &Horizontally</source>
 | 
			
		||||
        <translation>Отразить по &горизонтали</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="75"/>
 | 
			
		||||
        <source>&Paste</source>
 | 
			
		||||
        <translation>&Вставить</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="67"/>
 | 
			
		||||
        <source>Toggle Checkerboard</source>
 | 
			
		||||
        <translation>Переключить фоновый рисунок</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="63"/>
 | 
			
		||||
        <source>Actual size</source>
 | 
			
		||||
        <translation>Фактический размер</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="64"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation>Переключить окно</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="68"/>
 | 
			
		||||
        <source>Rotate right</source>
 | 
			
		||||
        <translation>Повернуть вправо</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="78"/>
 | 
			
		||||
        <source>Configure...</source>
 | 
			
		||||
        <translation>Параметры...</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="79"/>
 | 
			
		||||
        <source>Help</source>
 | 
			
		||||
        <translation>Помощь</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="81"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation>Выход</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <source>Image Metadata</source>
 | 
			
		||||
        <translation>Метаданные изображения</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataModel</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <source>Origin</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Происхождение</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <source>Image</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Изображение</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <source>File</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Файл</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <source>Camera</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Камера</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <source>%1 File</source>
 | 
			
		||||
        <translation>%1 Файл</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Описание</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <source>Advanced photo</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Расширенное фото</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="40"/>
 | 
			
		||||
        <source>GPS</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>GPS</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="44"/>
 | 
			
		||||
        <source>Dimensions</source>
 | 
			
		||||
        <translation>Размеры</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Aspect ratio</source>
 | 
			
		||||
        <translation>Соотношение сторон</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="49"/>
 | 
			
		||||
        <source>Frame count</source>
 | 
			
		||||
        <translation>Количество кадров</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation>Название</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <source>Item type</source>
 | 
			
		||||
        <translation>Тип элемента</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <source>Folder path</source>
 | 
			
		||||
        <translation>Путь к папке</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <source>Size</source>
 | 
			
		||||
        <translation>Размер</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date created</source>
 | 
			
		||||
        <translation>Дата создания</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="63"/>
 | 
			
		||||
        <source>Date modified</source>
 | 
			
		||||
        <translation>Дата изменения</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Title</source>
 | 
			
		||||
        <translation>Заголовок</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="72"/>
 | 
			
		||||
        <source>Subject</source>
 | 
			
		||||
        <translation>Тема</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="74"/>
 | 
			
		||||
        <source>Rating</source>
 | 
			
		||||
        <translation>Рейтинг</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="76"/>
 | 
			
		||||
        <source>Tags</source>
 | 
			
		||||
        <translation>Теги</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="78"/>
 | 
			
		||||
        <source>Comments</source>
 | 
			
		||||
        <translation>Комментарии</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="81"/>
 | 
			
		||||
        <source>Authors</source>
 | 
			
		||||
        <translation>Авторы</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="83"/>
 | 
			
		||||
        <source>Date taken</source>
 | 
			
		||||
        <translation>Дата съемки</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <source>Program name</source>
 | 
			
		||||
        <translation>Название программы</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Copyright</source>
 | 
			
		||||
        <translation>Авторские права</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="94"/>
 | 
			
		||||
        <source>Horizontal resolution</source>
 | 
			
		||||
        <translation>Разрешение по горизонтали</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="96"/>
 | 
			
		||||
        <source>Vertical resolution</source>
 | 
			
		||||
        <translation>Разрешение по вертикали</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="98"/>
 | 
			
		||||
        <source>Resolution unit</source>
 | 
			
		||||
        <translation>Единица разрешения</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="100"/>
 | 
			
		||||
        <source>Colour representation</source>
 | 
			
		||||
        <translation>Цветопередача</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <source>Camera maker</source>
 | 
			
		||||
        <translation>Производитель камеры</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <source>Camera model</source>
 | 
			
		||||
        <translation>Модель камеры</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <source>F-stop</source>
 | 
			
		||||
        <translation>Величина диафрагмы</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <source>Exposure time</source>
 | 
			
		||||
        <translation>Время экспозиции</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="111"/>
 | 
			
		||||
        <source>ISO speed</source>
 | 
			
		||||
        <translation>Чувствительность ISO</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="113"/>
 | 
			
		||||
        <source>Exposure bias</source>
 | 
			
		||||
        <translation>Смещение экспозиции</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="115"/>
 | 
			
		||||
        <source>Focal length</source>
 | 
			
		||||
        <translation>Фокусное расстояние</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="117"/>
 | 
			
		||||
        <source>Max aperture</source>
 | 
			
		||||
        <translation>Максимальная апертура</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="119"/>
 | 
			
		||||
        <source>Metering mode</source>
 | 
			
		||||
        <translation>Режим измерения</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="121"/>
 | 
			
		||||
        <source>Flash mode</source>
 | 
			
		||||
        <translation>Режим вспышки</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="123"/>
 | 
			
		||||
        <source>35mm focal length</source>
 | 
			
		||||
        <translation>Фокусное расстояние 35 мм</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <source>Lens model</source>
 | 
			
		||||
        <translation>Модель объектива</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="128"/>
 | 
			
		||||
        <source>Brightness</source>
 | 
			
		||||
        <translation>Яркость</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="130"/>
 | 
			
		||||
        <source>Exposure program</source>
 | 
			
		||||
        <translation>Программа экспозиции</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="132"/>
 | 
			
		||||
        <source>Saturation</source>
 | 
			
		||||
        <translation>Насыщенность</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="134"/>
 | 
			
		||||
        <source>Sharpness</source>
 | 
			
		||||
        <translation>Четкость</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="136"/>
 | 
			
		||||
        <source>White balance</source>
 | 
			
		||||
        <translation>Баланс белого</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="138"/>
 | 
			
		||||
        <source>Digital zoom</source>
 | 
			
		||||
        <translation>Цифровое увеличение</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="140"/>
 | 
			
		||||
        <source>EXIF version</source>
 | 
			
		||||
        <translation>Версия EXIF</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="143"/>
 | 
			
		||||
        <source>Latitude reference</source>
 | 
			
		||||
        <translation>Ссылка на широту</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="145"/>
 | 
			
		||||
        <source>Latitude</source>
 | 
			
		||||
        <translation>Широта</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="147"/>
 | 
			
		||||
        <source>Longitude reference</source>
 | 
			
		||||
        <translation>Ссылка на долготу</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="149"/>
 | 
			
		||||
        <source>Longitude</source>
 | 
			
		||||
        <translation>Долгота</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="151"/>
 | 
			
		||||
        <source>Altitude reference</source>
 | 
			
		||||
        <translation>Ссылка на высоту</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>Altitude</source>
 | 
			
		||||
        <translation>Высота</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="163"/>
 | 
			
		||||
        <source>%1 x %2</source>
 | 
			
		||||
        <translation>%1 x %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="181"/>
 | 
			
		||||
        <source>%1 : %2</source>
 | 
			
		||||
        <translation>%1 : %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <source>Property</source>
 | 
			
		||||
        <translation>Свойство</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <source>Value</source>
 | 
			
		||||
        <translation>Значение</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SettingsDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="16"/>
 | 
			
		||||
        <source>Settings</source>
 | 
			
		||||
        <translation>Параметры</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <source>Do nothing</source>
 | 
			
		||||
        <translation>Ничего не делать</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <source>Close the window</source>
 | 
			
		||||
        <translation>Закрыть окно</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="23"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation>Переключить окно</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Zoom in and out</source>
 | 
			
		||||
        <translation>Увеличение и уменьшение масштаба</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="28"/>
 | 
			
		||||
        <source>View next or previous item</source>
 | 
			
		||||
        <translation>Следующее или предыдущее изображение</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="41"/>
 | 
			
		||||
        <source>Stay on top when start-up</source>
 | 
			
		||||
        <translation>Поверх всех окон при запуске</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="42"/>
 | 
			
		||||
        <source>Double-click behavior</source>
 | 
			
		||||
        <translation>Действие при двойном щелчке</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="43"/>
 | 
			
		||||
        <source>Mouse wheel behavior</source>
 | 
			
		||||
        <translation>Действие колеса мыши</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>main</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="31"/>
 | 
			
		||||
        <source>Pineapple Pictures</source>
 | 
			
		||||
        <translation>Pineapple Pictures</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="35"/>
 | 
			
		||||
        <source>File list.</source>
 | 
			
		||||
        <translation>Список файлов.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
</TS>
 | 
			
		||||
@ -1,674 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!DOCTYPE TS>
 | 
			
		||||
<TS version="2.1" language="si">
 | 
			
		||||
<context>
 | 
			
		||||
    <name>AboutDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <source>About</source>
 | 
			
		||||
        <translation>පිළිබඳව</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <source>Launch application with image file path as argument to load the file.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Drag and drop image file onto the window is also supported.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>None of the operations in this application will alter the pictures on disk.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="29"/>
 | 
			
		||||
        <source>Context menu option explanation:</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <source>Make window stay on top of all other windows.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="39"/>
 | 
			
		||||
        <source>Avoid close window accidentally. (eg. by double clicking the window)</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="47"/>
 | 
			
		||||
        <source>Version: %1</source>
 | 
			
		||||
        <translation>අනුවාදය: %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <source>Copyright (c) 2020 %1</source>
 | 
			
		||||
        <translation>ප්රකාශන හිමිකම (ඇ) 2020 %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <source>Logo designed by %1</source>
 | 
			
		||||
        <translation>ලාංඡනය %1 විසින් නිර්මාණය කරන ලදි</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="54"/>
 | 
			
		||||
        <source>Built with Qt %1 (%2)</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="55"/>
 | 
			
		||||
        <source>Source code</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <source>Contributors</source>
 | 
			
		||||
        <translation>සහදායකයින්</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="67"/>
 | 
			
		||||
        <source>List of contributors on GitHub</source>
 | 
			
		||||
        <translation>ගිට්හබ් හි සහදායකයින්ගේ ලැයිස්තුව</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="68"/>
 | 
			
		||||
        <source>Thanks to all people who contributed to this project.</source>
 | 
			
		||||
        <translation>මෙම ව්යාපෘතියට දායක වූ සියලු දෙනාටම ස්තූතියි.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="72"/>
 | 
			
		||||
        <source>Translators</source>
 | 
			
		||||
        <translation>පරිවර්තකයින්</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="73"/>
 | 
			
		||||
        <source>I would like to thank the following people who volunteered to translate this application.</source>
 | 
			
		||||
        <translation>මෙම යෙදුම පරිවර්තනය කිරීමට ස්වේච්ඡාවෙන් ඉදිරිපත් වූ පහත සඳහන් පුද්ගලයින්ට මම ස්තූතිවන්ත වෙමි.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="117"/>
 | 
			
		||||
        <source>%1 is built on the following free software libraries:</source>
 | 
			
		||||
        <comment>Free as in freedom</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <source>&Special Thanks</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="143"/>
 | 
			
		||||
        <source>&Third-party Libraries</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <source>Your Rights</source>
 | 
			
		||||
        <translation>ඔබගේ අයිතිවාසිකම්</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <source>%1 is released under the MIT License.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <source>This license grants people a number of freedoms:</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <source>You are free to use %1, for any purpose</source>
 | 
			
		||||
        <translation>ඕනෑම කටයුත්තක් සඳහා %1 භාවිතා කිරීමට ඔබට නිදහස තිබේ</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <source>You are free to distribute %1</source>
 | 
			
		||||
        <translation>%1 බෙදා හැරීමට ඔබට නිදහස තිබේ</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="85"/>
 | 
			
		||||
        <source>You can study how %1 works and change it</source>
 | 
			
		||||
        <translation>%1 ක්රියා කරන ආකාරය අධ්යයනය කර එය වෙනස් කළ හැකිය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <source>You can distribute changed versions of %1</source>
 | 
			
		||||
        <translation>%1 හි වෙනස් කළ අනුවාදයන් ඔබට බෙදා හැරීමට හැකිය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="88"/>
 | 
			
		||||
        <source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="116"/>
 | 
			
		||||
        <source>Third-party Libraries used by %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <source>&Help</source>
 | 
			
		||||
        <translation>උපකාර</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <source>&About</source>
 | 
			
		||||
        <translation>පිළිබඳව</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="142"/>
 | 
			
		||||
        <source>&License</source>
 | 
			
		||||
        <translation>&බලපත්රය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsScene</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsscene.cpp" line="48"/>
 | 
			
		||||
        <source>Drag image here</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsView</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="329"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation type="unfinished">ගොනු ඒ.ස.නි. (url) ලැයිස්තුව හිස් ය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="52"/>
 | 
			
		||||
        <source>File is not a valid image</source>
 | 
			
		||||
        <translation>ගොනුව වලංගු නොවන රූපයකි</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="57"/>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="62"/>
 | 
			
		||||
        <source>Image data is invalid or currently unsupported</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="337"/>
 | 
			
		||||
        <source>Image data is invalid</source>
 | 
			
		||||
        <translation>රූපයේ දත්ත වලංගු නොවේ</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="344"/>
 | 
			
		||||
        <source>Not supported mimedata: %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MainWindow</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="163"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation>ගොනු ඒ.ස.නි. (url) ලැයිස්තුව හිස් ය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="374"/>
 | 
			
		||||
        <source>&Copy</source>
 | 
			
		||||
        <translation>&පිටපත්</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="76"/>
 | 
			
		||||
        <source>Stay on top</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="38"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="77"/>
 | 
			
		||||
        <source>Protected mode</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="65"/>
 | 
			
		||||
        <source>Zoom in</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="66"/>
 | 
			
		||||
        <source>Zoom out</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="70"/>
 | 
			
		||||
        <source>Flip &Horizontally</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="73"/>
 | 
			
		||||
        <source>Copy P&ixmap</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="74"/>
 | 
			
		||||
        <source>Copy &File Path</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="75"/>
 | 
			
		||||
        <source>&Paste</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="67"/>
 | 
			
		||||
        <source>Toggle Checkerboard</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="63"/>
 | 
			
		||||
        <source>Actual size</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="64"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="68"/>
 | 
			
		||||
        <source>Rotate right</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="78"/>
 | 
			
		||||
        <source>Configure...</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="79"/>
 | 
			
		||||
        <source>Help</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="80"/>
 | 
			
		||||
        <source>Properties</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="81"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <source>Image Metadata</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataModel</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <source>Origin</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <source>Image</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>පින්තූරය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <source>File</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>ගොනුව</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <source>Camera</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <source>%1 File</source>
 | 
			
		||||
        <translation>ගොනු %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>විස්තරය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <source>Advanced photo</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="40"/>
 | 
			
		||||
        <source>GPS</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="44"/>
 | 
			
		||||
        <source>Dimensions</source>
 | 
			
		||||
        <translation>මාන</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Aspect ratio</source>
 | 
			
		||||
        <translation>දර්ශන අනුපාතය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="49"/>
 | 
			
		||||
        <source>Frame count</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation>නම</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <source>Item type</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <source>Folder path</source>
 | 
			
		||||
        <translation>ගොනුවේ මාර්ගය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <source>Size</source>
 | 
			
		||||
        <translation>ප්රමාණය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date created</source>
 | 
			
		||||
        <translation>සෑදූ දිනය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="63"/>
 | 
			
		||||
        <source>Date modified</source>
 | 
			
		||||
        <translation>වෙනස් කළ දිනය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Title</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="72"/>
 | 
			
		||||
        <source>Subject</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="74"/>
 | 
			
		||||
        <source>Rating</source>
 | 
			
		||||
        <translation>ශ්රේණිගත කිරීම</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="76"/>
 | 
			
		||||
        <source>Tags</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="78"/>
 | 
			
		||||
        <source>Comments</source>
 | 
			
		||||
        <translation>අදහස්</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="81"/>
 | 
			
		||||
        <source>Authors</source>
 | 
			
		||||
        <translation>කතුවරුන්</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="83"/>
 | 
			
		||||
        <source>Date taken</source>
 | 
			
		||||
        <translation>ගත් දිනය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <source>Program name</source>
 | 
			
		||||
        <translation>වැඩසටහනේ නම</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Copyright</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="94"/>
 | 
			
		||||
        <source>Horizontal resolution</source>
 | 
			
		||||
        <translation>තිරස් විභේදනය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="96"/>
 | 
			
		||||
        <source>Vertical resolution</source>
 | 
			
		||||
        <translation>සිරස් විභේදනය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="98"/>
 | 
			
		||||
        <source>Resolution unit</source>
 | 
			
		||||
        <translation>විභේදන ඒකකය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="100"/>
 | 
			
		||||
        <source>Colour representation</source>
 | 
			
		||||
        <translation>වර්ණ නිරූපණය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <source>Camera maker</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <source>Camera model</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <source>F-stop</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <source>Exposure time</source>
 | 
			
		||||
        <translation>නිරාවරණ කාලය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="111"/>
 | 
			
		||||
        <source>ISO speed</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="113"/>
 | 
			
		||||
        <source>Exposure bias</source>
 | 
			
		||||
        <translation>නිරාවරණ නැඹුරුව</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="115"/>
 | 
			
		||||
        <source>Focal length</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="117"/>
 | 
			
		||||
        <source>Max aperture</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="119"/>
 | 
			
		||||
        <source>Metering mode</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="121"/>
 | 
			
		||||
        <source>Flash mode</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="123"/>
 | 
			
		||||
        <source>35mm focal length</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <source>Lens model</source>
 | 
			
		||||
        <translation>කාච ආකෘතිය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="128"/>
 | 
			
		||||
        <source>Brightness</source>
 | 
			
		||||
        <translation>දීප්තිය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="130"/>
 | 
			
		||||
        <source>Exposure program</source>
 | 
			
		||||
        <translation>නිරාවරණ වැඩසටහන</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="132"/>
 | 
			
		||||
        <source>Saturation</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="134"/>
 | 
			
		||||
        <source>Sharpness</source>
 | 
			
		||||
        <translation>තියුණු බව</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="136"/>
 | 
			
		||||
        <source>White balance</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="138"/>
 | 
			
		||||
        <source>Digital zoom</source>
 | 
			
		||||
        <translation>සංඛ්යාංක විශාලනය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="140"/>
 | 
			
		||||
        <source>EXIF version</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="143"/>
 | 
			
		||||
        <source>Latitude reference</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="145"/>
 | 
			
		||||
        <source>Latitude</source>
 | 
			
		||||
        <translation>අක්ෂාංශ</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="147"/>
 | 
			
		||||
        <source>Longitude reference</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="149"/>
 | 
			
		||||
        <source>Longitude</source>
 | 
			
		||||
        <translation>දේශාංශ</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="151"/>
 | 
			
		||||
        <source>Altitude reference</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>Altitude</source>
 | 
			
		||||
        <translation>උන්නතාංශය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="163"/>
 | 
			
		||||
        <source>%1 x %2</source>
 | 
			
		||||
        <translation>%1 x %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="181"/>
 | 
			
		||||
        <source>%1 : %2</source>
 | 
			
		||||
        <translation>%1 : %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <source>Property</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <source>Value</source>
 | 
			
		||||
        <translation>අගය</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SettingsDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="16"/>
 | 
			
		||||
        <source>Settings</source>
 | 
			
		||||
        <translation>සැකසුම්</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <source>Do nothing</source>
 | 
			
		||||
        <translation>කිසිවක් නොකරන්න</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <source>Close the window</source>
 | 
			
		||||
        <translation>කවුළුව වහන්න</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="23"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Zoom in and out</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="28"/>
 | 
			
		||||
        <source>View next or previous item</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="41"/>
 | 
			
		||||
        <source>Stay on top when start-up</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="42"/>
 | 
			
		||||
        <source>Double-click behavior</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="43"/>
 | 
			
		||||
        <source>Mouse wheel behavior</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>main</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="31"/>
 | 
			
		||||
        <source>Pineapple Pictures</source>
 | 
			
		||||
        <translation>පයින්ඇපල් පික්චර්ස්</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="35"/>
 | 
			
		||||
        <source>File list.</source>
 | 
			
		||||
        <translation>ගොනු ලැයිස්තුව.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
</TS>
 | 
			
		||||
							
								
								
									
										93
									
								
								appveyor.yml
									
									
									
									
									
								
							
							
						
						@ -2,116 +2,107 @@ image:
 | 
			
		||||
  - Visual Studio 2019
 | 
			
		||||
environment:
 | 
			
		||||
  CMAKE_INSTALL_ROOT: C:\projects\cmake
 | 
			
		||||
  LIBZ: C:\projects\zlib
 | 
			
		||||
  ZLIB_ROOT: C:\projects\zlib
 | 
			
		||||
  LIBEXPAT: C:\projects\libexpat
 | 
			
		||||
  LIBAVIF: C:\projects\libavif
 | 
			
		||||
  LIBEXIV2: C:\projects\exiv2
 | 
			
		||||
  matrix:
 | 
			
		||||
    - build_name: mingw81_64_qt5_15_2
 | 
			
		||||
      QTPATH: C:\Qt\5.15.2\mingw81_64
 | 
			
		||||
      MINGW64: C:\Qt\Tools\mingw810_64
 | 
			
		||||
    - build_name: mingw81_32_qt5_15_2
 | 
			
		||||
      QTPATH: C:\Qt\5.15.2\mingw81_32
 | 
			
		||||
      MINGW32: C:\Qt\Tools\mingw810_32
 | 
			
		||||
 | 
			
		||||
install:
 | 
			
		||||
  - mkdir %CMAKE_INSTALL_ROOT%
 | 
			
		||||
  - mkdir %LIBZ%
 | 
			
		||||
  - mkdir %ZLIB_ROOT%
 | 
			
		||||
  - mkdir %LIBEXPAT%
 | 
			
		||||
  - mkdir %LIBAVIF%
 | 
			
		||||
  - mkdir %LIBEXIV2%
 | 
			
		||||
  - cd %APPVEYOR_BUILD_FOLDER%
 | 
			
		||||
  - git submodule update --init --recursive
 | 
			
		||||
  - set PATH=%PATH%;%CMAKE_INSTALL_ROOT%;%QTPATH%\bin;%MINGW64%\bin
 | 
			
		||||
  - set CC=%MINGW64%\bin\gcc.exe
 | 
			
		||||
  - set CXX=%MINGW64%\bin\g++.exe
 | 
			
		||||
  - set PATH=%PATH%;%CMAKE_INSTALL_ROOT%;%QTPATH%\bin;%MINGW32%\bin
 | 
			
		||||
  - set CC=%MINGW32%\bin\gcc.exe
 | 
			
		||||
  - set CXX=%MINGW32%\bin\g++.exe
 | 
			
		||||
 | 
			
		||||
build_script:
 | 
			
		||||
# prepare
 | 
			
		||||
  - mkdir 3rdparty
 | 
			
		||||
  - cinst ninja
 | 
			
		||||
# download and install zlib for KArchive
 | 
			
		||||
  - cd %LIBZ%
 | 
			
		||||
  - curl -fsSL -o zlib1211.zip https://zlib.net/zlib1211.zip
 | 
			
		||||
  - 7z x zlib1211.zip -y
 | 
			
		||||
  - cd zlib-1.2.11
 | 
			
		||||
  - mkdir build
 | 
			
		||||
  - cd build
 | 
			
		||||
  - cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_ROOT%
 | 
			
		||||
  - cmake --build . --config Release
 | 
			
		||||
  - cmake --build . --config Release --target install/strip
 | 
			
		||||
  - cd %APPVEYOR_BUILD_FOLDER%
 | 
			
		||||
# install ECM so we can build KImageFormats
 | 
			
		||||
  - cd 3rdparty
 | 
			
		||||
  - git clone -q https://invent.kde.org/frameworks/extra-cmake-modules.git
 | 
			
		||||
  - git rev-parse HEAD
 | 
			
		||||
  - cd extra-cmake-modules
 | 
			
		||||
  - cmake -G "Ninja" . -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_ROOT% -DBUILD_TESTING=OFF
 | 
			
		||||
  - cmake --build .
 | 
			
		||||
  - cmake --build . --target install
 | 
			
		||||
  - cd %APPVEYOR_BUILD_FOLDER%
 | 
			
		||||
# download and install zlib for KArchive
 | 
			
		||||
  - cd %ZLIB_ROOT%
 | 
			
		||||
  - curl -fsSL -o zlib128-dll.zip http://zlib.net/zlib128-dll.zip
 | 
			
		||||
  - 7z x zlib128-dll.zip
 | 
			
		||||
  - cd %APPVEYOR_BUILD_FOLDER%
 | 
			
		||||
# install AOM for libavif AV1 decoding support...
 | 
			
		||||
  - cd 3rdparty
 | 
			
		||||
  - git clone -b v3.1.2 --depth 1 https://aomedia.googlesource.com/aom
 | 
			
		||||
  - git clone -b v2.0.1 --depth 1 https://aomedia.googlesource.com/aom
 | 
			
		||||
  - cd aom
 | 
			
		||||
  - mkdir build.libavif
 | 
			
		||||
  - cd build.libavif
 | 
			
		||||
  - cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_ROOT% -DENABLE_DOCS=OFF -DBUILD_SHARED_LIBS=ON -DAOM_TARGET_CPU=generic -DENABLE_TESTS=OFF -DENABLE_TESTDATA=OFF -DENABLE_TOOLS=OFF -DENABLE_EXAMPLES=0
 | 
			
		||||
  - cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_ROOT% -DCMAKE_CXX_FLAGS_RELEASE="-s" -DENABLE_DOCS=OFF -DBUILD_SHARED_LIBS=ON -DAOM_TARGET_CPU=generic -DENABLE_TESTS=OFF -DENABLE_TESTDATA=OFF -DENABLE_TOOLS=OFF -DENABLE_EXAMPLES=0
 | 
			
		||||
  - cmake --build . --config Release
 | 
			
		||||
  - cmake --build . --config Release --target install/strip
 | 
			
		||||
  - cmake --build . --config Release --target install
 | 
			
		||||
  - cd %APPVEYOR_BUILD_FOLDER%
 | 
			
		||||
# install libavif for avif format support of KImageFormats
 | 
			
		||||
  - cd %LIBAVIF%
 | 
			
		||||
  - curl -fsSL -o libavif-v0_9_0.zip https://github.com/AOMediaCodec/libavif/archive/v0.9.0.zip
 | 
			
		||||
  - 7z x libavif-v0_9_0.zip -y
 | 
			
		||||
  - cd libavif-0.9.0
 | 
			
		||||
  - curl -fsSL -o libavif-v0_8_4.zip https://github.com/AOMediaCodec/libavif/archive/v0.8.4.zip
 | 
			
		||||
  - 7z x libavif-v0_8_4.zip -y
 | 
			
		||||
  - cd libavif-0.8.4
 | 
			
		||||
  - mkdir build
 | 
			
		||||
  - cd build
 | 
			
		||||
  - cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_ROOT% -DAVIF_CODEC_AOM=ON
 | 
			
		||||
  - cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_ROOT% -DCMAKE_CXX_FLAGS_RELEASE="-s" -DAVIF_CODEC_AOM=ON
 | 
			
		||||
  - cmake --build . --config Release
 | 
			
		||||
  - cmake --build . --config Release --target install/strip
 | 
			
		||||
  - cmake --build . --config Release --target install
 | 
			
		||||
  - cd %APPVEYOR_BUILD_FOLDER%
 | 
			
		||||
# install KArchive for kra format support of KImageFormats
 | 
			
		||||
  - cd 3rdparty
 | 
			
		||||
  - git clone -q https://invent.kde.org/frameworks/karchive.git
 | 
			
		||||
  - git rev-parse HEAD
 | 
			
		||||
  - cd karchive
 | 
			
		||||
  - mkdir build
 | 
			
		||||
  - cd build
 | 
			
		||||
  - cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_ROOT%
 | 
			
		||||
  - cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_ROOT% -DCMAKE_CXX_FLAGS_RELEASE="-s" -DZLIB_ROOT=%ZLIB_ROOT% 
 | 
			
		||||
  - cmake --build . --config Release
 | 
			
		||||
  - cmake --build . --config Release --target install/strip
 | 
			
		||||
  - cmake --build . --config Release --target install
 | 
			
		||||
  - cd %APPVEYOR_BUILD_FOLDER%
 | 
			
		||||
# build libexpat for libexiv2
 | 
			
		||||
  - cd %LIBEXPAT%
 | 
			
		||||
  - curl -fsSL -o R_2_4_1.zip https://github.com/libexpat/libexpat/archive/R_2_4_1.zip
 | 
			
		||||
  - 7z x R_2_4_1.zip -y
 | 
			
		||||
  - cd libexpat-R_2_4_1/expat/
 | 
			
		||||
  - cmake -G "Ninja" . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_ROOT% -DEXPAT_BUILD_EXAMPLES=OFF -DEXPAT_BUILD_TESTS=OFF -DEXPAT_BUILD_TOOLS=OFF
 | 
			
		||||
  - cmake --build . --target install/strip
 | 
			
		||||
  - curl -fsSL -o R_2_2_10.zip https://github.com/libexpat/libexpat/archive/R_2_2_10.zip
 | 
			
		||||
  - 7z x R_2_2_10.zip -y
 | 
			
		||||
  - cd libexpat-R_2_2_10/expat/
 | 
			
		||||
  - cmake -G "Ninja" . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_ROOT% -DCMAKE_CXX_FLAGS_RELEASE="-s" -DEXPAT_BUILD_EXAMPLES=OFF -DEXPAT_BUILD_TESTS=OFF -DEXPAT_BUILD_TOOLS=OFF
 | 
			
		||||
  - cmake --build . --target install
 | 
			
		||||
  - cd %APPVEYOR_BUILD_FOLDER%
 | 
			
		||||
# build libexiv2
 | 
			
		||||
  - cd %LIBEXIV2%
 | 
			
		||||
  - curl -fsSL -o v0.27.4.zip https://github.com/Exiv2/exiv2/archive/v0.27.4.zip
 | 
			
		||||
  - 7z x v0.27.4.zip -y
 | 
			
		||||
  - cd exiv2-0.27.4
 | 
			
		||||
  - cmake -G "Ninja" . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_ROOT% -DEXIV2_BUILD_SAMPLES=OFF -DEXIV2_ENABLE_WIN_UNICODE=ON
 | 
			
		||||
  - cmake --build . --target install/strip
 | 
			
		||||
  - curl -fsSL -o v0.27.3.zip https://github.com/Exiv2/exiv2/archive/v0.27.3.zip
 | 
			
		||||
  - 7z x v0.27.3.zip -y
 | 
			
		||||
  - cd exiv2-0.27.3
 | 
			
		||||
  - cmake -G "Ninja" . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_ROOT% -DEXIV2_BUILD_SAMPLES=OFF -DEXIV2_ENABLE_WIN_UNICODE=ON -DCMAKE_CXX_FLAGS_RELEASE="-s" -DZLIB_ROOT=%ZLIB_ROOT%
 | 
			
		||||
  - cmake --build . --target install
 | 
			
		||||
  - cd %APPVEYOR_BUILD_FOLDER%
 | 
			
		||||
# install KImageFormats
 | 
			
		||||
  - cd 3rdparty
 | 
			
		||||
  - git clone -q https://invent.kde.org/frameworks/kimageformats.git
 | 
			
		||||
  - git rev-parse HEAD
 | 
			
		||||
  - cd kimageformats
 | 
			
		||||
  - mkdir build
 | 
			
		||||
  - cd build
 | 
			
		||||
  - cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DKDE_INSTALL_QTPLUGINDIR=%QTPATH%\plugins
 | 
			
		||||
  - cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS_RELEASE="-s" -DQT_PLUGIN_INSTALL_DIR=%QTPATH%\plugins
 | 
			
		||||
  - cmake --build . --config Release
 | 
			
		||||
  - cmake --build . --config Release --target install/strip
 | 
			
		||||
  - cmake --build . --config Release --target install
 | 
			
		||||
  - cd %APPVEYOR_BUILD_FOLDER%
 | 
			
		||||
# finally...
 | 
			
		||||
  - mkdir build
 | 
			
		||||
  - cd build
 | 
			
		||||
  - cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MAKE_PROGRAM=mingw32-make -DCMAKE_INSTALL_PREFIX='%cd%'
 | 
			
		||||
  - cmake --build . --config Release
 | 
			
		||||
  - cmake --build . --config Release --target install/strip
 | 
			
		||||
  - cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS_RELEASE="-s" -DCMAKE_MAKE_PROGRAM=mingw32-make -DCMAKE_INSTALL_PREFIX='%cd%'
 | 
			
		||||
  - mingw32-make
 | 
			
		||||
  - mingw32-make install
 | 
			
		||||
# fixme: I don't know how to NOT make the binary installed to the ./bin/ folder...
 | 
			
		||||
  - cd bin
 | 
			
		||||
  - copy %APPVEYOR_BUILD_FOLDER%\LICENSE .
 | 
			
		||||
@ -119,7 +110,7 @@ build_script:
 | 
			
		||||
  - copy %CMAKE_INSTALL_ROOT%\bin\libexpat.dll
 | 
			
		||||
  - copy %CMAKE_INSTALL_ROOT%\bin\libexiv2.dll
 | 
			
		||||
  - copy %CMAKE_INSTALL_ROOT%\bin\libavif.dll
 | 
			
		||||
  - copy %CMAKE_INSTALL_ROOT%\bin\libzlib.dll
 | 
			
		||||
  - copy %ZLIB_ROOT%\zlib1.dll .
 | 
			
		||||
  - copy C:\projects\cmake\bin\libKF5Archive.dll .
 | 
			
		||||
  - windeployqt --verbose=2 --no-quick-import --no-translations --no-opengl-sw --no-angle --no-system-d3d-compiler .\ppic.exe
 | 
			
		||||
# copy 3rdparty licenses for the libs we vendored for windows...
 | 
			
		||||
@ -128,9 +119,9 @@ build_script:
 | 
			
		||||
  - copy %APPVEYOR_BUILD_FOLDER%\3rdparty\aom\LICENSE License.aom.txt
 | 
			
		||||
  - copy %APPVEYOR_BUILD_FOLDER%\3rdparty\karchive\LICENSES\LGPL-2.0-or-later.txt License.KArchive.txt
 | 
			
		||||
  - copy %APPVEYOR_BUILD_FOLDER%\3rdparty\kimageformats\LICENSES\LGPL-2.1-or-later.txt License.kimageformats.txt
 | 
			
		||||
  - copy %LIBEXPAT%\libexpat-R_2_4_1\expat\COPYING License.expat.txt
 | 
			
		||||
  - copy %LIBAVIF%\libavif-0.9.0\LICENSE License.libavif.txt
 | 
			
		||||
  - copy %LIBEXIV2%\exiv2-0.27.4\COPYING License.exiv2.txt
 | 
			
		||||
  - copy %LIBEXPAT%\libexpat-R_2_2_10\expat\COPYING License.expat.txt
 | 
			
		||||
  - copy %LIBAVIF%\libavif-0.8.4\LICENSE License.libavif.txt
 | 
			
		||||
  - copy %LIBEXIV2%\exiv2-0.27.3\COPYING License.exiv2.txt
 | 
			
		||||
# TODO: Qt, zlib
 | 
			
		||||
  - cd ..
 | 
			
		||||
# for debug..
 | 
			
		||||
 | 
			
		||||
@ -1,15 +1,79 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg width="100%" height="100%" viewBox="0 0 75 75" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;">
 | 
			
		||||
    <g transform="matrix(1,0,0,1,-119,-102)">
 | 
			
		||||
        <g id="go-next" transform="matrix(1.25,0,0,1.44231,119,-7.61538)">
 | 
			
		||||
            <rect x="0" y="76" width="60" height="52" style="fill:none;"/>
 | 
			
		||||
            <g transform="matrix(0.8,0,0,0.693333,0.260244,25.056)">
 | 
			
		||||
                <circle cx="37.175" cy="110.977" r="33.175" style="fill-opacity:0.15;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g id="path867" transform="matrix(0.8,0,0,0.693333,1.80436,76.0055)">
 | 
			
		||||
                <path d="M31.578,26.175L42.911,37.508L31.578,48.809" style="fill:none;fill-rule:nonzero;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
        </g>
 | 
			
		||||
    </g>
 | 
			
		||||
<svg
 | 
			
		||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
			
		||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
			
		||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
			
		||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
			
		||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
			
		||||
   width="75"
 | 
			
		||||
   height="75"
 | 
			
		||||
   viewBox="0 0 19.84375 19.843751"
 | 
			
		||||
   version="1.1"
 | 
			
		||||
   id="svg8"
 | 
			
		||||
   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
 | 
			
		||||
   sodipodi:docname="go-next.svg">
 | 
			
		||||
  <defs
 | 
			
		||||
     id="defs2" />
 | 
			
		||||
  <sodipodi:namedview
 | 
			
		||||
     id="base"
 | 
			
		||||
     pagecolor="#282929"
 | 
			
		||||
     bordercolor="#666666"
 | 
			
		||||
     borderopacity="1.0"
 | 
			
		||||
     inkscape:pageopacity="0.76862745"
 | 
			
		||||
     inkscape:pageshadow="2"
 | 
			
		||||
     inkscape:zoom="16.000001"
 | 
			
		||||
     inkscape:cx="35.333099"
 | 
			
		||||
     inkscape:cy="37.582065"
 | 
			
		||||
     inkscape:document-units="px"
 | 
			
		||||
     inkscape:current-layer="layer1"
 | 
			
		||||
     inkscape:document-rotation="0"
 | 
			
		||||
     showgrid="false"
 | 
			
		||||
     units="px"
 | 
			
		||||
     inkscape:pagecheckerboard="false"
 | 
			
		||||
     showguides="true"
 | 
			
		||||
     inkscape:guide-bbox="true"
 | 
			
		||||
     inkscape:window-width="1920"
 | 
			
		||||
     inkscape:window-height="1001"
 | 
			
		||||
     inkscape:window-x="-9"
 | 
			
		||||
     inkscape:window-y="-9"
 | 
			
		||||
     inkscape:window-maximized="1">
 | 
			
		||||
    <sodipodi:guide
 | 
			
		||||
       position="11.453565,9.9198082"
 | 
			
		||||
       orientation="0,-1"
 | 
			
		||||
       id="guide857" />
 | 
			
		||||
    <sodipodi:guide
 | 
			
		||||
       position="9.9229088,19.564698"
 | 
			
		||||
       orientation="1,0"
 | 
			
		||||
       id="guide837" />
 | 
			
		||||
  </sodipodi:namedview>
 | 
			
		||||
  <metadata
 | 
			
		||||
     id="metadata5">
 | 
			
		||||
    <rdf:RDF>
 | 
			
		||||
      <cc:Work
 | 
			
		||||
         rdf:about="">
 | 
			
		||||
        <dc:format>image/svg+xml</dc:format>
 | 
			
		||||
        <dc:type
 | 
			
		||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
			
		||||
        <dc:title />
 | 
			
		||||
      </cc:Work>
 | 
			
		||||
    </rdf:RDF>
 | 
			
		||||
  </metadata>
 | 
			
		||||
  <g
 | 
			
		||||
     inkscape:label="图层 1"
 | 
			
		||||
     inkscape:groupmode="layer"
 | 
			
		||||
     id="layer1">
 | 
			
		||||
    <ellipse
 | 
			
		||||
       style="opacity:1;fill:#000000;fill-opacity:0.15678;stroke:#ffffff;stroke-width:0.396875;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 | 
			
		||||
       id="path849"
 | 
			
		||||
       cx="9.9368067"
 | 
			
		||||
       cy="9.915391"
 | 
			
		||||
       rx="8.6764698"
 | 
			
		||||
       ry="8.9158831" />
 | 
			
		||||
    <path
 | 
			
		||||
       style="fill:none;stroke:#ffffff;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 | 
			
		||||
       d="M 8.3550725,6.9255115 11.353504,9.9239423 8.3550725,12.91402"
 | 
			
		||||
       id="path867" />
 | 
			
		||||
  </g>
 | 
			
		||||
</svg>
 | 
			
		||||
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 2.4 KiB  | 
@ -1,15 +1,79 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg width="100%" height="100%" viewBox="0 0 75 75" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;">
 | 
			
		||||
    <g transform="matrix(1,0,0,1,-39,-102)">
 | 
			
		||||
        <g id="go-previous" transform="matrix(1.25,0,0,1.44231,39,-7.61538)">
 | 
			
		||||
            <rect x="0" y="76" width="60" height="52" style="fill:none;"/>
 | 
			
		||||
            <g transform="matrix(0.8,0,0,0.693333,0.260244,25.056)">
 | 
			
		||||
                <circle cx="37.175" cy="110.977" r="33.175" style="fill-opacity:0.15;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g id="path867" transform="matrix(0.8,0,0,0.693333,-1.8205,76.0055)">
 | 
			
		||||
                <path d="M43.442,26.175L32.109,37.508L43.442,48.809" style="fill:none;fill-rule:nonzero;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
        </g>
 | 
			
		||||
    </g>
 | 
			
		||||
<svg
 | 
			
		||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
			
		||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
			
		||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
			
		||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
			
		||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
			
		||||
   sodipodi:docname="go-previous.svg"
 | 
			
		||||
   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
 | 
			
		||||
   id="svg8"
 | 
			
		||||
   version="1.1"
 | 
			
		||||
   viewBox="0 0 19.84375 19.843751"
 | 
			
		||||
   height="75"
 | 
			
		||||
   width="75">
 | 
			
		||||
  <defs
 | 
			
		||||
     id="defs2" />
 | 
			
		||||
  <sodipodi:namedview
 | 
			
		||||
     inkscape:window-maximized="1"
 | 
			
		||||
     inkscape:window-y="-9"
 | 
			
		||||
     inkscape:window-x="-9"
 | 
			
		||||
     inkscape:window-height="1001"
 | 
			
		||||
     inkscape:window-width="1920"
 | 
			
		||||
     inkscape:guide-bbox="true"
 | 
			
		||||
     showguides="true"
 | 
			
		||||
     inkscape:pagecheckerboard="false"
 | 
			
		||||
     units="px"
 | 
			
		||||
     showgrid="false"
 | 
			
		||||
     inkscape:document-rotation="0"
 | 
			
		||||
     inkscape:current-layer="layer1"
 | 
			
		||||
     inkscape:document-units="px"
 | 
			
		||||
     inkscape:cy="45.995918"
 | 
			
		||||
     inkscape:cx="29.794477"
 | 
			
		||||
     inkscape:zoom="11.313709"
 | 
			
		||||
     inkscape:pageshadow="2"
 | 
			
		||||
     inkscape:pageopacity="0.76862745"
 | 
			
		||||
     borderopacity="1.0"
 | 
			
		||||
     bordercolor="#666666"
 | 
			
		||||
     pagecolor="#282929"
 | 
			
		||||
     id="base">
 | 
			
		||||
    <sodipodi:guide
 | 
			
		||||
       id="guide857"
 | 
			
		||||
       orientation="0,-1"
 | 
			
		||||
       position="11.453565,9.9198082" />
 | 
			
		||||
    <sodipodi:guide
 | 
			
		||||
       id="guide837"
 | 
			
		||||
       orientation="1,0"
 | 
			
		||||
       position="9.9229088,19.564698" />
 | 
			
		||||
  </sodipodi:namedview>
 | 
			
		||||
  <metadata
 | 
			
		||||
     id="metadata5">
 | 
			
		||||
    <rdf:RDF>
 | 
			
		||||
      <cc:Work
 | 
			
		||||
         rdf:about="">
 | 
			
		||||
        <dc:format>image/svg+xml</dc:format>
 | 
			
		||||
        <dc:type
 | 
			
		||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
			
		||||
        <dc:title></dc:title>
 | 
			
		||||
      </cc:Work>
 | 
			
		||||
    </rdf:RDF>
 | 
			
		||||
  </metadata>
 | 
			
		||||
  <g
 | 
			
		||||
     id="layer1"
 | 
			
		||||
     inkscape:groupmode="layer"
 | 
			
		||||
     inkscape:label="图层 1">
 | 
			
		||||
    <ellipse
 | 
			
		||||
       ry="8.9158831"
 | 
			
		||||
       rx="8.6764698"
 | 
			
		||||
       cy="9.915391"
 | 
			
		||||
       cx="9.9368067"
 | 
			
		||||
       id="path849"
 | 
			
		||||
       style="opacity:1;fill:#000000;fill-opacity:0.15678;stroke:#ffffff;stroke-width:0.396875;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
 | 
			
		||||
    <path
 | 
			
		||||
       id="path867"
 | 
			
		||||
       d="M 11.494016,6.9255115 8.4955849,9.9239423 11.494016,12.91402"
 | 
			
		||||
       style="fill:none;stroke:#ffffff;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
 | 
			
		||||
  </g>
 | 
			
		||||
</svg>
 | 
			
		||||
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 2.4 KiB  | 
@ -1,17 +1,70 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
 | 
			
		||||
    <g transform="matrix(1,0,0,1,-74,-7.10543e-15)">
 | 
			
		||||
        <g id="object-rotate-right" transform="matrix(1,0,0,1,74,7.10543e-15)">
 | 
			
		||||
            <rect x="0" y="0" width="32" height="32" style="fill:none;"/>
 | 
			
		||||
            <g transform="matrix(1,0,0,1,-1,-0.275147)">
 | 
			
		||||
                <g transform="matrix(1,0,0,1,-74,-7.10543e-15)">
 | 
			
		||||
                    <path d="M100,18C100,22.967 95.967,27 91,27C86.033,27 82,22.967 82,18C82,13.033 86.033,9 91,9" style="fill:none;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
                </g>
 | 
			
		||||
                <g transform="matrix(0.984136,-0.177418,0.177418,0.984136,-74.2676,16.4198)">
 | 
			
		||||
                    <path d="M89,13L93,9L89,5" style="fill:none;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
                </g>
 | 
			
		||||
            </g>
 | 
			
		||||
        </g>
 | 
			
		||||
    </g>
 | 
			
		||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
			
		||||
 | 
			
		||||
<svg
 | 
			
		||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
			
		||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
			
		||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
			
		||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
			
		||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
			
		||||
   width="32"
 | 
			
		||||
   height="32"
 | 
			
		||||
   viewBox="0 0 8.4666665 8.4666669"
 | 
			
		||||
   version="1.1"
 | 
			
		||||
   id="svg8"
 | 
			
		||||
   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
 | 
			
		||||
   sodipodi:docname="object-rorate-right.svg">
 | 
			
		||||
  <defs
 | 
			
		||||
     id="defs2" />
 | 
			
		||||
  <sodipodi:namedview
 | 
			
		||||
     id="base"
 | 
			
		||||
     pagecolor="#000000"
 | 
			
		||||
     bordercolor="#666666"
 | 
			
		||||
     borderopacity="1.0"
 | 
			
		||||
     inkscape:pageopacity="0.69803922"
 | 
			
		||||
     inkscape:pageshadow="2"
 | 
			
		||||
     inkscape:zoom="22.4"
 | 
			
		||||
     inkscape:cx="13.471207"
 | 
			
		||||
     inkscape:cy="14.931415"
 | 
			
		||||
     inkscape:document-units="px"
 | 
			
		||||
     inkscape:current-layer="layer1"
 | 
			
		||||
     showgrid="false"
 | 
			
		||||
     units="px"
 | 
			
		||||
     inkscape:pagecheckerboard="true"
 | 
			
		||||
     inkscape:window-width="1920"
 | 
			
		||||
     inkscape:window-height="1001"
 | 
			
		||||
     inkscape:window-x="-9"
 | 
			
		||||
     inkscape:window-y="-9"
 | 
			
		||||
     inkscape:window-maximized="1" />
 | 
			
		||||
  <metadata
 | 
			
		||||
     id="metadata5">
 | 
			
		||||
    <rdf:RDF>
 | 
			
		||||
      <cc:Work
 | 
			
		||||
         rdf:about="">
 | 
			
		||||
        <dc:format>image/svg+xml</dc:format>
 | 
			
		||||
        <dc:type
 | 
			
		||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
			
		||||
        <dc:title></dc:title>
 | 
			
		||||
      </cc:Work>
 | 
			
		||||
    </rdf:RDF>
 | 
			
		||||
  </metadata>
 | 
			
		||||
  <g
 | 
			
		||||
     inkscape:label="Layer 1"
 | 
			
		||||
     inkscape:groupmode="layer"
 | 
			
		||||
     id="layer1"
 | 
			
		||||
     transform="translate(0,-288.5333)">
 | 
			
		||||
    <path
 | 
			
		||||
       style="fill:none;stroke:#ffffff;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 | 
			
		||||
       d="m 6.2474252,294.57784 c -1.6704347,1.43657 -3.1237125,0.51783 -3.1237125,0.51783 -0.650925,-0.38244 -0.9769945,-1.03846 -1.0690781,-1.42823 -0.032148,-0.5952 -0.1092884,-1.34357 0.3591432,-1.95439 0.5186761,-0.51984 0.9614825,-0.84964 1.4783346,-0.9271 l 1.302939,-0.0167"
 | 
			
		||||
       id="path21"
 | 
			
		||||
       inkscape:connector-curvature="0"
 | 
			
		||||
       sodipodi:nodetypes="cccccc" />
 | 
			
		||||
    <path
 | 
			
		||||
       style="fill:none;stroke:#ffffff;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 | 
			
		||||
       d="m 4.5352297,289.82545 c 0.6598217,0.9438 0.6598217,0.9438 0.6598217,0.9438 l -0.626413,0.94379 -0.033409,0.0334"
 | 
			
		||||
       id="path25"
 | 
			
		||||
       inkscape:connector-curvature="0" />
 | 
			
		||||
  </g>
 | 
			
		||||
</svg>
 | 
			
		||||
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 2.5 KiB  | 
@ -1,24 +1,87 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
 | 
			
		||||
    <g transform="matrix(1,0,0,1,0,-37)">
 | 
			
		||||
        <g id="view-background-checkerboard" transform="matrix(1,0,0,1,0,37)">
 | 
			
		||||
            <rect x="0" y="0" width="32" height="32" style="fill:none;"/>
 | 
			
		||||
            <g id="rect814" transform="matrix(0.964431,0,0,0.907545,0.187581,-988.266)">
 | 
			
		||||
                <rect x="6.027" y="1095.56" width="10.369" height="11.019" style="fill:white;fill-opacity:0.87;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g id="rect814-4" transform="matrix(0.984615,0,0,0.898704,-0.143354,-978.502)">
 | 
			
		||||
                <rect x="16.396" y="1106.6" width="10.156" height="11.127" style="fill:white;fill-opacity:0.87;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g id="rect814-2" transform="matrix(0.963684,0,0,0.898697,0.199828,-978.495)">
 | 
			
		||||
                <rect x="6.019" y="1106.6" width="10.377" height="11.127" style="fill:white;fill-opacity:0.07;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g id="rect814-2-6" transform="matrix(0.980558,0,0,0.898693,-0.0768322,-978.47)">
 | 
			
		||||
                <rect x="16.396" y="1095.45" width="10.198" height="11.127" style="fill:white;fill-opacity:0.07;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g transform="matrix(1,0,0,0.952381,-74,-34)">
 | 
			
		||||
                <rect x="80" y="42" width="20" height="21" style="fill:none;stroke:white;stroke-width:2.05px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
        </g>
 | 
			
		||||
    </g>
 | 
			
		||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
			
		||||
 | 
			
		||||
<svg
 | 
			
		||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
			
		||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
			
		||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
			
		||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
			
		||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
			
		||||
   width="32"
 | 
			
		||||
   height="32"
 | 
			
		||||
   viewBox="0 0 8.4666665 8.4666669"
 | 
			
		||||
   version="1.1"
 | 
			
		||||
   id="svg8"
 | 
			
		||||
   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
 | 
			
		||||
   sodipodi:docname="view-background-checkerboard.svg">
 | 
			
		||||
  <defs
 | 
			
		||||
     id="defs2" />
 | 
			
		||||
  <sodipodi:namedview
 | 
			
		||||
     id="base"
 | 
			
		||||
     pagecolor="#000000"
 | 
			
		||||
     bordercolor="#666666"
 | 
			
		||||
     borderopacity="1.0"
 | 
			
		||||
     inkscape:pageopacity="0.69803922"
 | 
			
		||||
     inkscape:pageshadow="2"
 | 
			
		||||
     inkscape:zoom="44.8"
 | 
			
		||||
     inkscape:cx="14.891202"
 | 
			
		||||
     inkscape:cy="11.596232"
 | 
			
		||||
     inkscape:document-units="px"
 | 
			
		||||
     inkscape:current-layer="layer1"
 | 
			
		||||
     showgrid="false"
 | 
			
		||||
     units="px"
 | 
			
		||||
     inkscape:pagecheckerboard="true"
 | 
			
		||||
     inkscape:window-width="1920"
 | 
			
		||||
     inkscape:window-height="1001"
 | 
			
		||||
     inkscape:window-x="-9"
 | 
			
		||||
     inkscape:window-y="-9"
 | 
			
		||||
     inkscape:window-maximized="1" />
 | 
			
		||||
  <metadata
 | 
			
		||||
     id="metadata5">
 | 
			
		||||
    <rdf:RDF>
 | 
			
		||||
      <cc:Work
 | 
			
		||||
         rdf:about="">
 | 
			
		||||
        <dc:format>image/svg+xml</dc:format>
 | 
			
		||||
        <dc:type
 | 
			
		||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
			
		||||
        <dc:title />
 | 
			
		||||
      </cc:Work>
 | 
			
		||||
    </rdf:RDF>
 | 
			
		||||
  </metadata>
 | 
			
		||||
  <g
 | 
			
		||||
     inkscape:label="Layer 1"
 | 
			
		||||
     inkscape:groupmode="layer"
 | 
			
		||||
     id="layer1"
 | 
			
		||||
     transform="translate(0,-288.5333)">
 | 
			
		||||
    <rect
 | 
			
		||||
       style="fill:#ffffff;fill-opacity:0.87058824;stroke:none;stroke-width:0.37041664;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 | 
			
		||||
       id="rect814"
 | 
			
		||||
       width="2.7434142"
 | 
			
		||||
       height="2.9153748"
 | 
			
		||||
       x="1.5945871"
 | 
			
		||||
       y="289.86566" />
 | 
			
		||||
    <rect
 | 
			
		||||
       style="fill:#ffffff;fill-opacity:0.87058824;stroke:none;stroke-width:0.37041664;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 | 
			
		||||
       id="rect814-4"
 | 
			
		||||
       width="2.6871748"
 | 
			
		||||
       height="2.9440556"
 | 
			
		||||
       x="4.3380013"
 | 
			
		||||
       y="292.78696" />
 | 
			
		||||
    <rect
 | 
			
		||||
       style="fill:#ffffff;fill-opacity:0.07843137;stroke:#ffffff;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 | 
			
		||||
       id="rect814-2"
 | 
			
		||||
       width="2.7455406"
 | 
			
		||||
       height="2.9440758"
 | 
			
		||||
       x="1.5924606"
 | 
			
		||||
       y="292.78696" />
 | 
			
		||||
    <rect
 | 
			
		||||
       style="fill:#ffffff;fill-opacity:0.07843137;stroke:#ffffff;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 | 
			
		||||
       id="rect814-2-6"
 | 
			
		||||
       width="2.6982937"
 | 
			
		||||
       height="2.9440918"
 | 
			
		||||
       x="4.3380013"
 | 
			
		||||
       y="289.83694" />
 | 
			
		||||
  </g>
 | 
			
		||||
</svg>
 | 
			
		||||
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 2.7 KiB  | 
@ -1,24 +1,86 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
 | 
			
		||||
    <g transform="matrix(1,0,0,1,-37,-37)">
 | 
			
		||||
        <g id="view-fullscreen" transform="matrix(1,0,0,1,37,37)">
 | 
			
		||||
            <rect x="0" y="0" width="32" height="32" style="fill:none;"/>
 | 
			
		||||
            <g transform="matrix(1,0,0,1,-36,-37)">
 | 
			
		||||
                <path d="M42,49L42,43L48,43" style="fill:none;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g transform="matrix(-1,1.22465e-16,1.22465e-16,1,68,-37)">
 | 
			
		||||
                <path d="M42,49L42,43L48,43" style="fill:none;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g transform="matrix(1,-2.46519e-32,-2.46519e-32,-1,-36,69)">
 | 
			
		||||
                <path d="M42,49L42,43L48,43" style="fill:none;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g transform="matrix(1.11111,0,0,1.14286,-42.3333,-42.8571)">
 | 
			
		||||
                <rect x="48" y="48" width="9" height="7" style="fill:none;stroke:white;stroke-width:1.77px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g transform="matrix(-1,-1.22465e-16,1.22465e-16,-1,68,69)">
 | 
			
		||||
                <path d="M42,49L42,43L48,43" style="fill:none;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
        </g>
 | 
			
		||||
    </g>
 | 
			
		||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
			
		||||
 | 
			
		||||
<svg
 | 
			
		||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
			
		||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
			
		||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
			
		||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
			
		||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
			
		||||
   width="32"
 | 
			
		||||
   height="32"
 | 
			
		||||
   viewBox="0 0 8.4666665 8.4666669"
 | 
			
		||||
   version="1.1"
 | 
			
		||||
   id="svg8"
 | 
			
		||||
   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
 | 
			
		||||
   sodipodi:docname="view-fullscreen-a.svg">
 | 
			
		||||
  <defs
 | 
			
		||||
     id="defs2" />
 | 
			
		||||
  <sodipodi:namedview
 | 
			
		||||
     id="base"
 | 
			
		||||
     pagecolor="#000000"
 | 
			
		||||
     bordercolor="#666666"
 | 
			
		||||
     borderopacity="1.0"
 | 
			
		||||
     inkscape:pageopacity="0.69803922"
 | 
			
		||||
     inkscape:pageshadow="2"
 | 
			
		||||
     inkscape:zoom="22.4"
 | 
			
		||||
     inkscape:cx="6.127457"
 | 
			
		||||
     inkscape:cy="14.931415"
 | 
			
		||||
     inkscape:document-units="px"
 | 
			
		||||
     inkscape:current-layer="layer1"
 | 
			
		||||
     showgrid="false"
 | 
			
		||||
     units="px"
 | 
			
		||||
     inkscape:pagecheckerboard="true"
 | 
			
		||||
     inkscape:window-width="1920"
 | 
			
		||||
     inkscape:window-height="1001"
 | 
			
		||||
     inkscape:window-x="-9"
 | 
			
		||||
     inkscape:window-y="-9"
 | 
			
		||||
     inkscape:window-maximized="1" />
 | 
			
		||||
  <metadata
 | 
			
		||||
     id="metadata5">
 | 
			
		||||
    <rdf:RDF>
 | 
			
		||||
      <cc:Work
 | 
			
		||||
         rdf:about="">
 | 
			
		||||
        <dc:format>image/svg+xml</dc:format>
 | 
			
		||||
        <dc:type
 | 
			
		||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
			
		||||
        <dc:title />
 | 
			
		||||
      </cc:Work>
 | 
			
		||||
    </rdf:RDF>
 | 
			
		||||
  </metadata>
 | 
			
		||||
  <g
 | 
			
		||||
     inkscape:label="Layer 1"
 | 
			
		||||
     inkscape:groupmode="layer"
 | 
			
		||||
     id="layer1"
 | 
			
		||||
     transform="translate(0,-288.5333)">
 | 
			
		||||
    <rect
 | 
			
		||||
       style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.37041667;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 | 
			
		||||
       id="rect835"
 | 
			
		||||
       width="2.4214098"
 | 
			
		||||
       height="1.8308237"
 | 
			
		||||
       x="3.0710566"
 | 
			
		||||
       y="291.59018" />
 | 
			
		||||
    <path
 | 
			
		||||
       style="fill:none;stroke:#ffffff;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 | 
			
		||||
       d="M 1.630022,292.00359 1.615848,290.14918 H 3.6380209"
 | 
			
		||||
       id="path837"
 | 
			
		||||
       inkscape:connector-curvature="0" />
 | 
			
		||||
    <path
 | 
			
		||||
       style="fill:none;stroke:#ffffff;stroke-width:0.26531255px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 | 
			
		||||
       d="m 6.9097992,291.96816 0.014252,-1.85441 -2.0333353,0"
 | 
			
		||||
       id="path837-6"
 | 
			
		||||
       inkscape:connector-curvature="0" />
 | 
			
		||||
    <path
 | 
			
		||||
       style="fill:none;stroke:#ffffff;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 | 
			
		||||
       d="m 6.9306311,293.21954 0.014174,1.85441 H 4.9226322"
 | 
			
		||||
       id="path837-9"
 | 
			
		||||
       inkscape:connector-curvature="0" />
 | 
			
		||||
    <path
 | 
			
		||||
       style="fill:none;stroke:#ffffff;stroke-width:0.26531255px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 | 
			
		||||
       d="m 1.6393869,293.16031 -0.014252,1.85441 h 2.0333353"
 | 
			
		||||
       id="path837-6-4"
 | 
			
		||||
       inkscape:connector-curvature="0" />
 | 
			
		||||
  </g>
 | 
			
		||||
</svg>
 | 
			
		||||
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 2.9 KiB  | 
@ -1,17 +1,81 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
 | 
			
		||||
    <rect id="zoom-in" x="0" y="0" width="32" height="32" style="fill:none;"/>
 | 
			
		||||
    <g id="zoom-in1" serif:id="zoom-in">
 | 
			
		||||
        <g>
 | 
			
		||||
            <g transform="matrix(1,0,0,1,-1,0)">
 | 
			
		||||
                <circle cx="16" cy="15" r="9" style="fill:none;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g transform="matrix(0.8,0.8,-0.8,0.8,27.6,-17.2)">
 | 
			
		||||
                <path d="M21,28L26,28" style="fill:none;stroke:white;stroke-width:2.65px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <path d="M11,15L19,15" style="fill:none;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
            <path d="M15,11L15,19" style="fill:none;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
        </g>
 | 
			
		||||
    </g>
 | 
			
		||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
			
		||||
 | 
			
		||||
<svg
 | 
			
		||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
			
		||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
			
		||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
			
		||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
			
		||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
			
		||||
   width="32"
 | 
			
		||||
   height="32"
 | 
			
		||||
   viewBox="0 0 8.4666665 8.4666669"
 | 
			
		||||
   version="1.1"
 | 
			
		||||
   id="svg8"
 | 
			
		||||
   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
 | 
			
		||||
   sodipodi:docname="zoom-in-a.svg">
 | 
			
		||||
  <defs
 | 
			
		||||
     id="defs2" />
 | 
			
		||||
  <sodipodi:namedview
 | 
			
		||||
     id="base"
 | 
			
		||||
     pagecolor="#000000"
 | 
			
		||||
     bordercolor="#666666"
 | 
			
		||||
     borderopacity="1.0"
 | 
			
		||||
     inkscape:pageopacity="0.69803922"
 | 
			
		||||
     inkscape:pageshadow="2"
 | 
			
		||||
     inkscape:zoom="16"
 | 
			
		||||
     inkscape:cx="17.492176"
 | 
			
		||||
     inkscape:cy="13.486663"
 | 
			
		||||
     inkscape:document-units="px"
 | 
			
		||||
     inkscape:current-layer="layer1"
 | 
			
		||||
     showgrid="false"
 | 
			
		||||
     units="px"
 | 
			
		||||
     inkscape:pagecheckerboard="true"
 | 
			
		||||
     inkscape:window-width="1920"
 | 
			
		||||
     inkscape:window-height="1001"
 | 
			
		||||
     inkscape:window-x="-9"
 | 
			
		||||
     inkscape:window-y="-9"
 | 
			
		||||
     inkscape:window-maximized="1" />
 | 
			
		||||
  <metadata
 | 
			
		||||
     id="metadata5">
 | 
			
		||||
    <rdf:RDF>
 | 
			
		||||
      <cc:Work
 | 
			
		||||
         rdf:about="">
 | 
			
		||||
        <dc:format>image/svg+xml</dc:format>
 | 
			
		||||
        <dc:type
 | 
			
		||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
			
		||||
        <dc:title />
 | 
			
		||||
      </cc:Work>
 | 
			
		||||
    </rdf:RDF>
 | 
			
		||||
  </metadata>
 | 
			
		||||
  <g
 | 
			
		||||
     inkscape:label="Layer 1"
 | 
			
		||||
     inkscape:groupmode="layer"
 | 
			
		||||
     id="layer1"
 | 
			
		||||
     transform="translate(0,-288.5333)">
 | 
			
		||||
    <circle
 | 
			
		||||
       style="fill:none;stroke:#ffffff;stroke-width:0.26458332;stroke-opacity:1"
 | 
			
		||||
       id="path825"
 | 
			
		||||
       cx="3.8955173"
 | 
			
		||||
       cy="292.02957"
 | 
			
		||||
       r="1.9725631" />
 | 
			
		||||
    <path
 | 
			
		||||
       style="fill:none;stroke:#ffffff;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 | 
			
		||||
       d="M 2.8678944,292.07683 H 4.9703868"
 | 
			
		||||
       id="path827"
 | 
			
		||||
       inkscape:connector-curvature="0" />
 | 
			
		||||
    <path
 | 
			
		||||
       style="fill:none;stroke:#ffffff;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 | 
			
		||||
       d="m 3.9309524,290.90746 0.035435,2.29149"
 | 
			
		||||
       id="path829"
 | 
			
		||||
       inkscape:connector-curvature="0" />
 | 
			
		||||
    <path
 | 
			
		||||
       style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 | 
			
		||||
       d="m 5.2066218,293.63598 1.3465403,1.42922 v 0"
 | 
			
		||||
       id="path831"
 | 
			
		||||
       inkscape:connector-curvature="0"
 | 
			
		||||
       sodipodi:nodetypes="ccc" />
 | 
			
		||||
  </g>
 | 
			
		||||
</svg>
 | 
			
		||||
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 2.6 KiB  | 
@ -1,24 +1,71 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-miterlimit:1.5;">
 | 
			
		||||
    <g transform="matrix(1,0,0,1,-74,-37)">
 | 
			
		||||
        <g id="zoom-original" transform="matrix(1,0,0,1,74,37)">
 | 
			
		||||
            <rect x="0" y="0" width="32" height="32" style="fill:none;"/>
 | 
			
		||||
            <g transform="matrix(1,0,0,1,-73,-37)">
 | 
			
		||||
                <path d="M85,57L85,49L84,49" style="fill:none;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g transform="matrix(1,0,0,1,-74,-37)">
 | 
			
		||||
                <rect x="89" y="50" width="2" height="2" style="fill:white;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g transform="matrix(1,0,0,1,-74,-33)">
 | 
			
		||||
                <rect x="89" y="50" width="2" height="2" style="fill:white;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g transform="matrix(1,0,0,1,-64,-37)">
 | 
			
		||||
                <path d="M85,57L85,49L84,49" style="fill:none;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
            <g transform="matrix(1,0,0,0.952381,-74,-34)">
 | 
			
		||||
                <rect x="80" y="42" width="20" height="21" style="fill:none;stroke:white;stroke-width:2.05px;stroke-linecap:round;stroke-linejoin:round;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
        </g>
 | 
			
		||||
    </g>
 | 
			
		||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
			
		||||
 | 
			
		||||
<svg
 | 
			
		||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
			
		||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
			
		||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
			
		||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
			
		||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
			
		||||
   width="32"
 | 
			
		||||
   height="32"
 | 
			
		||||
   viewBox="0 0 8.4666665 8.4666669"
 | 
			
		||||
   version="1.1"
 | 
			
		||||
   id="svg8"
 | 
			
		||||
   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
 | 
			
		||||
   sodipodi:docname="zoom-original-a.svg">
 | 
			
		||||
  <defs
 | 
			
		||||
     id="defs2" />
 | 
			
		||||
  <sodipodi:namedview
 | 
			
		||||
     id="base"
 | 
			
		||||
     pagecolor="#000000"
 | 
			
		||||
     bordercolor="#666666"
 | 
			
		||||
     borderopacity="1.0"
 | 
			
		||||
     inkscape:pageopacity="0.69803922"
 | 
			
		||||
     inkscape:pageshadow="2"
 | 
			
		||||
     inkscape:zoom="15.839192"
 | 
			
		||||
     inkscape:cx="22.610899"
 | 
			
		||||
     inkscape:cy="17.020554"
 | 
			
		||||
     inkscape:document-units="px"
 | 
			
		||||
     inkscape:current-layer="layer1"
 | 
			
		||||
     showgrid="false"
 | 
			
		||||
     units="px"
 | 
			
		||||
     inkscape:pagecheckerboard="true"
 | 
			
		||||
     inkscape:window-width="1920"
 | 
			
		||||
     inkscape:window-height="1001"
 | 
			
		||||
     inkscape:window-x="-9"
 | 
			
		||||
     inkscape:window-y="-9"
 | 
			
		||||
     inkscape:window-maximized="1" />
 | 
			
		||||
  <metadata
 | 
			
		||||
     id="metadata5">
 | 
			
		||||
    <rdf:RDF>
 | 
			
		||||
      <cc:Work
 | 
			
		||||
         rdf:about="">
 | 
			
		||||
        <dc:format>image/svg+xml</dc:format>
 | 
			
		||||
        <dc:type
 | 
			
		||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
			
		||||
        <dc:title />
 | 
			
		||||
      </cc:Work>
 | 
			
		||||
    </rdf:RDF>
 | 
			
		||||
  </metadata>
 | 
			
		||||
  <g
 | 
			
		||||
     inkscape:label="Layer 1"
 | 
			
		||||
     inkscape:groupmode="layer"
 | 
			
		||||
     id="layer1"
 | 
			
		||||
     transform="translate(0,-288.5333)">
 | 
			
		||||
    <text
 | 
			
		||||
       xml:space="preserve"
 | 
			
		||||
       style="font-style:normal;font-weight:normal;font-size:10.30979729px;line-height:6.44362354px;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.25774494;"
 | 
			
		||||
       x="1.0365982"
 | 
			
		||||
       y="259.85211"
 | 
			
		||||
       id="text819"
 | 
			
		||||
       transform="scale(0.88039913,1.1358485)"><tspan
 | 
			
		||||
         sodipodi:role="line"
 | 
			
		||||
         id="tspan817"
 | 
			
		||||
         x="1.0365982"
 | 
			
		||||
         y="259.85211"
 | 
			
		||||
         style="font-size:5.84221935px;stroke-width:0.25774494;fill:#ffffff;fill-opacity:1;">1:1</tspan></text>
 | 
			
		||||
  </g>
 | 
			
		||||
</svg>
 | 
			
		||||
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 2.2 KiB  | 
@ -1,18 +1,76 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
 | 
			
		||||
    <g transform="matrix(1,0,0,1,-74,0)">
 | 
			
		||||
        <g id="zoom-out" transform="matrix(1,0,0,1,74,0)">
 | 
			
		||||
            <rect x="0" y="0" width="32" height="32" style="fill:none;"/>
 | 
			
		||||
            <g>
 | 
			
		||||
                <g transform="matrix(1,0,0,1,-1,0)">
 | 
			
		||||
                    <circle cx="16" cy="15" r="9" style="fill:none;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
                </g>
 | 
			
		||||
                <g transform="matrix(0.8,0.8,-0.8,0.8,27.6,-17.2)">
 | 
			
		||||
                    <path d="M21,28L26,28" style="fill:none;stroke:white;stroke-width:2.65px;"/>
 | 
			
		||||
                </g>
 | 
			
		||||
                <path d="M11,15L19,15" style="fill:none;stroke:white;stroke-width:2px;"/>
 | 
			
		||||
            </g>
 | 
			
		||||
        </g>
 | 
			
		||||
    </g>
 | 
			
		||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
			
		||||
 | 
			
		||||
<svg
 | 
			
		||||
   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
			
		||||
   xmlns:cc="http://creativecommons.org/ns#"
 | 
			
		||||
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
			
		||||
   xmlns:svg="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
			
		||||
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
			
		||||
   width="32"
 | 
			
		||||
   height="32"
 | 
			
		||||
   viewBox="0 0 8.4666665 8.4666669"
 | 
			
		||||
   version="1.1"
 | 
			
		||||
   id="svg8"
 | 
			
		||||
   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
 | 
			
		||||
   sodipodi:docname="zoom-out-a.svg">
 | 
			
		||||
  <defs
 | 
			
		||||
     id="defs2" />
 | 
			
		||||
  <sodipodi:namedview
 | 
			
		||||
     id="base"
 | 
			
		||||
     pagecolor="#000000"
 | 
			
		||||
     bordercolor="#666666"
 | 
			
		||||
     borderopacity="1.0"
 | 
			
		||||
     inkscape:pageopacity="0.69803922"
 | 
			
		||||
     inkscape:pageshadow="2"
 | 
			
		||||
     inkscape:zoom="16"
 | 
			
		||||
     inkscape:cx="17.492176"
 | 
			
		||||
     inkscape:cy="13.486663"
 | 
			
		||||
     inkscape:document-units="px"
 | 
			
		||||
     inkscape:current-layer="layer1"
 | 
			
		||||
     showgrid="false"
 | 
			
		||||
     units="px"
 | 
			
		||||
     inkscape:pagecheckerboard="true"
 | 
			
		||||
     inkscape:window-width="1920"
 | 
			
		||||
     inkscape:window-height="1001"
 | 
			
		||||
     inkscape:window-x="-9"
 | 
			
		||||
     inkscape:window-y="-9"
 | 
			
		||||
     inkscape:window-maximized="1" />
 | 
			
		||||
  <metadata
 | 
			
		||||
     id="metadata5">
 | 
			
		||||
    <rdf:RDF>
 | 
			
		||||
      <cc:Work
 | 
			
		||||
         rdf:about="">
 | 
			
		||||
        <dc:format>image/svg+xml</dc:format>
 | 
			
		||||
        <dc:type
 | 
			
		||||
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
			
		||||
        <dc:title></dc:title>
 | 
			
		||||
      </cc:Work>
 | 
			
		||||
    </rdf:RDF>
 | 
			
		||||
  </metadata>
 | 
			
		||||
  <g
 | 
			
		||||
     inkscape:label="Layer 1"
 | 
			
		||||
     inkscape:groupmode="layer"
 | 
			
		||||
     id="layer1"
 | 
			
		||||
     transform="translate(0,-288.5333)">
 | 
			
		||||
    <circle
 | 
			
		||||
       style="fill:none;stroke:#ffffff;stroke-width:0.26458332;stroke-opacity:1"
 | 
			
		||||
       id="path825"
 | 
			
		||||
       cx="3.8955173"
 | 
			
		||||
       cy="292.02957"
 | 
			
		||||
       r="1.9725631" />
 | 
			
		||||
    <path
 | 
			
		||||
       style="fill:none;stroke:#ffffff;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
 | 
			
		||||
       d="M 2.8678944,292.07683 H 4.9703868"
 | 
			
		||||
       id="path827"
 | 
			
		||||
       inkscape:connector-curvature="0" />
 | 
			
		||||
    <path
 | 
			
		||||
       style="fill:none;stroke:#ffffff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
 | 
			
		||||
       d="m 5.2066218,293.63598 1.3465403,1.42922 v 0"
 | 
			
		||||
       id="path831"
 | 
			
		||||
       inkscape:connector-curvature="0"
 | 
			
		||||
       sodipodi:nodetypes="ccc" />
 | 
			
		||||
  </g>
 | 
			
		||||
</svg>
 | 
			
		||||
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 2.4 KiB  | 
@ -1,11 +1,6 @@
 | 
			
		||||
<ul>
 | 
			
		||||
<li><u>Chinese (Simplified)</u>: Percy Hong</li>
 | 
			
		||||
<li><u>Dutch</u>: Heimen Stoffels</li>
 | 
			
		||||
<li><u>French</u>: J. Lavoie, K. Herbert, Maxime Leroy</li>
 | 
			
		||||
<li><u>French</u>: J. Lavoie, K. Herbert</li>
 | 
			
		||||
<li><u>German</u>: K. Herbert, J. Lavoie</li>
 | 
			
		||||
<li><u>Indonesian</u>: liimee</li>
 | 
			
		||||
<li><u>Norwegian Bokmål</u>: Allan Nordhøy</li>
 | 
			
		||||
<li><u>Russian</u>: Sergey Shornikov, Artem, Andrey</li>
 | 
			
		||||
<li><u>Sinhala</u>: HelaBasa</li>
 | 
			
		||||
<li><u>Spanish</u>: William(ѕ)ⁿ</li>
 | 
			
		||||
</ul>
 | 
			
		||||
<li><u>Russian</u>: Artem</li>
 | 
			
		||||
</ul>
 | 
			
		||||
@ -8,7 +8,7 @@
 | 
			
		||||
  <summary>Image Viewer</summary>
 | 
			
		||||
  <summary xml:lang="zh-CN">图像查看器</summary>
 | 
			
		||||
  <description>
 | 
			
		||||
    <p>Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support.</p>
 | 
			
		||||
    <p>Pineapple Pictures is a lightweight and easy to use image viewer, comes with a handy navigation thumbnail when zoom-in, and doesn't contains any image management support.</p>
 | 
			
		||||
    <p xml:lang="zh-CN">菠萝看图是一个轻量级易用的图像查看器,在图片放大时提供了方便的鸟瞰导航功能,且不包含任何图片管理功能。</p>
 | 
			
		||||
  </description>
 | 
			
		||||
  <url type="homepage">https://github.com/BLumia/pineapple-pictures</url>
 | 
			
		||||
@ -1,5 +1,4 @@
 | 
			
		||||
QT       += core widgets gui svg
 | 
			
		||||
greaterThan(QT_MAJOR_VERSION, 5): QT += svgwidgets
 | 
			
		||||
 | 
			
		||||
TARGET = ppic
 | 
			
		||||
TEMPLATE = app
 | 
			
		||||
@ -20,7 +19,6 @@ CONFIG += c++11 lrelease embed_translations
 | 
			
		||||
SOURCES += \
 | 
			
		||||
    app/aboutdialog.cpp \
 | 
			
		||||
    app/main.cpp \
 | 
			
		||||
    app/framelesswindow.cpp \
 | 
			
		||||
    app/mainwindow.cpp \
 | 
			
		||||
    app/graphicsview.cpp \
 | 
			
		||||
    app/bottombuttongroup.cpp \
 | 
			
		||||
@ -32,13 +30,10 @@ SOURCES += \
 | 
			
		||||
    app/settingsdialog.cpp \
 | 
			
		||||
    app/metadatamodel.cpp \
 | 
			
		||||
    app/metadatadialog.cpp \
 | 
			
		||||
    app/exiv2wrapper.cpp \
 | 
			
		||||
    app/actionmanager.cpp \
 | 
			
		||||
    app/playlistmanager.cpp
 | 
			
		||||
    app/exiv2wrapper.cpp
 | 
			
		||||
 | 
			
		||||
HEADERS += \
 | 
			
		||||
    app/aboutdialog.h \
 | 
			
		||||
    app/framelesswindow.h \
 | 
			
		||||
    app/mainwindow.h \
 | 
			
		||||
    app/graphicsview.h \
 | 
			
		||||
    app/bottombuttongroup.h \
 | 
			
		||||
@ -50,21 +45,15 @@ HEADERS += \
 | 
			
		||||
    app/settingsdialog.h \
 | 
			
		||||
    app/metadatamodel.h \
 | 
			
		||||
    app/metadatadialog.h \
 | 
			
		||||
    app/exiv2wrapper.h \
 | 
			
		||||
    app/actionmanager.h \
 | 
			
		||||
    app/playlistmanager.h
 | 
			
		||||
    app/exiv2wrapper.h
 | 
			
		||||
 | 
			
		||||
TRANSLATIONS = \
 | 
			
		||||
    app/translations/PineapplePictures.ts \
 | 
			
		||||
    app/translations/PineapplePictures_zh_CN.ts \
 | 
			
		||||
    app/translations/PineapplePictures_de.ts \
 | 
			
		||||
    app/translations/PineapplePictures_es.ts \
 | 
			
		||||
    app/translations/PineapplePictures_fr.ts \
 | 
			
		||||
    app/translations/PineapplePictures_nb_NO.ts \
 | 
			
		||||
    app/translations/PineapplePictures_nl.ts \
 | 
			
		||||
    app/translations/PineapplePictures_ru.ts \
 | 
			
		||||
    app/translations/PineapplePictures_si.ts \
 | 
			
		||||
    app/translations/PineapplePictures_id.ts
 | 
			
		||||
    translations/PineapplePictures.ts \
 | 
			
		||||
    translations/PineapplePictures_zh_CN.ts \
 | 
			
		||||
    translations/PineapplePictures_de.ts \
 | 
			
		||||
    translations/PineapplePictures_fr.ts \
 | 
			
		||||
    translations/PineapplePictures_nb_NO.ts \
 | 
			
		||||
    translations/PineapplePictures_ru.ts
 | 
			
		||||
 | 
			
		||||
# Default rules for deployment.
 | 
			
		||||
qnx: target.path = /tmp/$${TARGET}/bin
 | 
			
		||||
@ -75,7 +64,7 @@ RESOURCES += \
 | 
			
		||||
    assets/resources.qrc
 | 
			
		||||
 | 
			
		||||
# Generate from svg:
 | 
			
		||||
# magick convert -density 512x512 -background none app-icon.svg -define icon:auto-resize app-icon.ico
 | 
			
		||||
# magick convert -background none app-icon.svg -define icon:auto-resize="16,32,48,64,128,256" app-icon.ico
 | 
			
		||||
RC_ICONS = assets/icons/app-icon.ico
 | 
			
		||||
 | 
			
		||||
# Windows only, for rc file (we're not going to use the .rc file in this repo)
 | 
			
		||||
 | 
			
		||||
@ -4,163 +4,158 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>AboutDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <source>About</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <source>Launch application with image file path as argument to load the file.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Drag and drop image file onto the window is also supported.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>None of the operations in this application will alter the pictures on disk.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="29"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>Context menu option explanation:</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="32"/>
 | 
			
		||||
        <source>Make window stay on top of all other windows.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="39"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <source>Avoid close window accidentally. (eg. by double clicking the window)</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="47"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="45"/>
 | 
			
		||||
        <source>Version: %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="48"/>
 | 
			
		||||
        <source>Copyright (c) 2020 %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <source>Logo designed by %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="54"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <source>Built with Qt %1 (%2)</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="55"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="53"/>
 | 
			
		||||
        <source>Source code</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="63"/>
 | 
			
		||||
        <source>Contributors</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="67"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <source>List of contributors on GitHub</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="68"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="66"/>
 | 
			
		||||
        <source>Thanks to all people who contributed to this project.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="72"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="70"/>
 | 
			
		||||
        <source>Translators</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="73"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="71"/>
 | 
			
		||||
        <source>I would like to thank the following people who volunteered to translate this application.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="117"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="115"/>
 | 
			
		||||
        <source>%1 is built on the following free software libraries:</source>
 | 
			
		||||
        <comment>Free as in freedom</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <source>&Special Thanks</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="143"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <source>&Third-party Libraries</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="77"/>
 | 
			
		||||
        <source>Your Rights</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <source>%1 is released under the MIT License.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="80"/>
 | 
			
		||||
        <source>This license grants people a number of freedoms:</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <source>You are free to use %1, for any purpose</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <source>You are free to distribute %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="85"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <source>You can study how %1 works and change it</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <source>You can distribute changed versions of %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="88"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="116"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="114"/>
 | 
			
		||||
        <source>Third-party Libraries used by %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="137"/>
 | 
			
		||||
        <source>&Help</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="138"/>
 | 
			
		||||
        <source>&About</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="142"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <source>&License</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -168,7 +163,7 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsScene</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsscene.cpp" line="48"/>
 | 
			
		||||
        <location filename="../app/graphicsscene.cpp" line="16"/>
 | 
			
		||||
        <source>Drag image here</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -176,28 +171,28 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsView</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="329"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="254"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="52"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="46"/>
 | 
			
		||||
        <source>File is not a valid image</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="57"/>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="62"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="48"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="52"/>
 | 
			
		||||
        <source>Image data is invalid or currently unsupported</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="337"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="262"/>
 | 
			
		||||
        <source>Image data is invalid</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="344"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="269"/>
 | 
			
		||||
        <source>Not supported mimedata: %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -205,102 +200,67 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MainWindow</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="163"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="176"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="374"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="370"/>
 | 
			
		||||
        <source>&Copy</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="73"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="391"/>
 | 
			
		||||
        <source>Copy P&ixmap</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="74"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="396"/>
 | 
			
		||||
        <source>Copy &File Path</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="80"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="406"/>
 | 
			
		||||
        <source>&Paste Image</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="412"/>
 | 
			
		||||
        <source>&Paste Image File</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="445"/>
 | 
			
		||||
        <source>Properties</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="76"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="31"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="417"/>
 | 
			
		||||
        <source>Stay on top</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="38"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="77"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="424"/>
 | 
			
		||||
        <source>Protected mode</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="65"/>
 | 
			
		||||
        <source>Zoom in</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="66"/>
 | 
			
		||||
        <source>Zoom out</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="70"/>
 | 
			
		||||
        <source>Flip &Horizontally</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="75"/>
 | 
			
		||||
        <source>&Paste</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="67"/>
 | 
			
		||||
        <source>Toggle Checkerboard</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="63"/>
 | 
			
		||||
        <source>Actual size</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="64"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="68"/>
 | 
			
		||||
        <source>Rotate right</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="78"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="431"/>
 | 
			
		||||
        <source>Configure...</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="79"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="438"/>
 | 
			
		||||
        <source>Help</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="81"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <location filename="../app/metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <source>Image Metadata</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -308,304 +268,249 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataModel</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <source>Origin</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <source>Image</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="43"/>
 | 
			
		||||
        <source>File</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <source>Camera</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <source>%1 File</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <source>Advanced photo</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="40"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <source>GPS</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="44"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Dimensions</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Aspect ratio</source>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="48"/>
 | 
			
		||||
        <source>Aspect Ratio</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="49"/>
 | 
			
		||||
        <source>Frame count</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="51"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <source>Item type</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <source>Folder path</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <source>Size</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date created</source>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <source>Date Created</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="63"/>
 | 
			
		||||
        <source>Date modified</source>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date Modified</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Title</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="72"/>
 | 
			
		||||
        <source>Subject</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="74"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="68"/>
 | 
			
		||||
        <source>Rating</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="76"/>
 | 
			
		||||
        <source>Tags</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="78"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Comments</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="81"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="73"/>
 | 
			
		||||
        <source>Authors</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="83"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="75"/>
 | 
			
		||||
        <source>Date taken</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="77"/>
 | 
			
		||||
        <source>Program name</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Copyright</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="94"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="80"/>
 | 
			
		||||
        <source>Horizontal resolution</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="96"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="82"/>
 | 
			
		||||
        <source>Vertical resolution</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="98"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="84"/>
 | 
			
		||||
        <source>Resolution unit</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="100"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="86"/>
 | 
			
		||||
        <source>Colour representation</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <source>Camera maker</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Camera model</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="93"/>
 | 
			
		||||
        <source>F-stop</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="95"/>
 | 
			
		||||
        <source>Exposure time</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="111"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="97"/>
 | 
			
		||||
        <source>ISO speed</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="113"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="99"/>
 | 
			
		||||
        <source>Exposure bias</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="115"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="101"/>
 | 
			
		||||
        <source>Focal length</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="117"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <source>Max aperture</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="119"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <source>Metering mode</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="121"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <source>Flash mode</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="123"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <source>35mm focal length</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="112"/>
 | 
			
		||||
        <source>Lens model</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="128"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="114"/>
 | 
			
		||||
        <source>Brightness</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="130"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="116"/>
 | 
			
		||||
        <source>Exposure program</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="132"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="118"/>
 | 
			
		||||
        <source>Saturation</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="134"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="120"/>
 | 
			
		||||
        <source>Sharpness</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="136"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="122"/>
 | 
			
		||||
        <source>White balance</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="138"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="124"/>
 | 
			
		||||
        <source>Digital zoom</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="140"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <source>EXIF version</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="143"/>
 | 
			
		||||
        <source>Latitude reference</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="145"/>
 | 
			
		||||
        <source>Latitude</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="147"/>
 | 
			
		||||
        <source>Longitude reference</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="149"/>
 | 
			
		||||
        <source>Longitude</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="151"/>
 | 
			
		||||
        <source>Altitude reference</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>Altitude</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="163"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="135"/>
 | 
			
		||||
        <source>%1 x %2</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="181"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>%1 : %2</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="288"/>
 | 
			
		||||
        <source>Property</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="288"/>
 | 
			
		||||
        <source>Value</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -613,60 +518,45 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SettingsDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="16"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="15"/>
 | 
			
		||||
        <source>Settings</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="20"/>
 | 
			
		||||
        <source>Do nothing</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <source>Close the window</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="23"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Zoom in and out</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="28"/>
 | 
			
		||||
        <source>View next or previous item</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="41"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="30"/>
 | 
			
		||||
        <source>Stay on top when start-up</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="42"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="31"/>
 | 
			
		||||
        <source>Double-click behavior</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="43"/>
 | 
			
		||||
        <source>Mouse wheel behavior</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>main</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="31"/>
 | 
			
		||||
        <location filename="../app/main.cpp" line="28"/>
 | 
			
		||||
        <source>Pineapple Pictures</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/main.cpp" line="32"/>
 | 
			
		||||
        <source>File list.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -4,163 +4,162 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>AboutDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <source>About</source>
 | 
			
		||||
        <translation>Über</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <source>Launch application with image file path as argument to load the file.</source>
 | 
			
		||||
        <translation>Starten Sie die Anwendung mit dem Bilddateipfad als Argument zum Laden der Datei.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Drag and drop image file onto the window is also supported.</source>
 | 
			
		||||
        <translation>Das Ziehen und Ablegen von Bilddateien in das Fenster wird ebenfalls unterstützt.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>None of the operations in this application will alter the pictures on disk.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="29"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>Context menu option explanation:</source>
 | 
			
		||||
        <translation>Erklärung der Kontextmenüoptionen:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="32"/>
 | 
			
		||||
        <source>Make window stay on top of all other windows.</source>
 | 
			
		||||
        <translation>Sicher stellen, dass das Fenster über allen anderen Fenstern bleibt.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="39"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <source>Avoid close window accidentally. (eg. by double clicking the window)</source>
 | 
			
		||||
        <translation>Es vermeiden, das Fenster versehentlich zu schließen. (z.B. durch Doppelklick auf das Fenster)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="47"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="45"/>
 | 
			
		||||
        <source>Version: %1</source>
 | 
			
		||||
        <translation>Version: %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="48"/>
 | 
			
		||||
        <source>Copyright (c) 2020 %1</source>
 | 
			
		||||
        <translation>Copyright © 2020 %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <source>Logo designed by %1</source>
 | 
			
		||||
        <translation>Logo entworfen von %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="54"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <source>Built with Qt %1 (%2)</source>
 | 
			
		||||
        <translation>Gemacht mit Qt %1 (%2)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="55"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="53"/>
 | 
			
		||||
        <source>Source code</source>
 | 
			
		||||
        <translation>Quellcode</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="63"/>
 | 
			
		||||
        <source>Contributors</source>
 | 
			
		||||
        <translation>Mitwirkenden</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="67"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <source>List of contributors on GitHub</source>
 | 
			
		||||
        <translation>Liste der Mitwirkenden auf GitHub</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="68"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="66"/>
 | 
			
		||||
        <source>Thanks to all people who contributed to this project.</source>
 | 
			
		||||
        <translation>Vielen Dank an alle, die zu diesem Projekt beigetragen haben.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="72"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="70"/>
 | 
			
		||||
        <source>Translators</source>
 | 
			
		||||
        <translation>Übersetzer</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="73"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="71"/>
 | 
			
		||||
        <source>I would like to thank the following people who volunteered to translate this application.</source>
 | 
			
		||||
        <translation>Ich möchte den folgenden Personen danken, die sich freiwillig zur Übersetzung dieser Anwendung gemeldet haben.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="117"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="115"/>
 | 
			
		||||
        <source>%1 is built on the following free software libraries:</source>
 | 
			
		||||
        <comment>Free as in freedom</comment>
 | 
			
		||||
        <translation>%1 basiert auf den folgenden freien Softwarebibliotheken:</translation>
 | 
			
		||||
        <translation type="unfinished">%1 basiert auf den folgenden freien Softwarebibliotheken:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <source>&Special Thanks</source>
 | 
			
		||||
        <translation>&Besonderer Dank</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="143"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <source>&Third-party Libraries</source>
 | 
			
		||||
        <translation>&Bibliotheken von Drittanbietern</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="77"/>
 | 
			
		||||
        <source>Your Rights</source>
 | 
			
		||||
        <translation>Ihre Rechte</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <source>%1 is released under the MIT License.</source>
 | 
			
		||||
        <translation>%1 wird unter der MIT-Lizenz veröffentlicht.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="80"/>
 | 
			
		||||
        <source>This license grants people a number of freedoms:</source>
 | 
			
		||||
        <translation>Diese Lizenz gewährt Menschen eine Reihe von Freiheiten:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <source>You are free to use %1, for any purpose</source>
 | 
			
		||||
        <translation>Sie dürfen %1 für jeden Zweck verwenden</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <source>You are free to distribute %1</source>
 | 
			
		||||
        <translation>Sie dürfen %1 verteilen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="85"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <source>You can study how %1 works and change it</source>
 | 
			
		||||
        <translation>Sie können untersuchen, wie %1 funktioniert, und es ändern</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <source>You can distribute changed versions of %1</source>
 | 
			
		||||
        <translation>Sie können geänderte Versionen von %1 verteilen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="88"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
 | 
			
		||||
        <translation>Die MIT-Lizenz garantiert Ihnen diese Freiheit. Niemand darf es jemals wegnehmen.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="116"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="114"/>
 | 
			
		||||
        <source>Third-party Libraries used by %1</source>
 | 
			
		||||
        <translation>Von %1 verwendete Bibliotheken von Drittanbietern</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <source>%1 is built on the following free software libraries:</source>
 | 
			
		||||
        <translation type="vanished">%1 basiert auf den folgenden freien Softwarebibliotheken:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="137"/>
 | 
			
		||||
        <source>&Help</source>
 | 
			
		||||
        <translation>&Hilfe</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="138"/>
 | 
			
		||||
        <source>&About</source>
 | 
			
		||||
        <translation>&Über</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="142"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <source>&License</source>
 | 
			
		||||
        <translation>&Lizenz</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -168,7 +167,7 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsScene</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsscene.cpp" line="48"/>
 | 
			
		||||
        <location filename="../app/graphicsscene.cpp" line="16"/>
 | 
			
		||||
        <source>Drag image here</source>
 | 
			
		||||
        <translation>Ziehen Sie das Bild hierher</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -176,28 +175,28 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsView</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="329"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="254"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation>Die Datei-URL-Liste ist leer</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="52"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="46"/>
 | 
			
		||||
        <source>File is not a valid image</source>
 | 
			
		||||
        <translation>Datei ist kein gültiges Bild</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="57"/>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="62"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="48"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="52"/>
 | 
			
		||||
        <source>Image data is invalid or currently unsupported</source>
 | 
			
		||||
        <translation>Bilddaten sind ungültig oder werden derzeit nicht unterstützt</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="337"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="262"/>
 | 
			
		||||
        <source>Image data is invalid</source>
 | 
			
		||||
        <translation>Bilddaten sind ungültig</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="344"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="269"/>
 | 
			
		||||
        <source>Not supported mimedata: %1</source>
 | 
			
		||||
        <translation>Nicht unterstützte Mimedaten: %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -205,102 +204,67 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MainWindow</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="163"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="176"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation>Die Datei-URL-Liste ist leer</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="374"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="370"/>
 | 
			
		||||
        <source>&Copy</source>
 | 
			
		||||
        <translation>&Kopieren</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="73"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="391"/>
 | 
			
		||||
        <source>Copy P&ixmap</source>
 | 
			
		||||
        <translation>P&ixmap kopieren</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="74"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="396"/>
 | 
			
		||||
        <source>Copy &File Path</source>
 | 
			
		||||
        <translation>&Dateipfad kopieren</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="80"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="406"/>
 | 
			
		||||
        <source>&Paste Image</source>
 | 
			
		||||
        <translation>Bild &einfügen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="412"/>
 | 
			
		||||
        <source>&Paste Image File</source>
 | 
			
		||||
        <translation>Bilddatei &einfügen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="445"/>
 | 
			
		||||
        <source>Properties</source>
 | 
			
		||||
        <translation>Eigenschaften</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="76"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="31"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="417"/>
 | 
			
		||||
        <source>Stay on top</source>
 | 
			
		||||
        <translation>Oben bleiben</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="38"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="77"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="424"/>
 | 
			
		||||
        <source>Protected mode</source>
 | 
			
		||||
        <translation>Geschützter Modus</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="65"/>
 | 
			
		||||
        <source>Zoom in</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="66"/>
 | 
			
		||||
        <source>Zoom out</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="70"/>
 | 
			
		||||
        <source>Flip &Horizontally</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="75"/>
 | 
			
		||||
        <source>&Paste</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="67"/>
 | 
			
		||||
        <source>Toggle Checkerboard</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="63"/>
 | 
			
		||||
        <source>Actual size</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="64"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation type="unfinished">Maximieren umschalten</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="68"/>
 | 
			
		||||
        <source>Rotate right</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="78"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="431"/>
 | 
			
		||||
        <source>Configure...</source>
 | 
			
		||||
        <translation>Konfigurieren …</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="79"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="438"/>
 | 
			
		||||
        <source>Help</source>
 | 
			
		||||
        <translation>Hilfe</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="81"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <location filename="../app/metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <source>Image Metadata</source>
 | 
			
		||||
        <translation>Bildmetadaten</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -308,304 +272,249 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataModel</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <source>Origin</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Ursprung</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <source>Image</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Bild</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="43"/>
 | 
			
		||||
        <source>File</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Datei</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <source>Camera</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Fotoapparat</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <source>%1 File</source>
 | 
			
		||||
        <translation>%1-Datei</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Beschreibung</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <source>Advanced photo</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Erweitertes Foto</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="40"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <source>GPS</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>GPS</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="44"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Dimensions</source>
 | 
			
		||||
        <translation>Maße</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Aspect ratio</source>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="48"/>
 | 
			
		||||
        <source>Aspect Ratio</source>
 | 
			
		||||
        <translation>Seitenverhältnis</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="49"/>
 | 
			
		||||
        <source>Frame count</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="51"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation>Name</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <source>Item type</source>
 | 
			
		||||
        <translation>Objekttyp</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <source>Folder path</source>
 | 
			
		||||
        <translation>Ordnerpfad</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <source>Size</source>
 | 
			
		||||
        <translation>Größe</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date created</source>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <source>Date Created</source>
 | 
			
		||||
        <translation>Datum erstellt</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="63"/>
 | 
			
		||||
        <source>Date modified</source>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date Modified</source>
 | 
			
		||||
        <translation>Datum geändert</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Title</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="72"/>
 | 
			
		||||
        <source>Subject</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="74"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="68"/>
 | 
			
		||||
        <source>Rating</source>
 | 
			
		||||
        <translation>Bewertung</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="76"/>
 | 
			
		||||
        <source>Tags</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="78"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Comments</source>
 | 
			
		||||
        <translation>Kommentare</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="81"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="73"/>
 | 
			
		||||
        <source>Authors</source>
 | 
			
		||||
        <translation>Autoren</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="83"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="75"/>
 | 
			
		||||
        <source>Date taken</source>
 | 
			
		||||
        <translation>Datum genommen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="77"/>
 | 
			
		||||
        <source>Program name</source>
 | 
			
		||||
        <translation>Programmname</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Copyright</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="94"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="80"/>
 | 
			
		||||
        <source>Horizontal resolution</source>
 | 
			
		||||
        <translation>Horizontale Auflösung</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="96"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="82"/>
 | 
			
		||||
        <source>Vertical resolution</source>
 | 
			
		||||
        <translation>Vertikale Auflösung</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="98"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="84"/>
 | 
			
		||||
        <source>Resolution unit</source>
 | 
			
		||||
        <translation>Auflösungseinheit</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="100"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="86"/>
 | 
			
		||||
        <source>Colour representation</source>
 | 
			
		||||
        <translation>Farbdarstellung</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <source>Camera maker</source>
 | 
			
		||||
        <translation>Kamerahersteller</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Camera model</source>
 | 
			
		||||
        <translation>Kameramodell</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="93"/>
 | 
			
		||||
        <source>F-stop</source>
 | 
			
		||||
        <translation>Blendenzahl</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="95"/>
 | 
			
		||||
        <source>Exposure time</source>
 | 
			
		||||
        <translation>Belichtungszeit</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="111"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="97"/>
 | 
			
		||||
        <source>ISO speed</source>
 | 
			
		||||
        <translation>ISO-Geschwindigkeit</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="113"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="99"/>
 | 
			
		||||
        <source>Exposure bias</source>
 | 
			
		||||
        <translation>Belichtungskorrektur</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="115"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="101"/>
 | 
			
		||||
        <source>Focal length</source>
 | 
			
		||||
        <translation>Brennweite</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="117"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <source>Max aperture</source>
 | 
			
		||||
        <translation>Maximale Blende</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="119"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <source>Metering mode</source>
 | 
			
		||||
        <translation>Messmodus</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="121"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <source>Flash mode</source>
 | 
			
		||||
        <translation>Flash-Modus</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="123"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <source>35mm focal length</source>
 | 
			
		||||
        <translation>35 mm Brennweite</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="112"/>
 | 
			
		||||
        <source>Lens model</source>
 | 
			
		||||
        <translation>Objektivmodell</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="128"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="114"/>
 | 
			
		||||
        <source>Brightness</source>
 | 
			
		||||
        <translation>Helligkeit</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="130"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="116"/>
 | 
			
		||||
        <source>Exposure program</source>
 | 
			
		||||
        <translation>Belichtungsprogramm</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="132"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="118"/>
 | 
			
		||||
        <source>Saturation</source>
 | 
			
		||||
        <translation>Sättigung</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="134"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="120"/>
 | 
			
		||||
        <source>Sharpness</source>
 | 
			
		||||
        <translation>Schärfe</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="136"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="122"/>
 | 
			
		||||
        <source>White balance</source>
 | 
			
		||||
        <translation>Weißabgleich</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="138"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="124"/>
 | 
			
		||||
        <source>Digital zoom</source>
 | 
			
		||||
        <translation>Digitaler Zoom</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="140"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <source>EXIF version</source>
 | 
			
		||||
        <translation>EXIF-Version</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="143"/>
 | 
			
		||||
        <source>Latitude reference</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="145"/>
 | 
			
		||||
        <source>Latitude</source>
 | 
			
		||||
        <translation>Breitengrad</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="147"/>
 | 
			
		||||
        <source>Longitude reference</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="149"/>
 | 
			
		||||
        <source>Longitude</source>
 | 
			
		||||
        <translation>Längengrad</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="151"/>
 | 
			
		||||
        <source>Altitude reference</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>Altitude</source>
 | 
			
		||||
        <translation>Höhe</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="163"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="135"/>
 | 
			
		||||
        <source>%1 x %2</source>
 | 
			
		||||
        <translation>%1 × %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="181"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>%1 : %2</source>
 | 
			
		||||
        <translation>%1 : %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="288"/>
 | 
			
		||||
        <source>Property</source>
 | 
			
		||||
        <translation>Eigenschaft</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="288"/>
 | 
			
		||||
        <source>Value</source>
 | 
			
		||||
        <translation>Wert</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -613,60 +522,45 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SettingsDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="16"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="15"/>
 | 
			
		||||
        <source>Settings</source>
 | 
			
		||||
        <translation>Einstellungen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="20"/>
 | 
			
		||||
        <source>Do nothing</source>
 | 
			
		||||
        <translation>Nichts tun</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <source>Close the window</source>
 | 
			
		||||
        <translation>Fenster schließen</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="23"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation>Maximieren umschalten</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Zoom in and out</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="28"/>
 | 
			
		||||
        <source>View next or previous item</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="41"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="30"/>
 | 
			
		||||
        <source>Stay on top when start-up</source>
 | 
			
		||||
        <translation>Beim Start oben bleiben</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="42"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="31"/>
 | 
			
		||||
        <source>Double-click behavior</source>
 | 
			
		||||
        <translation>Doppelklickverhalten</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="43"/>
 | 
			
		||||
        <source>Mouse wheel behavior</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>main</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="31"/>
 | 
			
		||||
        <location filename="../app/main.cpp" line="28"/>
 | 
			
		||||
        <source>Pineapple Pictures</source>
 | 
			
		||||
        <translation>Pineapple Pictures</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/main.cpp" line="32"/>
 | 
			
		||||
        <source>File list.</source>
 | 
			
		||||
        <translation>Dateiliste.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -4,163 +4,162 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>AboutDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <source>About</source>
 | 
			
		||||
        <translation>À propos</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <source>Launch application with image file path as argument to load the file.</source>
 | 
			
		||||
        <translation>Lancer l'application avec le chemin du fichier image comme argument pour charger le fichier.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Drag and drop image file onto the window is also supported.</source>
 | 
			
		||||
        <translation>Le glisser-déposer du fichier image sur la fenêtre est également pris en charge.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>None of the operations in this application will alter the pictures on disk.</source>
 | 
			
		||||
        <translation>Aucun opération dans cette application ne modifiera les fichiers image.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="29"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>Context menu option explanation:</source>
 | 
			
		||||
        <translation>Explication des options du menu contextuel :</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="32"/>
 | 
			
		||||
        <source>Make window stay on top of all other windows.</source>
 | 
			
		||||
        <translation>Faire en sorte que la fenêtre reste au-dessus de toutes les autres fenêtres.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="39"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <source>Avoid close window accidentally. (eg. by double clicking the window)</source>
 | 
			
		||||
        <translation>Éviter de fermer la fenêtre accidentellement. (par exemple en cliquant deux fois sur la fenêtre)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="47"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="45"/>
 | 
			
		||||
        <source>Version: %1</source>
 | 
			
		||||
        <translation>Version : %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="48"/>
 | 
			
		||||
        <source>Copyright (c) 2020 %1</source>
 | 
			
		||||
        <translation>Copyright © 2020 %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <source>Logo designed by %1</source>
 | 
			
		||||
        <translation>Logo conçu par %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="54"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <source>Built with Qt %1 (%2)</source>
 | 
			
		||||
        <translation>Fait avec Qt %1 (%2)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="55"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="53"/>
 | 
			
		||||
        <source>Source code</source>
 | 
			
		||||
        <translation>Code source</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="63"/>
 | 
			
		||||
        <source>Contributors</source>
 | 
			
		||||
        <translation>Contributeurs</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="67"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <source>List of contributors on GitHub</source>
 | 
			
		||||
        <translation>Liste des contributeurs sur GitHub</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="68"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="66"/>
 | 
			
		||||
        <source>Thanks to all people who contributed to this project.</source>
 | 
			
		||||
        <translation>Merci à toutes les personnes qui ont contribué à ce projet.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="72"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="70"/>
 | 
			
		||||
        <source>Translators</source>
 | 
			
		||||
        <translation>Traducteurs</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="73"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="71"/>
 | 
			
		||||
        <source>I would like to thank the following people who volunteered to translate this application.</source>
 | 
			
		||||
        <translation>Je tiens à remercier les personnes suivantes qui se sont portées volontaires pour traduire cette application.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="117"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="115"/>
 | 
			
		||||
        <source>%1 is built on the following free software libraries:</source>
 | 
			
		||||
        <comment>Free as in freedom</comment>
 | 
			
		||||
        <translation>%1 est basé sur les bibliothèques de logiciels libres suivantes :</translation>
 | 
			
		||||
        <translation type="unfinished">%1 est basé sur les bibliothèques de logiciels libres suivantes :</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <source>&Special Thanks</source>
 | 
			
		||||
        <translation>&Remerciement spécial</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="143"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <source>&Third-party Libraries</source>
 | 
			
		||||
        <translation>&Bibliothèques tierces</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="77"/>
 | 
			
		||||
        <source>Your Rights</source>
 | 
			
		||||
        <translation>Vos droits</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <source>%1 is released under the MIT License.</source>
 | 
			
		||||
        <translation>%1 est publié sous licence MIT.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="80"/>
 | 
			
		||||
        <source>This license grants people a number of freedoms:</source>
 | 
			
		||||
        <translation>Cette licence accorde aux personnes un certain nombre de libertés :</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <source>You are free to use %1, for any purpose</source>
 | 
			
		||||
        <translation>Vous êtes libre d'utiliser %1, dans n'importe quel but</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <source>You are free to distribute %1</source>
 | 
			
		||||
        <translation>Vous êtes libre de distribuer %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="85"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <source>You can study how %1 works and change it</source>
 | 
			
		||||
        <translation>Vous pouvez étudier le fonctionnement de %1 et le modifier</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <source>You can distribute changed versions of %1</source>
 | 
			
		||||
        <translation>Vous pouvez distribuer des versions modifiées de %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="88"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
 | 
			
		||||
        <translation>La licence MIT vous garantit cette liberté. Personne n'est autorisé à l'enlever.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="116"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="114"/>
 | 
			
		||||
        <source>Third-party Libraries used by %1</source>
 | 
			
		||||
        <translation>Bibliothèques tierces utilisées par %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <source>%1 is built on the following free software libraries:</source>
 | 
			
		||||
        <translation type="vanished">%1 est basé sur les bibliothèques de logiciels libres suivantes :</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="137"/>
 | 
			
		||||
        <source>&Help</source>
 | 
			
		||||
        <translation>&Aide</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="138"/>
 | 
			
		||||
        <source>&About</source>
 | 
			
		||||
        <translation>&À propos</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="142"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <source>&License</source>
 | 
			
		||||
        <translation>&Licence</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -168,7 +167,7 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsScene</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsscene.cpp" line="48"/>
 | 
			
		||||
        <location filename="../app/graphicsscene.cpp" line="16"/>
 | 
			
		||||
        <source>Drag image here</source>
 | 
			
		||||
        <translation>Faites glisser l'image ici</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -176,28 +175,28 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsView</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="329"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="254"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation>La liste des URL du fichier est vide</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="52"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="46"/>
 | 
			
		||||
        <source>File is not a valid image</source>
 | 
			
		||||
        <translation>Le fichier n'est pas une image valide</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="57"/>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="62"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="48"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="52"/>
 | 
			
		||||
        <source>Image data is invalid or currently unsupported</source>
 | 
			
		||||
        <translation>Les données d'image ne sont pas valides ou ne sont actuellement pas prises en charge</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="337"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="262"/>
 | 
			
		||||
        <source>Image data is invalid</source>
 | 
			
		||||
        <translation>Les données d'image ne sont pas valides</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="344"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="269"/>
 | 
			
		||||
        <source>Not supported mimedata: %1</source>
 | 
			
		||||
        <translation>Mimedata non pris en charge : %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -205,102 +204,67 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MainWindow</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="163"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="176"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation>La liste des URL de fichiers est vide</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="374"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="370"/>
 | 
			
		||||
        <source>&Copy</source>
 | 
			
		||||
        <translation>&Copier</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="73"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="391"/>
 | 
			
		||||
        <source>Copy P&ixmap</source>
 | 
			
		||||
        <translation>Copier P&ixmap</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="74"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="396"/>
 | 
			
		||||
        <source>Copy &File Path</source>
 | 
			
		||||
        <translation>Copier le &chemin du fichier</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="80"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="406"/>
 | 
			
		||||
        <source>&Paste Image</source>
 | 
			
		||||
        <translation>&Coller l'image</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="412"/>
 | 
			
		||||
        <source>&Paste Image File</source>
 | 
			
		||||
        <translation>&Coller le fichier d'image</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="445"/>
 | 
			
		||||
        <source>Properties</source>
 | 
			
		||||
        <translation>Propriétés</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="76"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="31"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="417"/>
 | 
			
		||||
        <source>Stay on top</source>
 | 
			
		||||
        <translation>Rester en-haut</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="38"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="77"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="424"/>
 | 
			
		||||
        <source>Protected mode</source>
 | 
			
		||||
        <translation>Mode protégé</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="65"/>
 | 
			
		||||
        <source>Zoom in</source>
 | 
			
		||||
        <translation>Zoom avant</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="66"/>
 | 
			
		||||
        <source>Zoom out</source>
 | 
			
		||||
        <translation>Zoom arrière</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="70"/>
 | 
			
		||||
        <source>Flip &Horizontally</source>
 | 
			
		||||
        <translation>Retourner &horizontalement</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="75"/>
 | 
			
		||||
        <source>&Paste</source>
 | 
			
		||||
        <translation>Co&ller</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="67"/>
 | 
			
		||||
        <source>Toggle Checkerboard</source>
 | 
			
		||||
        <translation>Dés/activer le damier</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="63"/>
 | 
			
		||||
        <source>Actual size</source>
 | 
			
		||||
        <translation>Taille actuelle</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="64"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation>Dés/activer l'agrandissement</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="68"/>
 | 
			
		||||
        <source>Rotate right</source>
 | 
			
		||||
        <translation>Pivoter vers la droite</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="78"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="431"/>
 | 
			
		||||
        <source>Configure...</source>
 | 
			
		||||
        <translation>Configurer…</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="79"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="438"/>
 | 
			
		||||
        <source>Help</source>
 | 
			
		||||
        <translation>Aide</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="81"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation>Quitter</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <location filename="../app/metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <source>Image Metadata</source>
 | 
			
		||||
        <translation>Métadonnées d'image</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -308,304 +272,249 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataModel</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <source>Origin</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Origine</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <source>Image</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Image</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="43"/>
 | 
			
		||||
        <source>File</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Fichier</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <source>Camera</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Appareil photo</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <source>%1 File</source>
 | 
			
		||||
        <translation>Fichier %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Description</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <source>Advanced photo</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Photo avancée</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="40"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <source>GPS</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>GPS</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="44"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Dimensions</source>
 | 
			
		||||
        <translation>Dimensions</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Aspect ratio</source>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="48"/>
 | 
			
		||||
        <source>Aspect Ratio</source>
 | 
			
		||||
        <translation>Rapport d'aspect</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="49"/>
 | 
			
		||||
        <source>Frame count</source>
 | 
			
		||||
        <translation>Nombre d'images</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="51"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation>Nom</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <source>Item type</source>
 | 
			
		||||
        <translation>Type d'élément</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <source>Folder path</source>
 | 
			
		||||
        <translation>Chemin du dossier</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <source>Size</source>
 | 
			
		||||
        <translation>Taille</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date created</source>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <source>Date Created</source>
 | 
			
		||||
        <translation>Date créée</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="63"/>
 | 
			
		||||
        <source>Date modified</source>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date Modified</source>
 | 
			
		||||
        <translation>Date modifiée</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Title</source>
 | 
			
		||||
        <translation>Titre</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="72"/>
 | 
			
		||||
        <source>Subject</source>
 | 
			
		||||
        <translation>Sujet</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="74"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="68"/>
 | 
			
		||||
        <source>Rating</source>
 | 
			
		||||
        <translation>Évaluation</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="76"/>
 | 
			
		||||
        <source>Tags</source>
 | 
			
		||||
        <translation>Étiquettes</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="78"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Comments</source>
 | 
			
		||||
        <translation>Commentaires</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="81"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="73"/>
 | 
			
		||||
        <source>Authors</source>
 | 
			
		||||
        <translation>Auteurs</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="83"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="75"/>
 | 
			
		||||
        <source>Date taken</source>
 | 
			
		||||
        <translation>Date prise</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="77"/>
 | 
			
		||||
        <source>Program name</source>
 | 
			
		||||
        <translation>Nom du programme</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Copyright</source>
 | 
			
		||||
        <translation>Copyright</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="94"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="80"/>
 | 
			
		||||
        <source>Horizontal resolution</source>
 | 
			
		||||
        <translation>Résolution horizontale</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="96"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="82"/>
 | 
			
		||||
        <source>Vertical resolution</source>
 | 
			
		||||
        <translation>Résolution verticale</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="98"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="84"/>
 | 
			
		||||
        <source>Resolution unit</source>
 | 
			
		||||
        <translation>Unité de résolution</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="100"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="86"/>
 | 
			
		||||
        <source>Colour representation</source>
 | 
			
		||||
        <translation>Représentation des couleurs</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <source>Camera maker</source>
 | 
			
		||||
        <translation>Fabricant de l'appareil photo</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Camera model</source>
 | 
			
		||||
        <translation>Modèle d'appareil photo</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="93"/>
 | 
			
		||||
        <source>F-stop</source>
 | 
			
		||||
        <translation>Nombre d'ouverture</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="95"/>
 | 
			
		||||
        <source>Exposure time</source>
 | 
			
		||||
        <translation>Temps d'exposition</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="111"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="97"/>
 | 
			
		||||
        <source>ISO speed</source>
 | 
			
		||||
        <translation>Vitesse ISO</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="113"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="99"/>
 | 
			
		||||
        <source>Exposure bias</source>
 | 
			
		||||
        <translation>Biais d'exposition</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="115"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="101"/>
 | 
			
		||||
        <source>Focal length</source>
 | 
			
		||||
        <translation>Distance focale</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="117"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <source>Max aperture</source>
 | 
			
		||||
        <translation>Ouverture maximale</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="119"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <source>Metering mode</source>
 | 
			
		||||
        <translation>Mode de mesure</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="121"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <source>Flash mode</source>
 | 
			
		||||
        <translation>Mode flash</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="123"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <source>35mm focal length</source>
 | 
			
		||||
        <translation>Distance focale de 35 mm</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="112"/>
 | 
			
		||||
        <source>Lens model</source>
 | 
			
		||||
        <translation>Modèle d'objectif</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="128"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="114"/>
 | 
			
		||||
        <source>Brightness</source>
 | 
			
		||||
        <translation>Luminosité</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="130"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="116"/>
 | 
			
		||||
        <source>Exposure program</source>
 | 
			
		||||
        <translation>Programme d'exposition</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="132"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="118"/>
 | 
			
		||||
        <source>Saturation</source>
 | 
			
		||||
        <translation>Saturation</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="134"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="120"/>
 | 
			
		||||
        <source>Sharpness</source>
 | 
			
		||||
        <translation>Netteté</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="136"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="122"/>
 | 
			
		||||
        <source>White balance</source>
 | 
			
		||||
        <translation>Balance des blancs</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="138"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="124"/>
 | 
			
		||||
        <source>Digital zoom</source>
 | 
			
		||||
        <translation>Zoom numérique</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="140"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <source>EXIF version</source>
 | 
			
		||||
        <translation>Version EXIF</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="143"/>
 | 
			
		||||
        <source>Latitude reference</source>
 | 
			
		||||
        <translation>Référence de latitude</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="145"/>
 | 
			
		||||
        <source>Latitude</source>
 | 
			
		||||
        <translation>Latitude</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="147"/>
 | 
			
		||||
        <source>Longitude reference</source>
 | 
			
		||||
        <translation>Référence de longitude</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="149"/>
 | 
			
		||||
        <source>Longitude</source>
 | 
			
		||||
        <translation>Longitude</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="151"/>
 | 
			
		||||
        <source>Altitude reference</source>
 | 
			
		||||
        <translation>Référence d'altitude</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>Altitude</source>
 | 
			
		||||
        <translation>Altitude</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="163"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="135"/>
 | 
			
		||||
        <source>%1 x %2</source>
 | 
			
		||||
        <translation>%1 × %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="181"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>%1 : %2</source>
 | 
			
		||||
        <translation>%1 : %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="288"/>
 | 
			
		||||
        <source>Property</source>
 | 
			
		||||
        <translation>Propriété</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="288"/>
 | 
			
		||||
        <source>Value</source>
 | 
			
		||||
        <translation>Valeur</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -613,60 +522,45 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SettingsDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="16"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="15"/>
 | 
			
		||||
        <source>Settings</source>
 | 
			
		||||
        <translation>Paramètres</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="20"/>
 | 
			
		||||
        <source>Do nothing</source>
 | 
			
		||||
        <translation>Ne rien faire</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <source>Close the window</source>
 | 
			
		||||
        <translation>Fermer la fenêtre</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="23"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation>Activer/désactiver l'agrandissement</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Zoom in and out</source>
 | 
			
		||||
        <translation>Zoom avant et arrière</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="28"/>
 | 
			
		||||
        <source>View next or previous item</source>
 | 
			
		||||
        <translation>Voir l'élément suivant ou précédent</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="41"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="30"/>
 | 
			
		||||
        <source>Stay on top when start-up</source>
 | 
			
		||||
        <translation>Rester en-haut lors du démarrage</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="42"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="31"/>
 | 
			
		||||
        <source>Double-click behavior</source>
 | 
			
		||||
        <translation>Comportement du double-clic</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="43"/>
 | 
			
		||||
        <source>Mouse wheel behavior</source>
 | 
			
		||||
        <translation>Comportement de la molette de la souris</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>main</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="31"/>
 | 
			
		||||
        <location filename="../app/main.cpp" line="28"/>
 | 
			
		||||
        <source>Pineapple Pictures</source>
 | 
			
		||||
        <translation>Pineapple Pictures</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/main.cpp" line="32"/>
 | 
			
		||||
        <source>File list.</source>
 | 
			
		||||
        <translation>Liste des fichiers.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -4,163 +4,162 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>AboutDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <source>About</source>
 | 
			
		||||
        <translation>Om</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <source>Launch application with image file path as argument to load the file.</source>
 | 
			
		||||
        <translation>Kjør programmer ved å angi en filsti som argument for å laste inn filen.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Drag and drop image file onto the window is also supported.</source>
 | 
			
		||||
        <translation>Å dra og slippe filen i vinduet støttes også.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>None of the operations in this application will alter the pictures on disk.</source>
 | 
			
		||||
        <translation>Ingen av operasjonene i dette programmet vil endre bildet som det er lagret.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="29"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>Context menu option explanation:</source>
 | 
			
		||||
        <translation>Forklaring av alternativer i bindeleddsmeny:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="32"/>
 | 
			
		||||
        <source>Make window stay on top of all other windows.</source>
 | 
			
		||||
        <translation>Få vinduet til å alltid ligge over andre vinduer.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="39"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <source>Avoid close window accidentally. (eg. by double clicking the window)</source>
 | 
			
		||||
        <translation>Unngå lukking av vinduet ved feiltagelser (f.eks. ved dobbeltklikking av vinduet)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="47"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="45"/>
 | 
			
		||||
        <source>Version: %1</source>
 | 
			
		||||
        <translation>Versjon: %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="48"/>
 | 
			
		||||
        <source>Copyright (c) 2020 %1</source>
 | 
			
		||||
        <translation>Opphavsrett © 2020 %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <source>Logo designed by %1</source>
 | 
			
		||||
        <translation>Logo designet av %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="54"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <source>Built with Qt %1 (%2)</source>
 | 
			
		||||
        <translation>Bygd med Qt %1 (%2)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="55"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="53"/>
 | 
			
		||||
        <source>Source code</source>
 | 
			
		||||
        <translation>Kildekode</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="63"/>
 | 
			
		||||
        <source>Contributors</source>
 | 
			
		||||
        <translation>Bidragsytere</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="67"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <source>List of contributors on GitHub</source>
 | 
			
		||||
        <translation>Liste over bidragsytere på GitHub</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="68"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="66"/>
 | 
			
		||||
        <source>Thanks to all people who contributed to this project.</source>
 | 
			
		||||
        <translation>Takk til alle som har bidratt til prosjektet.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="72"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="70"/>
 | 
			
		||||
        <source>Translators</source>
 | 
			
		||||
        <translation>Oversettere</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="73"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="71"/>
 | 
			
		||||
        <source>I would like to thank the following people who volunteered to translate this application.</source>
 | 
			
		||||
        <translation>Takk til følgende dugnadsoversettere.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="117"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="115"/>
 | 
			
		||||
        <source>%1 is built on the following free software libraries:</source>
 | 
			
		||||
        <comment>Free as in freedom</comment>
 | 
			
		||||
        <translation type="unfinished">%1 er bygd med følgende friprog-bibliotek:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <source>&Special Thanks</source>
 | 
			
		||||
        <translation>&Spesiell takk til</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="143"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <source>&Third-party Libraries</source>
 | 
			
		||||
        <translation>&Tredjepartslisenser</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="77"/>
 | 
			
		||||
        <source>Your Rights</source>
 | 
			
		||||
        <translation>Dine rettigheter</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <source>%1 is released under the MIT License.</source>
 | 
			
		||||
        <translation>%1 er MIT-lisensiert.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="80"/>
 | 
			
		||||
        <source>This license grants people a number of freedoms:</source>
 | 
			
		||||
        <translation>Lisensen gir den en rekke friheter:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <source>You are free to use %1, for any purpose</source>
 | 
			
		||||
        <translation>Du kan bruke %1 som du vil</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <source>You are free to distribute %1</source>
 | 
			
		||||
        <translation>Du kan dele %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="85"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <source>You can study how %1 works and change it</source>
 | 
			
		||||
        <translation>Du kan se kildekoden til %1 og endre den</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <source>You can distribute changed versions of %1</source>
 | 
			
		||||
        <translation>Du kan distribuere endrede versjoner av %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="88"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
 | 
			
		||||
        <translation>MIT-lisensen garanterer deg disse frihetene.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="116"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="114"/>
 | 
			
		||||
        <source>Third-party Libraries used by %1</source>
 | 
			
		||||
        <translation>Tredjepartsbibliotek brukt av %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <source>%1 is built on the following free software libraries:</source>
 | 
			
		||||
        <translation type="vanished">%1 er bygd med følgende friprog-bibliotek:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="137"/>
 | 
			
		||||
        <source>&Help</source>
 | 
			
		||||
        <translation>&Hjelp</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="138"/>
 | 
			
		||||
        <source>&About</source>
 | 
			
		||||
        <translation>&Om</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="142"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <source>&License</source>
 | 
			
		||||
        <translation>&Lisens</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -168,7 +167,7 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsScene</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsscene.cpp" line="48"/>
 | 
			
		||||
        <location filename="../app/graphicsscene.cpp" line="16"/>
 | 
			
		||||
        <source>Drag image here</source>
 | 
			
		||||
        <translation>Dra bilde hit</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -176,28 +175,28 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsView</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="329"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="254"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation>Listen over filnettadresser er tom</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="52"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="46"/>
 | 
			
		||||
        <source>File is not a valid image</source>
 | 
			
		||||
        <translation>Filen er ikke et gyldig bilde</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="57"/>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="62"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="48"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="52"/>
 | 
			
		||||
        <source>Image data is invalid or currently unsupported</source>
 | 
			
		||||
        <translation>Ugyldig bildedata, eller for tiden ustøttet</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="337"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="262"/>
 | 
			
		||||
        <source>Image data is invalid</source>
 | 
			
		||||
        <translation>Ugyldig bildedata</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="344"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="269"/>
 | 
			
		||||
        <source>Not supported mimedata: %1</source>
 | 
			
		||||
        <translation>Ustøttet MIME-data: %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -205,102 +204,67 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MainWindow</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="163"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="176"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation>Listen over filnettadresser er ugyldig</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="374"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="370"/>
 | 
			
		||||
        <source>&Copy</source>
 | 
			
		||||
        <translation>&Kopier</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="73"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="391"/>
 | 
			
		||||
        <source>Copy P&ixmap</source>
 | 
			
		||||
        <translation type="unfinished">Kopier p&ixmap</translation>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="74"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="396"/>
 | 
			
		||||
        <source>Copy &File Path</source>
 | 
			
		||||
        <translation>Kopier %filsti</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="80"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="406"/>
 | 
			
		||||
        <source>&Paste Image</source>
 | 
			
		||||
        <translation>&Lim inn bilde</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="412"/>
 | 
			
		||||
        <source>&Paste Image File</source>
 | 
			
		||||
        <translation>&Lim inn bildefil</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="445"/>
 | 
			
		||||
        <source>Properties</source>
 | 
			
		||||
        <translation>Egenskaper</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="76"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="31"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="417"/>
 | 
			
		||||
        <source>Stay on top</source>
 | 
			
		||||
        <translation>Behold øverst</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="38"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="77"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="424"/>
 | 
			
		||||
        <source>Protected mode</source>
 | 
			
		||||
        <translation>Beskyttet modus</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="65"/>
 | 
			
		||||
        <source>Zoom in</source>
 | 
			
		||||
        <translation>Førstørr</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="66"/>
 | 
			
		||||
        <source>Zoom out</source>
 | 
			
		||||
        <translation>Forminsk</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="70"/>
 | 
			
		||||
        <source>Flip &Horizontally</source>
 | 
			
		||||
        <translation>Vent &vanrett</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="75"/>
 | 
			
		||||
        <source>&Paste</source>
 | 
			
		||||
        <translation>&Lim inn</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="67"/>
 | 
			
		||||
        <source>Toggle Checkerboard</source>
 | 
			
		||||
        <translation type="unfinished">Skru av/på rutemønster</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="63"/>
 | 
			
		||||
        <source>Actual size</source>
 | 
			
		||||
        <translation>Faktisk størrelse</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="64"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation type="unfinished">Veksle maksimering</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="68"/>
 | 
			
		||||
        <source>Rotate right</source>
 | 
			
		||||
        <translation>Roter til høyre</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="78"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="431"/>
 | 
			
		||||
        <source>Configure...</source>
 | 
			
		||||
        <translation>Sett opp …</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="79"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="438"/>
 | 
			
		||||
        <source>Help</source>
 | 
			
		||||
        <translation>Hjelp</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="81"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation>Avslutt</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <location filename="../app/metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <source>Image Metadata</source>
 | 
			
		||||
        <translation>Bilde-metadata</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -308,304 +272,249 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataModel</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <source>Origin</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Opprinnelse</translation>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <source>Image</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Bilde</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="43"/>
 | 
			
		||||
        <source>File</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Fil</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <source>Camera</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Kamera</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <source>%1 File</source>
 | 
			
		||||
        <translation>%1-fil</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Beskrivelse</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <source>Advanced photo</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Avansert bilde</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="40"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <source>GPS</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>GPS</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="44"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Dimensions</source>
 | 
			
		||||
        <translation>Dimensjoner</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Aspect ratio</source>
 | 
			
		||||
        <translation>Størrelsesforhold</translation>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="48"/>
 | 
			
		||||
        <source>Aspect Ratio</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="49"/>
 | 
			
		||||
        <source>Frame count</source>
 | 
			
		||||
        <translation type="unfinished">Rammeantall</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="51"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation>Navn</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <source>Item type</source>
 | 
			
		||||
        <translation>Elementstype</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <source>Folder path</source>
 | 
			
		||||
        <translation>Mappesti</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <source>Size</source>
 | 
			
		||||
        <translation>Størrelse</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date created</source>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <source>Date Created</source>
 | 
			
		||||
        <translation>Dato opprettet</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="63"/>
 | 
			
		||||
        <source>Date modified</source>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date Modified</source>
 | 
			
		||||
        <translation>Dato endret</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Title</source>
 | 
			
		||||
        <translation>Tittel</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="72"/>
 | 
			
		||||
        <source>Subject</source>
 | 
			
		||||
        <translation>Emne</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="74"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="68"/>
 | 
			
		||||
        <source>Rating</source>
 | 
			
		||||
        <translation>Vurdering</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="76"/>
 | 
			
		||||
        <source>Tags</source>
 | 
			
		||||
        <translation>Etiketter</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="78"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Comments</source>
 | 
			
		||||
        <translation>Kommentarer</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="81"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="73"/>
 | 
			
		||||
        <source>Authors</source>
 | 
			
		||||
        <translation type="unfinished">Opphavsmenn</translation>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="83"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="75"/>
 | 
			
		||||
        <source>Date taken</source>
 | 
			
		||||
        <translation>Dato tatt</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="77"/>
 | 
			
		||||
        <source>Program name</source>
 | 
			
		||||
        <translation>Programnavn</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Copyright</source>
 | 
			
		||||
        <translation>Opphavsrett</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="94"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="80"/>
 | 
			
		||||
        <source>Horizontal resolution</source>
 | 
			
		||||
        <translation>Vannrett oppløsning</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="96"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="82"/>
 | 
			
		||||
        <source>Vertical resolution</source>
 | 
			
		||||
        <translation>Loddrett oppløsning</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="98"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="84"/>
 | 
			
		||||
        <source>Resolution unit</source>
 | 
			
		||||
        <translation>Oppløsningsenhet</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="100"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="86"/>
 | 
			
		||||
        <source>Colour representation</source>
 | 
			
		||||
        <translation>Fargerepresentasjon</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <source>Camera maker</source>
 | 
			
		||||
        <translation>Kamerafabrikat</translation>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Camera model</source>
 | 
			
		||||
        <translation>Kameramodell</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="93"/>
 | 
			
		||||
        <source>F-stop</source>
 | 
			
		||||
        <translation>Blenderåpning</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="95"/>
 | 
			
		||||
        <source>Exposure time</source>
 | 
			
		||||
        <translation>Eksponeringstid</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="111"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="97"/>
 | 
			
		||||
        <source>ISO speed</source>
 | 
			
		||||
        <translation>ISO-hastighet</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="113"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="99"/>
 | 
			
		||||
        <source>Exposure bias</source>
 | 
			
		||||
        <translation type="unfinished">Eksponeringskorrigering</translation>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="115"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="101"/>
 | 
			
		||||
        <source>Focal length</source>
 | 
			
		||||
        <translation>Brennvidde</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="117"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <source>Max aperture</source>
 | 
			
		||||
        <translation type="unfinished">Maks. blenderåpning</translation>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="119"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <source>Metering mode</source>
 | 
			
		||||
        <translation type="unfinished">Målingsmodus</translation>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="121"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <source>Flash mode</source>
 | 
			
		||||
        <translation>Blitz-modus</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="123"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <source>35mm focal length</source>
 | 
			
		||||
        <translation type="unfinished">35 mm-brennvidde</translation>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="112"/>
 | 
			
		||||
        <source>Lens model</source>
 | 
			
		||||
        <translation>Linsemodell</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="128"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="114"/>
 | 
			
		||||
        <source>Brightness</source>
 | 
			
		||||
        <translation>Lysstyrke</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="130"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="116"/>
 | 
			
		||||
        <source>Exposure program</source>
 | 
			
		||||
        <translation type="unfinished">Eksponeringsprogram</translation>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="132"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="118"/>
 | 
			
		||||
        <source>Saturation</source>
 | 
			
		||||
        <translation>Metning</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="134"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="120"/>
 | 
			
		||||
        <source>Sharpness</source>
 | 
			
		||||
        <translation>Skarphet</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="136"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="122"/>
 | 
			
		||||
        <source>White balance</source>
 | 
			
		||||
        <translation>Hvitbalanse</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="138"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="124"/>
 | 
			
		||||
        <source>Digital zoom</source>
 | 
			
		||||
        <translation>Digital forstørrelse</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="140"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <source>EXIF version</source>
 | 
			
		||||
        <translation>EXIF-versjon</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="143"/>
 | 
			
		||||
        <source>Latitude reference</source>
 | 
			
		||||
        <translation>Breddegradsreferanse</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="145"/>
 | 
			
		||||
        <source>Latitude</source>
 | 
			
		||||
        <translation>Breddegrad</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="147"/>
 | 
			
		||||
        <source>Longitude reference</source>
 | 
			
		||||
        <translation>Lengdegradsreferanse</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="149"/>
 | 
			
		||||
        <source>Longitude</source>
 | 
			
		||||
        <translation>Lengdegrad</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="151"/>
 | 
			
		||||
        <source>Altitude reference</source>
 | 
			
		||||
        <translation>Høydereferanse</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>Altitude</source>
 | 
			
		||||
        <translation>Høyde</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="163"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="135"/>
 | 
			
		||||
        <source>%1 x %2</source>
 | 
			
		||||
        <translation>%1 x %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="181"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>%1 : %2</source>
 | 
			
		||||
        <translation>%1 : %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="288"/>
 | 
			
		||||
        <source>Property</source>
 | 
			
		||||
        <translation>Egenskap</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="288"/>
 | 
			
		||||
        <source>Value</source>
 | 
			
		||||
        <translation>Verdi</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -613,60 +522,45 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SettingsDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="16"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="15"/>
 | 
			
		||||
        <source>Settings</source>
 | 
			
		||||
        <translation>Innstillinger</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="20"/>
 | 
			
		||||
        <source>Do nothing</source>
 | 
			
		||||
        <translation>Ikke gjør noe</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <source>Close the window</source>
 | 
			
		||||
        <translation>Lukk vinduet</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="23"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation>Veksle maksimering</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Zoom in and out</source>
 | 
			
		||||
        <translation>Zoom inn og ut</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="28"/>
 | 
			
		||||
        <source>View next or previous item</source>
 | 
			
		||||
        <translation>Vis neste eller forrige element</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="41"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="30"/>
 | 
			
		||||
        <source>Stay on top when start-up</source>
 | 
			
		||||
        <translation>Behold i forgrunnen ved oppstart</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="42"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="31"/>
 | 
			
		||||
        <source>Double-click behavior</source>
 | 
			
		||||
        <translation>Dobbeltklikksoppførsel</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="43"/>
 | 
			
		||||
        <source>Mouse wheel behavior</source>
 | 
			
		||||
        <translation>Musehjulsoppførsel</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>main</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="31"/>
 | 
			
		||||
        <location filename="../app/main.cpp" line="28"/>
 | 
			
		||||
        <source>Pineapple Pictures</source>
 | 
			
		||||
        <translation type="unfinished">Ananasbilder</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/main.cpp" line="32"/>
 | 
			
		||||
        <source>File list.</source>
 | 
			
		||||
        <translation>Filliste.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
							
								
								
									
										564
									
								
								translations/PineapplePictures_ru.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,564 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!DOCTYPE TS>
 | 
			
		||||
<TS version="2.1" language="ru">
 | 
			
		||||
<context>
 | 
			
		||||
    <name>AboutDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <source>About</source>
 | 
			
		||||
        <translation>О программе</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <source>Launch application with image file path as argument to load the file.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Drag and drop image file onto the window is also supported.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>Context menu option explanation:</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="32"/>
 | 
			
		||||
        <source>Make window stay on top of all other windows.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <source>Avoid close window accidentally. (eg. by double clicking the window)</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="45"/>
 | 
			
		||||
        <source>Version: %1</source>
 | 
			
		||||
        <translation>Версия: %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="48"/>
 | 
			
		||||
        <source>Copyright (c) 2020 %1</source>
 | 
			
		||||
        <translation>Авторское право (c) 2020 %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <source>Logo designed by %1</source>
 | 
			
		||||
        <translation>Логотип разработан %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <source>Built with Qt %1 (%2)</source>
 | 
			
		||||
        <translation>Создано с использованием Qt %1 (%2)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="53"/>
 | 
			
		||||
        <source>Source code</source>
 | 
			
		||||
        <translation>Исходный код</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="63"/>
 | 
			
		||||
        <source>Contributors</source>
 | 
			
		||||
        <translation>Участники</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <source>List of contributors on GitHub</source>
 | 
			
		||||
        <translation>Список участников на GitHub</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="66"/>
 | 
			
		||||
        <source>Thanks to all people who contributed to this project.</source>
 | 
			
		||||
        <translation>Спасибо всем, кто внес свой вклад в этот проект.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="70"/>
 | 
			
		||||
        <source>Translators</source>
 | 
			
		||||
        <translation>Переводчики</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="71"/>
 | 
			
		||||
        <source>I would like to thank the following people who volunteered to translate this application.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="115"/>
 | 
			
		||||
        <source>%1 is built on the following free software libraries:</source>
 | 
			
		||||
        <comment>Free as in freedom</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <source>&Special Thanks</source>
 | 
			
		||||
        <translation>&Особая благодарность</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <source>&Third-party Libraries</source>
 | 
			
		||||
        <translation>&Сторонние библиотеки</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="77"/>
 | 
			
		||||
        <source>Your Rights</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <source>%1 is released under the MIT License.</source>
 | 
			
		||||
        <translation>%1 выпущен под лицензией MIT.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="80"/>
 | 
			
		||||
        <source>This license grants people a number of freedoms:</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <source>You are free to use %1, for any purpose</source>
 | 
			
		||||
        <translation>Вы можете использовать %1, для любых целей</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <source>You are free to distribute %1</source>
 | 
			
		||||
        <translation>Вы можете свободно распространять %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <source>You can study how %1 works and change it</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <source>You can distribute changed versions of %1</source>
 | 
			
		||||
        <translation>Вы можете распространять измененные версии %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="114"/>
 | 
			
		||||
        <source>Third-party Libraries used by %1</source>
 | 
			
		||||
        <translation>Сторонние библиотеки, используемые %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="137"/>
 | 
			
		||||
        <source>&Help</source>
 | 
			
		||||
        <translation>&Помощь</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="138"/>
 | 
			
		||||
        <source>&About</source>
 | 
			
		||||
        <translation>&О программе</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <source>&License</source>
 | 
			
		||||
        <translation>&Лицензия</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsScene</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/graphicsscene.cpp" line="16"/>
 | 
			
		||||
        <source>Drag image here</source>
 | 
			
		||||
        <translation>Перетащите изображение сюда</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsView</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="254"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="46"/>
 | 
			
		||||
        <source>File is not a valid image</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="48"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="52"/>
 | 
			
		||||
        <source>Image data is invalid or currently unsupported</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="262"/>
 | 
			
		||||
        <source>Image data is invalid</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="269"/>
 | 
			
		||||
        <source>Not supported mimedata: %1</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MainWindow</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="176"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="370"/>
 | 
			
		||||
        <source>&Copy</source>
 | 
			
		||||
        <translation>&Копировать</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="391"/>
 | 
			
		||||
        <source>Copy P&ixmap</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="396"/>
 | 
			
		||||
        <source>Copy &File Path</source>
 | 
			
		||||
        <translation>Копировать &Путь к файлу</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="406"/>
 | 
			
		||||
        <source>&Paste Image</source>
 | 
			
		||||
        <translation>&Вставить изображение</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="412"/>
 | 
			
		||||
        <source>&Paste Image File</source>
 | 
			
		||||
        <translation>&Вставить файл изображения</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="445"/>
 | 
			
		||||
        <source>Properties</source>
 | 
			
		||||
        <translation>Свойства</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="31"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="417"/>
 | 
			
		||||
        <source>Stay on top</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="424"/>
 | 
			
		||||
        <source>Protected mode</source>
 | 
			
		||||
        <translation>Защищенный режим</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="431"/>
 | 
			
		||||
        <source>Configure...</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="438"/>
 | 
			
		||||
        <source>Help</source>
 | 
			
		||||
        <translation>Помощь</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <source>Image Metadata</source>
 | 
			
		||||
        <translation>Метаданные изображения</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataModel</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <source>Origin</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Происхождение</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <source>Image</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Изображение</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="43"/>
 | 
			
		||||
        <source>File</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Файл</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <source>Camera</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Камера</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <source>%1 File</source>
 | 
			
		||||
        <translation>%1 Файл</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>Описание</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <source>Advanced photo</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <source>GPS</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>GPS</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Dimensions</source>
 | 
			
		||||
        <translation>Размеры</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="48"/>
 | 
			
		||||
        <source>Aspect Ratio</source>
 | 
			
		||||
        <translation>Соотношение сторон</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="51"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation>Название</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <source>Item type</source>
 | 
			
		||||
        <translation>Тип элемента</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <source>Folder path</source>
 | 
			
		||||
        <translation>Путь к папке</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <source>Size</source>
 | 
			
		||||
        <translation>Размер</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <source>Date Created</source>
 | 
			
		||||
        <translation>Дата создания</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date Modified</source>
 | 
			
		||||
        <translation>Дата изменения</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="68"/>
 | 
			
		||||
        <source>Rating</source>
 | 
			
		||||
        <translation>Рейтинг</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Comments</source>
 | 
			
		||||
        <translation>Комментарии</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="73"/>
 | 
			
		||||
        <source>Authors</source>
 | 
			
		||||
        <translation>Авторы</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="75"/>
 | 
			
		||||
        <source>Date taken</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="77"/>
 | 
			
		||||
        <source>Program name</source>
 | 
			
		||||
        <translation>Название программы</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="80"/>
 | 
			
		||||
        <source>Horizontal resolution</source>
 | 
			
		||||
        <translation>Горизонтальное разрешение</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="82"/>
 | 
			
		||||
        <source>Vertical resolution</source>
 | 
			
		||||
        <translation>Вертикальное разрешение</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="84"/>
 | 
			
		||||
        <source>Resolution unit</source>
 | 
			
		||||
        <translation>Единица разрешения</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="86"/>
 | 
			
		||||
        <source>Colour representation</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <source>Camera maker</source>
 | 
			
		||||
        <translation>Производитель камеры</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Camera model</source>
 | 
			
		||||
        <translation>Модель камеры</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="93"/>
 | 
			
		||||
        <source>F-stop</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="95"/>
 | 
			
		||||
        <source>Exposure time</source>
 | 
			
		||||
        <translation>Экспозиция</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="97"/>
 | 
			
		||||
        <source>ISO speed</source>
 | 
			
		||||
        <translation>ISO</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="99"/>
 | 
			
		||||
        <source>Exposure bias</source>
 | 
			
		||||
        <translation>Смещение экспозиции</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="101"/>
 | 
			
		||||
        <source>Focal length</source>
 | 
			
		||||
        <translation>Фокусное расстояние</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <source>Max aperture</source>
 | 
			
		||||
        <translation>Максимальная апертура</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <source>Metering mode</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <source>Flash mode</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <source>35mm focal length</source>
 | 
			
		||||
        <translation>Фокусное расстояние 35 мм</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="112"/>
 | 
			
		||||
        <source>Lens model</source>
 | 
			
		||||
        <translation>Модель объектива</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="114"/>
 | 
			
		||||
        <source>Brightness</source>
 | 
			
		||||
        <translation>Яркость</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="116"/>
 | 
			
		||||
        <source>Exposure program</source>
 | 
			
		||||
        <translation>Программа экспозиции</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="118"/>
 | 
			
		||||
        <source>Saturation</source>
 | 
			
		||||
        <translation>Насыщенность</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="120"/>
 | 
			
		||||
        <source>Sharpness</source>
 | 
			
		||||
        <translation>Четкость</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="122"/>
 | 
			
		||||
        <source>White balance</source>
 | 
			
		||||
        <translation>Баланс белого</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="124"/>
 | 
			
		||||
        <source>Digital zoom</source>
 | 
			
		||||
        <translation>Цифровой зум</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <source>EXIF version</source>
 | 
			
		||||
        <translation>Версия EXIF</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="135"/>
 | 
			
		||||
        <source>%1 x %2</source>
 | 
			
		||||
        <translation>%1 x %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>%1 : %2</source>
 | 
			
		||||
        <translation>%1 : %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="288"/>
 | 
			
		||||
        <source>Property</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="288"/>
 | 
			
		||||
        <source>Value</source>
 | 
			
		||||
        <translation>Значение</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SettingsDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="15"/>
 | 
			
		||||
        <source>Settings</source>
 | 
			
		||||
        <translation>Настройки</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="20"/>
 | 
			
		||||
        <source>Do nothing</source>
 | 
			
		||||
        <translation>Ничего не делать</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <source>Close the window</source>
 | 
			
		||||
        <translation>Закрыть окно</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="30"/>
 | 
			
		||||
        <source>Stay on top when start-up</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="31"/>
 | 
			
		||||
        <source>Double-click behavior</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>main</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/main.cpp" line="28"/>
 | 
			
		||||
        <source>Pineapple Pictures</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/main.cpp" line="32"/>
 | 
			
		||||
        <source>File list.</source>
 | 
			
		||||
        <translation>Список файлов.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
</TS>
 | 
			
		||||
@ -4,163 +4,162 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>AboutDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="23"/>
 | 
			
		||||
        <source>About</source>
 | 
			
		||||
        <translation>关于</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="26"/>
 | 
			
		||||
        <source>Launch application with image file path as argument to load the file.</source>
 | 
			
		||||
        <translation>以图片文件的路径作为参数运行程序即可直接打开图片文件。</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Drag and drop image file onto the window is also supported.</source>
 | 
			
		||||
        <translation>也支持拖放图片文件到窗口内来加载图片。</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>None of the operations in this application will alter the pictures on disk.</source>
 | 
			
		||||
        <translation>此程序中所有的操作均不会修改图片文件本身。</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="29"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="28"/>
 | 
			
		||||
        <source>Context menu option explanation:</source>
 | 
			
		||||
        <translation>菜单项说明:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="32"/>
 | 
			
		||||
        <source>Make window stay on top of all other windows.</source>
 | 
			
		||||
        <translation>使窗口始终至于其它非置顶窗口上方。</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="39"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="36"/>
 | 
			
		||||
        <source>Avoid close window accidentally. (eg. by double clicking the window)</source>
 | 
			
		||||
        <translation>避免窗口意外关闭。(如:不小心双击了窗口触发了关闭窗口行为)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="47"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="45"/>
 | 
			
		||||
        <source>Version: %1</source>
 | 
			
		||||
        <translation>版本: %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="48"/>
 | 
			
		||||
        <source>Copyright (c) 2020 %1</source>
 | 
			
		||||
        <translation>版权所有 (c) 2020 %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="50"/>
 | 
			
		||||
        <source>Logo designed by %1</source>
 | 
			
		||||
        <translation>Logo 由 %1 设计</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="54"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="52"/>
 | 
			
		||||
        <source>Built with Qt %1 (%2)</source>
 | 
			
		||||
        <translation>使用 Qt %1 (%2) 进行构建</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="55"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="53"/>
 | 
			
		||||
        <source>Source code</source>
 | 
			
		||||
        <translation>源代码</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="63"/>
 | 
			
		||||
        <source>Contributors</source>
 | 
			
		||||
        <translation>贡献者</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="67"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="65"/>
 | 
			
		||||
        <source>List of contributors on GitHub</source>
 | 
			
		||||
        <translation>GitHub 上的贡献者列表</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="68"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="66"/>
 | 
			
		||||
        <source>Thanks to all people who contributed to this project.</source>
 | 
			
		||||
        <translation>感谢所有参与此项目的朋友。</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="72"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="70"/>
 | 
			
		||||
        <source>Translators</source>
 | 
			
		||||
        <translation>翻译者</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="73"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="71"/>
 | 
			
		||||
        <source>I would like to thank the following people who volunteered to translate this application.</source>
 | 
			
		||||
        <translation>我想要感谢下列自愿参与翻译此应用程序的朋友。</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="117"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="115"/>
 | 
			
		||||
        <source>%1 is built on the following free software libraries:</source>
 | 
			
		||||
        <comment>Free as in freedom</comment>
 | 
			
		||||
        <translation>%1 采用了下列自由软件程序库进行构建:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <source>&Special Thanks</source>
 | 
			
		||||
        <translation>致谢(&S)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="143"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="141"/>
 | 
			
		||||
        <source>&Third-party Libraries</source>
 | 
			
		||||
        <translation>第三方程序库(&T)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="77"/>
 | 
			
		||||
        <source>Your Rights</source>
 | 
			
		||||
        <translation>用户的权利</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="79"/>
 | 
			
		||||
        <source>%1 is released under the MIT License.</source>
 | 
			
		||||
        <translation>%1 是在 MIT 许可协议下发布的。</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="80"/>
 | 
			
		||||
        <source>This license grants people a number of freedoms:</source>
 | 
			
		||||
        <translation>此许可证赋予人们以下自由的权利:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="81"/>
 | 
			
		||||
        <source>You are free to use %1, for any purpose</source>
 | 
			
		||||
        <translation>任何人都可以为了任何目的自由地使用 %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="82"/>
 | 
			
		||||
        <source>You are free to distribute %1</source>
 | 
			
		||||
        <translation>任何人都可以自由地分发 %1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="85"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="83"/>
 | 
			
		||||
        <source>You can study how %1 works and change it</source>
 | 
			
		||||
        <translation>任何人都可以自由地研究 %1 的工作原理并对其进行修改</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="84"/>
 | 
			
		||||
        <source>You can distribute changed versions of %1</source>
 | 
			
		||||
        <translation>任何人都可以自由地分发修改过的 %1 版本</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="88"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="86"/>
 | 
			
		||||
        <source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
 | 
			
		||||
        <translation>此软件通过 MIT 许可证赋予用户上述自由,任何人无权剥夺。</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="116"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="114"/>
 | 
			
		||||
        <source>Third-party Libraries used by %1</source>
 | 
			
		||||
        <translation>%1 使用的第三方程序库</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="139"/>
 | 
			
		||||
        <source>%1 is built on the following free software libraries:</source>
 | 
			
		||||
        <translation type="vanished">%1 采用了下列自由软件程序库进行构建:</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="137"/>
 | 
			
		||||
        <source>&Help</source>
 | 
			
		||||
        <translation>帮助(&H)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="138"/>
 | 
			
		||||
        <source>&About</source>
 | 
			
		||||
        <translation>关于(&A)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="142"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="140"/>
 | 
			
		||||
        <source>&License</source>
 | 
			
		||||
        <translation>软件许可证(&L)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -168,7 +167,7 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsScene</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsscene.cpp" line="48"/>
 | 
			
		||||
        <location filename="../app/graphicsscene.cpp" line="16"/>
 | 
			
		||||
        <source>Drag image here</source>
 | 
			
		||||
        <translation>拖放图片至此</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -176,28 +175,28 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>GraphicsView</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="329"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="254"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation>文件 URL 列表为空</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="52"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="46"/>
 | 
			
		||||
        <source>File is not a valid image</source>
 | 
			
		||||
        <translation>文件不是有效的图片文件</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="57"/>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="62"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="48"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="52"/>
 | 
			
		||||
        <source>Image data is invalid or currently unsupported</source>
 | 
			
		||||
        <translation>图像数据无效或暂未支持</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="337"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="262"/>
 | 
			
		||||
        <source>Image data is invalid</source>
 | 
			
		||||
        <translation>图片数据无效</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../graphicsview.cpp" line="344"/>
 | 
			
		||||
        <location filename="../app/graphicsview.cpp" line="269"/>
 | 
			
		||||
        <source>Not supported mimedata: %1</source>
 | 
			
		||||
        <translation>不受支持的 MimeData 格式:%1</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -205,102 +204,67 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MainWindow</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="163"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="176"/>
 | 
			
		||||
        <source>File url list is empty</source>
 | 
			
		||||
        <translation>文件 URL 列表为空</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../mainwindow.cpp" line="374"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="370"/>
 | 
			
		||||
        <source>&Copy</source>
 | 
			
		||||
        <translation>复制(&C)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="73"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="391"/>
 | 
			
		||||
        <source>Copy P&ixmap</source>
 | 
			
		||||
        <translation>复制位图(&I)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="74"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="396"/>
 | 
			
		||||
        <source>Copy &File Path</source>
 | 
			
		||||
        <translation>复制文件路径(&F)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="80"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="406"/>
 | 
			
		||||
        <source>&Paste Image</source>
 | 
			
		||||
        <translation>粘贴图像(&P)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="412"/>
 | 
			
		||||
        <source>&Paste Image File</source>
 | 
			
		||||
        <translation>粘贴图像文件(&P)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="445"/>
 | 
			
		||||
        <source>Properties</source>
 | 
			
		||||
        <translation>属性</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="76"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="31"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="417"/>
 | 
			
		||||
        <source>Stay on top</source>
 | 
			
		||||
        <translation>总在最前</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../aboutdialog.cpp" line="38"/>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="77"/>
 | 
			
		||||
        <location filename="../app/aboutdialog.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="424"/>
 | 
			
		||||
        <source>Protected mode</source>
 | 
			
		||||
        <translation>保护模式</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="65"/>
 | 
			
		||||
        <source>Zoom in</source>
 | 
			
		||||
        <translation>放大</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="66"/>
 | 
			
		||||
        <source>Zoom out</source>
 | 
			
		||||
        <translation>缩小</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="70"/>
 | 
			
		||||
        <source>Flip &Horizontally</source>
 | 
			
		||||
        <translation>水平翻转(&H)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="75"/>
 | 
			
		||||
        <source>&Paste</source>
 | 
			
		||||
        <translation>粘贴(&P)</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="67"/>
 | 
			
		||||
        <source>Toggle Checkerboard</source>
 | 
			
		||||
        <translation>切换棋盘格</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="63"/>
 | 
			
		||||
        <source>Actual size</source>
 | 
			
		||||
        <translation>实际大小</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="64"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation>最大化窗口</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="68"/>
 | 
			
		||||
        <source>Rotate right</source>
 | 
			
		||||
        <translation>向右旋转</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="78"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="431"/>
 | 
			
		||||
        <source>Configure...</source>
 | 
			
		||||
        <translation>设置...</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="79"/>
 | 
			
		||||
        <location filename="../app/mainwindow.cpp" line="438"/>
 | 
			
		||||
        <source>Help</source>
 | 
			
		||||
        <translation>帮助</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../actionmanager.cpp" line="81"/>
 | 
			
		||||
        <source>Quit</source>
 | 
			
		||||
        <translation>退出</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <location filename="../app/metadatadialog.cpp" line="80"/>
 | 
			
		||||
        <source>Image Metadata</source>
 | 
			
		||||
        <translation>图像元信息</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -308,304 +272,249 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MetadataModel</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="36"/>
 | 
			
		||||
        <source>Origin</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>来源</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="37"/>
 | 
			
		||||
        <source>Image</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>图像</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="43"/>
 | 
			
		||||
        <source>File</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>文件</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="38"/>
 | 
			
		||||
        <source>Camera</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>照相机</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="28"/>
 | 
			
		||||
        <source>%1 File</source>
 | 
			
		||||
        <translation>%1 文件</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="35"/>
 | 
			
		||||
        <source>Description</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>说明</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="39"/>
 | 
			
		||||
        <source>Advanced photo</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>高级照片</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="40"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="41"/>
 | 
			
		||||
        <source>GPS</source>
 | 
			
		||||
        <comment>Section name.</comment>
 | 
			
		||||
        <translation>GPS</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="44"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Dimensions</source>
 | 
			
		||||
        <translation>分辨率</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="46"/>
 | 
			
		||||
        <source>Aspect ratio</source>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="48"/>
 | 
			
		||||
        <source>Aspect Ratio</source>
 | 
			
		||||
        <translation>纵横比</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="49"/>
 | 
			
		||||
        <source>Frame count</source>
 | 
			
		||||
        <translation>总帧数</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="51"/>
 | 
			
		||||
        <source>Name</source>
 | 
			
		||||
        <translation>名称</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="53"/>
 | 
			
		||||
        <source>Item type</source>
 | 
			
		||||
        <translation>项目类型</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="55"/>
 | 
			
		||||
        <source>Folder path</source>
 | 
			
		||||
        <translation>文件夹路径</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="57"/>
 | 
			
		||||
        <source>Size</source>
 | 
			
		||||
        <translation>大小</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date created</source>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="59"/>
 | 
			
		||||
        <source>Date Created</source>
 | 
			
		||||
        <translation>创建日期</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="63"/>
 | 
			
		||||
        <source>Date modified</source>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="61"/>
 | 
			
		||||
        <source>Date Modified</source>
 | 
			
		||||
        <translation>修改日期</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Title</source>
 | 
			
		||||
        <translation>标题</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="72"/>
 | 
			
		||||
        <source>Subject</source>
 | 
			
		||||
        <translation>主题</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="74"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="68"/>
 | 
			
		||||
        <source>Rating</source>
 | 
			
		||||
        <translation>分级</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="76"/>
 | 
			
		||||
        <source>Tags</source>
 | 
			
		||||
        <translation>标记</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="78"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="70"/>
 | 
			
		||||
        <source>Comments</source>
 | 
			
		||||
        <translation>备注</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="81"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="73"/>
 | 
			
		||||
        <source>Authors</source>
 | 
			
		||||
        <translation>作者</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="83"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="75"/>
 | 
			
		||||
        <source>Date taken</source>
 | 
			
		||||
        <translation>拍摄日期</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="77"/>
 | 
			
		||||
        <source>Program name</source>
 | 
			
		||||
        <translation>程序名称</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Copyright</source>
 | 
			
		||||
        <translation>版权</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="94"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="80"/>
 | 
			
		||||
        <source>Horizontal resolution</source>
 | 
			
		||||
        <translation>水平分辨率</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="96"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="82"/>
 | 
			
		||||
        <source>Vertical resolution</source>
 | 
			
		||||
        <translation>垂直分辨率</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="98"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="84"/>
 | 
			
		||||
        <source>Resolution unit</source>
 | 
			
		||||
        <translation>分辨率单位</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="100"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="86"/>
 | 
			
		||||
        <source>Colour representation</source>
 | 
			
		||||
        <translation>颜色表示</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="89"/>
 | 
			
		||||
        <source>Camera maker</source>
 | 
			
		||||
        <translation>照相机制造商</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="91"/>
 | 
			
		||||
        <source>Camera model</source>
 | 
			
		||||
        <translation>照相机型号</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="93"/>
 | 
			
		||||
        <source>F-stop</source>
 | 
			
		||||
        <translation>光圈值</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="95"/>
 | 
			
		||||
        <source>Exposure time</source>
 | 
			
		||||
        <translation>曝光时间</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="111"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="97"/>
 | 
			
		||||
        <source>ISO speed</source>
 | 
			
		||||
        <translation>ISO 感光度</translation>
 | 
			
		||||
        <translation>ISO 速度</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="113"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="99"/>
 | 
			
		||||
        <source>Exposure bias</source>
 | 
			
		||||
        <translation>曝光补偿</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="115"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="101"/>
 | 
			
		||||
        <source>Focal length</source>
 | 
			
		||||
        <translation>焦距</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="117"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="103"/>
 | 
			
		||||
        <source>Max aperture</source>
 | 
			
		||||
        <translation>镜头最大光圈</translation>
 | 
			
		||||
        <translation>最大光圈</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="119"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="105"/>
 | 
			
		||||
        <source>Metering mode</source>
 | 
			
		||||
        <translation>测光模式</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="121"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="107"/>
 | 
			
		||||
        <source>Flash mode</source>
 | 
			
		||||
        <translation>闪光灯模式</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="123"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="109"/>
 | 
			
		||||
        <source>35mm focal length</source>
 | 
			
		||||
        <translation>换算至 35mm 焦距</translation>
 | 
			
		||||
        <translation>35mm 焦距</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="112"/>
 | 
			
		||||
        <source>Lens model</source>
 | 
			
		||||
        <translation>镜头型号</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="128"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="114"/>
 | 
			
		||||
        <source>Brightness</source>
 | 
			
		||||
        <translation>亮度</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="130"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="116"/>
 | 
			
		||||
        <source>Exposure program</source>
 | 
			
		||||
        <translation>曝光程序</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="132"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="118"/>
 | 
			
		||||
        <source>Saturation</source>
 | 
			
		||||
        <translation>饱和度</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="134"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="120"/>
 | 
			
		||||
        <source>Sharpness</source>
 | 
			
		||||
        <translation>清晰度</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="136"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="122"/>
 | 
			
		||||
        <source>White balance</source>
 | 
			
		||||
        <translation>白平衡</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="138"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="124"/>
 | 
			
		||||
        <source>Digital zoom</source>
 | 
			
		||||
        <translation>数字缩放</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="140"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="126"/>
 | 
			
		||||
        <source>EXIF version</source>
 | 
			
		||||
        <translation>EXIF 版本</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="143"/>
 | 
			
		||||
        <source>Latitude reference</source>
 | 
			
		||||
        <translation>纬度基准</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="145"/>
 | 
			
		||||
        <source>Latitude</source>
 | 
			
		||||
        <translation>纬度</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="147"/>
 | 
			
		||||
        <source>Longitude reference</source>
 | 
			
		||||
        <translation>经度基准</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="149"/>
 | 
			
		||||
        <source>Longitude</source>
 | 
			
		||||
        <translation>经度</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="151"/>
 | 
			
		||||
        <source>Altitude reference</source>
 | 
			
		||||
        <translation>海拔基准</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>Altitude</source>
 | 
			
		||||
        <translation>海拔</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="163"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="135"/>
 | 
			
		||||
        <source>%1 x %2</source>
 | 
			
		||||
        <translation>%1 x %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="181"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="153"/>
 | 
			
		||||
        <source>%1 : %2</source>
 | 
			
		||||
        <translation>%1 : %2</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="288"/>
 | 
			
		||||
        <source>Property</source>
 | 
			
		||||
        <translation>属性</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../metadatamodel.cpp" line="306"/>
 | 
			
		||||
        <location filename="../app/metadatamodel.cpp" line="288"/>
 | 
			
		||||
        <source>Value</source>
 | 
			
		||||
        <translation>值</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -613,60 +522,45 @@
 | 
			
		||||
<context>
 | 
			
		||||
    <name>SettingsDialog</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="16"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="15"/>
 | 
			
		||||
        <source>Settings</source>
 | 
			
		||||
        <translation>设定</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="20"/>
 | 
			
		||||
        <source>Do nothing</source>
 | 
			
		||||
        <translation>什么也不做</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="21"/>
 | 
			
		||||
        <source>Close the window</source>
 | 
			
		||||
        <translation>关闭窗口</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="23"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="22"/>
 | 
			
		||||
        <source>Toggle maximize</source>
 | 
			
		||||
        <translation>最大化窗口</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="27"/>
 | 
			
		||||
        <source>Zoom in and out</source>
 | 
			
		||||
        <translation>放大和缩小</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="28"/>
 | 
			
		||||
        <source>View next or previous item</source>
 | 
			
		||||
        <translation>查看下一项或上一项</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="41"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="30"/>
 | 
			
		||||
        <source>Stay on top when start-up</source>
 | 
			
		||||
        <translation>启动时保持窗口总在最前</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="42"/>
 | 
			
		||||
        <location filename="../app/settingsdialog.cpp" line="31"/>
 | 
			
		||||
        <source>Double-click behavior</source>
 | 
			
		||||
        <translation>双击时的行为</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../settingsdialog.cpp" line="43"/>
 | 
			
		||||
        <source>Mouse wheel behavior</source>
 | 
			
		||||
        <translation>鼠标滚轮行为</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>main</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="31"/>
 | 
			
		||||
        <location filename="../app/main.cpp" line="28"/>
 | 
			
		||||
        <source>Pineapple Pictures</source>
 | 
			
		||||
        <translation>菠萝看图</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../main.cpp" line="35"/>
 | 
			
		||||
        <location filename="../app/main.cpp" line="32"/>
 | 
			
		||||
        <source>File list.</source>
 | 
			
		||||
        <translation>文件列表。</translation>
 | 
			
		||||
    </message>
 | 
			
		||||