4 Commits

30 changed files with 533 additions and 254 deletions

View File

@ -12,34 +12,34 @@ set (QT_MINIMUM_VERSION "5.10")
find_package(Qt5 ${QT_MINIMUM_VERSION} CONFIG REQUIRED Widgets Svg LinguistTools) find_package(Qt5 ${QT_MINIMUM_VERSION} CONFIG REQUIRED Widgets Svg LinguistTools)
set (PPIC_CPP_FILES set (PPIC_CPP_FILES
main.cpp app/main.cpp
mainwindow.cpp app/mainwindow.cpp
graphicsview.cpp app/graphicsview.cpp
graphicsscene.cpp app/graphicsscene.cpp
bottombuttongroup.cpp app/bottombuttongroup.cpp
navigatorview.cpp app/navigatorview.cpp
opacityhelper.cpp app/opacityhelper.cpp
toolbutton.cpp app/toolbutton.cpp
settings.cpp app/settings.cpp
settingsdialog.cpp app/settingsdialog.cpp
aboutdialog.cpp app/aboutdialog.cpp
metadatamodel.cpp app/metadatamodel.cpp
metadatadialog.cpp app/metadatadialog.cpp
) )
set (PPIC_HEADER_FILES set (PPIC_HEADER_FILES
mainwindow.h app/mainwindow.h
graphicsview.h app/graphicsview.h
graphicsscene.h app/graphicsscene.h
bottombuttongroup.h app/bottombuttongroup.h
navigatorview.h app/navigatorview.h
opacityhelper.h app/opacityhelper.h
toolbutton.h app/toolbutton.h
settings.h app/settings.h
settingsdialog.h app/settingsdialog.h
aboutdialog.h app/aboutdialog.h
metadatamodel.h app/metadatamodel.h
metadatadialog.h app/metadatadialog.h
) )
set (PPIC_QRC_FILES set (PPIC_QRC_FILES
@ -53,7 +53,7 @@ set (PPIC_RC_FILES
set (EXE_NAME ppic) set (EXE_NAME ppic)
# Translation # Translation
file (GLOB PPIC_TS_FILES languages/*.ts) file (GLOB PPIC_TS_FILES translations/*.ts)
set (PPIC_CPP_FILES_FOR_I18N ${PPIC_CPP_FILES}) set (PPIC_CPP_FILES_FOR_I18N ${PPIC_CPP_FILES})
qt5_create_translation(PPIC_QM_FILES ${PPIC_CPP_FILES_FOR_I18N} ${PPIC_TS_FILES}) qt5_create_translation(PPIC_QM_FILES ${PPIC_CPP_FILES_FOR_I18N} ${PPIC_TS_FILES})

View File

@ -51,8 +51,15 @@ void GraphicsView::showFileFromUrl(const QUrl &url, bool doRequestGallery)
// QImage::Format imageFormat = imageReader.imageFormat(); // QImage::Format imageFormat = imageReader.imageFormat();
if (imageReader.format().isEmpty()) { if (imageReader.format().isEmpty()) {
showText(tr("File is not a valid image")); showText(tr("File is not a valid image"));
} else if (!imageReader.supportsAnimation() && !imageReader.canRead()) {
showText(tr("Image data is invalid or currently unsupported"));
} else { } else {
showImage(QPixmap::fromImageReader(&imageReader)); const QPixmap & pixmap = QPixmap::fromImageReader(&imageReader);
if (pixmap.isNull()) {
showText(tr("Image data is invalid or currently unsupported"));
} else {
showImage(pixmap);
}
} }
} }

101
app/metadatadialog.cpp Normal file
View File

@ -0,0 +1,101 @@
#include "metadatadialog.h"
#include <QDialogButtonBox>
#include <QPainter>
#include <QStyledItemDelegate>
#include <QTreeView>
#include <QVBoxLayout>
#include <QHeaderView>
#include "metadatamodel.h"
class PropertyTreeView : public QTreeView
{
public:
explicit PropertyTreeView(QWidget* parent) : QTreeView(parent) {}
~PropertyTreeView() {}
protected:
void rowsInserted(const QModelIndex& parent, int start, int end) override
{
QTreeView::rowsInserted(parent, start, end);
if (!parent.isValid()) {
for (int row = start; row <= end; ++row) {
setupSection(row);
}
}
}
void reset() override
{
QTreeView::reset();
if (model()) {
for (int row = 0; row < model()->rowCount(); ++row) {
setupSection(row);
}
}
}
private:
void setupSection(int row)
{
expand(model()->index(row, 0));
setFirstColumnSpanned(row, QModelIndex(), true);
}
};
class PropertyTreeItemDelegate : public QStyledItemDelegate
{
public:
PropertyTreeItemDelegate(QObject* parent)
: QStyledItemDelegate(parent)
{}
protected:
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override
{
QStyleOptionViewItem opt = option;
if (!index.parent().isValid()) {
opt.font.setBold(true);
opt.features.setFlag(QStyleOptionViewItem::Alternate);
}
QStyledItemDelegate::paint(painter, opt, index);
}
};
MetadataDialog::MetadataDialog(QWidget *parent)
: QDialog(parent)
, m_treeView(new PropertyTreeView(this))
{
m_treeView->setRootIsDecorated(false);
m_treeView->setIndentation(0);
m_treeView->setItemDelegate(new PropertyTreeItemDelegate(m_treeView));
m_treeView->header()->resizeSection(0, sizeHint().width() / 2);
setWindowTitle(tr("Image Metadata"));
QDialogButtonBox * buttonBox = new QDialogButtonBox(QDialogButtonBox::Close);
setLayout(new QVBoxLayout);
layout()->addWidget(m_treeView);
layout()->addWidget(buttonBox);
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::close);
setWindowFlag(Qt::WindowContextHelpButtonHint, false);
}
MetadataDialog::~MetadataDialog()
{
}
void MetadataDialog::setMetadataModel(MetadataModel * model)
{
m_treeView->setModel(model);
}
QSize MetadataDialog::sizeHint() const
{
return QSize(520, 350);
}

View File

@ -21,21 +21,45 @@ void MetadataModel::setFile(const QString &imageFilePath)
QFileInfo fileInfo(imageFilePath); QFileInfo fileInfo(imageFilePath);
// It'll be fine if we don't re-use the image reader we pass to the graphics scene for now. // It'll be fine if we don't re-use the image reader we pass to the graphics scene for now.
QImageReader imgReader(imageFilePath); QImageReader imgReader(imageFilePath);
imgReader.setAutoTransform(true);
imgReader.setDecideFormatFromContent(true);
const QString & itemTypeString = tr("%1 File").arg(QString(imgReader.format().toUpper()));
const QString & sizeString = QLocale().formattedDataSize(fileInfo.size()); const QString & sizeString = QLocale().formattedDataSize(fileInfo.size());
const QString & timeString = QLocale().toString(fileInfo.lastModified(), QLocale::LongFormat); const QString & birthTimeString = QLocale().toString(fileInfo.birthTime(), QLocale::LongFormat);
const QString & imageSizeString = imageSize(imgReader.size()); const QString & lastModifiedTimeString = QLocale().toString(fileInfo.lastModified(), QLocale::LongFormat);
const QString & imageDimensionsString = imageSize(imgReader.size());
const QString & imageRatioString = imageSizeRatio(imgReader.size());
appendSection(QStringLiteral("General"), tr("General", "General info about the image, section name.")); #if 0
appendSection(QStringLiteral("Description"), tr("Description", "Section name."));
appendSection(QStringLiteral("Origin"), tr("Origin", "Section name."));
#endif // 0
appendSection(QStringLiteral("Image"), tr("Image", "Section name."));
#if 0
appendSection(QStringLiteral("Camera"), tr("Camera", "Section name."));
appendSection(QStringLiteral("AdvancedPhoto"), tr("Advanced photo", "Section name."));
appendSection(QStringLiteral("GPS"), tr("GPS", "Section name."));
#endif // 0
appendSection(QStringLiteral("File"), tr("File", "Section name."));
appendProperty(QStringLiteral("General"), QStringLiteral("General.Name"), appendProperty(QStringLiteral("Image"), QStringLiteral("Image.Dimensions"),
tr("File Name"), fileInfo.fileName()); tr("Dimensions"), imageDimensionsString);
appendProperty(QStringLiteral("General"), QStringLiteral("General.Size"), appendProperty(QStringLiteral("Image"), QStringLiteral("Image.SizeRatio"),
tr("File Size"), sizeString); tr("Aspect Ratio"), imageRatioString);
appendProperty(QStringLiteral("General"), QStringLiteral("General.Time"),
tr("Last Modified"), timeString); appendProperty(QStringLiteral("File"), QStringLiteral("File.Name"),
appendProperty(QStringLiteral("General"), QStringLiteral("General.ImageSize"), tr("Name"), fileInfo.fileName());
tr("Image Size"), imageSizeString); appendProperty(QStringLiteral("File"), QStringLiteral("File.ItemType"),
tr("Item type"), itemTypeString);
appendProperty(QStringLiteral("File"), QStringLiteral("File.Path"),
tr("Folder path"), fileInfo.path());
appendProperty(QStringLiteral("File"), QStringLiteral("File.Size"),
tr("Size"), sizeString);
appendProperty(QStringLiteral("File"), QStringLiteral("File.CreatedTime"),
tr("Date Created"), birthTimeString);
appendProperty(QStringLiteral("File"), QStringLiteral("File.LastModified"),
tr("Date Modified"), lastModifiedTimeString);
} }
QString MetadataModel::imageSize(const QSize &size) QString MetadataModel::imageSize(const QSize &size)
@ -51,6 +75,19 @@ QString MetadataModel::imageSize(const QSize &size)
return imageSize; return imageSize;
} }
int simplegcd(int a, int b) {
return b == 0 ? a : simplegcd(b, a % b);
}
QString MetadataModel::imageSizeRatio(const QSize &size)
{
if (!size.isValid()) {
return QStringLiteral("-");
}
int gcd = simplegcd(size.width(), size.height());
return tr("%1 : %2").arg(QString::number(size.width() / gcd), QString::number(size.height() / gcd));
}
bool MetadataModel::appendSection(const QString &sectionKey, const QString &sectionDisplayName) bool MetadataModel::appendSection(const QString &sectionKey, const QString &sectionDisplayName)
{ {
if (m_sections.contains(sectionKey)) { if (m_sections.contains(sectionKey)) {
@ -157,3 +194,12 @@ QVariant MetadataModel::data(const QModelIndex &index, int role) const
: m_properties[propertyList[index.row()]].second; : m_properties[propertyList[index.row()]].second;
} }
} }
QVariant MetadataModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (orientation == Qt::Vertical || role != Qt::DisplayRole) {
return QVariant();
}
return section == 0 ? tr("Property") : tr("Value");
}

View File

@ -13,6 +13,7 @@ public:
void setFile(const QString & imageFilePath); void setFile(const QString & imageFilePath);
static QString imageSize(const QSize &size); static QString imageSize(const QSize &size);
static QString imageSizeRatio(const QSize &size);
bool appendSection(const QString & sectionKey, const QString & sectionDisplayName); bool appendSection(const QString & sectionKey, const QString & sectionDisplayName);
bool appendProperty(const QString & sectionKey, const QString & propertyKey, bool appendProperty(const QString & sectionKey, const QString & propertyKey,
const QString & propertyDisplayName, const QString & propertyValue = QString()); const QString & propertyDisplayName, const QString & propertyValue = QString());
@ -29,6 +30,7 @@ private:
int rowCount(const QModelIndex &parent = QModelIndex()) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex & = QModelIndex()) const override; int columnCount(const QModelIndex & = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
// [SECTION_KEY] // [SECTION_KEY]
QList<QString> m_sections; QList<QString> m_sections;

View File

@ -1,41 +0,0 @@
#include "metadatadialog.h"
#include <QDialogButtonBox>
#include <QTreeView>
#include <QVBoxLayout>
#include "metadatamodel.h"
MetadataDialog::MetadataDialog(QWidget *parent)
: QDialog(parent)
, m_treeView(new QTreeView(this))
{
m_treeView->setRootIsDecorated(false);
m_treeView->setIndentation(0);
setWindowTitle(tr("Image Metadata"));
QDialogButtonBox * buttonBox = new QDialogButtonBox(QDialogButtonBox::Close);
setLayout(new QVBoxLayout);
layout()->addWidget(m_treeView);
layout()->addWidget(buttonBox);
connect(buttonBox, &QDialogButtonBox::close, this, &QDialog::close);
}
MetadataDialog::~MetadataDialog()
{
}
void MetadataDialog::setMetadataModel(MetadataModel * model)
{
m_treeView->setModel(model);
m_treeView->expandAll();
}
QSize MetadataDialog::sizeHint() const
{
return QSize(520, 350);
}

View File

@ -17,37 +17,37 @@ DEFINES += QT_DEPRECATED_WARNINGS
CONFIG += c++11 lrelease embed_translations CONFIG += c++11 lrelease embed_translations
SOURCES += \ SOURCES += \
aboutdialog.cpp \ app/aboutdialog.cpp \
main.cpp \ app/main.cpp \
mainwindow.cpp \ app/mainwindow.cpp \
graphicsview.cpp \ app/graphicsview.cpp \
bottombuttongroup.cpp \ app/bottombuttongroup.cpp \
graphicsscene.cpp \ app/graphicsscene.cpp \
navigatorview.cpp \ app/navigatorview.cpp \
opacityhelper.cpp \ app/opacityhelper.cpp \
toolbutton.cpp \ app/toolbutton.cpp \
settings.cpp \ app/settings.cpp \
settingsdialog.cpp \ app/settingsdialog.cpp \
metadatamodel.cpp \ app/metadatamodel.cpp \
metadatadialog.cpp app/metadatadialog.cpp
HEADERS += \ HEADERS += \
aboutdialog.h \ app/aboutdialog.h \
mainwindow.h \ app/mainwindow.h \
graphicsview.h \ app/graphicsview.h \
bottombuttongroup.h \ app/bottombuttongroup.h \
graphicsscene.h \ app/graphicsscene.h \
navigatorview.h \ app/navigatorview.h \
opacityhelper.h \ app/opacityhelper.h \
toolbutton.h \ app/toolbutton.h \
settings.h \ app/settings.h \
settingsdialog.h \ app/settingsdialog.h \
metadatamodel.h \ app/metadatamodel.h \
metadatadialog.h app/metadatadialog.h
TRANSLATIONS = \ TRANSLATIONS = \
languages/PineapplePictures.ts \ translations/PineapplePictures.ts \
languages/PineapplePictures_zh_CN.ts translations/PineapplePictures_zh_CN.ts
# Default rules for deployment. # Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin qnx: target.path = /tmp/$${TARGET}/bin

View File

@ -4,157 +4,157 @@
<context> <context>
<name>AboutDialog</name> <name>AboutDialog</name>
<message> <message>
<location filename="../aboutdialog.cpp" line="22"/> <location filename="../app/aboutdialog.cpp" line="22"/>
<source>About</source> <source>About</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="25"/> <location filename="../app/aboutdialog.cpp" line="25"/>
<source>Launch application with image file path as argument to load the file.</source> <source>Launch application with image file path as argument to load the file.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="26"/> <location filename="../app/aboutdialog.cpp" line="26"/>
<source>Drag and drop image file onto the window is also supported.</source> <source>Drag and drop image file onto the window is also supported.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="27"/> <location filename="../app/aboutdialog.cpp" line="27"/>
<source>Context menu option explanation:</source> <source>Context menu option explanation:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="31"/> <location filename="../app/aboutdialog.cpp" line="31"/>
<source>Make window stay on top of all other windows.</source> <source>Make window stay on top of all other windows.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="35"/> <location filename="../app/aboutdialog.cpp" line="35"/>
<source>Avoid close window accidentally. (eg. by double clicking the window)</source> <source>Avoid close window accidentally. (eg. by double clicking the window)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../app/aboutdialog.cpp" line="44"/>
<source>Version: %1</source> <source>Version: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../app/aboutdialog.cpp" line="47"/>
<source>Copyright (c) 2020 %1</source> <source>Copyright (c) 2020 %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="49"/> <location filename="../app/aboutdialog.cpp" line="49"/>
<source>Logo designed by %1</source> <source>Logo designed by %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="51"/> <location filename="../app/aboutdialog.cpp" line="51"/>
<source>Built with Qt %1 (%2)</source> <source>Built with Qt %1 (%2)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="52"/> <location filename="../app/aboutdialog.cpp" line="52"/>
<source>Source code</source> <source>Source code</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="58"/> <location filename="../app/aboutdialog.cpp" line="58"/>
<source>Contributors</source> <source>Contributors</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="60"/> <location filename="../app/aboutdialog.cpp" line="60"/>
<source>List of contributors on GitHub</source> <source>List of contributors on GitHub</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="61"/> <location filename="../app/aboutdialog.cpp" line="61"/>
<source>Thanks to all people who contributed to this project.</source> <source>Thanks to all people who contributed to this project.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="65"/> <location filename="../app/aboutdialog.cpp" line="65"/>
<source>Translators</source> <source>Translators</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="66"/> <location filename="../app/aboutdialog.cpp" line="66"/>
<source>I would like to thank the following people who volunteered to translate this application.</source> <source>I would like to thank the following people who volunteered to translate this application.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="131"/> <location filename="../app/aboutdialog.cpp" line="131"/>
<source>&amp;Special Thanks</source> <source>&amp;Special Thanks</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="133"/> <location filename="../app/aboutdialog.cpp" line="133"/>
<source>&amp;Third-party Libraries</source> <source>&amp;Third-party Libraries</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="72"/> <location filename="../app/aboutdialog.cpp" line="72"/>
<source>Your Rights</source> <source>Your Rights</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="74"/> <location filename="../app/aboutdialog.cpp" line="74"/>
<source>%1 is released under the MIT License.</source> <source>%1 is released under the MIT License.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="75"/> <location filename="../app/aboutdialog.cpp" line="75"/>
<source>This license grants people a number of freedoms:</source> <source>This license grants people a number of freedoms:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="76"/> <location filename="../app/aboutdialog.cpp" line="76"/>
<source>You are free to use %1, for any purpose</source> <source>You are free to use %1, for any purpose</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="77"/> <location filename="../app/aboutdialog.cpp" line="77"/>
<source>You are free to distribute %1</source> <source>You are free to distribute %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="78"/> <location filename="../app/aboutdialog.cpp" line="78"/>
<source>You can study how %1 works and change it</source> <source>You can study how %1 works and change it</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="79"/> <location filename="../app/aboutdialog.cpp" line="79"/>
<source>You can distribute changed versions of %1</source> <source>You can distribute changed versions of %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="81"/> <location filename="../app/aboutdialog.cpp" line="81"/>
<source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source> <source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="109"/> <location filename="../app/aboutdialog.cpp" line="109"/>
<source>Third-party Libraries used by %1</source> <source>Third-party Libraries used by %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="110"/> <location filename="../app/aboutdialog.cpp" line="110"/>
<source>%1 is built on the following free software libraries:</source> <source>%1 is built on the following free software libraries:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="129"/> <location filename="../app/aboutdialog.cpp" line="129"/>
<source>&amp;Help</source> <source>&amp;Help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="130"/> <location filename="../app/aboutdialog.cpp" line="130"/>
<source>&amp;About</source> <source>&amp;About</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="132"/> <location filename="../app/aboutdialog.cpp" line="132"/>
<source>&amp;License</source> <source>&amp;License</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -162,7 +162,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../graphicsscene.cpp" line="16"/> <location filename="../app/graphicsscene.cpp" line="16"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -170,22 +170,28 @@
<context> <context>
<name>GraphicsView</name> <name>GraphicsView</name>
<message> <message>
<location filename="../graphicsview.cpp" line="254"/> <location filename="../app/graphicsview.cpp" line="261"/>
<source>File url list is empty</source> <source>File url list is empty</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../graphicsview.cpp" line="53"/> <location filename="../app/graphicsview.cpp" line="53"/>
<source>File is not a valid image</source> <source>File is not a valid image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../graphicsview.cpp" line="262"/> <location filename="../app/graphicsview.cpp" line="55"/>
<location filename="../app/graphicsview.cpp" line="59"/>
<source>Image data is invalid or currently unsupported</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/graphicsview.cpp" line="269"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../graphicsview.cpp" line="269"/> <location filename="../app/graphicsview.cpp" line="276"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -193,59 +199,59 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="178"/> <location filename="../app/mainwindow.cpp" line="178"/>
<source>File url list is empty</source> <source>File url list is empty</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="417"/> <location filename="../app/mainwindow.cpp" line="417"/>
<source>&amp;Copy</source> <source>&amp;Copy</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="438"/> <location filename="../app/mainwindow.cpp" line="438"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="443"/> <location filename="../app/mainwindow.cpp" line="443"/>
<source>Copy &amp;File Path</source> <source>Copy &amp;File Path</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="453"/> <location filename="../app/mainwindow.cpp" line="453"/>
<source>&amp;Paste Image</source> <source>&amp;Paste Image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="459"/> <location filename="../app/mainwindow.cpp" line="459"/>
<source>&amp;Paste Image File</source> <source>&amp;Paste Image File</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="492"/> <location filename="../app/mainwindow.cpp" line="492"/>
<source>Properties</source> <source>Properties</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="30"/> <location filename="../app/aboutdialog.cpp" line="30"/>
<location filename="../mainwindow.cpp" line="464"/> <location filename="../app/mainwindow.cpp" line="464"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="34"/> <location filename="../app/aboutdialog.cpp" line="34"/>
<location filename="../mainwindow.cpp" line="471"/> <location filename="../app/mainwindow.cpp" line="471"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="478"/> <location filename="../app/mainwindow.cpp" line="478"/>
<source>Configure...</source> <source>Configure...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="485"/> <location filename="../app/mainwindow.cpp" line="485"/>
<source>Help</source> <source>Help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -253,7 +259,7 @@
<context> <context>
<name>MetadataDialog</name> <name>MetadataDialog</name>
<message> <message>
<location filename="../metadatadialog.cpp" line="16"/> <location filename="../app/metadatadialog.cpp" line="75"/>
<source>Image Metadata</source> <source>Image Metadata</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -261,66 +267,142 @@
<context> <context>
<name>MetadataModel</name> <name>MetadataModel</name>
<message> <message>
<location filename="../metadatamodel.cpp" line="29"/> <location filename="../app/metadatamodel.cpp" line="36"/>
<source>General</source> <source>Origin</source>
<comment>General info about the image, section name.</comment> <comment>Section name.</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../metadatamodel.cpp" line="32"/> <location filename="../app/metadatamodel.cpp" line="38"/>
<source>File Name</source> <source>Image</source>
<comment>Section name.</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../metadatamodel.cpp" line="34"/> <location filename="../app/metadatamodel.cpp" line="44"/>
<source>File Size</source> <source>File</source>
<comment>Section name.</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../metadatamodel.cpp" line="36"/> <location filename="../app/metadatamodel.cpp" line="40"/>
<source>Last Modified</source> <source>Camera</source>
<comment>Section name.</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../metadatamodel.cpp" line="38"/> <location filename="../app/metadatamodel.cpp" line="27"/>
<source>Image Size</source> <source>%1 File</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../metadatamodel.cpp" line="46"/> <location filename="../app/metadatamodel.cpp" line="35"/>
<source>Description</source>
<comment>Section name.</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="41"/>
<source>Advanced photo</source>
<comment>Section name.</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="42"/>
<source>GPS</source>
<comment>Section name.</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="47"/>
<source>Dimensions</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="49"/>
<source>Aspect Ratio</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="52"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="54"/>
<source>Item type</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="56"/>
<source>Folder path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="58"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="60"/>
<source>Date Created</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="62"/>
<source>Date Modified</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="70"/>
<source>%1 x %2</source> <source>%1 x %2</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../app/metadatamodel.cpp" line="88"/>
<source>%1 : %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="204"/>
<source>Property</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="204"/>
<source>Value</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>SettingsDialog</name> <name>SettingsDialog</name>
<message> <message>
<location filename="../settingsdialog.cpp" line="15"/> <location filename="../app/settingsdialog.cpp" line="15"/>
<source>Settings</source> <source>Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="20"/> <location filename="../app/settingsdialog.cpp" line="20"/>
<source>Do nothing</source> <source>Do nothing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="21"/> <location filename="../app/settingsdialog.cpp" line="21"/>
<source>Close the window</source> <source>Close the window</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="22"/> <location filename="../app/settingsdialog.cpp" line="22"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="30"/> <location filename="../app/settingsdialog.cpp" line="30"/>
<source>Stay on top when start-up</source> <source>Stay on top when start-up</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="31"/> <location filename="../app/settingsdialog.cpp" line="31"/>
<source>Double-click behavior</source> <source>Double-click behavior</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -328,12 +410,12 @@
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.cpp" line="27"/> <location filename="../app/main.cpp" line="27"/>
<source>Pineapple Pictures</source> <source>Pineapple Pictures</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="31"/> <location filename="../app/main.cpp" line="31"/>
<source>File list.</source> <source>File list.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -4,157 +4,157 @@
<context> <context>
<name>AboutDialog</name> <name>AboutDialog</name>
<message> <message>
<location filename="../aboutdialog.cpp" line="22"/> <location filename="../app/aboutdialog.cpp" line="22"/>
<source>About</source> <source>About</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="25"/> <location filename="../app/aboutdialog.cpp" line="25"/>
<source>Launch application with image file path as argument to load the file.</source> <source>Launch application with image file path as argument to load the file.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="26"/> <location filename="../app/aboutdialog.cpp" line="26"/>
<source>Drag and drop image file onto the window is also supported.</source> <source>Drag and drop image file onto the window is also supported.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="27"/> <location filename="../app/aboutdialog.cpp" line="27"/>
<source>Context menu option explanation:</source> <source>Context menu option explanation:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="31"/> <location filename="../app/aboutdialog.cpp" line="31"/>
<source>Make window stay on top of all other windows.</source> <source>Make window stay on top of all other windows.</source>
<translation>使</translation> <translation>使</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="35"/> <location filename="../app/aboutdialog.cpp" line="35"/>
<source>Avoid close window accidentally. (eg. by double clicking the window)</source> <source>Avoid close window accidentally. (eg. by double clicking the window)</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../app/aboutdialog.cpp" line="44"/>
<source>Version: %1</source> <source>Version: %1</source>
<translation>: %1</translation> <translation>: %1</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../app/aboutdialog.cpp" line="47"/>
<source>Copyright (c) 2020 %1</source> <source>Copyright (c) 2020 %1</source>
<translation> (c) 2020 %1</translation> <translation> (c) 2020 %1</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="49"/> <location filename="../app/aboutdialog.cpp" line="49"/>
<source>Logo designed by %1</source> <source>Logo designed by %1</source>
<translation>Logo %1 </translation> <translation>Logo %1 </translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="51"/> <location filename="../app/aboutdialog.cpp" line="51"/>
<source>Built with Qt %1 (%2)</source> <source>Built with Qt %1 (%2)</source>
<translation>使 Qt %1 (%2) </translation> <translation>使 Qt %1 (%2) </translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="52"/> <location filename="../app/aboutdialog.cpp" line="52"/>
<source>Source code</source> <source>Source code</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="58"/> <location filename="../app/aboutdialog.cpp" line="58"/>
<source>Contributors</source> <source>Contributors</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="60"/> <location filename="../app/aboutdialog.cpp" line="60"/>
<source>List of contributors on GitHub</source> <source>List of contributors on GitHub</source>
<translation>GitHub </translation> <translation>GitHub </translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="61"/> <location filename="../app/aboutdialog.cpp" line="61"/>
<source>Thanks to all people who contributed to this project.</source> <source>Thanks to all people who contributed to this project.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="65"/> <location filename="../app/aboutdialog.cpp" line="65"/>
<source>Translators</source> <source>Translators</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="66"/> <location filename="../app/aboutdialog.cpp" line="66"/>
<source>I would like to thank the following people who volunteered to translate this application.</source> <source>I would like to thank the following people who volunteered to translate this application.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="131"/> <location filename="../app/aboutdialog.cpp" line="131"/>
<source>&amp;Special Thanks</source> <source>&amp;Special Thanks</source>
<translation>(&amp;S)</translation> <translation>(&amp;S)</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="133"/> <location filename="../app/aboutdialog.cpp" line="133"/>
<source>&amp;Third-party Libraries</source> <source>&amp;Third-party Libraries</source>
<translation>(&amp;T)</translation> <translation>(&amp;T)</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="72"/> <location filename="../app/aboutdialog.cpp" line="72"/>
<source>Your Rights</source> <source>Your Rights</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="74"/> <location filename="../app/aboutdialog.cpp" line="74"/>
<source>%1 is released under the MIT License.</source> <source>%1 is released under the MIT License.</source>
<translation>%1 MIT </translation> <translation>%1 MIT </translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="75"/> <location filename="../app/aboutdialog.cpp" line="75"/>
<source>This license grants people a number of freedoms:</source> <source>This license grants people a number of freedoms:</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="76"/> <location filename="../app/aboutdialog.cpp" line="76"/>
<source>You are free to use %1, for any purpose</source> <source>You are free to use %1, for any purpose</source>
<translation>使 %1</translation> <translation>使 %1</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="77"/> <location filename="../app/aboutdialog.cpp" line="77"/>
<source>You are free to distribute %1</source> <source>You are free to distribute %1</source>
<translation> %1</translation> <translation> %1</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="78"/> <location filename="../app/aboutdialog.cpp" line="78"/>
<source>You can study how %1 works and change it</source> <source>You can study how %1 works and change it</source>
<translation> %1 </translation> <translation> %1 </translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="79"/> <location filename="../app/aboutdialog.cpp" line="79"/>
<source>You can distribute changed versions of %1</source> <source>You can distribute changed versions of %1</source>
<translation> %1 </translation> <translation> %1 </translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="81"/> <location filename="../app/aboutdialog.cpp" line="81"/>
<source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source> <source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
<translation> MIT </translation> <translation> MIT </translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="109"/> <location filename="../app/aboutdialog.cpp" line="109"/>
<source>Third-party Libraries used by %1</source> <source>Third-party Libraries used by %1</source>
<translation>%1 使</translation> <translation>%1 使</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="110"/> <location filename="../app/aboutdialog.cpp" line="110"/>
<source>%1 is built on the following free software libraries:</source> <source>%1 is built on the following free software libraries:</source>
<translation>%1 </translation> <translation>%1 </translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="129"/> <location filename="../app/aboutdialog.cpp" line="129"/>
<source>&amp;Help</source> <source>&amp;Help</source>
<translation>(&amp;H)</translation> <translation>(&amp;H)</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="130"/> <location filename="../app/aboutdialog.cpp" line="130"/>
<source>&amp;About</source> <source>&amp;About</source>
<translation>(&amp;A)</translation> <translation>(&amp;A)</translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="132"/> <location filename="../app/aboutdialog.cpp" line="132"/>
<source>&amp;License</source> <source>&amp;License</source>
<translation>(&amp;L)</translation> <translation>(&amp;L)</translation>
</message> </message>
@ -162,7 +162,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../graphicsscene.cpp" line="16"/> <location filename="../app/graphicsscene.cpp" line="16"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation></translation> <translation></translation>
</message> </message>
@ -170,22 +170,28 @@
<context> <context>
<name>GraphicsView</name> <name>GraphicsView</name>
<message> <message>
<location filename="../graphicsview.cpp" line="254"/> <location filename="../app/graphicsview.cpp" line="261"/>
<source>File url list is empty</source> <source>File url list is empty</source>
<translation> URL </translation> <translation> URL </translation>
</message> </message>
<message> <message>
<location filename="../graphicsview.cpp" line="53"/> <location filename="../app/graphicsview.cpp" line="53"/>
<source>File is not a valid image</source> <source>File is not a valid image</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../graphicsview.cpp" line="262"/> <location filename="../app/graphicsview.cpp" line="55"/>
<location filename="../app/graphicsview.cpp" line="59"/>
<source>Image data is invalid or currently unsupported</source>
<translation></translation>
</message>
<message>
<location filename="../app/graphicsview.cpp" line="269"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../graphicsview.cpp" line="269"/> <location filename="../app/graphicsview.cpp" line="276"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation> MimeData %1</translation> <translation> MimeData %1</translation>
</message> </message>
@ -193,59 +199,59 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="178"/> <location filename="../app/mainwindow.cpp" line="178"/>
<source>File url list is empty</source> <source>File url list is empty</source>
<translation> URL </translation> <translation> URL </translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="417"/> <location filename="../app/mainwindow.cpp" line="417"/>
<source>&amp;Copy</source> <source>&amp;Copy</source>
<translation>(&amp;C)</translation> <translation>(&amp;C)</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="438"/> <location filename="../app/mainwindow.cpp" line="438"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation>(&amp;I)</translation> <translation>(&amp;I)</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="443"/> <location filename="../app/mainwindow.cpp" line="443"/>
<source>Copy &amp;File Path</source> <source>Copy &amp;File Path</source>
<translation>(&amp;F)</translation> <translation>(&amp;F)</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="453"/> <location filename="../app/mainwindow.cpp" line="453"/>
<source>&amp;Paste Image</source> <source>&amp;Paste Image</source>
<translation>(&amp;P)</translation> <translation>(&amp;P)</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="459"/> <location filename="../app/mainwindow.cpp" line="459"/>
<source>&amp;Paste Image File</source> <source>&amp;Paste Image File</source>
<translation>(&amp;P)</translation> <translation>(&amp;P)</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="492"/> <location filename="../app/mainwindow.cpp" line="492"/>
<source>Properties</source> <source>Properties</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="30"/> <location filename="../app/aboutdialog.cpp" line="30"/>
<location filename="../mainwindow.cpp" line="464"/> <location filename="../app/mainwindow.cpp" line="464"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../aboutdialog.cpp" line="34"/> <location filename="../app/aboutdialog.cpp" line="34"/>
<location filename="../mainwindow.cpp" line="471"/> <location filename="../app/mainwindow.cpp" line="471"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="478"/> <location filename="../app/mainwindow.cpp" line="478"/>
<source>Configure...</source> <source>Configure...</source>
<translation>...</translation> <translation>...</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="485"/> <location filename="../app/mainwindow.cpp" line="485"/>
<source>Help</source> <source>Help</source>
<translation></translation> <translation></translation>
</message> </message>
@ -253,74 +259,150 @@
<context> <context>
<name>MetadataDialog</name> <name>MetadataDialog</name>
<message> <message>
<location filename="../metadatadialog.cpp" line="16"/> <location filename="../app/metadatadialog.cpp" line="75"/>
<source>Image Metadata</source> <source>Image Metadata</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
<name>MetadataModel</name> <name>MetadataModel</name>
<message> <message>
<location filename="../metadatamodel.cpp" line="29"/> <location filename="../app/metadatamodel.cpp" line="36"/>
<source>General</source> <source>Origin</source>
<comment>General info about the image, section name.</comment> <comment>Section name.</comment>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../metadatamodel.cpp" line="32"/> <location filename="../app/metadatamodel.cpp" line="38"/>
<source>File Name</source> <source>Image</source>
<translation type="unfinished"></translation> <comment>Section name.</comment>
<translation></translation>
</message> </message>
<message> <message>
<location filename="../metadatamodel.cpp" line="34"/> <location filename="../app/metadatamodel.cpp" line="44"/>
<source>File Size</source> <source>File</source>
<translation type="unfinished"></translation> <comment>Section name.</comment>
<translation></translation>
</message> </message>
<message> <message>
<location filename="../metadatamodel.cpp" line="36"/> <location filename="../app/metadatamodel.cpp" line="40"/>
<source>Last Modified</source> <source>Camera</source>
<translation type="unfinished"></translation> <comment>Section name.</comment>
<translation></translation>
</message> </message>
<message> <message>
<location filename="../metadatamodel.cpp" line="38"/> <location filename="../app/metadatamodel.cpp" line="27"/>
<source>Image Size</source> <source>%1 File</source>
<translation type="unfinished"></translation> <translation>%1 </translation>
</message> </message>
<message> <message>
<location filename="../metadatamodel.cpp" line="46"/> <location filename="../app/metadatamodel.cpp" line="35"/>
<source>Description</source>
<comment>Section name.</comment>
<translation></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="41"/>
<source>Advanced photo</source>
<comment>Section name.</comment>
<translation></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="42"/>
<source>GPS</source>
<comment>Section name.</comment>
<translation>GPS</translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="47"/>
<source>Dimensions</source>
<translation></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="49"/>
<source>Aspect Ratio</source>
<translation></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="52"/>
<source>Name</source>
<translation></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="54"/>
<source>Item type</source>
<translation></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="56"/>
<source>Folder path</source>
<translation></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="58"/>
<source>Size</source>
<translation></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="60"/>
<source>Date Created</source>
<translation></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="62"/>
<source>Date Modified</source>
<translation></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="70"/>
<source>%1 x %2</source> <source>%1 x %2</source>
<translation type="unfinished"></translation> <translation>%1 x %2</translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="88"/>
<source>%1 : %2</source>
<translation>%1 : %2</translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="204"/>
<source>Property</source>
<translation></translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="204"/>
<source>Value</source>
<translation></translation>
</message> </message>
</context> </context>
<context> <context>
<name>SettingsDialog</name> <name>SettingsDialog</name>
<message> <message>
<location filename="../settingsdialog.cpp" line="15"/> <location filename="../app/settingsdialog.cpp" line="15"/>
<source>Settings</source> <source>Settings</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="20"/> <location filename="../app/settingsdialog.cpp" line="20"/>
<source>Do nothing</source> <source>Do nothing</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="21"/> <location filename="../app/settingsdialog.cpp" line="21"/>
<source>Close the window</source> <source>Close the window</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="22"/> <location filename="../app/settingsdialog.cpp" line="22"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="30"/> <location filename="../app/settingsdialog.cpp" line="30"/>
<source>Stay on top when start-up</source> <source>Stay on top when start-up</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="31"/> <location filename="../app/settingsdialog.cpp" line="31"/>
<source>Double-click behavior</source> <source>Double-click behavior</source>
<translation></translation> <translation></translation>
</message> </message>
@ -328,12 +410,12 @@
<context> <context>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.cpp" line="27"/> <location filename="../app/main.cpp" line="27"/>
<source>Pineapple Pictures</source> <source>Pineapple Pictures</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="31"/> <location filename="../app/main.cpp" line="31"/>
<source>File list.</source> <source>File list.</source>
<translation></translation> <translation></translation>
</message> </message>