fix: avoid create menu actions everytime when trigger context menu.

fix the minor memory leak issue, also bring some possibility to
implement custom keybinding.

And oops I also did another feature in this commit..
Now we are able to set mouse wheel behavior in config dialog.
This commit is contained in:
Gary Wang 2021-01-24 00:07:58 +08:00
parent b3011f47e4
commit 1449844fdd
16 changed files with 624 additions and 249 deletions

View File

@ -30,6 +30,7 @@ set (PPIC_CPP_FILES
app/main.cpp
app/framelesswindow.cpp
app/mainwindow.cpp
app/actionmanager.cpp
app/graphicsview.cpp
app/graphicsscene.cpp
app/bottombuttongroup.cpp
@ -47,6 +48,7 @@ set (PPIC_CPP_FILES
set (PPIC_HEADER_FILES
app/framelesswindow.h
app/mainwindow.h
app/actionmanager.h
app/graphicsview.h
app/graphicsscene.h
app/bottombuttongroup.h

62
app/actionmanager.cpp Normal file
View File

@ -0,0 +1,62 @@
#include "actionmanager.h"
#include "mainwindow.h"
#include <QCoreApplication>
#define CREATE_NEW_ACTION(window, action)\
action = new QAction(window);\
action->setObjectName(QString::fromUtf8( #action ));\
window->addAction(action);
ActionManager::ActionManager()
{
}
ActionManager::~ActionManager()
{
}
void ActionManager::setupAction(MainWindow *mainWindow)
{
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);
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()
{
actionQuitApp->setShortcuts({
QKeySequence(Qt::Key_Space),
QKeySequence(Qt::Key_Escape)
});
actionQuitApp->setShortcutContext(Qt::ApplicationShortcut);
}

30
app/actionmanager.h Normal file
View File

@ -0,0 +1,30 @@
#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 *actionCopyPixmap;
QAction *actionCopyFilePath;
QAction *actionPaste;
QAction *actionToggleStayOnTop;
QAction *actionToggleProtectMode;
QAction *actionSettings;
QAction *actionHelp;
QAction *actionProperties;
QAction *actionQuitApp;
};
#endif // ACTIONMANAGER_H

View File

@ -10,6 +10,7 @@
#include "aboutdialog.h"
#include "metadatamodel.h"
#include "metadatadialog.h"
#include "actionmanager.h"
#include <QMouseEvent>
#include <QMovie>
@ -25,9 +26,11 @@
#include <QClipboard>
#include <QMimeData>
#include <QWindow>
#include <QTimer>
MainWindow::MainWindow(QWidget *parent) :
FramelessWindow(parent)
MainWindow::MainWindow(QWidget *parent)
: FramelessWindow(parent)
, m_am(new ActionManager)
{
if (Settings::instance()->stayOnTop()) {
this->setWindowFlag(Qt::WindowStaysOnTopHint);
@ -110,7 +113,7 @@ MainWindow::MainWindow(QWidget *parent) :
connect(m_bottomButtonGroup, &BottomButtonGroup::zoomInBtnClicked,
this, [ = ](){ m_graphicsView->zoomView(1.25); });
connect(m_bottomButtonGroup, &BottomButtonGroup::zoomOutBtnClicked,
this, [ = ](){ m_graphicsView->zoomView(0.75); });
this, [ = ](){ m_graphicsView->zoomView(0.8); });
connect(m_bottomButtonGroup, &BottomButtonGroup::toggleCheckerboardBtnClicked,
this, [ = ](){ m_graphicsView->toggleCheckerboard(); });
connect(m_bottomButtonGroup, &BottomButtonGroup::rotateRightBtnClicked,
@ -130,14 +133,6 @@ MainWindow::MainWindow(QWidget *parent) :
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);
@ -150,7 +145,13 @@ MainWindow::MainWindow(QWidget *parent) :
connect(fullscreenShorucut, &QShortcut::activated,
this, &MainWindow::toggleFullscreen);
m_am->setupAction(this);
centerWindow();
QTimer::singleShot(0, this, [this](){
m_am->setupShortcuts();
});
}
MainWindow::~MainWindow()
@ -370,19 +371,29 @@ void MainWindow::mouseDoubleClickEvent(QMouseEvent *event)
void MainWindow::wheelEvent(QWheelEvent *event)
{
QPoint numDegrees = event->angleDelta() / 8;
bool needZoom = false, zoomIn = false;
bool needWeelEvent = false, wheelUp = false;
bool actionIsZoom = event->modifiers().testFlag(Qt::ControlModifier)
|| Settings::instance()->mouseWheelBehavior() == ActionZoomImage;
// 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) {
needZoom = true;
zoomIn = numDegrees.y() > 0;
needWeelEvent = true;
wheelUp = numDegrees.y() > 0;
}
if (needZoom) {
m_graphicsView->zoomView(zoomIn ? 1.25 : 0.8);
if (needWeelEvent) {
if (actionIsZoom) {
m_graphicsView->zoomView(wheelUp ? 1.25 : 0.8);
} else {
if (wheelUp) {
galleryPrev();
} else {
galleryNext();
}
}
event->accept();
} else {
FramelessWindow::wheelEvent(event);
@ -404,97 +415,38 @@ void MainWindow::contextMenuEvent(QContextMenuEvent *event)
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);
}
}
}
QAction * copyPixmap = m_am->actionCopyPixmap;
QAction * copyFilePath = m_am->actionCopyFilePath;
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 * pasteImage = new QAction(tr("&Paste Image"));
connect(pasteImage, &QAction::triggered, this, [ = ](){
clearGallery();
m_graphicsView->showImage(clipboardImage);
});
QAction * paste = m_am->actionPaste;
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();
});
QAction * stayOnTopMode = m_am->actionToggleStayOnTop;
stayOnTopMode->setCheckable(true);
stayOnTopMode->setChecked(stayOnTop());
QAction * protectedMode = new QAction(tr("Protected mode"));
connect(protectedMode, &QAction::triggered, this, [ = ](){
toggleProtectedMode();
});
QAction * protectedMode = m_am->actionToggleProtectMode;
protectedMode->setCheckable(true);
protectedMode->setChecked(m_protectedMode);
QAction * toggleSettings = new QAction(tr("Configure..."));
connect(toggleSettings, &QAction::triggered, this, [ = ](){
SettingsDialog * sd = new SettingsDialog(this);
sd->exec();
sd->deleteLater();
});
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();
});
QAction * toggleSettings = m_am->actionSettings;
QAction * helpAction = m_am->actionHelp;
QAction * propertiesAction = m_am->actionProperties;
if (copyMenu->actions().count() == 1) {
menu->addActions(copyMenu->actions());
} else {
menu->addMenu(copyMenu);
}
if (!clipboardImage.isNull()) {
menu->addAction(pasteImage);
} else if (clipboardFileUrl.isValid()) {
menu->addAction(pasteImageFile);
if (canPaste()) {
menu->addAction(paste);
}
menu->addSeparator();
menu->addAction(stayOnTopMode);
menu->addAction(protectedMode);
@ -507,6 +459,7 @@ void MainWindow::contextMenuEvent(QContextMenuEvent *event)
}
menu->exec(mapToGlobal(event->pos()));
menu->deleteLater();
copyMenu->deleteLater();
return FramelessWindow::contextMenuEvent(event);
}
@ -563,6 +516,22 @@ bool MainWindow::stayOnTop()
return windowFlags().testFlag(Qt::WindowStaysOnTopHint);
}
bool MainWindow::canPaste()
{
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;
}
}
}
}
void MainWindow::quitAppAction(bool force)
{
if (!m_protectedMode || force) {
@ -592,3 +561,90 @@ QSize MainWindow::sizeHint() const
{
return QSize(710, 530);
}
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()) {
clearGallery();
m_graphicsView->showImage(clipboardImage);
} else if (clipboardFileUrl.isValid()) {
m_graphicsView->showFileFromUrl(clipboardFileUrl, true);
}
}
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);
}

View File

@ -12,6 +12,7 @@ class QGraphicsOpacityEffect;
class QGraphicsView;
QT_END_NAMESPACE
class ActionManager;
class ToolButton;
class GraphicsView;
class NavigatorView;
@ -55,6 +56,7 @@ protected slots:
void toggleProtectedMode();
void toggleStayOnTop();
bool stayOnTop();
bool canPaste();
void quitAppAction(bool force = false);
void toggleFullscreen();
void toggleMaximize();
@ -62,7 +64,20 @@ protected slots:
protected:
QSize sizeHint() const override;
private slots:
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;
QPoint m_oldMousePos;
QPropertyAnimation *m_fadeOutAnimation;
QPropertyAnimation *m_floatUpAnimation;

View File

@ -28,6 +28,13 @@ 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);
@ -40,6 +47,12 @@ 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 {
@ -51,6 +64,16 @@ 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 {
@ -62,6 +85,16 @@ 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)
{

View File

@ -8,8 +8,16 @@ enum DoubleClickBehavior {
ActionCloseWindow,
ActionMaximizeWindow,
ActionStart = ActionDoNothing,
ActionEnd = ActionMaximizeWindow
DCActionStart = ActionDoNothing,
DCActionEnd = ActionMaximizeWindow
};
enum MouseWheelBehavior {
ActionZoomImage,
ActionPrevNextImage,
MWActionStart = ActionZoomImage,
MWActionEnd = ActionPrevNextImage
};
class Settings : public QObject
@ -20,12 +28,16 @@ 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();

View File

@ -11,29 +11,44 @@ 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> _map {
static QMap<DoubleClickBehavior, QString> _dc_map {
{ ActionDoNothing, tr("Do nothing") },
{ ActionCloseWindow, tr("Close the window") },
{ ActionMaximizeWindow, tr("Toggle maximize") }
};
QStringList dropDown;
for (int dcb = ActionStart; dcb <= ActionEnd; dcb++) {
dropDown.append(_map.value(static_cast<DoubleClickBehavior>(dcb)));
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)));
}
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(dropDown));
m_doubleClickBehavior->setModel(new QStringListModel(dcbDropDown));
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);
@ -43,6 +58,10 @@ 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);
}

View File

@ -20,6 +20,7 @@ public slots:
private:
QCheckBox * m_stayOnTop = nullptr;
QComboBox * m_doubleClickBehavior = nullptr;
QComboBox * m_mouseWheelBehavior = nullptr;
};
#endif // SETTINGSDIALOG_H

View File

@ -200,62 +200,62 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../app/mainwindow.cpp" line="176"/>
<location filename="../app/mainwindow.cpp" line="173"/>
<source>File url list is empty</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="406"/>
<location filename="../app/mainwindow.cpp" line="413"/>
<source>&amp;Copy</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="427"/>
<location filename="../app/actionmanager.cpp" line="43"/>
<source>Copy P&amp;ixmap</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="432"/>
<location filename="../app/actionmanager.cpp" line="44"/>
<source>Copy &amp;File Path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="442"/>
<source>&amp;Paste Image</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="448"/>
<source>&amp;Paste Image File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="481"/>
<location filename="../app/actionmanager.cpp" line="50"/>
<source>Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="31"/>
<location filename="../app/mainwindow.cpp" line="453"/>
<location filename="../app/actionmanager.cpp" line="46"/>
<source>Stay on top</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="35"/>
<location filename="../app/mainwindow.cpp" line="460"/>
<location filename="../app/actionmanager.cpp" line="47"/>
<source>Protected mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="467"/>
<location filename="../app/actionmanager.cpp" line="45"/>
<source>&amp;Paste</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/actionmanager.cpp" line="48"/>
<source>Configure...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="474"/>
<location filename="../app/actionmanager.cpp" line="49"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/actionmanager.cpp" line="51"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MetadataDialog</name>
@ -548,35 +548,50 @@
<context>
<name>SettingsDialog</name>
<message>
<location filename="../app/settingsdialog.cpp" line="15"/>
<location filename="../app/settingsdialog.cpp" line="16"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="20"/>
<location filename="../app/settingsdialog.cpp" line="21"/>
<source>Do nothing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="21"/>
<location filename="../app/settingsdialog.cpp" line="22"/>
<source>Close the window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="22"/>
<location filename="../app/settingsdialog.cpp" line="23"/>
<source>Toggle maximize</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="30"/>
<location filename="../app/settingsdialog.cpp" line="27"/>
<source>Zoom in and out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="28"/>
<source>View next or previous item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="41"/>
<source>Stay on top when start-up</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="31"/>
<location filename="../app/settingsdialog.cpp" line="42"/>
<source>Double-click behavior</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="43"/>
<source>Mouse wheel behavior</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>main</name>

View File

@ -204,62 +204,70 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../app/mainwindow.cpp" line="176"/>
<location filename="../app/mainwindow.cpp" line="173"/>
<source>File url list is empty</source>
<translation>Die Datei-URL-Liste ist leer</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="406"/>
<location filename="../app/mainwindow.cpp" line="413"/>
<source>&amp;Copy</source>
<translation>&amp;Kopieren</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="427"/>
<location filename="../app/actionmanager.cpp" line="43"/>
<source>Copy P&amp;ixmap</source>
<translation>P&amp;ixmap kopieren</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="432"/>
<location filename="../app/actionmanager.cpp" line="44"/>
<source>Copy &amp;File Path</source>
<translation>&amp;Dateipfad kopieren</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="442"/>
<source>&amp;Paste Image</source>
<translation>Bild &amp;einfügen</translation>
<translation type="vanished">Bild &amp;einfügen</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="448"/>
<source>&amp;Paste Image File</source>
<translation>Bilddatei &amp;einfügen</translation>
<translation type="vanished">Bilddatei &amp;einfügen</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="481"/>
<location filename="../app/actionmanager.cpp" line="50"/>
<source>Properties</source>
<translation>Eigenschaften</translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="31"/>
<location filename="../app/mainwindow.cpp" line="453"/>
<location filename="../app/actionmanager.cpp" line="46"/>
<source>Stay on top</source>
<translation>Oben bleiben</translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="35"/>
<location filename="../app/mainwindow.cpp" line="460"/>
<location filename="../app/actionmanager.cpp" line="47"/>
<source>Protected mode</source>
<translation>Geschützter Modus</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="467"/>
<source>Configure...</source>
<translation>Konfigurieren </translation>
<location filename="../app/actionmanager.cpp" line="45"/>
<source>&amp;Paste</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="474"/>
<location filename="../app/actionmanager.cpp" line="48"/>
<source>Configure...</source>
<translation>Konfigurieren&#xa0;</translation>
</message>
<message>
<location filename="../app/actionmanager.cpp" line="49"/>
<source>Help</source>
<translation>Hilfe</translation>
</message>
<message>
<location filename="../app/actionmanager.cpp" line="51"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MetadataDialog</name>
@ -456,7 +464,7 @@
<message>
<location filename="../app/metadatamodel.cpp" line="107"/>
<source>35mm focal length</source>
<translation>35 mm Brennweite</translation>
<translation>35&#xa0;mm Brennweite</translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="110"/>
@ -552,35 +560,50 @@
<context>
<name>SettingsDialog</name>
<message>
<location filename="../app/settingsdialog.cpp" line="15"/>
<location filename="../app/settingsdialog.cpp" line="16"/>
<source>Settings</source>
<translation>Einstellungen</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="20"/>
<location filename="../app/settingsdialog.cpp" line="21"/>
<source>Do nothing</source>
<translation>Nichts tun</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="21"/>
<location filename="../app/settingsdialog.cpp" line="22"/>
<source>Close the window</source>
<translation>Fenster schließen</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="22"/>
<location filename="../app/settingsdialog.cpp" line="23"/>
<source>Toggle maximize</source>
<translation>Maximieren umschalten</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="30"/>
<location filename="../app/settingsdialog.cpp" line="27"/>
<source>Zoom in and out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="28"/>
<source>View next or previous item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="41"/>
<source>Stay on top when start-up</source>
<translation>Beim Start oben bleiben</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="31"/>
<location filename="../app/settingsdialog.cpp" line="42"/>
<source>Double-click behavior</source>
<translation>Doppelklickverhalten</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="43"/>
<source>Mouse wheel behavior</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>main</name>

View File

@ -200,62 +200,62 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../app/mainwindow.cpp" line="176"/>
<location filename="../app/mainwindow.cpp" line="173"/>
<source>File url list is empty</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="406"/>
<location filename="../app/mainwindow.cpp" line="413"/>
<source>&amp;Copy</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="427"/>
<location filename="../app/actionmanager.cpp" line="43"/>
<source>Copy P&amp;ixmap</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="432"/>
<location filename="../app/actionmanager.cpp" line="44"/>
<source>Copy &amp;File Path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="442"/>
<source>&amp;Paste Image</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="448"/>
<source>&amp;Paste Image File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="481"/>
<location filename="../app/actionmanager.cpp" line="50"/>
<source>Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="31"/>
<location filename="../app/mainwindow.cpp" line="453"/>
<location filename="../app/actionmanager.cpp" line="46"/>
<source>Stay on top</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="35"/>
<location filename="../app/mainwindow.cpp" line="460"/>
<location filename="../app/actionmanager.cpp" line="47"/>
<source>Protected mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="467"/>
<location filename="../app/actionmanager.cpp" line="45"/>
<source>&amp;Paste</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/actionmanager.cpp" line="48"/>
<source>Configure...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="474"/>
<location filename="../app/actionmanager.cpp" line="49"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/actionmanager.cpp" line="51"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MetadataDialog</name>
@ -548,35 +548,50 @@
<context>
<name>SettingsDialog</name>
<message>
<location filename="../app/settingsdialog.cpp" line="15"/>
<location filename="../app/settingsdialog.cpp" line="16"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="20"/>
<location filename="../app/settingsdialog.cpp" line="21"/>
<source>Do nothing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="21"/>
<location filename="../app/settingsdialog.cpp" line="22"/>
<source>Close the window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="22"/>
<location filename="../app/settingsdialog.cpp" line="23"/>
<source>Toggle maximize</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="30"/>
<location filename="../app/settingsdialog.cpp" line="27"/>
<source>Zoom in and out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="28"/>
<source>View next or previous item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="41"/>
<source>Stay on top when start-up</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="31"/>
<location filename="../app/settingsdialog.cpp" line="42"/>
<source>Double-click behavior</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="43"/>
<source>Mouse wheel behavior</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>main</name>

View File

@ -21,7 +21,7 @@
<message>
<location filename="../app/aboutdialog.cpp" line="28"/>
<source>Context menu option explanation:</source>
<translation>Explication des options du menu contextuel :</translation>
<translation>Explication des options du menu contextuel&#xa0;:</translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="32"/>
@ -36,7 +36,7 @@
<message>
<location filename="../app/aboutdialog.cpp" line="45"/>
<source>Version: %1</source>
<translation>Version : %1</translation>
<translation>Version&#xa0;: %1</translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="48"/>
@ -87,7 +87,7 @@
<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>%1 est basé sur les bibliothèques de logiciels libres suivantes&#xa0;:</translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="139"/>
@ -112,7 +112,7 @@
<message>
<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>
<translation>Cette licence accorde aux personnes un certain nombre de libertés&#xa0;:</translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="81"/>
@ -146,7 +146,7 @@
</message>
<message>
<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>
<translation type="vanished">%1 est basé sur les bibliothèques de logiciels libres suivantes&#xa0;:</translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="137"/>
@ -198,68 +198,76 @@
<message>
<location filename="../app/graphicsview.cpp" line="269"/>
<source>Not supported mimedata: %1</source>
<translation>Mimedata non pris en charge : %1</translation>
<translation>Mimedata non pris en charge&#xa0;: %1</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../app/mainwindow.cpp" line="176"/>
<location filename="../app/mainwindow.cpp" line="173"/>
<source>File url list is empty</source>
<translation>La liste des URL de fichiers est vide</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="406"/>
<location filename="../app/mainwindow.cpp" line="413"/>
<source>&amp;Copy</source>
<translation>&amp;Copier</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="427"/>
<location filename="../app/actionmanager.cpp" line="43"/>
<source>Copy P&amp;ixmap</source>
<translation>Copier P&amp;ixmap</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="432"/>
<location filename="../app/actionmanager.cpp" line="44"/>
<source>Copy &amp;File Path</source>
<translation>Copier le &amp;chemin du fichier</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="442"/>
<source>&amp;Paste Image</source>
<translation>&amp;Coller l&apos;image</translation>
<translation type="vanished">&amp;Coller l&apos;image</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="448"/>
<source>&amp;Paste Image File</source>
<translation>&amp;Coller le fichier d&apos;image</translation>
<translation type="vanished">&amp;Coller le fichier d&apos;image</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="481"/>
<location filename="../app/actionmanager.cpp" line="50"/>
<source>Properties</source>
<translation>Propriétés</translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="31"/>
<location filename="../app/mainwindow.cpp" line="453"/>
<location filename="../app/actionmanager.cpp" line="46"/>
<source>Stay on top</source>
<translation>Rester en-haut</translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="35"/>
<location filename="../app/mainwindow.cpp" line="460"/>
<location filename="../app/actionmanager.cpp" line="47"/>
<source>Protected mode</source>
<translation>Mode protégé</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="467"/>
<location filename="../app/actionmanager.cpp" line="45"/>
<source>&amp;Paste</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/actionmanager.cpp" line="48"/>
<source>Configure...</source>
<translation>Configurer</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="474"/>
<location filename="../app/actionmanager.cpp" line="49"/>
<source>Help</source>
<translation>Aide</translation>
</message>
<message>
<location filename="../app/actionmanager.cpp" line="51"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MetadataDialog</name>
@ -456,7 +464,7 @@
<message>
<location filename="../app/metadatamodel.cpp" line="107"/>
<source>35mm focal length</source>
<translation>Distance focale de 35 mm</translation>
<translation>Distance focale de 35&#xa0;mm</translation>
</message>
<message>
<location filename="../app/metadatamodel.cpp" line="110"/>
@ -552,35 +560,50 @@
<context>
<name>SettingsDialog</name>
<message>
<location filename="../app/settingsdialog.cpp" line="15"/>
<location filename="../app/settingsdialog.cpp" line="16"/>
<source>Settings</source>
<translation>Paramètres</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="20"/>
<location filename="../app/settingsdialog.cpp" line="21"/>
<source>Do nothing</source>
<translation>Ne rien faire</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="21"/>
<location filename="../app/settingsdialog.cpp" line="22"/>
<source>Close the window</source>
<translation>Fermer la fenêtre</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="22"/>
<location filename="../app/settingsdialog.cpp" line="23"/>
<source>Toggle maximize</source>
<translation>Activer/désactiver l&apos;agrandissement</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="30"/>
<location filename="../app/settingsdialog.cpp" line="27"/>
<source>Zoom in and out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="28"/>
<source>View next or previous item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="41"/>
<source>Stay on top when start-up</source>
<translation>Rester en-haut lors du démarrage</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="31"/>
<location filename="../app/settingsdialog.cpp" line="42"/>
<source>Double-click behavior</source>
<translation>Comportement du double-clic</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="43"/>
<source>Mouse wheel behavior</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>main</name>

View File

@ -204,62 +204,70 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../app/mainwindow.cpp" line="176"/>
<location filename="../app/mainwindow.cpp" line="173"/>
<source>File url list is empty</source>
<translation>Listen over filnettadresser er ugyldig</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="406"/>
<location filename="../app/mainwindow.cpp" line="413"/>
<source>&amp;Copy</source>
<translation>&amp;Kopier</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="427"/>
<location filename="../app/actionmanager.cpp" line="43"/>
<source>Copy P&amp;ixmap</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="432"/>
<location filename="../app/actionmanager.cpp" line="44"/>
<source>Copy &amp;File Path</source>
<translation>Kopier %filsti</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="442"/>
<source>&amp;Paste Image</source>
<translation>&amp;Lim inn bilde</translation>
<translation type="vanished">&amp;Lim inn bilde</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="448"/>
<source>&amp;Paste Image File</source>
<translation>&amp;Lim inn bildefil</translation>
<translation type="vanished">&amp;Lim inn bildefil</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="481"/>
<location filename="../app/actionmanager.cpp" line="50"/>
<source>Properties</source>
<translation>Egenskaper</translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="31"/>
<location filename="../app/mainwindow.cpp" line="453"/>
<location filename="../app/actionmanager.cpp" line="46"/>
<source>Stay on top</source>
<translation>Behold øverst</translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="35"/>
<location filename="../app/mainwindow.cpp" line="460"/>
<location filename="../app/actionmanager.cpp" line="47"/>
<source>Protected mode</source>
<translation>Beskyttet modus</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="467"/>
<location filename="../app/actionmanager.cpp" line="45"/>
<source>&amp;Paste</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/actionmanager.cpp" line="48"/>
<source>Configure...</source>
<translation>Sett opp </translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="474"/>
<location filename="../app/actionmanager.cpp" line="49"/>
<source>Help</source>
<translation>Hjelp</translation>
</message>
<message>
<location filename="../app/actionmanager.cpp" line="51"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MetadataDialog</name>
@ -552,35 +560,50 @@
<context>
<name>SettingsDialog</name>
<message>
<location filename="../app/settingsdialog.cpp" line="15"/>
<location filename="../app/settingsdialog.cpp" line="16"/>
<source>Settings</source>
<translation>Innstillinger</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="20"/>
<location filename="../app/settingsdialog.cpp" line="21"/>
<source>Do nothing</source>
<translation>Ikke gjør noe</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="21"/>
<location filename="../app/settingsdialog.cpp" line="22"/>
<source>Close the window</source>
<translation>Lukk vinduet</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="22"/>
<location filename="../app/settingsdialog.cpp" line="23"/>
<source>Toggle maximize</source>
<translation>Veksle maksimering</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="30"/>
<location filename="../app/settingsdialog.cpp" line="27"/>
<source>Zoom in and out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="28"/>
<source>View next or previous item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="41"/>
<source>Stay on top when start-up</source>
<translation>Behold i forgrunnen ved oppstart</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="31"/>
<location filename="../app/settingsdialog.cpp" line="42"/>
<source>Double-click behavior</source>
<translation>Dobbeltklikksoppførsel</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="43"/>
<source>Mouse wheel behavior</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>main</name>

View File

@ -200,62 +200,70 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../app/mainwindow.cpp" line="176"/>
<location filename="../app/mainwindow.cpp" line="173"/>
<source>File url list is empty</source>
<translation>Список URL-адресов файлов пуст</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="406"/>
<location filename="../app/mainwindow.cpp" line="413"/>
<source>&amp;Copy</source>
<translation>&amp;Копировать</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="427"/>
<location filename="../app/actionmanager.cpp" line="43"/>
<source>Copy P&amp;ixmap</source>
<translation>Копировать P&amp;ixmap</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="432"/>
<location filename="../app/actionmanager.cpp" line="44"/>
<source>Copy &amp;File Path</source>
<translation>Копировать &amp;путь к файлу</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="442"/>
<source>&amp;Paste Image</source>
<translation>&amp;Вставить изображение</translation>
<translation type="vanished">&amp;Вставить изображение</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="448"/>
<source>&amp;Paste Image File</source>
<translation>&amp;Вставить файл изображения</translation>
<translation type="vanished">&amp;Вставить файл изображения</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="481"/>
<location filename="../app/actionmanager.cpp" line="50"/>
<source>Properties</source>
<translation>Свойства</translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="31"/>
<location filename="../app/mainwindow.cpp" line="453"/>
<location filename="../app/actionmanager.cpp" line="46"/>
<source>Stay on top</source>
<translation>Поверх всех окон</translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="35"/>
<location filename="../app/mainwindow.cpp" line="460"/>
<location filename="../app/actionmanager.cpp" line="47"/>
<source>Protected mode</source>
<translation>Защищённый режим</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="467"/>
<location filename="../app/actionmanager.cpp" line="45"/>
<source>&amp;Paste</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/actionmanager.cpp" line="48"/>
<source>Configure...</source>
<translation>Настроить...</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="474"/>
<location filename="../app/actionmanager.cpp" line="49"/>
<source>Help</source>
<translation>Помощь</translation>
</message>
<message>
<location filename="../app/actionmanager.cpp" line="51"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MetadataDialog</name>
@ -548,35 +556,50 @@
<context>
<name>SettingsDialog</name>
<message>
<location filename="../app/settingsdialog.cpp" line="15"/>
<location filename="../app/settingsdialog.cpp" line="16"/>
<source>Settings</source>
<translation>Настройки</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="20"/>
<location filename="../app/settingsdialog.cpp" line="21"/>
<source>Do nothing</source>
<translation>Ничего не делать</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="21"/>
<location filename="../app/settingsdialog.cpp" line="22"/>
<source>Close the window</source>
<translation>Закрыть окно</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="22"/>
<location filename="../app/settingsdialog.cpp" line="23"/>
<source>Toggle maximize</source>
<translation>Развернуть окно</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="30"/>
<location filename="../app/settingsdialog.cpp" line="27"/>
<source>Zoom in and out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="28"/>
<source>View next or previous item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="41"/>
<source>Stay on top when start-up</source>
<translation>Поверх всех окон при запуске</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="31"/>
<location filename="../app/settingsdialog.cpp" line="42"/>
<source>Double-click behavior</source>
<translation>Поведение при двойном щелчке</translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="43"/>
<source>Mouse wheel behavior</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>main</name>

View File

@ -204,62 +204,70 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../app/mainwindow.cpp" line="176"/>
<location filename="../app/mainwindow.cpp" line="173"/>
<source>File url list is empty</source>
<translation> URL </translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="406"/>
<location filename="../app/mainwindow.cpp" line="413"/>
<source>&amp;Copy</source>
<translation>(&amp;C)</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="427"/>
<location filename="../app/actionmanager.cpp" line="43"/>
<source>Copy P&amp;ixmap</source>
<translation>(&amp;I)</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="432"/>
<location filename="../app/actionmanager.cpp" line="44"/>
<source>Copy &amp;File Path</source>
<translation>(&amp;F)</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="442"/>
<source>&amp;Paste Image</source>
<translation>(&amp;P)</translation>
<translation type="vanished">(&amp;P)</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="448"/>
<source>&amp;Paste Image File</source>
<translation>(&amp;P)</translation>
<translation type="vanished">(&amp;P)</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="481"/>
<location filename="../app/actionmanager.cpp" line="50"/>
<source>Properties</source>
<translation></translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="31"/>
<location filename="../app/mainwindow.cpp" line="453"/>
<location filename="../app/actionmanager.cpp" line="46"/>
<source>Stay on top</source>
<translation></translation>
</message>
<message>
<location filename="../app/aboutdialog.cpp" line="35"/>
<location filename="../app/mainwindow.cpp" line="460"/>
<location filename="../app/actionmanager.cpp" line="47"/>
<source>Protected mode</source>
<translation></translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="467"/>
<location filename="../app/actionmanager.cpp" line="45"/>
<source>&amp;Paste</source>
<translation>(&amp;P)</translation>
</message>
<message>
<location filename="../app/actionmanager.cpp" line="48"/>
<source>Configure...</source>
<translation>...</translation>
</message>
<message>
<location filename="../app/mainwindow.cpp" line="474"/>
<location filename="../app/actionmanager.cpp" line="49"/>
<source>Help</source>
<translation></translation>
</message>
<message>
<location filename="../app/actionmanager.cpp" line="51"/>
<source>Quit</source>
<translation>退</translation>
</message>
</context>
<context>
<name>MetadataDialog</name>
@ -552,35 +560,50 @@
<context>
<name>SettingsDialog</name>
<message>
<location filename="../app/settingsdialog.cpp" line="15"/>
<location filename="../app/settingsdialog.cpp" line="16"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="20"/>
<location filename="../app/settingsdialog.cpp" line="21"/>
<source>Do nothing</source>
<translation></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="21"/>
<location filename="../app/settingsdialog.cpp" line="22"/>
<source>Close the window</source>
<translation></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="22"/>
<location filename="../app/settingsdialog.cpp" line="23"/>
<source>Toggle maximize</source>
<translation></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="30"/>
<location filename="../app/settingsdialog.cpp" line="27"/>
<source>Zoom in and out</source>
<translation></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="28"/>
<source>View next or previous item</source>
<translation></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="41"/>
<source>Stay on top when start-up</source>
<translation></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="31"/>
<location filename="../app/settingsdialog.cpp" line="42"/>
<source>Double-click behavior</source>
<translation></translation>
</message>
<message>
<location filename="../app/settingsdialog.cpp" line="43"/>
<source>Mouse wheel behavior</source>
<translation></translation>
</message>
</context>
<context>
<name>main</name>