Compare commits

...
49 Commits
Author SHA1 Message Date
yyc12345 31303a20c7 refactor: set openExternalLinks in ui file instead of cpp file 2026-07-06 20:42:23 +08:00
yyc12345 319fd64fc6 refactor: use html resource to replace manual html in code 2026-07-06 20:34:41 +08:00
yyc12345 cdd0b764a7 refactor: use .ui to replace manual layout for aboutdialog 2026-07-06 09:44:38 +08:00
yyc12345 2a69482adb fix: change default settings
- change default settings to make the default behavior more close to legacy Windows Photo Viewer.
- remove redundant fallback for fetching enum settings.
2026-07-05 09:05:58 +08:00
yyc12345 fc3ef1cd7f fix: fix not thread-safe settings singleton.
fix not thread-safe way for fetching settings singleton.
remove qApp from Settings' parent, use nullptr replace it and leak it anyway.
because we may initialize it before initializing QApplication.
in that time, qApp is nullptr.
2026-07-05 08:57:49 +08:00
yyc12345 1de1517a81 refactor: use .ui file instead of manual layout in settings dialog.
- enable Qt UIC in cmake file.
- use .ui file to replace manually written layout in settings dialog.
2026-07-04 22:17:40 +08:00
yyc12345 04a4ab9bff feat: make the default window size bigger 2026-07-04 16:54:48 +08:00
yyc12345 011c1e858f feat: update the layout of main window.
update the layout of main window to make it looks more like
legacy Windows Photo Viewer.
2026-07-04 15:20:14 +08:00
yyc12345 4fe09757b3 revert: remove user custom shortcut 2026-07-04 14:59:02 +08:00
yyc12345 82f1f10cca refactor: rename m_gv to m_nav and m_graphicsView to m_gv for better abbr. 2026-07-04 14:35:28 +08:00
yyc12345 60eebea741 revert: remove the ability that drag window body to move 2026-07-04 14:32:20 +08:00
blumiaandyyc12345 9b151e2fea chore: update release info to 1.5.0 2026-07-03 19:37:54 +08:00
blumiaandyyc12345 9db9c3e9f7 chore(AppStream): add vcs-browser link 2026-07-03 19:37:03 +08:00
yyc12345 9a18a41b8f revert: remove OpacityHelper
- remove OpacityHelper
- remove all related animation
- now bottom toolbar and navigation view are always visible
2026-07-03 16:40:04 +08:00
yyc12345 c93ed94210 refactor: fully remove ToolButton because no one require it.
- fully remove ToolButton.
- make loadHidpiIcon as a static function in ActionManager because no outside function may call it.
2026-07-03 15:37:20 +08:00
yyc12345 f4d272e014 refactor: merge retranslateUi into setupAction in ActionManager 2026-07-03 15:12:15 +08:00
yyc12345 d536e8c611 refactor: move prev/next picture button to bottom toolbar. 2026-07-03 14:56:54 +08:00
yyc12345 c8dfccb460 revert: remove protected mode
protected mode is designed for borderless and transparent window.
it is not suit for the goal of this fork.
2026-07-03 14:32:36 +08:00
yyc12345 6fde9474ae revert: remove stay-on-top feature 2026-07-03 14:26:27 +08:00
yyc12345 c19fcaa560 revert: remove close window animation 2026-07-03 14:26:22 +08:00
yyc12345 602e2cccf8 revert: remove redundant close button 2026-07-03 14:26:16 +08:00
yyc12345 3c1a3c54a7 revert: restore system default window instead of custom one.
custom window is not the goal of this project.
we remove it and use system default window instead.
2026-07-03 14:26:09 +08:00
yyc12345 032752faf9 revert: remove the ability that disable built-in close window animation
no need to preserve this option because frameless window and
close window animation will be fully removed in future.
2026-07-02 20:32:30 +08:00
yyc12345 457647c59f revert: remove auto long image mode
- remove auto long image mode.
- there is no "auto" requirement for this.
- user can utilize fit by height/width to achieve the same goal by manually click them.
- some optimization code about graphic view are preserved.
2026-07-02 20:14:44 +08:00
yyc12345 821e0f9fd6 revert: remove passoc support on Windows.
- remove passoc executable support on Windows.
- but preserve the icons created by upstream for future expanding.
2026-07-02 15:48:56 +08:00
yyc12345 26f51e418d ci: remove deepin 25 support
This partially reverts commit afcd126c00.

This fork do not need to preserve the support to deepin.
So I simply remove its CI.
2026-07-02 15:48:55 +08:00
yyc12345 cd2eac44f1 revert: revert feature about saving image as new file with different format.
This reverts commit 5b2255e903.

The feature about saving image as new file with different format is not the goal of an image viewer.
There is no need to keep feature diversity in this fork.
So I simply remove it.
2026-07-02 15:48:50 +08:00
yyc12345 f0bb945c7d doc: update README
- update README to notice the development of SarasaCW Picture.
- temporarily remove the most of old README by HTML comment syntax. these contents will be restored and fixed once I finish refactoring.
2026-07-02 14:44:01 +08:00
yyc12345 870e472f53 ci: remove appveyor config file
- all build work are passing by github. there is no need to keep appvoyer config file.
2026-07-02 14:43:42 +08:00
yyc12345 76677381de build: remove QMake project file
- remove QMake project file. it is already deprecated in original repository. all build should be run as CMake project.
2026-07-02 14:43:20 +08:00
blumiaandyyc12345 d2bd521ad0 fix: show empty url list doesn't reset window title 2026-07-02 14:41:56 +08:00
blumiaandyyc12345 265e894b3f fix(CI): Windows build FTBFS 2026-07-02 14:41:42 +08:00
blumiaandyyc12345 6339a93c6c feat(Windows): open window will be able to use system animation 2026-07-02 14:39:33 +08:00
6da53ced81 i18n: Translations update from Hosted Weblate
Co-authored-by: VenusGirl <VenusGirl@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/ko/
Translation: pineapple-pictures/Application
2026-06-29 19:18:11 +08:00
blumia 8f0d4da7ad chore: update release info to 1.4.1 2026-04-05 17:09:13 +08:00
blumia 9c8ffb6c1b chore(CI): bump Qt and action version 2026-04-04 16:52:18 +08:00
blumia 4c5c5e6fc6 fix(CI): zlib dll renamed 2026-03-27 17:55:23 +08:00
blumia b8cb10bb33 fix(CI): fixed kf6 version for appveyor build 2026-03-27 15:52:00 +08:00
blumia 6e2f40633e fix: correct version in CMakeLists, update CI for zlib 2026-03-27 15:06:11 +08:00
a0ba7c1d17 i18n: Translations update from Hosted Weblate
Co-authored-by: Heimen Stoffels <vistausss@fastmail.com>
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/nl/
Translation: pineapple-pictures/Application
2026-03-27 15:02:18 +08:00
b6d759d7c6 i18n: Translations update from Hosted Weblate
Co-authored-by: Loc Huynh <huynhloc.contact@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/vi/
Translation: pineapple-pictures/Application
2026-03-11 20:32:50 +08:00
blumia 437c2f5618 chore: update release info to 1.4.0 2026-02-09 21:00:34 +08:00
7fd4924e64 i18n: Translations update from Hosted Weblate
Co-authored-by: Andrej Poženel - SDT <anderlli0053@live.com>
Co-authored-by: Andrey <andrey@mailbox.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/ru/
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/sl/
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/appstream-metadata/sl/
Translation: pineapple-pictures/AppStream Metadata
Translation: pineapple-pictures/Application
2026-01-31 00:11:45 +08:00
blumia c77808f3d8 chore(CI): update Qt version to 6.10.2 2026-01-31 00:00:49 +08:00
blumia 86075a1ad0 chore: update copyright year in rc file 2026-01-20 23:22:37 +08:00
blumia a8e40a725c i18n: update ts files 2026-01-18 14:02:31 +08:00
8edb6b015e i18n: Translations update from Hosted Weblate
Co-authored-by: Gary Wang <wzc782970009@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Loc Huynh <huynhloc.contact@gmail.com>
Co-authored-by: Sabri Ünal <yakushabb@gmail.com>
Co-authored-by: VenusGirl <VenusGirl@outlook.com>
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/ko/
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/tr/
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/application/vi/
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/appstream-metadata/ko/
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/appstream-metadata/tr/
Translate-URL: https://hosted.weblate.org/projects/pineapple-pictures/appstream-metadata/vi/
Translation: pineapple-pictures/AppStream Metadata
Translation: pineapple-pictures/Application
2026-01-18 13:51:16 +08:00
blumia 5b2255e903 feat: action for save image as new file with different format 2026-01-18 13:08:39 +08:00
blumia 4948ea7445 chore: hello 2026 2026-01-06 00:17:12 +08:00
71 changed files with 4262 additions and 2567 deletions
-35
View File
@@ -1,35 +0,0 @@
name: deepin 25 CI
on: [push, pull_request, workflow_dispatch]
jobs:
build-deepin-25-deb:
runs-on: ubuntu-latest
container:
image: linuxdeepin/deepin:crimson
options: --user root
steps:
- name: Update package lists and install basic tools
run: |
apt update
apt install -y git ca-certificates curl file
- uses: actions/checkout@v4
- name: Get build dept.
run: |
apt install -y cmake qt6-base-dev qt6-svg-dev qt6-tools-dev libexiv2-dev
- name: Build it
run: |
git config --global --add safe.directory '*' # to avoid "fatal: detected dubious ownership in repository at xxx"
cmake -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr .
cmake --build build -j
cd build
cpack -G DEB
- name: Try install it
run: |
cd build
apt install -y ./*.deb
- uses: actions/upload-artifact@v4
with:
name: deepin-25-deb-package
path: build/*.deb
+3 -3
View File
@@ -8,11 +8,11 @@ jobs:
runs-on: macos-latest runs-on: macos-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v4 uses: jurplel/install-qt-action@v4
with: with:
version: '6.10.1' version: '6.10.3'
modules: 'qtimageformats' modules: 'qtimageformats'
cache: true cache: true
- name: Install Conan and Dependencies - name: Install Conan and Dependencies
@@ -33,7 +33,7 @@ jobs:
run: | run: |
macdeployqt ./ppic.app -dmg macdeployqt ./ppic.app -dmg
ls ls
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v6
with: with:
name: "macos-bundle" name: "macos-bundle"
path: "*.dmg" path: "*.dmg"
+2 -2
View File
@@ -6,7 +6,7 @@ jobs:
ubuntu-24-04-build: ubuntu-24-04-build:
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6
- name: Get build dept. - name: Get build dept.
run: | run: |
sudo apt update sudo apt update
@@ -22,7 +22,7 @@ jobs:
run: | run: |
cd build cd build
sudo apt install ./*.deb sudo apt install ./*.deb
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v6
with: with:
name: ubuntu-24.04-deb-package name: ubuntu-24.04-deb-package
path: build/*.deb path: build/*.deb
+8 -12
View File
@@ -8,7 +8,7 @@ jobs:
strategy: strategy:
matrix: matrix:
include: include:
- qt_ver: '6.10.1' - qt_ver: '6.10.3'
vs: '2022' vs: '2022'
aqt_arch: 'win64_msvc2022_64' aqt_arch: 'win64_msvc2022_64'
msvc_arch: 'x64' msvc_arch: 'x64'
@@ -16,7 +16,7 @@ jobs:
runs-on: windows-2022 runs-on: windows-2022
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v4 uses: jurplel/install-qt-action@v4
with: with:
@@ -35,7 +35,7 @@ jobs:
nmake nmake
nmake clean nmake clean
windeployqt --verbose=2 --no-quick-import --no-translations --no-opengl-sw --no-system-d3d-compiler --no-system-dxc-compiler --skip-plugin-types tls,networkinformation release\ppic.exe windeployqt --verbose=2 --no-quick-import --no-translations --no-opengl-sw --no-system-d3d-compiler --no-system-dxc-compiler --skip-plugin-types tls,networkinformation release\ppic.exe
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v6
with: with:
name: "windows-msvc${{ matrix.vs }}-qt${{ matrix.qt_ver }}-qmake-package" name: "windows-msvc${{ matrix.vs }}-qt${{ matrix.qt_ver }}-qmake-package"
path: release/* path: release/*
@@ -45,7 +45,7 @@ jobs:
strategy: strategy:
matrix: matrix:
include: include:
- qt_ver: '6.10.1' - qt_ver: '6.10.3'
vs: '2022' vs: '2022'
aqt_arch: 'win64_msvc2022_64' aqt_arch: 'win64_msvc2022_64'
msvc_arch: 'x64' msvc_arch: 'x64'
@@ -53,7 +53,7 @@ jobs:
runs-on: windows-2022 runs-on: windows-2022
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v6
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v4 uses: jurplel/install-qt-action@v4
with: with:
@@ -79,9 +79,9 @@ jobs:
ren .\exiv2-0.28.7-2022msvc-AMD64 dependencies_bin ren .\exiv2-0.28.7-2022msvc-AMD64 dependencies_bin
echo ::endgroup:: echo ::endgroup::
echo ::group::===== zlib ===== echo ::group::===== zlib =====
curl -fsSL -o zlib_src.zip https://zlib.net/zlib131.zip curl -fsSL -o zlib_src.zip https://github.com/madler/zlib/releases/download/v1.3.2/zlib132.zip
7z x zlib_src.zip -y -o"dependencies_src" 7z x zlib_src.zip -y -o"dependencies_src"
ren .\dependencies_src\zlib-1.3.1 zlib || goto :error ren .\dependencies_src\zlib-1.3.2 zlib || goto :error
cmake ./dependencies_src/zlib -Bbuild_dependencies/zlib -DCMAKE_INSTALL_PREFIX="dependencies_bin" || goto :error cmake ./dependencies_src/zlib -Bbuild_dependencies/zlib -DCMAKE_INSTALL_PREFIX="dependencies_bin" || goto :error
cmake --build build_dependencies/zlib --config Release --target=install || goto :error cmake --build build_dependencies/zlib --config Release --target=install || goto :error
echo ::endgroup:: echo ::endgroup::
@@ -125,17 +125,13 @@ jobs:
cmake --build build --config Release cmake --build build --config Release
cmake --install build --config Release --prefix "%PWD%\build" cmake --install build --config Release --prefix "%PWD%\build"
echo ::endgroup:: echo ::endgroup::
echo ::group::===== passoc stuff =====
curl -fsSL -o passoc-standalone.zip https://github.com/BLumia/pineapple-assoc-manager/releases/latest/download/pineapple-assoc-manager-qt${{ matrix.qt_ver }}-standalone.zip
7z x passoc-standalone.zip passoc.exe -y -o"build/bin"
echo ::endgroup::
:: ------ pkg ------ :: ------ pkg ------
windeployqt --verbose=2 --no-compiler-runtime --no-quick-import --no-translations --no-network --no-opengl-sw --no-system-d3d-compiler --no-system-dxc-compiler --skip-plugin-types tls,networkinformation build\bin\ppic.exe windeployqt --verbose=2 --no-compiler-runtime --no-quick-import --no-translations --no-network --no-opengl-sw --no-system-d3d-compiler --no-system-dxc-compiler --skip-plugin-types tls,networkinformation build\bin\ppic.exe
robocopy ./dependencies_bin/bin build/bin *.dll robocopy ./dependencies_bin/bin build/bin *.dll
if ErrorLevel 8 (exit /B 1) if ErrorLevel 8 (exit /B 1)
copy LICENSE build\bin copy LICENSE build\bin
exit /B 0 exit /B 0
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v6
with: with:
name: "windows-msvc${{ matrix.vs }}-qt${{ matrix.qt_ver }}-cmake-package" name: "windows-msvc${{ matrix.vs }}-qt${{ matrix.qt_ver }}-cmake-package"
path: build/bin/* path: build/bin/*
+7 -13
View File
@@ -4,7 +4,7 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
project(pineapple-pictures VERSION 1.3.0) # don't forget to update NEWS file and AppStream metadata. project(pineapple-pictures VERSION 1.5.0) # don't forget to update NEWS file and AppStream metadata.
include(GNUInstallDirs) include(GNUInstallDirs)
include(FeatureSummary) include(FeatureSummary)
@@ -16,6 +16,7 @@ set (CMAKE_CXX_STANDARD 17)
set (CMAKE_CXX_STANDARD_REQUIRED ON) set (CMAKE_CXX_STANDARD_REQUIRED ON)
set (CMAKE_AUTOMOC ON) set (CMAKE_AUTOMOC ON)
set (CMAKE_AUTORCC ON) set (CMAKE_AUTORCC ON)
set (CMAKE_AUTOUIC ON)
find_package(QT NAMES Qt6 REQUIRED COMPONENTS Core) find_package(QT NAMES Qt6 REQUIRED COMPONENTS Core)
@@ -45,8 +46,6 @@ set (PPIC_CPP_FILES
app/graphicsscene.cpp app/graphicsscene.cpp
app/bottombuttongroup.cpp app/bottombuttongroup.cpp
app/navigatorview.cpp app/navigatorview.cpp
app/opacityhelper.cpp
app/toolbutton.cpp
app/settings.cpp app/settings.cpp
app/settingsdialog.cpp app/settingsdialog.cpp
app/aboutdialog.cpp app/aboutdialog.cpp
@@ -54,7 +53,6 @@ set (PPIC_CPP_FILES
app/metadatadialog.cpp app/metadatadialog.cpp
app/exiv2wrapper.cpp app/exiv2wrapper.cpp
app/playlistmanager.cpp app/playlistmanager.cpp
app/shortcutedit.cpp
app/fileopeneventhandler.cpp app/fileopeneventhandler.cpp
) )
@@ -66,8 +64,6 @@ set (PPIC_HEADER_FILES
app/graphicsscene.h app/graphicsscene.h
app/bottombuttongroup.h app/bottombuttongroup.h
app/navigatorview.h app/navigatorview.h
app/opacityhelper.h
app/toolbutton.h
app/settings.h app/settings.h
app/settingsdialog.h app/settingsdialog.h
app/aboutdialog.h app/aboutdialog.h
@@ -75,10 +71,13 @@ set (PPIC_HEADER_FILES
app/metadatadialog.h app/metadatadialog.h
app/exiv2wrapper.h app/exiv2wrapper.h
app/playlistmanager.h app/playlistmanager.h
app/shortcutedit.h
app/fileopeneventhandler.h app/fileopeneventhandler.h
) )
set (PPIC_UI_FILES
app/settingsdialog.ui
)
set (PPIC_QRC_FILES set (PPIC_QRC_FILES
assets/resources.qrc assets/resources.qrc
) )
@@ -101,6 +100,7 @@ endif ()
add_executable (${EXE_NAME} add_executable (${EXE_NAME}
${PPIC_HEADER_FILES} ${PPIC_HEADER_FILES}
${PPIC_CPP_FILES} ${PPIC_CPP_FILES}
${PPIC_UI_FILES}
${PPIC_QRC_FILES} ${PPIC_QRC_FILES}
${PPIC_RC_FILES} ${PPIC_RC_FILES}
) )
@@ -271,12 +271,6 @@ if (DEFINED QM_FILE_INSTALL_DIR)
endif() endif()
if (WIN32) if (WIN32)
install(
FILES dist/passoc/ppic.pacfg
DESTINATION ${CMAKE_INSTALL_BINDIR}
RENAME default-assoc.pacfg
)
install( install(
FILES FILES
dist/passoc/generic.ico dist/passoc/generic.ico
+1 -1
View File
@@ -1,6 +1,6 @@
MIT License MIT License
Copyright (c) 2025 BLumia Copyright (c) 2026 BLumia
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
+45
View File
@@ -1,3 +1,48 @@
Version 1.5.0
~~~~~~~~~~~~~
Released: 2026-07-04
Features:
* Introduced an optional titlebar that display file name and allows drag and double-click to move and toggle maximize state
* Windows: Now the application will use the system's built-in animation for open window animation
Bugfixes:
* Show empty url list should also reset window title to blank
Miscellaneous:
* Update translations
* Add vcs-browser link to AppStream metadata
Contributors:
Heimen Stoffels (vistaus), VenusGirl (VenusGirl)
Version 1.4.1
~~~~~~~~~~~~~
Released: 2026-04-05
Miscellaneous:
* Update translations
* Update Qt version to 6.10.3 for Windows and macOS pre-built binaries
Contributors:
Heimen Stoffels (vistaus), Loc Huynh (hthienloc)
Version 1.4.0
~~~~~~~~~~~~~
Released: 2026-02-11
Features:
* Action to save image as new file with different format
* Add Vietnamese and Slovenian translation
Miscellaneous:
* Update copyright year to 2026
* Update translations
* Update Qt version to 6.10.2 for Windows and macOS pre-built binaries
Contributors:
Loc Huynh, Sabri Ünal, VenusGirl, Andrej Poženel, Andrey
Version 1.3.0 Version 1.3.0
~~~~~~~~~~~~~ ~~~~~~~~~~~~~
Released: 2025-12-20 Released: 2025-12-20
+16 -5
View File
@@ -1,4 +1,17 @@
Yet another image viewer. # Sarasas Chip Workshop Picture
Yet another legacy Windows Photo Viewer with cross-platform support.
> [!IMPORTANT]
> SarasaCW Picture are still in refactoring. Please do not use it until this message removes.
## Summary
Sarasas Chip Workshop Picture (abbr. SarasaCW Picture) is a lightweight image viewer that has cross-platform support and similar user interface about legacy Windows Photo Viewer. It allows you view JPEG, PNG, GIF, SVG, PSD, KRA, XCF, TGA, HDR, AVIF and some other frequently used image formats files quickly and easily without changing your long-term Windows usage experience.
SarasaCW Picture is the **hard fork** of [Pineapple Pictures](https://github.com/BLumia/pineapple-pictures) since Pineapple Pictures 1.4.1 version.
<!--
|CI|Build Status| |CI|Build Status|
|---|---| |---|---|
@@ -8,10 +21,6 @@ Yet another image viewer.
![Pineapple Pictures - Main Window](https://repository-images.githubusercontent.com/211888654/e8697600-e370-11eb-9b2a-b71e05262954) ![Pineapple Pictures - Main Window](https://repository-images.githubusercontent.com/211888654/e8697600-e370-11eb-9b2a-b71e05262954)
## Summary
Pineapple Pictures is a lightweight image viewer that allows you view JPEG, PNG, GIF, SVG, PSD, KRA, XCF, TGA, HDR, AVIF and some other frequently used image formats files quickly and easily, and also provide a Stay-on-Top window setting that allows you pin the window so you can use it to pin a reference image at the top and then you can work with other software.
## Get it! ## Get it!
### Maintained by the original author ### Maintained by the original author
@@ -71,3 +80,5 @@ It's possible to build it under Windows, Linux, macOS, and maybe other desktop p
## License ## License
Pineapple Pictures as a whole is licensed under MIT license. Individual files may have a different, but compatible license. Pineapple Pictures as a whole is licensed under MIT license. Individual files may have a different, but compatible license.
-->
+17 -4
View File
@@ -1,3 +1,18 @@
# Sarasas Chip Workshop 照片查看器
简单轻量的、具有跨平台支持的、经典样式的 Windows 照片查看器。
> [!IMPORTANT]
> SarasaCW 照片查看器还在重构中。在这条信息被移除之前请不要使用它。
## 简介
Sarasas Chip Workshop 照片查看器(简称 SarasaCW 照片查看器)是一个轻量级的图片查看器。支持跨平台。界面风格类似于经典的 Windows 照片查看器。它可以让你快速轻松地浏览 JPEG、PNG、GIF、SVG、PSD、KRA、XCF、TGA、HDR、AVIF 以及其他一些常用的图片格式,且无需改变你长期的 Windows 使用习惯。
SarasaCW 照片查看器是[菠萝看图](https://github.com/BLumia/pineapple-pictures)的**硬分叉**,该分叉自菠萝看图 1.4.1 版本开始。
<!--
简单轻量的跨平台看图工具。 简单轻量的跨平台看图工具。
|CI|构建状态| |CI|构建状态|
@@ -8,10 +23,6 @@
![Pineapple Pictures - Main Window](https://repository-images.githubusercontent.com/211888654/e8697600-e370-11eb-9b2a-b71e05262954) ![Pineapple Pictures - Main Window](https://repository-images.githubusercontent.com/211888654/e8697600-e370-11eb-9b2a-b71e05262954)
## 简介
菠萝看图是一个轻量图像查看器,允许你简单快捷的查看 JPEG, PNG, GIF, SVG, PSD, KRA, XCF, TGA, HDR, AVIF 等常用格式的图像文件,并提供了置顶窗口的选项以便你在使用其它软件时也可以将参考图片固定在顶端。
## 立即获取! ## 立即获取!
### 由原作者维护 ### 由原作者维护
@@ -72,3 +83,5 @@ $ cmake --build . # 如果你使用 Makefile 作为 CMake 生成器,也可以
## 许可协议 ## 许可协议
菠萝看图整体使用 MIT 协议进行发布。项目所随的部分源文件可能具备不同但与之兼容的许可协议。 菠萝看图整体使用 MIT 协议进行发布。项目所随的部分源文件可能具备不同但与之兼容的许可协议。
-->
+60 -144
View File
@@ -3,176 +3,92 @@
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
#include "aboutdialog.h" #include "aboutdialog.h"
#include "ui_aboutdialog.h"
#include <QAbstractButton>
#include <QDialogButtonBox>
#include <QTextBrowser>
#include <QTabWidget>
#include <QVBoxLayout>
#include <QApplication> #include <QApplication>
#include <QLabel>
#include <QPushButton>
#include <QFile> #include <QFile>
using namespace Qt::Literals::StringLiterals; using namespace Qt::Literals::StringLiterals;
static QString loadEmbeddedHtml(QString&& path) {
QFile htmlFile(path);
bool canOpenFile = htmlFile.open(QIODevice::ReadOnly);
QByteArray htmlRawContent = canOpenFile ? htmlFile.readAll() : QByteArrayLiteral("");
return QString::fromUtf8(htmlRawContent);
}
AboutDialog::AboutDialog(QWidget *parent) AboutDialog::AboutDialog(QWidget *parent)
: QDialog(parent) : QDialog(parent), ui(new Ui::AboutDialog)
, m_tabWidget(new QTabWidget)
, m_buttonBox(new QDialogButtonBox)
, m_helpTextEdit(new QTextBrowser)
, m_aboutTextEdit(new QTextBrowser)
, m_specialThanksTextEdit(new QTextBrowser)
, m_licenseTextEdit(new QTextBrowser)
, m_3rdPartyLibsTextEdit(new QTextBrowser)
{ {
this->setWindowTitle(tr("About")); ui->setupUi(this);
setWindowFlag(Qt::WindowContextHelpButtonHint, false);
const QStringList helpStr { // blumia: Chain two arg() here since it seems lupdate will remove one of them if we use
u"<p>%1</p>"_s.arg(tr("Launch application with image file path as argument to load the file.")), // the old `arg(QCoreApp::translate(), tr())` way, but it's worth to mention
u"<p>%1</p>"_s.arg(tr("Drag and drop image file onto the window is also supported.")), // `arg(QCoreApp::translate(), this->tr())` works, but lupdate will complain about the usage.
u"<p>%1</p>"_s.arg(tr("None of the operations in this application will alter the pictures on disk.")), const QString HELP_HTML = loadEmbeddedHtml(u":/plain/help.html"_s)
u"<p>%1</p>"_s.arg(tr("Context menu option explanation:")), .arg(tr("General Help"))
u"<ul>"_s, .arg(tr("Launch application with image file path as argument to load the file."))
// blumia: Chain two arg() here since it seems lupdate will remove one of them if we use .arg(tr("Passing in a single image file will load all the images in that directory and start viewing from that image."))
// the old `arg(QCoreApp::translate(), tr())` way, but it's worth to mention .arg(tr("Passing in multiple image files lets you view them one by one."))
// `arg(QCoreApp::translate(), this->tr())` works, but lupdate will complain about the usage. .arg(tr("Drag and drop image file onto the window is also supported."))
u"<li><b>%1</b>:<br/>%2</li>"_s .arg(tr("None of the operations in this application will alter the pictures on disk."))
.arg(QCoreApplication::translate("MainWindow", "Stay on top")) .arg(tr("Context Menu Help"))
.arg(tr("Make window stay on top of all other windows.")), .arg(tr("Keep transformation", "The same meaning of MainWindow's Keep transformation."))
u"<li><b>%1</b>:<br/>%2</li>"_s .arg(tr("Avoid resetting the zoom/rotation/flip state that was applied to the image view when switching between images."));
.arg(QCoreApplication::translate("MainWindow", "Protected mode"))
.arg(tr("Avoid close window accidentally. (eg. by double clicking the window)")),
u"<li><b>%1</b>:<br/>%2</li>"_s
.arg(QCoreApplication::translate("MainWindow", "Keep transformation", "The 'transformation' means the flip/rotation status that currently applied to the image view"))
.arg(tr("Avoid resetting the zoom/rotation/flip state that was applied to the image view when switching between images.")),
u"</ul>"_s
};
const QStringList aboutStr { const QString APP_NAME_ARG = qApp->applicationDisplayName();
u"<center><img width='128' height='128' src=':/icons/app-icon.svg'/><br/>"_s, const QString APP_VERSION_ARG =
qApp->applicationDisplayName(),
(u"<br/>"_s + tr("Version: %1").arg(
#ifdef GIT_DESCRIBE_VERSION_STRING #ifdef GIT_DESCRIBE_VERSION_STRING
GIT_DESCRIBE_VERSION_STRING GIT_DESCRIBE_VERSION_STRING;
#else #else
qApp->applicationVersion() qApp->applicationVersion();
#endif // GIT_DESCRIBE_VERSION_STRING #endif // GIT_DESCRIBE_VERSION_STRING
)), const QString QT_VERSION_ARG = QT_VERSION_STR;
u"<hr/>"_s, const QString QT_ARCH_ARG = QSysInfo::buildCpuArchitecture();
tr("Copyright (c) %1 %2", "%1 is year, %2 is the name of copyright holder(s)") const QString ABOUT_HTML = loadEmbeddedHtml(u":/plain/about.html"_s)
.arg(u"2025"_s, u"<a href='https://github.com/BLumia'>@BLumia</a>"_s), .arg(APP_NAME_ARG)
u"<br/>"_s, .arg(tr("Version: %1").arg(APP_VERSION_ARG))
tr("Logo designed by %1").arg(u"<a href='https://github.com/Lovelyblack'>@Lovelyblack</a>"_s), .arg(tr("Upstream author"))
u"<hr/>"_s, .arg(tr("Hard fork author"))
tr("Built with Qt %1 (%2)").arg(QT_VERSION_STR, QSysInfo::buildCpuArchitecture()), .arg(tr("Logo designer"))
QStringLiteral("<br/><a href='%1'>%2</a>").arg("https://github.com/BLumia/pineapple-pictures", tr("Source code")), .arg(tr("Built with Qt %1 (%2)").arg(QT_VERSION_ARG).arg(QT_ARCH_ARG))
u"</center>"_s .arg(tr("Source code"));
};
QFile translaterHtml(u":/plain/translators.html"_s); const QString SPECIAL_THANKS_HTML = loadEmbeddedHtml(u":/plain/special-thanks.html"_s)
bool canOpenFile = translaterHtml.open(QIODevice::ReadOnly); .arg(tr("Contributors"))
const QByteArray & translatorList = canOpenFile ? translaterHtml.readAll() : QByteArrayLiteral(""); .arg(tr("List of contributors on GitHub"))
.arg(tr("Thanks to all people who contributed to this project."))
.arg(tr("Translators"))
.arg(tr("I would like to thank the following people who volunteered to translate this application."));
const QStringList specialThanksStr { const QString LICENSE_HTML = loadEmbeddedHtml(u":/plain/license.html"_s)
u"<h1 align='center'>%1</h1><a href='%2'>%3</a><p>%4</p>"_s.arg( .arg(tr("License"))
tr("Contributors"), .arg(tr("This application is released under the MIT License."))
u"https://github.com/BLumia/pineapple-pictures/graphs/contributors"_s, .arg(tr("License Verbatim Copy"));
tr("List of contributors on GitHub"),
tr("Thanks to all people who contributed to this project.")
),
u"<h1 align='center'>%1</h1><p>%2</p>%3"_s.arg( const QString THIRD_PARTY_LIBS_HTML = loadEmbeddedHtml(u":/plain/third-party-libs.html"_s)
tr("Translators"), .arg(tr("Third-party Libraries"))
tr("I would like to thank the following people who volunteered to translate this application."), .arg(tr("This application is built on the following free software libraries.", "Free as in freedom"))
translatorList .arg(tr("Some of them are optional and might not be included with this distribution depending on the build environment."));
)
};
const QStringList licenseStr { ui->m_helpTextEdit->setHtml(HELP_HTML);
u"<h1 align='center'><b>%1</b></h1>"_s.arg(tr("Your Rights")), ui->m_aboutTextEdit->setHtml(ABOUT_HTML);
u"<p>%1</p><p>%2</p><ul><li>%3</li><li>%4</li><li>%5</li><li>%6</li></ul>"_s.arg( ui->m_specialThanksTextEdit->setHtml(SPECIAL_THANKS_HTML);
tr("%1 is released under the MIT License."), // %1 ui->m_licenseTextEdit->setHtml(LICENSE_HTML);
tr("This license grants people a number of freedoms:"), // %2 ui->m_3rdPartyLibsTextEdit->setHtml(THIRD_PARTY_LIBS_HTML);
tr("You are free to use %1, for any purpose"), // %3
tr("You are free to distribute %1"), // %4
tr("You can study how %1 works and change it"), // %5
tr("You can distribute changed versions of %1") // %6
).arg(u"<i>%1</i>"_s),
u"<p>%1</p>"_s.arg(tr("The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.")),
u"<hr/><pre>%2</pre>"_s
};
const QString mitLicense(QStringLiteral(R"(Expat/MIT License connect(ui->m_buttonBox, QOverload<QAbstractButton *>::of(&QDialogButtonBox::clicked), this, [this](QAbstractButton * btn){
Q_UNUSED(btn)
Copyright &copy; 2025 BLumia
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
)"));
const QStringList thirdPartyLibsStr {
u"<h1 align='center'><b>%1</b></h1>"_s.arg(tr("Third-party Libraries used by %1")),
tr("%1 is built on the following free software libraries:", "Free as in freedom"),
u"<ul>"_s,
#ifdef HAVE_EXIV2_VERSION
u"<li><a href='%1'>%2</a>: %3</li>"_s.arg("https://www.exiv2.org/", "Exiv2", "GPLv2"),
#endif // EXIV2_VERSION
u"<li><a href='%1'>%2</a>: %3</li>"_s.arg("https://www.qt.io/", "Qt", "GPLv2 + GPLv3 + LGPLv2.1 + LGPLv3"),
u"</ul>"_s
};
m_helpTextEdit->setText(helpStr.join('\n'));
m_aboutTextEdit->setText(aboutStr.join('\n'));
m_aboutTextEdit->setOpenExternalLinks(true);
m_specialThanksTextEdit->setText(specialThanksStr.join('\n'));
m_specialThanksTextEdit->setOpenExternalLinks(true);
m_licenseTextEdit->setText(licenseStr.join('\n').arg(qApp->applicationDisplayName(), mitLicense));
m_3rdPartyLibsTextEdit->setText(thirdPartyLibsStr.join('\n').arg(u"<i>%1</i>"_s).arg(qApp->applicationDisplayName()));
m_3rdPartyLibsTextEdit->setOpenExternalLinks(true);
m_tabWidget->addTab(m_helpTextEdit, tr("&Help"));
m_tabWidget->addTab(m_aboutTextEdit, tr("&About"));
m_tabWidget->addTab(m_specialThanksTextEdit, tr("&Special Thanks"));
m_tabWidget->addTab(m_licenseTextEdit, tr("&License"));
m_tabWidget->addTab(m_3rdPartyLibsTextEdit, tr("&Third-party Libraries"));
m_buttonBox->setStandardButtons(QDialogButtonBox::Close);
connect(m_buttonBox, QOverload<QAbstractButton *>::of(&QDialogButtonBox::clicked), this, [this](){
this->close(); this->close();
}); });
setLayout(new QVBoxLayout);
layout()->addWidget(m_tabWidget);
layout()->addWidget(m_buttonBox);
setMinimumSize(361, 161); // not sure why it complain "Unable to set geometry" setMinimumSize(361, 161); // not sure why it complain "Unable to set geometry"
setWindowFlag(Qt::WindowContextHelpButtonHint, false);
} }
AboutDialog::~AboutDialog() AboutDialog::~AboutDialog()
{ {
delete ui;
} }
QSize AboutDialog::sizeHint() const QSize AboutDialog::sizeHint() const
+5 -11
View File
@@ -7,10 +7,11 @@
#include <QDialog> #include <QDialog>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QTextBrowser; namespace Ui {
class QTabWidget; class AboutDialog;
class QDialogButtonBox; }
QT_END_NAMESPACE QT_END_NAMESPACE
class AboutDialog : public QDialog class AboutDialog : public QDialog
@@ -23,14 +24,7 @@ public:
QSize sizeHint() const override; QSize sizeHint() const override;
private: private:
QTabWidget * m_tabWidget = nullptr; QT_PREPEND_NAMESPACE(Ui::AboutDialog) *ui;
QDialogButtonBox * m_buttonBox = nullptr;
QTextBrowser * m_helpTextEdit = nullptr;
QTextBrowser * m_aboutTextEdit = nullptr;
QTextBrowser * m_specialThanksTextEdit = nullptr;
QTextBrowser * m_licenseTextEdit = nullptr;
QTextBrowser * m_3rdPartyLibsTextEdit = nullptr;
}; };
#endif // ABOUTDIALOG_H #endif // ABOUTDIALOG_H
+106
View File
@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>AboutDialog</class>
<widget class="QDialog" name="AboutDialog">
<property name="windowModality">
<enum>Qt::NonModal</enum>
</property>
<property name="windowTitle">
<string>About</string>
</property>
<property name="minimumSize">
<size>
<width>361</width>
<height>161</height>
</size>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTabWidget" name="m_tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="helpTab">
<attribute name="title">
<string>&amp;Help</string>
</attribute>
<layout class="QVBoxLayout" name="helpTabLayout">
<item>
<widget class="QTextBrowser" name="m_helpTextEdit">
<property name="openExternalLinks">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="aboutTab">
<attribute name="title">
<string>&amp;About</string>
</attribute>
<layout class="QVBoxLayout" name="aboutTabLayout">
<item>
<widget class="QTextBrowser" name="m_aboutTextEdit">
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="specialThanksTab">
<attribute name="title">
<string>&amp;Special Thanks</string>
</attribute>
<layout class="QVBoxLayout" name="specialThanksTabLayout">
<item>
<widget class="QTextBrowser" name="m_specialThanksTextEdit">
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="licenseTab">
<attribute name="title">
<string>&amp;License</string>
</attribute>
<layout class="QVBoxLayout" name="licenseTabLayout">
<item>
<widget class="QTextBrowser" name="m_licenseTextEdit">
<property name="openExternalLinks">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="thirdPartyLibsTab">
<attribute name="title">
<string>&amp;Third-party Libraries</string>
</attribute>
<layout class="QVBoxLayout" name="thirdPartyLibsTabLayout">
<item>
<widget class="QTextBrowser" name="m_3rdPartyLibsTextEdit">
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="m_buttonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
+30 -24
View File
@@ -10,13 +10,7 @@
#include <QSvgRenderer> #include <QSvgRenderer>
#include <QPainter> #include <QPainter>
#define ICON_NAME(name)\ static QIcon loadHidpiIcon(const QString &resp, QSize sz = QSize(32, 32))
QStringLiteral(":/icons/" #name ".svg")
#define ACTION_NAME(s) QStringLiteral(STRIFY(s))
#define STRIFY(s) #s
QIcon ActionManager::loadHidpiIcon(const QString &resp, QSize sz)
{ {
QSvgRenderer r(resp); QSvgRenderer r(resp);
QPixmap pm = QPixmap(sz * qApp->devicePixelRatio()); QPixmap pm = QPixmap(sz * qApp->devicePixelRatio());
@@ -29,13 +23,22 @@ QIcon ActionManager::loadHidpiIcon(const QString &resp, QSize sz)
void ActionManager::setupAction(MainWindow *mainWindow) void ActionManager::setupAction(MainWindow *mainWindow)
{ {
// region: Action and Its Icon Creation
#define ICON_NAME(name)\
QStringLiteral(":/icons/" #name ".svg")
#define ACTION_NAME(s) QStringLiteral(STRIFY(s))
#define STRIFY(s) #s
auto create_action = [] (QWidget *w, QAction **a, QString i, QString an, bool iconFromTheme = false) { auto create_action = [] (QWidget *w, QAction **a, QString i, QString an, bool iconFromTheme = false) {
*a = new QAction(w); *a = new QAction(w);
if (!i.isNull()) if (!i.isNull())
(*a)->setIcon(iconFromTheme ? QIcon::fromTheme(i) : ActionManager::loadHidpiIcon(i)); (*a)->setIcon(iconFromTheme ? QIcon::fromTheme(i) : loadHidpiIcon(i));
(*a)->setObjectName(an); (*a)->setObjectName(an);
w->addAction(*a); w->addAction(*a);
}; };
#define CREATE_NEW_ICON_ACTION(w, a, i) create_action(w, &a, ICON_NAME(i), ACTION_NAME(a)) #define CREATE_NEW_ICON_ACTION(w, a, i) create_action(w, &a, ICON_NAME(i), ACTION_NAME(a))
CREATE_NEW_ICON_ACTION(mainWindow, actionActualSize, zoom-original); CREATE_NEW_ICON_ACTION(mainWindow, actionActualSize, zoom-original);
CREATE_NEW_ICON_ACTION(mainWindow, actionToggleMaximize, view-fullscreen); CREATE_NEW_ICON_ACTION(mainWindow, actionToggleMaximize, view-fullscreen);
@@ -43,13 +46,13 @@ void ActionManager::setupAction(MainWindow *mainWindow)
CREATE_NEW_ICON_ACTION(mainWindow, actionZoomOut, zoom-out); CREATE_NEW_ICON_ACTION(mainWindow, actionZoomOut, zoom-out);
CREATE_NEW_ICON_ACTION(mainWindow, actionToggleCheckerboard, view-background-checkerboard); CREATE_NEW_ICON_ACTION(mainWindow, actionToggleCheckerboard, view-background-checkerboard);
CREATE_NEW_ICON_ACTION(mainWindow, actionRotateClockwise, object-rotate-right); CREATE_NEW_ICON_ACTION(mainWindow, actionRotateClockwise, object-rotate-right);
CREATE_NEW_ICON_ACTION(mainWindow, actionPrevPicture, go-previous);
CREATE_NEW_ICON_ACTION(mainWindow, actionNextPicture, go-next);
#undef CREATE_NEW_ICON_ACTION #undef CREATE_NEW_ICON_ACTION
#define CREATE_NEW_ACTION(w, a) create_action(w, &a, QString(), ACTION_NAME(a)) #define CREATE_NEW_ACTION(w, a) create_action(w, &a, QString(), ACTION_NAME(a))
#define CREATE_NEW_THEMEICON_ACTION(w, a, i) create_action(w, &a, QLatin1String(STRIFY(i)), ACTION_NAME(a), true) #define CREATE_NEW_THEMEICON_ACTION(w, a, i) create_action(w, &a, QLatin1String(STRIFY(i)), ACTION_NAME(a), true)
CREATE_NEW_ACTION(mainWindow, actionRotateCounterClockwise); CREATE_NEW_ACTION(mainWindow, actionRotateCounterClockwise);
CREATE_NEW_ACTION(mainWindow, actionPrevPicture);
CREATE_NEW_ACTION(mainWindow, actionNextPicture);
CREATE_NEW_ACTION(mainWindow, actionTogglePauseAnimation); CREATE_NEW_ACTION(mainWindow, actionTogglePauseAnimation);
CREATE_NEW_ACTION(mainWindow, actionAnimationNextFrame); CREATE_NEW_ACTION(mainWindow, actionAnimationNextFrame);
@@ -58,13 +61,10 @@ void ActionManager::setupAction(MainWindow *mainWindow)
CREATE_NEW_ACTION(mainWindow, actionHorizontalFlip); CREATE_NEW_ACTION(mainWindow, actionHorizontalFlip);
CREATE_NEW_ACTION(mainWindow, actionFitInView); CREATE_NEW_ACTION(mainWindow, actionFitInView);
CREATE_NEW_ACTION(mainWindow, actionFitByWidth); CREATE_NEW_ACTION(mainWindow, actionFitByWidth);
CREATE_NEW_ACTION(mainWindow, actionFitLongImage);
CREATE_NEW_THEMEICON_ACTION(mainWindow, actionCopyPixmap, edit-copy); CREATE_NEW_THEMEICON_ACTION(mainWindow, actionCopyPixmap, edit-copy);
CREATE_NEW_ACTION(mainWindow, actionCopyFilePath); CREATE_NEW_ACTION(mainWindow, actionCopyFilePath);
CREATE_NEW_THEMEICON_ACTION(mainWindow, actionPaste, edit-paste); CREATE_NEW_THEMEICON_ACTION(mainWindow, actionPaste, edit-paste);
CREATE_NEW_THEMEICON_ACTION(mainWindow, actionTrash, edit-delete); CREATE_NEW_THEMEICON_ACTION(mainWindow, actionTrash, edit-delete);
CREATE_NEW_ACTION(mainWindow, actionToggleStayOnTop);
CREATE_NEW_ACTION(mainWindow, actionToggleProtectMode);
CREATE_NEW_ACTION(mainWindow, actionToggleAvoidResetTransform); CREATE_NEW_ACTION(mainWindow, actionToggleAvoidResetTransform);
CREATE_NEW_ACTION(mainWindow, actionSettings); CREATE_NEW_ACTION(mainWindow, actionSettings);
CREATE_NEW_THEMEICON_ACTION(mainWindow, actionHelp, system-help); CREATE_NEW_THEMEICON_ACTION(mainWindow, actionHelp, system-help);
@@ -74,14 +74,13 @@ void ActionManager::setupAction(MainWindow *mainWindow)
#undef CREATE_NEW_ACTION #undef CREATE_NEW_ACTION
#undef CREATE_NEW_THEMEICON_ACTION #undef CREATE_NEW_THEMEICON_ACTION
retranslateUi(mainWindow); #undef STRIFY
#undef ACTION_NAME
#undef ICON_NAME
QMetaObject::connectSlotsByName(mainWindow); // endregion
}
void ActionManager::retranslateUi(MainWindow *mainWindow) // region: Action Translatable Text Setup
{
Q_UNUSED(mainWindow);
actionOpen->setText(QCoreApplication::translate("MainWindow", "&Open...", nullptr)); actionOpen->setText(QCoreApplication::translate("MainWindow", "&Open...", nullptr));
@@ -102,13 +101,10 @@ void ActionManager::retranslateUi(MainWindow *mainWindow)
actionHorizontalFlip->setText(QCoreApplication::translate("MainWindow", "Flip &Horizontally", nullptr)); actionHorizontalFlip->setText(QCoreApplication::translate("MainWindow", "Flip &Horizontally", nullptr));
actionFitInView->setText(QCoreApplication::translate("MainWindow", "Fit to view", nullptr)); actionFitInView->setText(QCoreApplication::translate("MainWindow", "Fit to view", nullptr));
actionFitByWidth->setText(QCoreApplication::translate("MainWindow", "Fit to width", nullptr)); actionFitByWidth->setText(QCoreApplication::translate("MainWindow", "Fit to width", nullptr));
actionFitLongImage->setText(QCoreApplication::translate("MainWindow", "Fit long image", nullptr));
actionCopyPixmap->setText(QCoreApplication::translate("MainWindow", "Copy P&ixmap", nullptr)); actionCopyPixmap->setText(QCoreApplication::translate("MainWindow", "Copy P&ixmap", nullptr));
actionCopyFilePath->setText(QCoreApplication::translate("MainWindow", "Copy &File Path", nullptr)); actionCopyFilePath->setText(QCoreApplication::translate("MainWindow", "Copy &File Path", nullptr));
actionPaste->setText(QCoreApplication::translate("MainWindow", "&Paste", nullptr)); actionPaste->setText(QCoreApplication::translate("MainWindow", "&Paste", nullptr));
actionTrash->setText(QCoreApplication::translate("MainWindow", "Move to Trash", nullptr)); actionTrash->setText(QCoreApplication::translate("MainWindow", "Move to Trash", nullptr));
actionToggleStayOnTop->setText(QCoreApplication::translate("MainWindow", "Stay on top", nullptr));
actionToggleProtectMode->setText(QCoreApplication::translate("MainWindow", "Protected mode", nullptr));
actionToggleAvoidResetTransform->setText(QCoreApplication::translate("MainWindow", "Keep transformation", "The 'transformation' means the flip/rotation status that currently applied to the image view")); actionToggleAvoidResetTransform->setText(QCoreApplication::translate("MainWindow", "Keep transformation", "The 'transformation' means the flip/rotation status that currently applied to the image view"));
actionSettings->setText(QCoreApplication::translate("MainWindow", "Configure...", nullptr)); actionSettings->setText(QCoreApplication::translate("MainWindow", "Configure...", nullptr));
actionHelp->setText(QCoreApplication::translate("MainWindow", "Help", nullptr)); actionHelp->setText(QCoreApplication::translate("MainWindow", "Help", nullptr));
@@ -117,13 +113,17 @@ void ActionManager::retranslateUi(MainWindow *mainWindow)
QCoreApplication::translate( QCoreApplication::translate(
"MainWindow", "Show in File Explorer", "MainWindow", "Show in File Explorer",
"File Explorer is the name of explorer.exe under Windows" "File Explorer is the name of explorer.exe under Windows"
) )
); );
#else #else
actionLocateInFileManager->setText(QCoreApplication::translate("MainWindow", "Show in directory", nullptr)); actionLocateInFileManager->setText(QCoreApplication::translate("MainWindow", "Show in directory", nullptr));
#endif // Q_OS_WIN #endif // Q_OS_WIN
actionProperties->setText(QCoreApplication::translate("MainWindow", "Properties", nullptr)); actionProperties->setText(QCoreApplication::translate("MainWindow", "Properties", nullptr));
actionQuitApp->setText(QCoreApplication::translate("MainWindow", "Quit", nullptr)); actionQuitApp->setText(QCoreApplication::translate("MainWindow", "Quit", nullptr));
// endregion
QMetaObject::connectSlotsByName(mainWindow);
} }
void ActionManager::setupShortcuts() void ActionManager::setupShortcuts()
@@ -153,3 +153,9 @@ void ActionManager::setupShortcuts()
}); });
} }
void ActionManager::enablePrevNextPictureAction(bool enablePrevPictureAction, bool enableNextPictureAction)
{
actionPrevPicture->setEnabled(enablePrevPictureAction);
actionNextPicture->setEnabled(enableNextPictureAction);
}
+3 -6
View File
@@ -9,6 +9,8 @@
class MainWindow; class MainWindow;
/// Action Manager is separated from Main Window
/// to manage all actions specifically.
class ActionManager class ActionManager
{ {
public: public:
@@ -16,10 +18,8 @@ public:
~ActionManager() = default; ~ActionManager() = default;
void setupAction(MainWindow * mainWindow); void setupAction(MainWindow * mainWindow);
void retranslateUi(MainWindow *MainWindow);
void setupShortcuts(); void setupShortcuts();
void enablePrevNextPictureAction(bool enablePrevPictureAction, bool enableNextPictureAction);
static QIcon loadHidpiIcon(const QString &resp, QSize sz = QSize(32, 32));
public: public:
QAction *actionOpen; QAction *actionOpen;
@@ -41,13 +41,10 @@ public:
QAction *actionHorizontalFlip; QAction *actionHorizontalFlip;
QAction *actionFitInView; QAction *actionFitInView;
QAction *actionFitByWidth; QAction *actionFitByWidth;
QAction *actionFitLongImage;
QAction *actionCopyPixmap; QAction *actionCopyPixmap;
QAction *actionCopyFilePath; QAction *actionCopyFilePath;
QAction *actionPaste; QAction *actionPaste;
QAction *actionTrash; QAction *actionTrash;
QAction *actionToggleStayOnTop;
QAction *actionToggleProtectMode;
QAction *actionToggleAvoidResetTransform; QAction *actionToggleAvoidResetTransform;
QAction *actionSettings; QAction *actionSettings;
QAction *actionHelp; QAction *actionHelp;
-8
View File
@@ -4,15 +4,12 @@
#include "bottombuttongroup.h" #include "bottombuttongroup.h"
#include "opacityhelper.h"
#include <QToolButton> #include <QToolButton>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QDebug> #include <QDebug>
BottomButtonGroup::BottomButtonGroup(const std::vector<QAction *> &actionList, QWidget *parent) BottomButtonGroup::BottomButtonGroup(const std::vector<QAction *> &actionList, QWidget *parent)
: QGroupBox (parent) : QGroupBox (parent)
, m_opacityHelper(new OpacityHelper(this))
{ {
QHBoxLayout * mainLayout = new QHBoxLayout(this); QHBoxLayout * mainLayout = new QHBoxLayout(this);
mainLayout->setSizeConstraint(QLayout::SetFixedSize); mainLayout->setSizeConstraint(QLayout::SetFixedSize);
@@ -45,11 +42,6 @@ BottomButtonGroup::BottomButtonGroup(const std::vector<QAction *> &actionList, Q
} }
} }
void BottomButtonGroup::setOpacity(qreal opacity, bool animated)
{
m_opacityHelper->setOpacity(opacity, animated);
}
void BottomButtonGroup::addButton(QAbstractButton *button) void BottomButtonGroup::addButton(QAbstractButton *button)
{ {
layout()->addWidget(button); layout()->addWidget(button);
-5
View File
@@ -10,18 +10,13 @@
#include <QAbstractButton> #include <QAbstractButton>
#include <QGroupBox> #include <QGroupBox>
class OpacityHelper;
class BottomButtonGroup : public QGroupBox class BottomButtonGroup : public QGroupBox
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit BottomButtonGroup(const std::vector<QAction *> & actionList, QWidget *parent = nullptr); explicit BottomButtonGroup(const std::vector<QAction *> & actionList, QWidget *parent = nullptr);
void setOpacity(qreal opacity, bool animated = true);
void addButton(QAbstractButton *button); void addButton(QAbstractButton *button);
private:
OpacityHelper * m_opacityHelper;
}; };
#endif // BOTTOMBUTTONGROUP_H #endif // BOTTOMBUTTONGROUP_H
+6 -106
View File
@@ -14,15 +14,14 @@
FramelessWindow::FramelessWindow(QWidget *parent) FramelessWindow::FramelessWindow(QWidget *parent)
: QWidget(parent) : QWidget(parent)
, m_centralLayout(new QVBoxLayout(this)) , m_centralLayout(new QVBoxLayout(this))
, m_oldCursorShape(Qt::ArrowCursor)
, m_oldEdges()
{ {
this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint); this->setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
this->setMouseTracking(true);
this->setAttribute(Qt::WA_Hover, true);
this->installEventFilter(this);
m_centralLayout->setContentsMargins(QMargins()); // YYC MARK:
// 72 px is the height of Windows Photo Viewer's bottom line.
// TODO: This value may be declared as a constant.
m_centralLayout->setContentsMargins(QMargins(0, 0, 0, 72));
} }
void FramelessWindow::setCentralWidget(QWidget *widget) void FramelessWindow::setCentralWidget(QWidget *widget)
@@ -35,102 +34,3 @@ void FramelessWindow::setCentralWidget(QWidget *widget)
m_centralLayout->addWidget(widget); m_centralLayout->addWidget(widget);
m_centralWidget = widget; m_centralWidget = widget;
} }
void FramelessWindow::installResizeCapture(QObject* widget)
{
widget->installEventFilter(this);
}
bool FramelessWindow::eventFilter(QObject* o, QEvent* e)
{
switch (e->type()) {
case QEvent::HoverMove:
{
QWidget* wg = qobject_cast<QWidget*>(o);
if (wg != nullptr)
return mouseHover(static_cast<QHoverEvent*>(e), wg);
break;
}
case QEvent::MouseButtonPress:
return mousePress(static_cast<QMouseEvent*>(e));
}
return QWidget::eventFilter(o, e);
}
bool FramelessWindow::mouseHover(QHoverEvent* event, QWidget* wg)
{
if (!isMaximized() && !isFullScreen()) {
QWindow* win = window()->windowHandle();
Qt::Edges edges = this->getEdgesByPos(wg->mapToGlobal(event->oldPos()), win->frameGeometry());
// backup & restore cursor shape
if (edges && !m_oldEdges)
// entering the edge. backup cursor shape
m_oldCursorShape = win->cursor().shape();
if (!edges && m_oldEdges)
// leaving the edge. restore cursor shape
win->setCursor(m_oldCursorShape);
// save the latest edges status
m_oldEdges = edges;
// show resize cursor shape if cursor is within border
if (edges) {
win->setCursor(this->getCursorByEdge(edges, Qt::ArrowCursor));
return true;
}
}
return false;
}
bool FramelessWindow::mousePress(QMouseEvent* event)
{
if (event->buttons() & Qt::LeftButton && !isMaximized() && !isFullScreen()) {
QWindow* win = window()->windowHandle();
Qt::Edges edges = this->getEdgesByPos(event->globalPosition().toPoint(), win->frameGeometry());
if (edges) {
win->startSystemResize(edges);
return true;
}
}
return false;
}
Qt::CursorShape FramelessWindow::getCursorByEdge(const Qt::Edges& edges, Qt::CursorShape default_cursor)
{
if ((edges == (Qt::TopEdge | Qt::LeftEdge)) || (edges == (Qt::RightEdge | Qt::BottomEdge)))
return Qt::SizeFDiagCursor;
else if ((edges == (Qt::TopEdge | Qt::RightEdge)) || (edges == (Qt::LeftEdge | Qt::BottomEdge)))
return Qt::SizeBDiagCursor;
else if (edges & (Qt::TopEdge | Qt::BottomEdge))
return Qt::SizeVerCursor;
else if (edges & (Qt::LeftEdge | Qt::RightEdge))
return Qt::SizeHorCursor;
else
return default_cursor;
}
Qt::Edges FramelessWindow::getEdgesByPos(const QPoint gpos, const QRect& winrect)
{
const int borderWidth = 8;
Qt::Edges edges;
int x = gpos.x() - winrect.x();
int y = gpos.y() - winrect.y();
if (x < borderWidth)
edges |= Qt::LeftEdge;
if (x > (winrect.width() - borderWidth))
edges |= Qt::RightEdge;
if (y < borderWidth)
edges |= Qt::TopEdge;
if (y > (winrect.height() - borderWidth))
edges |= Qt::BottomEdge;
return edges;
}
-12
View File
@@ -18,20 +18,8 @@ public:
explicit FramelessWindow(QWidget *parent = nullptr); explicit FramelessWindow(QWidget *parent = nullptr);
void setCentralWidget(QWidget * widget); void setCentralWidget(QWidget * widget);
void installResizeCapture(QObject* widget);
protected:
bool eventFilter(QObject *o, QEvent *e) override;
bool mouseHover(QHoverEvent* event, QWidget* wg);
bool mousePress(QMouseEvent* event);
private: private:
Qt::Edges m_oldEdges;
Qt::CursorShape m_oldCursorShape;
Qt::CursorShape getCursorByEdge(const Qt::Edges& edges, Qt::CursorShape default_cursor);
Qt::Edges getEdgesByPos(const QPoint pos, const QRect& winrect);
QVBoxLayout * m_centralLayout = nullptr; QVBoxLayout * m_centralLayout = nullptr;
QWidget * m_centralWidget = nullptr; // just a pointer, doesn't take the ownership. QWidget * m_centralWidget = nullptr; // just a pointer, doesn't take the ownership.
}; };
+1 -46
View File
@@ -138,7 +138,6 @@ void GraphicsView::resetTransform()
void GraphicsView::zoomView(qreal scaleFactor) void GraphicsView::zoomView(qreal scaleFactor)
{ {
m_enableFitInView = false; m_enableFitInView = false;
m_longImageMode = false;
scale(scaleFactor, scaleFactor); scale(scaleFactor, scaleFactor);
applyTransformationModeByScaleFactor(); applyTransformationModeByScaleFactor();
emit navigatorViewRequired(!isThingSmallerThanWindowWith(transform()), transform()); emit navigatorViewRequired(!isThingSmallerThanWindowWith(transform()), transform());
@@ -280,31 +279,6 @@ void GraphicsView::fitByOrientation(Qt::Orientation ori, bool scaleDownOnly)
emit navigatorViewRequired(!isThingSmallerThanWindowWith(transform()), transform()); emit navigatorViewRequired(!isThingSmallerThanWindowWith(transform()), transform());
} }
bool GraphicsView::isLongImage() const
{
// Get the transformed image size (considering rotation and other transforms)
QRectF transformedRect = transform().mapRect(sceneRect());
QSizeF imageSize = transformedRect.size();
if (imageSize.isEmpty()) return false;
qreal aspectRatio = imageSize.width() / imageSize.height();
// Check if aspect ratio exceeds 5:2 (wide) or 2:5 (tall)
return aspectRatio > 2.5 || aspectRatio < 0.4;
}
void GraphicsView::fitLongImage()
{
QRectF transformedRect = transform().mapRect(sceneRect());
if (transformedRect.width() < transformedRect.height()) {
fitByOrientation(Qt::Horizontal, true);
} else {
fitByOrientation(Qt::Vertical, true);
}
}
void GraphicsView::displayScene() void GraphicsView::displayScene()
{ {
if (shouldAvoidTransform()) { if (shouldAvoidTransform()) {
@@ -312,14 +286,6 @@ void GraphicsView::displayScene()
return; return;
} }
// Check if should apply long image mode
if (Settings::instance()->autoLongImageMode() && isLongImage()) {
m_longImageMode = true;
m_firstUserMediaLoaded = true;
if (isSceneBiggerThanView()) fitLongImage();
return;
}
if (isSceneBiggerThanView()) { if (isSceneBiggerThanView()) {
// Do fit-in-view // Do fit-in-view
fitInView(sceneRect(), Qt::KeepAspectRatio); fitInView(sceneRect(), Qt::KeepAspectRatio);
@@ -330,7 +296,6 @@ void GraphicsView::displayScene()
emit navigatorViewRequired(false, transform()); emit navigatorViewRequired(false, transform());
} }
m_longImageMode = false;
m_enableFitInView = true; m_enableFitInView = true;
m_firstUserMediaLoaded = true; m_firstUserMediaLoaded = true;
} }
@@ -350,11 +315,6 @@ void GraphicsView::setEnableAutoFitInView(bool enable)
m_enableFitInView = enable; m_enableFitInView = enable;
} }
void GraphicsView::setLongImageMode(bool enable)
{
m_longImageMode = enable;
}
bool GraphicsView::avoidResetTransform() const bool GraphicsView::avoidResetTransform() const
{ {
return m_avoidResetTransform; return m_avoidResetTransform;
@@ -427,12 +387,7 @@ void GraphicsView::wheelEvent(QWheelEvent *event)
void GraphicsView::resizeEvent(QResizeEvent *event) void GraphicsView::resizeEvent(QResizeEvent *event)
{ {
if (m_longImageMode) { if (m_enableFitInView) {
// In long image mode, reapply long image logic on resize
// We directly apply the long image mode logic without rechecking
// if we should enter long image mode, as the mode is already active
fitLongImage();
} else if (m_enableFitInView) {
bool originalSizeSmallerThanWindow = isThingSmallerThanWindowWith(resetScale(transform())); bool originalSizeSmallerThanWindow = isThingSmallerThanWindowWith(resetScale(transform()));
if (originalSizeSmallerThanWindow && scaleFactor() >= 1) { if (originalSizeSmallerThanWindow && scaleFactor() >= 1) {
// no longer need to do fitInView() // no longer need to do fitInView()
-6
View File
@@ -39,17 +39,12 @@ public:
void displayScene(); void displayScene();
bool isSceneBiggerThanView() const; bool isSceneBiggerThanView() const;
void setEnableAutoFitInView(bool enable = true); void setEnableAutoFitInView(bool enable = true);
void setLongImageMode(bool enable = true);
bool avoidResetTransform() const; bool avoidResetTransform() const;
void setAvoidResetTransform(bool avoidReset); void setAvoidResetTransform(bool avoidReset);
static QTransform resetScale(const QTransform & orig); static QTransform resetScale(const QTransform & orig);
// Long image mode support
bool isLongImage() const;
void fitLongImage();
signals: signals:
void navigatorViewRequired(bool required, QTransform transform); void navigatorViewRequired(bool required, QTransform transform);
void viewportRectChanged(); void viewportRectChanged();
@@ -75,7 +70,6 @@ private:
// ... or even more? e.g. "fit/snap width" things... // ... or even more? e.g. "fit/snap width" things...
// Currently it's "no fit" when it's false and "fit when view is smaller" when it's true. // Currently it's "no fit" when it's false and "fit when view is smaller" when it's true.
bool m_enableFitInView = false; bool m_enableFitInView = false;
bool m_longImageMode = false;
bool m_avoidResetTransform = false; bool m_avoidResetTransform = false;
bool m_checkerboardEnabled = false; bool m_checkerboardEnabled = false;
bool m_useLightCheckerboard = false; bool m_useLightCheckerboard = false;
+69 -238
View File
@@ -5,7 +5,6 @@
#include "mainwindow.h" #include "mainwindow.h"
#include "settings.h" #include "settings.h"
#include "toolbutton.h"
#include "bottombuttongroup.h" #include "bottombuttongroup.h"
#include "graphicsview.h" #include "graphicsview.h"
#include "navigatorview.h" #include "navigatorview.h"
@@ -52,77 +51,44 @@ MainWindow::MainWindow(QWidget *parent)
, m_pm(new PlaylistManager(this)) , m_pm(new PlaylistManager(this))
, m_fileSystemWatcher(new QFileSystemWatcher(this)) , m_fileSystemWatcher(new QFileSystemWatcher(this))
{ {
if (Settings::instance()->stayOnTop()) {
this->setWindowFlag(Qt::WindowStaysOnTopHint);
}
this->setAttribute(Qt::WA_TranslucentBackground, true); this->setAttribute(Qt::WA_TranslucentBackground, true);
this->setMinimumSize(350, 330); // YYC MARK:
// Blumis set original value is 350 x 330.
// It is too small for modern device,
// so I level it up to standard VGA resolution 640 x 480.
this->setMinimumSize(640, 480);
this->setWindowIcon(QIcon(u":/icons/app-icon.svg"_s)); this->setWindowIcon(QIcon(u":/icons/app-icon.svg"_s));
this->setMouseTracking(true); this->setMouseTracking(true);
this->setAcceptDrops(true); this->setAcceptDrops(true);
m_pm->setAutoLoadFilterSuffixes(supportedImageFormats()); m_pm->setAutoLoadFilterSuffixes(supportedImageFormats());
m_fadeOutAnimation = new QPropertyAnimation(this, "windowOpacity"_ba);
m_fadeOutAnimation->setDuration(300);
m_fadeOutAnimation->setStartValue(1);
m_fadeOutAnimation->setEndValue(0);
m_floatUpAnimation = new QPropertyAnimation(this, "geometry"_ba);
m_floatUpAnimation->setDuration(300);
m_floatUpAnimation->setEasingCurve(QEasingCurve::OutCirc);
m_exitAnimationGroup = new QParallelAnimationGroup(this);
m_exitAnimationGroup->addAnimation(m_fadeOutAnimation);
m_exitAnimationGroup->addAnimation(m_floatUpAnimation);
connect(m_exitAnimationGroup, &QParallelAnimationGroup::finished,
this, &MainWindow::doCloseWindow);
GraphicsScene * scene = new GraphicsScene(this); GraphicsScene * scene = new GraphicsScene(this);
m_graphicsView = new GraphicsView(this); m_gv = new GraphicsView(this);
m_graphicsView->setScene(scene);
this->setCentralWidget(m_graphicsView);
m_gv = new NavigatorView(this);
m_gv->setFixedSize(220, 160);
m_gv->setScene(scene); m_gv->setScene(scene);
m_gv->setMainView(m_graphicsView); this->setCentralWidget(m_gv);
m_gv->fitInView(m_gv->sceneRect(), Qt::KeepAspectRatio);
connect(m_graphicsView, &GraphicsView::navigatorViewRequired, m_nav = new NavigatorView(this);
// YYC MARK:
// Blumia set original value is 220 x 160.
// So if we set its height to 72 for respecting the height of Windows Photo Viewer,
// the width should be set to 99 for keeping aspect ratio.
m_nav->setFixedSize(99, 72);
m_nav->setScene(scene);
m_nav->setMainView(m_gv);
m_nav->fitInView(m_nav->sceneRect(), Qt::KeepAspectRatio);
connect(m_gv, &GraphicsView::navigatorViewRequired,
this, [this](bool required, const QTransform & tf){ this, [this](bool required, const QTransform & tf){
m_gv->setTransform(GraphicsView::resetScale(tf)); m_nav->setTransform(GraphicsView::resetScale(tf));
m_gv->fitInView(m_gv->sceneRect(), Qt::KeepAspectRatio); m_nav->fitInView(m_nav->sceneRect(), Qt::KeepAspectRatio);
m_gv->setVisible(required); m_nav->setVisible(required);
m_gv->updateMainViewportRegion(); m_nav->updateMainViewportRegion();
}); });
connect(m_graphicsView, &GraphicsView::viewportRectChanged, connect(m_gv, &GraphicsView::viewportRectChanged,
m_gv, &NavigatorView::updateMainViewportRegion); m_nav, &NavigatorView::updateMainViewportRegion);
m_closeButton = new ToolButton(true, m_graphicsView);
m_closeButton->setIconSize(QSize(32, 32));
m_closeButton->setFixedSize(QSize(50, 50));
m_closeButton->setIconResourcePath(":/icons/window-close.svg");
connect(m_closeButton, &QAbstractButton::clicked,
this, &MainWindow::closeWindow);
m_prevButton = new ToolButton(false, m_graphicsView);
m_prevButton->setIconSize(QSize(75, 75));
m_prevButton->setIconResourcePath(":/icons/go-previous.svg");
m_prevButton->setVisible(false);
m_prevButton->setOpacity(0, false);
m_nextButton = new ToolButton(false, m_graphicsView);
m_nextButton->setIconSize(QSize(75, 75));
m_nextButton->setIconResourcePath(":/icons/go-next.svg");
m_nextButton->setVisible(false);
m_nextButton->setOpacity(0, false);
connect(m_prevButton, &QAbstractButton::clicked,
this, &MainWindow::galleryPrev);
connect(m_nextButton, &QAbstractButton::clicked,
this, &MainWindow::galleryNext);
m_am->setupAction(this); m_am->setupAction(this);
@@ -131,14 +97,12 @@ MainWindow::MainWindow(QWidget *parent)
m_am->actionToggleMaximize, m_am->actionToggleMaximize,
m_am->actionZoomIn, m_am->actionZoomIn,
m_am->actionZoomOut, m_am->actionZoomOut,
m_am->actionPrevPicture,
m_am->actionNextPicture,
m_am->actionToggleCheckerboard, m_am->actionToggleCheckerboard,
m_am->actionRotateClockwise m_am->actionRotateClockwise
}, this); }, this);
m_bottomButtonGroup->setOpacity(0, false);
m_gv->setOpacity(0, false);
m_closeButton->setOpacity(0, false);
connect(m_pm, &PlaylistManager::totalCountChanged, this, &MainWindow::updateGalleryButtonsVisibility); connect(m_pm, &PlaylistManager::totalCountChanged, this, &MainWindow::updateGalleryButtonsVisibility);
connect(m_pm->model(), &PlaylistModel::modelReset, this, std::bind(&MainWindow::galleryCurrent, this, false, false)); connect(m_pm->model(), &PlaylistModel::modelReset, this, std::bind(&MainWindow::galleryCurrent, this, false, false));
@@ -156,15 +120,8 @@ MainWindow::MainWindow(QWidget *parent)
QTimer::singleShot(0, this, [this](){ QTimer::singleShot(0, this, [this](){
m_am->setupShortcuts(); m_am->setupShortcuts();
Settings::instance()->applyUserShortcuts(this);
}); });
// allow some mouse events can go through these widgets for resizing window.
installResizeCapture(m_closeButton);
installResizeCapture(m_graphicsView);
installResizeCapture(m_graphicsView->viewport());
installResizeCapture(m_gv);
installResizeCapture(m_gv->viewport());
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()
@@ -184,15 +141,15 @@ void MainWindow::showUrls(const QList<QUrl> &urls)
return; return;
} }
} }
m_graphicsView->showFileFromPath(firstUrl.toLocalFile()); m_gv->showFileFromPath(firstUrl.toLocalFile());
m_pm->loadPlaylist(urls); m_pm->loadPlaylist(urls);
} else { } else {
m_graphicsView->showText(tr("File url list is empty")); m_gv->showText(tr("File url list is empty"));
m_pm->setPlaylist(urls); m_pm->setPlaylist(urls);
return; return;
} }
m_gv->fitInView(m_gv->sceneRect(), Qt::KeepAspectRatio); m_nav->fitInView(m_nav->sceneRect(), Qt::KeepAspectRatio);
} }
void MainWindow::initWindowSize() void MainWindow::initWindowSize()
@@ -217,10 +174,10 @@ void MainWindow::adjustWindowSizeBySceneRect()
{ {
if (m_pm->totalCount() < 1) return; if (m_pm->totalCount() < 1) return;
QSize sceneSize = m_graphicsView->sceneRect().toRect().size(); QSize sceneSize = m_gv->sceneRect().toRect().size();
QSize sceneSizeWithMargins = sceneSize + QSize(130, 125); QSize sceneSizeWithMargins = sceneSize + QSize(130, 125);
if (m_graphicsView->scaleFactor() < 1 || size().expandedTo(sceneSizeWithMargins) != size()) { if (m_gv->scaleFactor() < 1 || size().expandedTo(sceneSizeWithMargins) != size()) {
// if it scaled down by the resize policy: // if it scaled down by the resize policy:
QSize screenSize = qApp->screenAt(QCursor::pos())->availableSize(); QSize screenSize = qApp->screenAt(QCursor::pos())->availableSize();
if (screenSize.expandedTo(sceneSize) == screenSize) { if (screenSize.expandedTo(sceneSize) == screenSize) {
@@ -234,7 +191,7 @@ void MainWindow::adjustWindowSizeBySceneRect()
// The old window size may cause fitInView call from resize() and the // The old window size may cause fitInView call from resize() and the
// above resize() call won't reset the scale back to 1:1, so we // above resize() call won't reset the scale back to 1:1, so we
// just call resetScale() here to ensure the thing is no longer scaled. // just call resetScale() here to ensure the thing is no longer scaled.
m_graphicsView->resetScale(); m_gv->resetScale();
centerWindow(); centerWindow();
} else { } else {
// toggle maximum // toggle maximum
@@ -262,7 +219,7 @@ void MainWindow::galleryPrev()
QModelIndex index = m_pm->previousIndex(); QModelIndex index = m_pm->previousIndex();
if (index.isValid()) { if (index.isValid()) {
m_pm->setCurrentIndex(index); m_pm->setCurrentIndex(index);
m_graphicsView->showFileFromPath(m_pm->localFileByIndex(index)); m_gv->showFileFromPath(m_pm->localFileByIndex(index));
} }
} }
@@ -274,7 +231,7 @@ void MainWindow::galleryNext()
QModelIndex index = m_pm->nextIndex(); QModelIndex index = m_pm->nextIndex();
if (index.isValid()) { if (index.isValid()) {
m_pm->setCurrentIndex(index); m_pm->setCurrentIndex(index);
m_graphicsView->showFileFromPath(m_pm->localFileByIndex(index)); m_gv->showFileFromPath(m_pm->localFileByIndex(index));
} }
} }
@@ -285,11 +242,12 @@ void MainWindow::galleryCurrent(bool showLoadImageHintWhenEmpty, bool reloadImag
bool shouldResetfileWatcher = true; bool shouldResetfileWatcher = true;
if (index.isValid()) { if (index.isValid()) {
const QString & localFilePath(m_pm->localFileByIndex(index)); const QString & localFilePath(m_pm->localFileByIndex(index));
if (reloadImage) m_graphicsView->showFileFromPath(localFilePath); if (reloadImage) m_gv->showFileFromPath(localFilePath);
shouldResetfileWatcher = !updateFileWatcher(localFilePath); shouldResetfileWatcher = !updateFileWatcher(localFilePath);
setWindowTitle(m_pm->urlByIndex(index).fileName()); setWindowTitle(m_pm->urlByIndex(index).fileName());
} else if (showLoadImageHintWhenEmpty && m_pm->totalCount() <= 0) { } else if (showLoadImageHintWhenEmpty && m_pm->totalCount() <= 0) {
m_graphicsView->showText(QCoreApplication::translate("GraphicsScene", "Drag image here")); m_gv->showText(QCoreApplication::translate("GraphicsScene", "Drag image here"));
setWindowTitle(QString());
} }
updateGalleryButtonsVisibility(); updateGalleryButtonsVisibility();
@@ -319,69 +277,14 @@ void MainWindow::showEvent(QShowEvent *event)
void MainWindow::enterEvent(QEnterEvent *event) void MainWindow::enterEvent(QEnterEvent *event)
{ {
m_bottomButtonGroup->setOpacity(1);
m_gv->setOpacity(1);
m_closeButton->setOpacity(1);
m_prevButton->setOpacity(1);
m_nextButton->setOpacity(1);
return FramelessWindow::enterEvent(event); return FramelessWindow::enterEvent(event);
} }
void MainWindow::leaveEvent(QEvent *event) void MainWindow::leaveEvent(QEvent *event)
{ {
m_bottomButtonGroup->setOpacity(0);
m_gv->setOpacity(0);
m_closeButton->setOpacity(0);
m_prevButton->setOpacity(0);
m_nextButton->setOpacity(0);
return FramelessWindow::leaveEvent(event); return FramelessWindow::leaveEvent(event);
} }
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton && !isMaximized()) {
m_clickedOnWindow = true;
m_oldMousePos = event->pos();
// qDebug() << m_oldMousePos << m_graphicsView->transform().m11()
// << m_graphicsView->transform().m22() << m_graphicsView->matrix().m12();
event->accept();
}
return FramelessWindow::mousePressEvent(event);
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton && m_clickedOnWindow && !isMaximized() && !isFullScreen()) {
if (!window()->windowHandle()->startSystemMove()) {
move(event->globalPosition().toPoint() - m_oldMousePos);
}
event->accept();
}
return FramelessWindow::mouseMoveEvent(event);
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
m_clickedOnWindow = false;
// It seems the forward/back mouse button won't generate a key event [1] so we can't use
// QShortcut or QKeySequence to indicate these shortcuts, so we do it here.
// Reference:
// [1]: https://codereview.qt-project.org/c/qt/qtbase/+/177475
if (event->button() == Qt::ForwardButton || event->button() == Qt::BackButton) {
event->button() == Qt::BackButton ? galleryPrev() : galleryNext();
event->accept();
}
return FramelessWindow::mouseReleaseEvent(event);
}
void MainWindow::mouseDoubleClickEvent(QMouseEvent *event) void MainWindow::mouseDoubleClickEvent(QMouseEvent *event)
{ {
// The forward/back mouse button can also used to trigger a mouse double-click event // The forward/back mouse button can also used to trigger a mouse double-click event
@@ -474,17 +377,9 @@ void MainWindow::contextMenuEvent(QContextMenuEvent *event)
QAction * trash = m_am->actionTrash; QAction * trash = m_am->actionTrash;
QAction * stayOnTopMode = m_am->actionToggleStayOnTop;
stayOnTopMode->setCheckable(true);
stayOnTopMode->setChecked(stayOnTop());
QAction * protectedMode = m_am->actionToggleProtectMode;
protectedMode->setCheckable(true);
protectedMode->setChecked(m_protectedMode);
QAction * avoidResetTransform = m_am->actionToggleAvoidResetTransform; QAction * avoidResetTransform = m_am->actionToggleAvoidResetTransform;
avoidResetTransform->setCheckable(true); avoidResetTransform->setCheckable(true);
avoidResetTransform->setChecked(m_graphicsView->avoidResetTransform()); avoidResetTransform->setChecked(m_gv->avoidResetTransform());
QAction * toggleSettings = m_am->actionSettings; QAction * toggleSettings = m_am->actionSettings;
QAction * helpAction = m_am->actionHelp; QAction * helpAction = m_am->actionHelp;
@@ -512,8 +407,6 @@ void MainWindow::contextMenuEvent(QContextMenuEvent *event)
menu->addAction(m_am->actionFitByWidth); menu->addAction(m_am->actionFitByWidth);
#endif // 0 #endif // 0
menu->addSeparator(); menu->addSeparator();
menu->addAction(stayOnTopMode);
menu->addAction(protectedMode);
menu->addAction(avoidResetTransform); menu->addAction(avoidResetTransform);
menu->addSeparator(); menu->addSeparator();
menu->addAction(toggleSettings); menu->addAction(toggleSettings);
@@ -558,7 +451,7 @@ void MainWindow::dropEvent(QDropEvent *event)
if (mimeData->hasUrls()) { if (mimeData->hasUrls()) {
const QList<QUrl> &urls = mimeData->urls(); const QList<QUrl> &urls = mimeData->urls();
if (urls.isEmpty()) { if (urls.isEmpty()) {
m_graphicsView->showText(tr("File url list is empty")); m_gv->showText(tr("File url list is empty"));
} else { } else {
showUrls(urls); showUrls(urls);
} }
@@ -566,14 +459,14 @@ void MainWindow::dropEvent(QDropEvent *event)
QImage img = qvariant_cast<QImage>(mimeData->imageData()); QImage img = qvariant_cast<QImage>(mimeData->imageData());
QPixmap pixmap = QPixmap::fromImage(img); QPixmap pixmap = QPixmap::fromImage(img);
if (pixmap.isNull()) { if (pixmap.isNull()) {
m_graphicsView->showText(tr("Image data is invalid")); m_gv->showText(tr("Image data is invalid"));
} else { } else {
m_graphicsView->showImage(pixmap); m_gv->showImage(pixmap);
} }
} else if (mimeData->hasText()) { } else if (mimeData->hasText()) {
m_graphicsView->showText(mimeData->text()); m_gv->showText(mimeData->text());
} else { } else {
m_graphicsView->showText(tr("Not supported mimedata: %1").arg(mimeData->formats().first())); m_gv->showText(tr("Not supported mimedata: %1").arg(mimeData->formats().first()));
} }
} }
@@ -591,50 +484,18 @@ void MainWindow::centerWindow()
void MainWindow::closeWindow() void MainWindow::closeWindow()
{ {
if (Settings::instance()->useBuiltInCloseAnimation()) {
QRect windowRect(this->geometry());
m_floatUpAnimation->setStartValue(windowRect);
m_floatUpAnimation->setEndValue(windowRect.adjusted(0, -80, 0, 0));
m_floatUpAnimation->setStartValue(QRect(this->geometry().x(), this->geometry().y(), this->geometry().width(), this->geometry().height()));
m_floatUpAnimation->setEndValue(QRect(this->geometry().x(), this->geometry().y()-80, this->geometry().width(), this->geometry().height()));
m_exitAnimationGroup->start();
} else {
doCloseWindow();
}
} }
void MainWindow::updateWidgetsPosition() void MainWindow::updateWidgetsPosition()
{ {
m_closeButton->move(width() - m_closeButton->width(), 0);
m_prevButton->move(25, (height() - m_prevButton->sizeHint().height()) / 2);
m_nextButton->move(width() - m_nextButton->sizeHint().width() - 25,
(height() - m_prevButton->sizeHint().height()) / 2);
m_bottomButtonGroup->move((width() - m_bottomButtonGroup->width()) / 2, m_bottomButtonGroup->move((width() - m_bottomButtonGroup->width()) / 2,
height() - m_bottomButtonGroup->height()); (72 - m_bottomButtonGroup->height()) / 2 + (height() - 72));
m_gv->move(width() - m_gv->width(), height() - m_gv->height()); m_nav->move(width() - m_nav->width(), height() - m_nav->height());
}
void MainWindow::toggleProtectedMode()
{
m_protectedMode = !m_protectedMode;
m_closeButton->setVisible(!m_protectedMode);
updateGalleryButtonsVisibility();
}
void MainWindow::toggleStayOnTop()
{
setWindowFlag(Qt::WindowStaysOnTopHint, !stayOnTop());
show();
} }
void MainWindow::toggleAvoidResetTransform() void MainWindow::toggleAvoidResetTransform()
{ {
m_graphicsView->setAvoidResetTransform(!m_graphicsView->avoidResetTransform()); m_gv->setAvoidResetTransform(!m_gv->avoidResetTransform());
}
bool MainWindow::stayOnTop() const
{
return windowFlags().testFlag(Qt::WindowStaysOnTopHint);
} }
bool MainWindow::canPaste() const bool MainWindow::canPaste() const
@@ -657,9 +518,7 @@ bool MainWindow::canPaste() const
void MainWindow::quitAppAction(bool force) void MainWindow::quitAppAction(bool force)
{ {
if (!m_protectedMode || force) { closeWindow();
closeWindow();
}
} }
void MainWindow::toggleFullscreen() void MainWindow::toggleFullscreen()
@@ -698,9 +557,8 @@ void MainWindow::on_actionOpen_triggered()
void MainWindow::on_actionActualSize_triggered() void MainWindow::on_actionActualSize_triggered()
{ {
m_graphicsView->resetScale(); m_gv->resetScale();
m_graphicsView->setEnableAutoFitInView(false); m_gv->setEnableAutoFitInView(false);
m_graphicsView->setLongImageMode(false);
} }
void MainWindow::on_actionToggleMaximize_triggered() void MainWindow::on_actionToggleMaximize_triggered()
@@ -710,43 +568,36 @@ void MainWindow::on_actionToggleMaximize_triggered()
void MainWindow::on_actionZoomIn_triggered() void MainWindow::on_actionZoomIn_triggered()
{ {
if (m_graphicsView->scaleFactor() < 1000) { if (m_gv->scaleFactor() < 1000) {
m_graphicsView->zoomView(1.25); m_gv->zoomView(1.25);
} }
} }
void MainWindow::on_actionZoomOut_triggered() void MainWindow::on_actionZoomOut_triggered()
{ {
m_graphicsView->zoomView(0.8); m_gv->zoomView(0.8);
} }
void MainWindow::on_actionHorizontalFlip_triggered() void MainWindow::on_actionHorizontalFlip_triggered()
{ {
m_graphicsView->flipView(); m_gv->flipView();
} }
void MainWindow::on_actionFitInView_triggered() void MainWindow::on_actionFitInView_triggered()
{ {
m_graphicsView->fitInView(m_gv->sceneRect(), Qt::KeepAspectRatio); m_gv->fitInView(m_nav->sceneRect(), Qt::KeepAspectRatio);
m_graphicsView->setEnableAutoFitInView(m_graphicsView->scaleFactor() <= 1); m_gv->setEnableAutoFitInView(m_gv->scaleFactor() <= 1);
m_graphicsView->setLongImageMode(false);
} }
void MainWindow::on_actionFitByWidth_triggered() void MainWindow::on_actionFitByWidth_triggered()
{ {
m_graphicsView->fitByOrientation(); m_gv->fitByOrientation();
}
void MainWindow::on_actionFitLongImage_triggered()
{
m_graphicsView->setLongImageMode(true);
m_graphicsView->fitLongImage();
} }
void MainWindow::on_actionCopyPixmap_triggered() void MainWindow::on_actionCopyPixmap_triggered()
{ {
QClipboard *cb = QApplication::clipboard(); QClipboard *cb = QApplication::clipboard();
cb->setPixmap(m_graphicsView->scene()->renderToPixmap()); cb->setPixmap(m_gv->scene()->renderToPixmap());
} }
void MainWindow::on_actionCopyFilePath_triggered() void MainWindow::on_actionCopyFilePath_triggered()
@@ -781,10 +632,10 @@ void MainWindow::on_actionPaste_triggered()
if (!clipboardImage.isNull()) { if (!clipboardImage.isNull()) {
setWindowTitle(tr("Image From Clipboard")); setWindowTitle(tr("Image From Clipboard"));
m_graphicsView->showImage(clipboardImage); m_gv->showImage(clipboardImage);
clearGallery(); clearGallery();
} else if (clipboardFileUrl.isValid()) { } else if (clipboardFileUrl.isValid()) {
m_graphicsView->showFileFromPath(clipboardFileUrl.toLocalFile()); m_gv->showFileFromPath(clipboardFileUrl.toLocalFile());
m_pm->loadPlaylist(clipboardFileUrl); m_pm->loadPlaylist(clipboardFileUrl);
} }
} }
@@ -814,19 +665,19 @@ void MainWindow::on_actionTrash_triggered()
void MainWindow::on_actionToggleCheckerboard_triggered() void MainWindow::on_actionToggleCheckerboard_triggered()
{ {
// TODO: is that okay to do this since we plan to support custom shortcuts? // TODO: is that okay to do this since we plan to support custom shortcuts?
m_graphicsView->toggleCheckerboard(QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier)); m_gv->toggleCheckerboard(QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier));
} }
void MainWindow::on_actionRotateClockwise_triggered() void MainWindow::on_actionRotateClockwise_triggered()
{ {
m_graphicsView->rotateView(); m_gv->rotateView();
m_graphicsView->displayScene(); m_gv->displayScene();
} }
void MainWindow::on_actionRotateCounterClockwise_triggered() void MainWindow::on_actionRotateCounterClockwise_triggered()
{ {
m_graphicsView->rotateView(false); m_gv->rotateView(false);
m_graphicsView->displayScene(); m_gv->displayScene();
} }
void MainWindow::on_actionPrevPicture_triggered() void MainWindow::on_actionPrevPicture_triggered()
@@ -841,22 +692,12 @@ void MainWindow::on_actionNextPicture_triggered()
void MainWindow::on_actionTogglePauseAnimation_triggered() void MainWindow::on_actionTogglePauseAnimation_triggered()
{ {
m_graphicsView->scene()->togglePauseAnimation(); m_gv->scene()->togglePauseAnimation();
} }
void MainWindow::on_actionAnimationNextFrame_triggered() void MainWindow::on_actionAnimationNextFrame_triggered()
{ {
m_graphicsView->scene()->skipAnimationFrame(1); m_gv->scene()->skipAnimationFrame(1);
}
void MainWindow::on_actionToggleStayOnTop_triggered()
{
toggleStayOnTop();
}
void MainWindow::on_actionToggleProtectMode_triggered()
{
toggleProtectedMode();
} }
void MainWindow::on_actionToggleAvoidResetTransform_triggered() void MainWindow::on_actionToggleAvoidResetTransform_triggered()
@@ -932,15 +773,6 @@ void MainWindow::on_actionQuitApp_triggered()
quitAppAction(false); quitAppAction(false);
} }
void MainWindow::doCloseWindow()
{
#ifdef Q_OS_MAC
this->hide();
#else
this->close();
#endif
}
bool MainWindow::updateFileWatcher(const QString &basePath) bool MainWindow::updateFileWatcher(const QString &basePath)
{ {
m_fileSystemWatcher->removePaths(m_fileSystemWatcher->files()); m_fileSystemWatcher->removePaths(m_fileSystemWatcher->files());
@@ -952,8 +784,7 @@ void MainWindow::updateGalleryButtonsVisibility()
{ {
const int galleryFileCount = m_pm->totalCount(); const int galleryFileCount = m_pm->totalCount();
const bool loopGallery = Settings::instance()->loopGallery(); const bool loopGallery = Settings::instance()->loopGallery();
m_prevButton->setVisible(!m_protectedMode && galleryFileCount > 1); m_am->enablePrevNextPictureAction(
m_nextButton->setVisible(!m_protectedMode && galleryFileCount > 1); galleryFileCount > 1 && (loopGallery || !m_pm->isFirstIndex()),
m_prevButton->setEnabled(loopGallery || !m_pm->isFirstIndex()); galleryFileCount > 1 && (loopGallery || !m_pm->isLastIndex()));
m_nextButton->setEnabled(loopGallery || !m_pm->isLastIndex());
} }
+2 -24
View File
@@ -12,14 +12,12 @@
#include <QPushButton> #include <QPushButton>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QGraphicsOpacityEffect;
class QGraphicsView; class QGraphicsView;
class QFileSystemWatcher; class QFileSystemWatcher;
QT_END_NAMESPACE QT_END_NAMESPACE
class ActionManager; class ActionManager;
class PlaylistManager; class PlaylistManager;
class ToolButton;
class GraphicsView; class GraphicsView;
class NavigatorView; class NavigatorView;
class BottomButtonGroup; class BottomButtonGroup;
@@ -47,9 +45,6 @@ protected slots:
void showEvent(QShowEvent *event) override; void showEvent(QShowEvent *event) override;
void enterEvent(QEnterEvent *event) override; void enterEvent(QEnterEvent *event) override;
void leaveEvent(QEvent *event) override; void leaveEvent(QEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void mouseDoubleClickEvent(QMouseEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override;
void wheelEvent(QWheelEvent *event) override; void wheelEvent(QWheelEvent *event) override;
void resizeEvent(QResizeEvent *event) override; void resizeEvent(QResizeEvent *event) override;
@@ -61,10 +56,7 @@ protected slots:
void centerWindow(); void centerWindow();
void closeWindow(); void closeWindow();
void updateWidgetsPosition(); void updateWidgetsPosition();
void toggleProtectedMode();
void toggleStayOnTop();
void toggleAvoidResetTransform(); void toggleAvoidResetTransform();
bool stayOnTop() const;
bool canPaste() const; bool canPaste() const;
void quitAppAction(bool force = false); void quitAppAction(bool force = false);
void toggleFullscreen(); void toggleFullscreen();
@@ -93,13 +85,10 @@ private slots:
void on_actionHorizontalFlip_triggered(); void on_actionHorizontalFlip_triggered();
void on_actionFitInView_triggered(); void on_actionFitInView_triggered();
void on_actionFitByWidth_triggered(); void on_actionFitByWidth_triggered();
void on_actionFitLongImage_triggered();
void on_actionCopyPixmap_triggered(); void on_actionCopyPixmap_triggered();
void on_actionCopyFilePath_triggered(); void on_actionCopyFilePath_triggered();
void on_actionPaste_triggered(); void on_actionPaste_triggered();
void on_actionTrash_triggered(); void on_actionTrash_triggered();
void on_actionToggleStayOnTop_triggered();
void on_actionToggleProtectMode_triggered();
void on_actionToggleAvoidResetTransform_triggered(); void on_actionToggleAvoidResetTransform_triggered();
void on_actionSettings_triggered(); void on_actionSettings_triggered();
void on_actionHelp_triggered(); void on_actionHelp_triggered();
@@ -107,8 +96,6 @@ private slots:
void on_actionLocateInFileManager_triggered(); void on_actionLocateInFileManager_triggered();
void on_actionQuitApp_triggered(); void on_actionQuitApp_triggered();
void doCloseWindow();
private: private:
bool updateFileWatcher(const QString & basePath = QString()); bool updateFileWatcher(const QString & basePath = QString());
void updateGalleryButtonsVisibility(); void updateGalleryButtonsVisibility();
@@ -116,20 +103,11 @@ private:
private: private:
ActionManager *m_am; ActionManager *m_am;
PlaylistManager *m_pm; PlaylistManager *m_pm;
GraphicsView *m_gv;
NavigatorView *m_nav;
QPoint m_oldMousePos;
QPropertyAnimation *m_fadeOutAnimation;
QPropertyAnimation *m_floatUpAnimation;
QParallelAnimationGroup *m_exitAnimationGroup;
QFileSystemWatcher *m_fileSystemWatcher; QFileSystemWatcher *m_fileSystemWatcher;
ToolButton *m_closeButton;
ToolButton *m_prevButton;
ToolButton *m_nextButton;
GraphicsView *m_graphicsView;
NavigatorView *m_gv;
BottomButtonGroup *m_bottomButtonGroup; BottomButtonGroup *m_bottomButtonGroup;
bool m_protectedMode = false;
bool m_clickedOnWindow = false;
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H
-7
View File
@@ -5,7 +5,6 @@
#include "navigatorview.h" #include "navigatorview.h"
#include "graphicsview.h" #include "graphicsview.h"
#include "opacityhelper.h"
#include <QMouseEvent> #include <QMouseEvent>
#include <QDebug> #include <QDebug>
@@ -14,7 +13,6 @@
NavigatorView::NavigatorView(QWidget *parent) NavigatorView::NavigatorView(QWidget *parent)
: QGraphicsView (parent) : QGraphicsView (parent)
, m_viewportRegion(this->rect()) , m_viewportRegion(this->rect())
, m_opacityHelper(new OpacityHelper(this))
{ {
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
@@ -28,11 +26,6 @@ void NavigatorView::setMainView(GraphicsView *mainView)
m_mainView = mainView; m_mainView = mainView;
} }
void NavigatorView::setOpacity(qreal opacity, bool animated)
{
m_opacityHelper->setOpacity(opacity, animated);
}
void NavigatorView::updateMainViewportRegion() void NavigatorView::updateMainViewportRegion()
{ {
// Use QTimer::singleShot with lambda to delay the update // Use QTimer::singleShot with lambda to delay the update
-3
View File
@@ -7,7 +7,6 @@
#include <QGraphicsView> #include <QGraphicsView>
class OpacityHelper;
class GraphicsView; class GraphicsView;
class NavigatorView : public QGraphicsView class NavigatorView : public QGraphicsView
{ {
@@ -16,7 +15,6 @@ public:
NavigatorView(QWidget *parent = nullptr); NavigatorView(QWidget *parent = nullptr);
void setMainView(GraphicsView *mainView); void setMainView(GraphicsView *mainView);
void setOpacity(qreal opacity, bool animated = true);
public slots: public slots:
void updateMainViewportRegion(); void updateMainViewportRegion();
@@ -32,7 +30,6 @@ private:
bool m_mouseDown = false; bool m_mouseDown = false;
QPolygon m_viewportRegion; QPolygon m_viewportRegion;
QGraphicsView *m_mainView = nullptr; QGraphicsView *m_mainView = nullptr;
OpacityHelper *m_opacityHelper = nullptr;
}; };
#endif // NAVIGATORVIEW_H #endif // NAVIGATORVIEW_H
-31
View File
@@ -1,31 +0,0 @@
// SPDX-FileCopyrightText: 2022 Gary Wang <wzc782970009@gmail.com>
//
// SPDX-License-Identifier: MIT
#include "opacityhelper.h"
#include <QGraphicsOpacityEffect>
#include <QPropertyAnimation>
OpacityHelper::OpacityHelper(QWidget *parent)
: QObject(parent)
, m_opacityFx(new QGraphicsOpacityEffect(parent))
, m_opacityAnimation(new QPropertyAnimation(m_opacityFx, "opacity"))
{
parent->setGraphicsEffect(m_opacityFx);
m_opacityAnimation->setDuration(300);
}
void OpacityHelper::setOpacity(qreal opacity, bool animated)
{
if (!animated) {
m_opacityFx->setOpacity(opacity);
return;
}
m_opacityAnimation->stop();
m_opacityAnimation->setStartValue(m_opacityFx->opacity());
m_opacityAnimation->setEndValue(opacity);
m_opacityAnimation->start();
}
-27
View File
@@ -1,27 +0,0 @@
// SPDX-FileCopyrightText: 2022 Gary Wang <wzc782970009@gmail.com>
//
// SPDX-License-Identifier: MIT
#ifndef OPACITYHELPER_H
#define OPACITYHELPER_H
#include <QWidget>
QT_BEGIN_NAMESPACE
class QGraphicsOpacityEffect;
class QPropertyAnimation;
QT_END_NAMESPACE
class OpacityHelper : QObject
{
public:
OpacityHelper(QWidget * parent);
void setOpacity(qreal opacity, bool animated = true);
protected:
QGraphicsOpacityEffect * m_opacityFx;
QPropertyAnimation * m_opacityAnimation;
};
#endif // OPACITYHELPER_H
+16 -97
View File
@@ -13,6 +13,14 @@
#include <QKeySequence> #include <QKeySequence>
#include <QMetaEnum> #include <QMetaEnum>
Settings *Settings::instance()
{
// SAFETY:
// This is a global singleton and it is leaked by design.
static Settings* INSTANCE = new Settings(nullptr);
return INSTANCE;
}
namespace QEnumHelper namespace QEnumHelper
{ {
template <typename E> template <typename E>
@@ -34,27 +42,6 @@ namespace QEnumHelper
} }
} }
Settings *Settings::m_settings_instance = nullptr;
Settings *Settings::instance()
{
if (!m_settings_instance) {
m_settings_instance = new Settings;
}
return m_settings_instance;
}
bool Settings::stayOnTop() const
{
return m_qsettings->value("stay_on_top", true).toBool();
}
bool Settings::useBuiltInCloseAnimation() const
{
return m_qsettings->value("use_built_in_close_animation", true).toBool();
}
bool Settings::useLightCheckerboard() const bool Settings::useLightCheckerboard() const
{ {
return m_qsettings->value("use_light_checkerboard", false).toBool(); return m_qsettings->value("use_light_checkerboard", false).toBool();
@@ -65,11 +52,6 @@ bool Settings::loopGallery() const
return m_qsettings->value("loop_gallery", true).toBool(); return m_qsettings->value("loop_gallery", true).toBool();
} }
bool Settings::autoLongImageMode() const
{
return m_qsettings->value("auto_long_image_mode", true).toBool();
}
bool Settings::svgTiny12Only() const bool Settings::svgTiny12Only() const
{ {
// Qt 6.7.0's SVG support is terrible caused by huge memory usage, see QTBUG-124287 // Qt 6.7.0's SVG support is terrible caused by huge memory usage, see QTBUG-124287
@@ -85,44 +67,28 @@ bool Settings::svgTiny12Only() const
Settings::DoubleClickBehavior Settings::doubleClickBehavior() const Settings::DoubleClickBehavior Settings::doubleClickBehavior() const
{ {
QString result = m_qsettings->value("double_click_behavior", "Close").toString(); QString result = m_qsettings->value("double_click_behavior", "").toString();
return QEnumHelper::fromString<DoubleClickBehavior>(result, DoubleClickBehavior::Ignore);
return QEnumHelper::fromString<DoubleClickBehavior>(result, DoubleClickBehavior::Close);
} }
Settings::MouseWheelBehavior Settings::mouseWheelBehavior() const Settings::MouseWheelBehavior Settings::mouseWheelBehavior() const
{ {
QString result = m_qsettings->value("mouse_wheel_behavior", "Zoom").toString(); QString result = m_qsettings->value("mouse_wheel_behavior", "").toString();
return QEnumHelper::fromString<MouseWheelBehavior>(result, MouseWheelBehavior::Zoom); return QEnumHelper::fromString<MouseWheelBehavior>(result, MouseWheelBehavior::Zoom);
} }
Settings::WindowSizeBehavior Settings::initWindowSizeBehavior() const Settings::WindowSizeBehavior Settings::initWindowSizeBehavior() const
{ {
QString result = m_qsettings->value("init_window_size_behavior", "Auto").toString(); QString result = m_qsettings->value("init_window_size_behavior", "").toString();
return QEnumHelper::fromString<WindowSizeBehavior>(result, WindowSizeBehavior::Windowed);
return QEnumHelper::fromString<WindowSizeBehavior>(result, WindowSizeBehavior::Auto);
} }
Qt::HighDpiScaleFactorRoundingPolicy Settings::hiDpiScaleFactorBehavior() const Qt::HighDpiScaleFactorRoundingPolicy Settings::hiDpiScaleFactorBehavior() const
{ {
QString result = m_qsettings->value("hidpi_scale_factor_behavior", "PassThrough").toString(); QString result = m_qsettings->value("hidpi_scale_factor_behavior", "").toString();
return QEnumHelper::fromString<Qt::HighDpiScaleFactorRoundingPolicy>(result, Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); return QEnumHelper::fromString<Qt::HighDpiScaleFactorRoundingPolicy>(result, Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
} }
void Settings::setStayOnTop(bool on)
{
m_qsettings->setValue("stay_on_top", on);
m_qsettings->sync();
}
void Settings::setUseBuiltInCloseAnimation(bool on)
{
m_qsettings->setValue("use_built_in_close_animation", on);
m_qsettings->sync();
}
void Settings::setUseLightCheckerboard(bool light) void Settings::setUseLightCheckerboard(bool light)
{ {
m_qsettings->setValue("use_light_checkerboard", light); m_qsettings->setValue("use_light_checkerboard", light);
@@ -135,12 +101,6 @@ void Settings::setLoopGallery(bool on)
m_qsettings->sync(); m_qsettings->sync();
} }
void Settings::setAutoLongImageMode(bool on)
{
m_qsettings->setValue("auto_long_image_mode", on);
m_qsettings->sync();
}
void Settings::setSvgTiny12Only(bool on) void Settings::setSvgTiny12Only(bool on)
{ {
m_qsettings->setValue("svg_tiny12_only", on); m_qsettings->setValue("svg_tiny12_only", on);
@@ -171,47 +131,6 @@ void Settings::setHiDpiScaleFactorBehavior(Qt::HighDpiScaleFactorRoundingPolicy
m_qsettings->sync(); m_qsettings->sync();
} }
void Settings::applyUserShortcuts(QWidget *widget)
{
m_qsettings->beginGroup("shortcuts");
const QStringList shortcutNames = m_qsettings->allKeys();
for (const QString & name : shortcutNames) {
QList<QKeySequence> shortcuts = m_qsettings->value(name).value<QList<QKeySequence>>();
setShortcutsForAction(widget, name, shortcuts, false);
}
m_qsettings->endGroup();
}
bool Settings::setShortcutsForAction(QWidget *widget, const QString &objectName,
QList<QKeySequence> shortcuts, bool writeConfig)
{
QAction * targetAction = nullptr;
for (QAction * action : widget->actions()) {
if (action->objectName() == objectName) {
targetAction = action;
} else {
for (const QKeySequence & shortcut : std::as_const(shortcuts)) {
if (action->shortcuts().contains(shortcut)) {
return false;
}
}
}
}
if (targetAction) {
targetAction->setShortcuts(shortcuts);
}
if (targetAction && writeConfig) {
m_qsettings->beginGroup("shortcuts");
m_qsettings->setValue(objectName, QVariant::fromValue(shortcuts));
m_qsettings->endGroup();
m_qsettings->sync();
}
return true;
}
#if defined(FLAG_PORTABLE_MODE_SUPPORT) && defined(Q_OS_WIN) #if defined(FLAG_PORTABLE_MODE_SUPPORT) && defined(Q_OS_WIN)
#include <windows.h> #include <windows.h>
// QCoreApplication::applicationDirPath() parses the "applicationDirPath" from arg0, which... // QCoreApplication::applicationDirPath() parses the "applicationDirPath" from arg0, which...
@@ -230,8 +149,8 @@ QString getApplicationDirPath()
} }
#endif // defined(FLAG_PORTABLE_MODE_SUPPORT) && defined(Q_OS_WIN) #endif // defined(FLAG_PORTABLE_MODE_SUPPORT) && defined(Q_OS_WIN)
Settings::Settings() Settings::Settings(QObject *parent)
: QObject(qApp) : QObject(parent)
{ {
QString configPath; QString configPath;
+2 -13
View File
@@ -25,6 +25,7 @@ public:
}; };
Q_ENUM(MouseWheelBehavior) Q_ENUM(MouseWheelBehavior)
// TODO: I want to remove Auto behavior in future.
enum WindowSizeBehavior { enum WindowSizeBehavior {
Auto, Auto,
Maximized, Maximized,
@@ -34,36 +35,24 @@ public:
static Settings *instance(); static Settings *instance();
bool stayOnTop() const;
bool useBuiltInCloseAnimation() const;
bool useLightCheckerboard() const; bool useLightCheckerboard() const;
bool loopGallery() const; bool loopGallery() const;
bool autoLongImageMode() const;
bool svgTiny12Only() const; bool svgTiny12Only() const;
DoubleClickBehavior doubleClickBehavior() const; DoubleClickBehavior doubleClickBehavior() const;
MouseWheelBehavior mouseWheelBehavior() const; MouseWheelBehavior mouseWheelBehavior() const;
WindowSizeBehavior initWindowSizeBehavior() const; WindowSizeBehavior initWindowSizeBehavior() const;
Qt::HighDpiScaleFactorRoundingPolicy hiDpiScaleFactorBehavior() const; Qt::HighDpiScaleFactorRoundingPolicy hiDpiScaleFactorBehavior() const;
void setStayOnTop(bool on);
void setUseBuiltInCloseAnimation(bool on);
void setUseLightCheckerboard(bool light); void setUseLightCheckerboard(bool light);
void setLoopGallery(bool on); void setLoopGallery(bool on);
void setAutoLongImageMode(bool on);
void setSvgTiny12Only(bool on); void setSvgTiny12Only(bool on);
void setDoubleClickBehavior(DoubleClickBehavior dcb); void setDoubleClickBehavior(DoubleClickBehavior dcb);
void setMouseWheelBehavior(MouseWheelBehavior mwb); void setMouseWheelBehavior(MouseWheelBehavior mwb);
void setInitWindowSizeBehavior(WindowSizeBehavior wsb); void setInitWindowSizeBehavior(WindowSizeBehavior wsb);
void setHiDpiScaleFactorBehavior(Qt::HighDpiScaleFactorRoundingPolicy hidpi); void setHiDpiScaleFactorBehavior(Qt::HighDpiScaleFactorRoundingPolicy hidpi);
void applyUserShortcuts(QWidget * widget);
bool setShortcutsForAction(QWidget * widget, const QString & objectName,
QList<QKeySequence> shortcuts, bool writeConfig = true);
private: private:
Settings(); Settings(QObject *parent = nullptr);
static Settings *m_settings_instance;
QSettings *m_qsettings; QSettings *m_qsettings;
+113 -170
View File
@@ -3,158 +3,107 @@
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
#include "settingsdialog.h" #include "settingsdialog.h"
#include "ui_settingsdialog.h"
#include "settings.h" #include "settings.h"
#include "shortcutedit.h"
#include <QAction> #include <QApplication>
#include <QCheckBox> #include <QTimer>
#include <QComboBox>
#include <QFormLayout>
#include <QKeySequenceEdit>
#include <QScrollArea>
#include <QSplitter>
#include <QStringListModel> #include <QStringListModel>
#include <QMessageBox> #include <type_traits>
template <typename E, typename = std::enable_if_t<std::is_enum_v<E>>>
class EnumComboBoxTransformer {
public:
using Pair = QPair<E, QString>;
using Pairs = QList<QPair<E, QString>>;
EnumComboBoxTransformer(Pairs &&pairs) : pairs(std::move(pairs)) {}
~EnumComboBoxTransformer() = default;
Q_DISABLE_COPY_MOVE(EnumComboBoxTransformer)
/// Build Qt model used for QComboBox
QStringListModel* buildComboBoxModel(QObject *parent = nullptr) const {
QStringList dropDownEntries;
for (const auto& pair : std::as_const(this->pairs)) {
dropDownEntries.append(pair.second);
}
return new QStringListModel(dropDownEntries, parent);
}
/// Convert QComboBox index to enum value.
E to_value(int index) const {
return this->pairs.at(static_cast<qsizetype>(index)).first;
}
/// Convert enum value to QComboBox index.
int to_index(E value) const {
for (qsizetype i = 0; i < pairs.size(); ++i) {
if (pairs.at(i).first == value) {
return static_cast<int>(i);
}
}
// Value not found
throw std::invalid_argument("invalid enum value for finding index");
}
private:
Pairs pairs;
};
static EnumComboBoxTransformer<Settings::DoubleClickBehavior> DC_OPTIONS {
{
{Settings::DoubleClickBehavior::Ignore, QCoreApplication::translate("SettingsDialog", "Do nothing")},
{Settings::DoubleClickBehavior::Close, QCoreApplication::translate("SettingsDialog", "Close the window")},
{Settings::DoubleClickBehavior::Maximize, QCoreApplication::translate("SettingsDialog", "Toggle maximize")},
{Settings::DoubleClickBehavior::FullScreen, QCoreApplication::translate("SettingsDialog", "Toggle fullscreen")}
}
};
static EnumComboBoxTransformer<Settings::MouseWheelBehavior, QString> MW_OPTIONS {
{
{ Settings::MouseWheelBehavior::Zoom, QCoreApplication::translate("SettingsDialog", "Zoom in and out") },
{ Settings::MouseWheelBehavior::Switch, QCoreApplication::translate("SettingsDialog", "View next or previous item") }
}
};
static EnumComboBoxTransformer<Settings::WindowSizeBehavior, QString> IWS_OPTIONS {
{
{ Settings::WindowSizeBehavior::Auto, QCoreApplication::translate("SettingsDialog", "Auto size") },
{ Settings::WindowSizeBehavior::Maximized, QCoreApplication::translate("SettingsDialog", "Maximized") },
{ Settings::WindowSizeBehavior::Windowed, QCoreApplication::translate("SettingsDialog", "Windowed") }
}
};
static EnumComboBoxTransformer<Qt::HighDpiScaleFactorRoundingPolicy, QString> HIDPI_OPTIONS {
{
{ Qt::HighDpiScaleFactorRoundingPolicy::Round, QCoreApplication::translate("SettingsDialog", "Round (Integer scaling)", "This option means round up for .5 and above") },
{ Qt::HighDpiScaleFactorRoundingPolicy::Ceil, QCoreApplication::translate("SettingsDialog", "Ceil (Integer scaling)", "This option means always round up") },
{ Qt::HighDpiScaleFactorRoundingPolicy::Floor, QCoreApplication::translate("SettingsDialog", "Floor (Integer scaling)", "This option means always round down") },
{ Qt::HighDpiScaleFactorRoundingPolicy::PassThrough, QCoreApplication::translate("SettingsDialog", "Follow system (Fractional scaling)", "This option means don't round") }
}
};
SettingsDialog::SettingsDialog(QWidget *parent) SettingsDialog::SettingsDialog(QWidget *parent)
: QDialog(parent) : QDialog(parent), ui(new Ui::SettingsDialog)
, m_stayOnTop(new QCheckBox)
, m_useBuiltInCloseAnimation(new QCheckBox)
, m_useLightCheckerboard(new QCheckBox)
, m_loopGallery(new QCheckBox)
, m_autoLongImageMode(new QCheckBox)
, m_svgTiny12Only(new QCheckBox)
, m_doubleClickBehavior(new QComboBox)
, m_mouseWheelBehavior(new QComboBox)
, m_initWindowSizeBehavior(new QComboBox)
, m_hiDpiRoundingPolicyBehavior(new QComboBox)
{ {
this->setWindowTitle(tr("Settings")); ui->setupUi(this);
setWindowFlag(Qt::WindowContextHelpButtonHint, false);
QHBoxLayout * mainLayout = new QHBoxLayout(this); auto* settings = Settings::instance();
QTabWidget * settingsTabs = new QTabWidget(this); ui->m_useLightCheckerboard->setChecked(settings->useLightCheckerboard());
mainLayout->addWidget(settingsTabs); ui->m_loopGallery->setChecked(settings->loopGallery());
ui->m_svgTiny12Only->setChecked(settings->svgTiny12Only());
QWidget * settingsFormHolder = new QWidget; ui->m_doubleClickBehavior->setModel(DC_OPTIONS.buildComboBoxModel(this));
QFormLayout * settingsForm = new QFormLayout(settingsFormHolder); Settings::DoubleClickBehavior dcb = settings->doubleClickBehavior();
settingsTabs->addTab(settingsFormHolder, tr("Options")); ui->m_doubleClickBehavior->setCurrentIndex(DC_OPTIONS.to_index(dcb));
ui->m_mouseWheelBehavior->setModel(MW_OPTIONS.buildComboBoxModel(this));
QSplitter * shortcutEditorSplitter = new QSplitter; Settings::MouseWheelBehavior mwb = settings->mouseWheelBehavior();
shortcutEditorSplitter->setOrientation(Qt::Vertical); ui->m_mouseWheelBehavior->setCurrentIndex(MW_OPTIONS.to_index(mwb));
shortcutEditorSplitter->setChildrenCollapsible(false); ui->m_initWindowSizeBehavior->setModel(IWS_OPTIONS.buildComboBoxModel(this));
QScrollArea * shortcutScrollArea = new QScrollArea; Settings::WindowSizeBehavior iwsb = settings->initWindowSizeBehavior();
shortcutEditorSplitter->addWidget(shortcutScrollArea); ui->m_initWindowSizeBehavior->setCurrentIndex(IWS_OPTIONS.to_index(iwsb));
shortcutScrollArea->setWidgetResizable(true); ui->m_hiDpiRoundingPolicyBehavior->setModel(HIDPI_OPTIONS.buildComboBoxModel(this));
shortcutScrollArea->setMinimumHeight(200); Qt::HighDpiScaleFactorRoundingPolicy hidpi = settings->hiDpiScaleFactorBehavior();
QWidget * shortcutsFormHolder = new QWidget; ui->m_hiDpiRoundingPolicyBehavior->setCurrentIndex(HIDPI_OPTIONS.to_index(hidpi));
QFormLayout * shortcutsForm = new QFormLayout(shortcutsFormHolder);
shortcutScrollArea->setWidget(shortcutsFormHolder);
settingsTabs->addTab(shortcutEditorSplitter, tr("Shortcuts"));
for (const QAction * action : parent->actions()) {
ShortcutEdit * shortcutEdit = new ShortcutEdit;
shortcutEdit->setObjectName(QLatin1String("shortcut_") + action->objectName());
shortcutEdit->setShortcuts(action->shortcuts());
shortcutsForm->addRow(action->text(), shortcutEdit);
connect(shortcutEdit, &ShortcutEdit::editButtonClicked, this, [=](){
if (shortcutEditorSplitter->count() == 1) shortcutEditorSplitter->addWidget(new QWidget);
ShortcutEditor * shortcutEditor = new ShortcutEditor(shortcutEdit);
shortcutEditor->setDescription(tr("Editing shortcuts for action \"%1\":").arg(action->text()));
QWidget * oldEditor = shortcutEditorSplitter->replaceWidget(1, shortcutEditor);
shortcutEditorSplitter->setSizes({shortcutEditorSplitter->height(), 1});
oldEditor->deleteLater();
});
connect(shortcutEdit, &ShortcutEdit::applyShortcutsRequested, this, [=](QList<QKeySequence> newShortcuts){
bool succ = Settings::instance()->setShortcutsForAction(parent, shortcutEdit->objectName().mid(9),
newShortcuts);
if (!succ) {
QMessageBox::warning(this, tr("Failed to set shortcuts"),
tr("Please check if shortcuts are duplicated with existing shortcuts."));
}
shortcutEdit->setShortcuts(action->shortcuts());
});
}
static QList< QPair<Settings::DoubleClickBehavior, QString> > _dc_options {
{ Settings::DoubleClickBehavior::Ignore, tr("Do nothing") },
{ Settings::DoubleClickBehavior::Close, tr("Close the window") },
{ Settings::DoubleClickBehavior::Maximize, tr("Toggle maximize") },
{ Settings::DoubleClickBehavior::FullScreen, tr("Toggle fullscreen") }
};
static QList< QPair<Settings::MouseWheelBehavior, QString> > _mw_options {
{ Settings::MouseWheelBehavior::Zoom, tr("Zoom in and out") },
{ Settings::MouseWheelBehavior::Switch, tr("View next or previous item") }
};
static QList< QPair<Settings::WindowSizeBehavior, QString> > _iws_options {
{ Settings::WindowSizeBehavior::Auto, tr("Auto size") },
{ Settings::WindowSizeBehavior::Maximized, tr("Maximized") },
{ Settings::WindowSizeBehavior::Windowed, tr("Windowed") }
};
static QList< QPair<Qt::HighDpiScaleFactorRoundingPolicy, QString> > _hidpi_options {
{ Qt::HighDpiScaleFactorRoundingPolicy::Round, tr("Round (Integer scaling)", "This option means round up for .5 and above") },
{ Qt::HighDpiScaleFactorRoundingPolicy::Ceil, tr("Ceil (Integer scaling)", "This option means always round up") },
{ Qt::HighDpiScaleFactorRoundingPolicy::Floor, tr("Floor (Integer scaling)", "This option means always round down") },
{ Qt::HighDpiScaleFactorRoundingPolicy::PassThrough, tr("Follow system (Fractional scaling)", "This option means don't round") }
};
QStringList dcbDropDown;
for (const QPair<Settings::DoubleClickBehavior, QString> & dcOption : _dc_options) {
dcbDropDown.append(dcOption.second);
}
QStringList mwbDropDown;
for (const QPair<Settings::MouseWheelBehavior, QString> & mwOption : _mw_options) {
mwbDropDown.append(mwOption.second);
}
QStringList iwsbDropDown;
for (const QPair<Settings::WindowSizeBehavior, QString> & iwsOption : _iws_options) {
iwsbDropDown.append(iwsOption.second);
}
QStringList hidpiDropDown;
for (const QPair<Qt::HighDpiScaleFactorRoundingPolicy, QString> & hidpiOption : _hidpi_options) {
hidpiDropDown.append(hidpiOption.second);
}
settingsForm->addRow(tr("Stay on top when start-up"), m_stayOnTop);
settingsForm->addRow(tr("Use built-in close window animation"), m_useBuiltInCloseAnimation);
settingsForm->addRow(tr("Use light-color checkerboard"), m_useLightCheckerboard);
settingsForm->addRow(tr("Loop the loaded gallery"), m_loopGallery);
settingsForm->addRow(tr("Auto long image mode"), m_autoLongImageMode);
settingsForm->addRow(tr("Limit SVG support to SVG Tiny 1.2"), m_svgTiny12Only);
settingsForm->addRow(tr("Double-click behavior"), m_doubleClickBehavior);
settingsForm->addRow(tr("Mouse wheel behavior"), m_mouseWheelBehavior);
settingsForm->addRow(tr("Default window size"), m_initWindowSizeBehavior);
settingsForm->addRow(tr("HiDPI scale factor rounding policy"), m_hiDpiRoundingPolicyBehavior);
m_stayOnTop->setChecked(Settings::instance()->stayOnTop());
m_useBuiltInCloseAnimation->setChecked(Settings::instance()->useBuiltInCloseAnimation());
m_useLightCheckerboard->setChecked(Settings::instance()->useLightCheckerboard());
m_loopGallery->setChecked(Settings::instance()->loopGallery());
m_autoLongImageMode->setChecked(Settings::instance()->autoLongImageMode());
m_svgTiny12Only->setChecked(Settings::instance()->svgTiny12Only());
m_doubleClickBehavior->setModel(new QStringListModel(dcbDropDown));
Settings::DoubleClickBehavior dcb = Settings::instance()->doubleClickBehavior();
m_doubleClickBehavior->setCurrentIndex(static_cast<int>(dcb));
m_mouseWheelBehavior->setModel(new QStringListModel(mwbDropDown));
Settings::MouseWheelBehavior mwb = Settings::instance()->mouseWheelBehavior();
m_mouseWheelBehavior->setCurrentIndex(static_cast<int>(mwb));
m_initWindowSizeBehavior->setModel(new QStringListModel(iwsbDropDown));
Settings::WindowSizeBehavior iwsb = Settings::instance()->initWindowSizeBehavior();
m_initWindowSizeBehavior->setCurrentIndex(static_cast<int>(iwsb));
m_hiDpiRoundingPolicyBehavior->setModel(new QStringListModel(hidpiDropDown));
Qt::HighDpiScaleFactorRoundingPolicy hidpi = Settings::instance()->hiDpiScaleFactorBehavior();
for (int i = 0; i < _hidpi_options.count(); i++) {
if (_hidpi_options.at(i).first == hidpi) {
m_hiDpiRoundingPolicyBehavior->setCurrentIndex(i);
break;
}
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0) #if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
# define QCHECKBOX_CHECKSTATECHANGED QCheckBox::checkStateChanged # define QCHECKBOX_CHECKSTATECHANGED QCheckBox::checkStateChanged
@@ -164,51 +113,45 @@ SettingsDialog::SettingsDialog(QWidget *parent)
# define QT_CHECKSTATE int # define QT_CHECKSTATE int
#endif // QT_VERSION >= QT_VERSION_CHECK(6, 7, 0) #endif // QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
connect(m_stayOnTop, &QCHECKBOX_CHECKSTATECHANGED, this, [ = ](QT_CHECKSTATE state){ connect(ui->m_useLightCheckerboard, &QCHECKBOX_CHECKSTATECHANGED, this, [ = ](QT_CHECKSTATE state){
Settings::instance()->setStayOnTop(state == Qt::Checked);
});
connect(m_useBuiltInCloseAnimation, &QCHECKBOX_CHECKSTATECHANGED, this, [ = ](QT_CHECKSTATE state){
Settings::instance()->setUseBuiltInCloseAnimation(state == Qt::Checked);
});
connect(m_useLightCheckerboard, &QCHECKBOX_CHECKSTATECHANGED, this, [ = ](QT_CHECKSTATE state){
Settings::instance()->setUseLightCheckerboard(state == Qt::Checked); Settings::instance()->setUseLightCheckerboard(state == Qt::Checked);
}); });
connect(m_loopGallery, &QCHECKBOX_CHECKSTATECHANGED, this, [ = ](QT_CHECKSTATE state){ connect(ui->m_loopGallery, &QCHECKBOX_CHECKSTATECHANGED, this, [ = ](QT_CHECKSTATE state){
Settings::instance()->setLoopGallery(state == Qt::Checked); Settings::instance()->setLoopGallery(state == Qt::Checked);
}); });
connect(m_autoLongImageMode, &QCHECKBOX_CHECKSTATECHANGED, this, [ = ](QT_CHECKSTATE state){ connect(ui->m_svgTiny12Only, &QCHECKBOX_CHECKSTATECHANGED, this, [ = ](QT_CHECKSTATE state){
Settings::instance()->setAutoLongImageMode(state == Qt::Checked);
});
connect(m_svgTiny12Only, &QCHECKBOX_CHECKSTATECHANGED, this, [ = ](QT_CHECKSTATE state){
Settings::instance()->setSvgTiny12Only(state == Qt::Checked); Settings::instance()->setSvgTiny12Only(state == Qt::Checked);
}); });
connect(m_doubleClickBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){ connect(ui->m_doubleClickBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){
Settings::instance()->setDoubleClickBehavior(_dc_options.at(index).first); Settings::instance()->setDoubleClickBehavior(DC_OPTIONS.to_value(index));
}); });
connect(m_mouseWheelBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){ connect(ui->m_mouseWheelBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){
Settings::instance()->setMouseWheelBehavior(_mw_options.at(index).first); Settings::instance()->setMouseWheelBehavior(MW_OPTIONS.to_value(index));
}); });
connect(m_initWindowSizeBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){ connect(ui->m_initWindowSizeBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){
Settings::instance()->setInitWindowSizeBehavior(_iws_options.at(index).first); Settings::instance()->setInitWindowSizeBehavior(IWS_OPTIONS.to_value(index));
}); });
connect(m_hiDpiRoundingPolicyBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){ connect(ui->m_hiDpiRoundingPolicyBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){
Settings::instance()->setHiDpiScaleFactorBehavior(_hidpi_options.at(index).first); Settings::instance()->setHiDpiScaleFactorBehavior(HIDPI_OPTIONS.to_value(index));
}); });
adjustSize(); // YYC MARK:
setWindowFlag(Qt::WindowContextHelpButtonHint, false); // Use adjustSize() to make sure all ComboBox are expanded by its items.
// Because items are added after inserting them into layout.
// It is inviable to call this function in ctor because this relys on Qt event system.
// It only can be done by QTimer::singleShot().
QTimer::singleShot(0, this, [this](){
this->adjustSize();
});
} }
SettingsDialog::~SettingsDialog() SettingsDialog::~SettingsDialog()
{ {
delete ui;
} }
+7 -17
View File
@@ -5,11 +5,14 @@
#ifndef SETTINGSDIALOG_H #ifndef SETTINGSDIALOG_H
#define SETTINGSDIALOG_H #define SETTINGSDIALOG_H
#include <QObject>
#include <QDialog> #include <QDialog>
class QCheckBox; QT_BEGIN_NAMESPACE
class QComboBox; namespace Ui {
class SettingsDialog;
}
QT_END_NAMESPACE
class SettingsDialog : public QDialog class SettingsDialog : public QDialog
{ {
Q_OBJECT Q_OBJECT
@@ -17,21 +20,8 @@ public:
explicit SettingsDialog(QWidget *parent = nullptr); explicit SettingsDialog(QWidget *parent = nullptr);
~SettingsDialog(); ~SettingsDialog();
signals:
public slots:
private: private:
QCheckBox * m_stayOnTop = nullptr; QT_PREPEND_NAMESPACE(Ui::SettingsDialog) *ui;
QCheckBox * m_useBuiltInCloseAnimation = nullptr;
QCheckBox * m_useLightCheckerboard = nullptr;
QCheckBox * m_loopGallery = nullptr;
QCheckBox * m_autoLongImageMode = nullptr;
QCheckBox * m_svgTiny12Only = nullptr;
QComboBox * m_doubleClickBehavior = nullptr;
QComboBox * m_mouseWheelBehavior = nullptr;
QComboBox * m_initWindowSizeBehavior = nullptr;
QComboBox * m_hiDpiRoundingPolicyBehavior = nullptr;
}; };
#endif // SETTINGSDIALOG_H #endif // SETTINGSDIALOG_H
+91
View File
@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SettingsDialog</class>
<widget class="QDialog" name="SettingsDialog">
<property name="windowModality">
<enum>Qt::NonModal</enum>
</property>
<property name="windowTitle">
<string>Settings</string>
</property>
<layout class="QHBoxLayout" name="mainLayout">
<item>
<widget class="QTabWidget" name="settingsTabs">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="optionsTab">
<attribute name="title">
<string>Options</string>
</attribute>
<layout class="QFormLayout" name="settingsForm">
<item row="0" column="0" colspan="2">
<widget class="QCheckBox" name="m_useLightCheckerboard">
<property name="text">
<string>Use light-color checkerboard</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QCheckBox" name="m_loopGallery">
<property name="text">
<string>Loop the loaded gallery</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="m_svgTiny12Only">
<property name="text">
<string>Limit SVG support to SVG Tiny 1.2</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="m_doubleClickBehaviorLabel">
<property name="text">
<string>Double-click behavior</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="m_doubleClickBehavior"/>
</item>
<item row="4" column="0">
<widget class="QLabel" name="m_mouseWheelBehaviorLabel">
<property name="text">
<string>Mouse wheel behavior</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="m_mouseWheelBehavior"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="m_initWindowSizeBehaviorLabel">
<property name="text">
<string>Default window size</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="m_initWindowSizeBehavior"/>
</item>
<item row="6" column="0">
<widget class="QLabel" name="m_hiDpiRoundingPolicyBehaviorLabel">
<property name="text">
<string>HiDPI scale factor rounding policy</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QComboBox" name="m_hiDpiRoundingPolicyBehavior"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
-126
View File
@@ -1,126 +0,0 @@
// SPDX-FileCopyrightText: 2024 Gary Wang <opensource@blumia.net>
//
// SPDX-License-Identifier: MIT
#include "shortcutedit.h"
#include <QLabel>
#include <QToolButton>
#include <QHBoxLayout>
#include <QFormLayout>
#include <QDialogButtonBox>
#include <QKeySequenceEdit>
ShortcutEditor::ShortcutEditor(ShortcutEdit * shortcutEdit, QWidget * parent)
: QWidget(parent)
, m_descriptionLabel(new QLabel)
, m_shortcutEdit(shortcutEdit)
, m_shortcutLayout(new QFormLayout)
{
Q_CHECK_PTR(m_shortcutEdit);
QDialogButtonBox * buttons = new QDialogButtonBox(QDialogButtonBox::Apply | QDialogButtonBox::Discard);
QVBoxLayout * layout = new QVBoxLayout(this);
layout->addWidget(m_descriptionLabel);
layout->addLayout(m_shortcutLayout);
layout->addWidget(buttons);
connect(buttons, &QDialogButtonBox::clicked, this, [=](QAbstractButton *button){
if ((QPushButton *)button == buttons->button(QDialogButtonBox::Apply)) {
applyShortcuts();
} else {
reloadShortcuts();
}
});
connect(shortcutEdit, &ShortcutEdit::shortcutsChanged, this, &ShortcutEditor::reloadShortcuts);
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
reloadShortcuts();
}
void ShortcutEditor::setDescription(const QString &desc)
{
m_descriptionLabel->setText(desc);
}
void ShortcutEditor::reloadShortcuts()
{
if (!m_keySequenceEdits.isEmpty()) {
for (QKeySequenceEdit * keyseqEdit : m_keySequenceEdits) {
m_shortcutLayout->removeRow(keyseqEdit);
}
m_keySequenceEdits.clear();
}
QList<QKeySequence> shortcuts = m_shortcutEdit->shortcuts();
shortcuts.append(QKeySequence());
for (const QKeySequence & shortcut : shortcuts) {
QKeySequenceEdit * keyseqEdit = new QKeySequenceEdit(this);
keyseqEdit->setClearButtonEnabled(true);
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
keyseqEdit->setMaximumSequenceLength(1);
#endif // QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
keyseqEdit->setKeySequence(shortcut);
m_keySequenceEdits.append(keyseqEdit);
}
for (int i = 0; i < m_keySequenceEdits.count(); i++) {
m_shortcutLayout->addRow(tr("Shortcut #%1").arg(i + 1), m_keySequenceEdits.at(i));
}
}
void ShortcutEditor::applyShortcuts()
{
QList<QKeySequence> shortcuts;
for (const QKeySequenceEdit * keyseqEdit : m_keySequenceEdits) {
if (!keyseqEdit->keySequence().isEmpty() && !shortcuts.contains(keyseqEdit->keySequence())) {
shortcuts.append(keyseqEdit->keySequence());
}
}
emit m_shortcutEdit->applyShortcutsRequested(shortcuts);
}
// ----------------------------------------
ShortcutEdit::ShortcutEdit(QWidget *parent)
: QWidget(parent)
, m_shortcutsLabel(new QLabel(this))
, m_setShortcutButton(new QToolButton(this))
{
m_setShortcutButton->setText("...");
QHBoxLayout * layout = new QHBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
layout->addWidget(m_shortcutsLabel, 1);
layout->addWidget(m_setShortcutButton);
connect(this, &ShortcutEdit::shortcutsChanged, this, [=](){
QStringList shortcutTexts;
for (const QKeySequence & shortcut : std::as_const(m_shortcuts)) {
shortcutTexts.append(shortcut.toString(QKeySequence::NativeText));
}
m_shortcutsLabel->setText(shortcutTexts.isEmpty() ? tr("No shortcuts") : shortcutTexts.join(", "));
m_shortcutsLabel->setDisabled(shortcutTexts.isEmpty());
});
connect(m_setShortcutButton, &QToolButton::clicked, this, &ShortcutEdit::editButtonClicked);
adjustSize();
}
ShortcutEdit::~ShortcutEdit()
{
}
QList<QKeySequence> ShortcutEdit::shortcuts() const
{
return m_shortcuts;
}
void ShortcutEdit::setShortcuts(const QList<QKeySequence> &shortcuts)
{
m_shortcuts = shortcuts;
emit shortcutsChanged();
}
-55
View File
@@ -1,55 +0,0 @@
// SPDX-FileCopyrightText: 2024 Gary Wang <opensource@blumia.net>
//
// SPDX-License-Identifier: MIT
#pragma once
#include <QWidget>
#include <QList>
#include <QKeySequence>
class QLabel;
class QFormLayout;
class QToolButton;
class QKeySequenceEdit;
class ShortcutEdit;
class ShortcutEditor : public QWidget
{
Q_OBJECT
public:
explicit ShortcutEditor(ShortcutEdit * shortcutEdit, QWidget * parent = nullptr);
~ShortcutEditor() = default;
void setDescription(const QString & desc);
void reloadShortcuts();
void applyShortcuts();
private:
QLabel * m_descriptionLabel;
ShortcutEdit * m_shortcutEdit;
QFormLayout * m_shortcutLayout;
QList<QKeySequenceEdit *> m_keySequenceEdits;
};
class ShortcutEdit : public QWidget
{
Q_OBJECT
Q_PROPERTY(QList<QKeySequence> shortcuts MEMBER m_shortcuts WRITE setShortcuts NOTIFY shortcutsChanged)
public:
explicit ShortcutEdit(QWidget * parent = nullptr);
~ShortcutEdit();
QList<QKeySequence> shortcuts() const;
void setShortcuts(const QList<QKeySequence> &shortcuts);
signals:
void shortcutsChanged();
void editButtonClicked();
void applyShortcutsRequested(QList<QKeySequence> newShortcuts);
private:
QList<QKeySequence> m_shortcuts;
QLabel * m_shortcutsLabel;
QToolButton * m_setShortcutButton;
};
-38
View File
@@ -1,38 +0,0 @@
// SPDX-FileCopyrightText: 2022 Gary Wang <wzc782970009@gmail.com>
//
// SPDX-License-Identifier: MIT
#include "toolbutton.h"
#include "actionmanager.h"
#include "opacityhelper.h"
#include <QPainter>
#include <QGraphicsOpacityEffect>
#include <QPropertyAnimation>
ToolButton::ToolButton(bool hoverColor, QWidget *parent)
: QPushButton(parent)
, m_opacityHelper(new OpacityHelper(this))
{
setFlat(true);
QString qss = "QPushButton {"
"background: transparent;"
"}";
if (hoverColor) {
qss += "QPushButton:hover {"
"background: red;"
"}";
}
setStyleSheet(qss);
}
void ToolButton::setIconResourcePath(const QString &iconp)
{
this->setIcon(ActionManager::loadHidpiIcon(iconp, this->iconSize()));
}
void ToolButton::setOpacity(qreal opacity, bool animated)
{
m_opacityHelper->setOpacity(opacity, animated);
}
-25
View File
@@ -1,25 +0,0 @@
// SPDX-FileCopyrightText: 2022 Gary Wang <wzc782970009@gmail.com>
//
// SPDX-License-Identifier: MIT
#ifndef TOOLBUTTON_H
#define TOOLBUTTON_H
#include <QPushButton>
class OpacityHelper;
class ToolButton : public QPushButton
{
Q_OBJECT
public:
ToolButton(bool hoverColor = false, QWidget * parent = nullptr);
void setIconResourcePath(const QString &iconp);
public slots:
void setOpacity(qreal opacity, bool animated = true);
private:
OpacityHelper * m_opacityHelper;
};
#endif // TOOLBUTTON_H
+73 -40
View File
@@ -174,7 +174,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation>Arrossegueu una imatge aquí</translation> <translation>Arrossegueu una imatge aquí</translation>
@@ -210,194 +210,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<source>File url list is empty</source> <source>File url list is empty</source>
<translation>La llista d&apos;ubicacions és buida</translation> <translation>La llista d&apos;ubicacions és buida</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="461"/> <location filename="../mainwindow.cpp" line="462"/>
<source>&amp;Copy</source> <source>&amp;Copy</source>
<translation>&amp;Copia</translation> <translation>&amp;Copia</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation>Les dades de la imatge no són vàlides</translation> <translation>Les dades de la imatge no són vàlides</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation>El tipus MIME no és compatible: %1</translation> <translation>El tipus MIME no és compatible: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation>Copia el &amp;mapa de píxels</translation> <translation>Copia el &amp;mapa de píxels</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<source>Copy &amp;File Path</source> <source>Copy &amp;File Path</source>
<translation>Copia el camí del &amp;fitxer</translation> <translation>Copia el camí del &amp;fitxer</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation>Propietats</translation> <translation>Propietats</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation>Mantén a sobre</translation> <translation>Mantén a sobre</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation>Mode protegit</translation> <translation>Mode protegit</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>Amplia</translation> <translation>Amplia</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="91"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>Redueix</translation> <translation>Redueix</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="99"/> <location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source> <source>Pause/Resume Animation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="100"/> <location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source> <source>Animation Go to Next Frame</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="102"/> <location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source> <source>Flip &amp;Horizontally</source>
<translation>Inverteix &amp;horitzontalment</translation> <translation>Inverteix &amp;horitzontalment</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="103"/> <location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source> <source>Fit to view</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="104"/> <location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source> <source>Fit to width</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="105"/> <location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source> <source>Fit long image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="108"/> <location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source> <source>&amp;Paste</source>
<translation>&amp;Enganxa</translation> <translation>&amp;Enganxa</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source> <source>Toggle Checkerboard</source>
<translation>Commuta el tauler d&apos;escacs</translation> <translation>Commuta el tauler d&apos;escacs</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="86"/> <location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source> <source>&amp;Open...</source>
<translation>&amp;Obre...</translation> <translation>&amp;Obre...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source> <source>Actual size</source>
<translation>Mida real</translation> <translation>Mida real</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="89"/> <location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation>Commuta la maximització</translation> <translation>Commuta la maximització</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation>Commuta la maximització</translation> <translation>Commuta la maximització</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation>Imatge anterior</translation> <translation>Imatge anterior</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation>Imatge següent</translation> <translation>Imatge següent</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation>Configura...</translation> <translation>Configura...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation>Ajuda</translation> <translation>Ajuda</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation>Mostra al navegador de fitxers</translation> <translation>Mostra al navegador de fitxers</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation>Mostra a la carpeta</translation> <translation>Mostra a la carpeta</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation>Surt</translation> <translation>Surt</translation>
</message> </message>
+73 -40
View File
@@ -178,7 +178,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation>Ziehen Sie das Bild hierher</translation> <translation>Ziehen Sie das Bild hierher</translation>
@@ -214,194 +214,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<source>File url list is empty</source> <source>File url list is empty</source>
<translation>Die Datei-URL-Liste ist leer</translation> <translation>Die Datei-URL-Liste ist leer</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="461"/> <location filename="../mainwindow.cpp" line="462"/>
<source>&amp;Copy</source> <source>&amp;Copy</source>
<translation>&amp;Kopieren</translation> <translation>&amp;Kopieren</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation>Bilddaten sind ungültig</translation> <translation>Bilddaten sind ungültig</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation>Nicht unterstützte Mimedaten: %1</translation> <translation>Nicht unterstützte Mimedaten: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation>P&amp;ixmap kopieren</translation> <translation>P&amp;ixmap kopieren</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<source>Copy &amp;File Path</source> <source>Copy &amp;File Path</source>
<translation>&amp;Dateipfad kopieren</translation> <translation>&amp;Dateipfad kopieren</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation>Eigenschaften</translation> <translation>Eigenschaften</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation>Oben bleiben</translation> <translation>Oben bleiben</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation>Geschützter Modus</translation> <translation>Geschützter Modus</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>Hineinzoomen</translation> <translation>Hineinzoomen</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="91"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>Herauszoomen</translation> <translation>Herauszoomen</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="99"/> <location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source> <source>Pause/Resume Animation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="100"/> <location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source> <source>Animation Go to Next Frame</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="102"/> <location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source> <source>Flip &amp;Horizontally</source>
<translation>&amp;Horizontal spiegeln</translation> <translation>&amp;Horizontal spiegeln</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="103"/> <location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source> <source>Fit to view</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="104"/> <location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source> <source>Fit to width</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="105"/> <location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source> <source>Fit long image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="108"/> <location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source> <source>&amp;Paste</source>
<translation>%Einfügen</translation> <translation>%Einfügen</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source> <source>Toggle Checkerboard</source>
<translation>Schachbrettmuster umschalten</translation> <translation>Schachbrettmuster umschalten</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="86"/> <location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source> <source>&amp;Open...</source>
<translation>&amp;Öffnen...</translation> <translation>&amp;Öffnen...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source> <source>Actual size</source>
<translation>Tatsächliche Größe</translation> <translation>Tatsächliche Größe</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="89"/> <location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation>Maximieren umschalten</translation> <translation>Maximieren umschalten</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation>Nach rechts drehen</translation> <translation>Nach rechts drehen</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation>Vorheriges Bild</translation> <translation>Vorheriges Bild</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation>Nächstes Bild</translation> <translation>Nächstes Bild</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation>Konfigurieren&#xa0;</translation> <translation>Konfigurieren&#xa0;</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation>Hilfe</translation> <translation>Hilfe</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation>Im Dateiexplorer zeigen</translation> <translation>Im Dateiexplorer zeigen</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation>Im Verzeichnis zeigen</translation> <translation>Im Verzeichnis zeigen</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation>Beenden</translation> <translation>Beenden</translation>
</message> </message>
+116 -83
View File
@@ -174,7 +174,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@@ -198,194 +198,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<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="461"/> <location filename="../mainwindow.cpp" line="462"/>
<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="569"/> <location filename="../mainwindow.cpp" line="576"/>
<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="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<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="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<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="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../actionmanager.cpp" line="91"/>
<source>Zoom out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="99"/>
<source>Pause/Resume Animation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="100"/>
<source>Animation Go to Next Frame</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="102"/>
<source>Flip &amp;Horizontally</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="103"/>
<source>Fit to view</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="104"/>
<source>Fit to width</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="105"/>
<source>Fit long image</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="108"/>
<source>&amp;Paste</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="92"/>
<source>Toggle Checkerboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="86"/>
<source>&amp;Open...</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Actual size</source> <source>Save &amp;As...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="89"/>
<source>Toggle maximize</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="93"/>
<source>Rotate right</source> <source>Zoom out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Rotate left</source> <source>Toggle Checkerboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
+73 -40
View File
@@ -178,7 +178,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation>Arrastre una imagen aquí</translation> <translation>Arrastre una imagen aquí</translation>
@@ -214,194 +214,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<source>File url list is empty</source> <source>File url list is empty</source>
<translation>La lista de ubicaciones está vacía</translation> <translation>La lista de ubicaciones está vacía</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="461"/> <location filename="../mainwindow.cpp" line="462"/>
<source>&amp;Copy</source> <source>&amp;Copy</source>
<translation>&amp;Copiar</translation> <translation>&amp;Copiar</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation>Los datos de la imagen no son válidos</translation> <translation>Los datos de la imagen no son válidos</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation>El tipo MIME no es compatible: %1</translation> <translation>El tipo MIME no es compatible: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation>Imagen del portapapeles</translation> <translation>Imagen del portapapeles</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation>¿Estás seguro de que quieres mover &quot;%1&quot; a la papelera de reciclaje?</translation> <translation>¿Estás seguro de que quieres mover &quot;%1&quot; a la papelera de reciclaje?</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation>Mover a la papelera ha fallado, puede deberse a un problema con los permisos de los archivos, una limitación del sistema de archivos o una limitación de la plataforma.</translation> <translation>Mover a la papelera ha fallado, puede deberse a un problema con los permisos de los archivos, una limitación del sistema de archivos o una limitación de la plataforma.</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation>Copiar &amp;mapa de píxeles</translation> <translation>Copiar &amp;mapa de píxeles</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<source>Copy &amp;File Path</source> <source>Copy &amp;File Path</source>
<translation>Copiar &amp;ruta de archivo</translation> <translation>Copiar &amp;ruta de archivo</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation>Propiedades</translation> <translation>Propiedades</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation>Mantener encima</translation> <translation>Mantener encima</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation>Modo protegido</translation> <translation>Modo protegido</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation>Conservar la transformación</translation> <translation>Conservar la transformación</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>Ampliar</translation> <translation>Ampliar</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="91"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>Reducir</translation> <translation>Reducir</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="99"/> <location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source> <source>Pause/Resume Animation</source>
<translation>Pausar/Reanudar animación</translation> <translation>Pausar/Reanudar animación</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="100"/> <location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source> <source>Animation Go to Next Frame</source>
<translation>Ir al siguiente fotograma</translation> <translation>Ir al siguiente fotograma</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="102"/> <location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source> <source>Flip &amp;Horizontally</source>
<translation>Voltear &amp;horizontalmente</translation> <translation>Voltear &amp;horizontalmente</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="103"/> <location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source> <source>Fit to view</source>
<translation>Para visualizar</translation> <translation>Para visualizar</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="104"/> <location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source> <source>Fit to width</source>
<translation>Ajustar al ancho</translation> <translation>Ajustar al ancho</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="105"/> <location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source> <source>Fit long image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="108"/> <location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source> <source>&amp;Paste</source>
<translation>&amp;Pegar</translation> <translation>&amp;Pegar</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source> <source>Toggle Checkerboard</source>
<translation>Activar/desactivar el tablero de ajedrez</translation> <translation>Activar/desactivar el tablero de ajedrez</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="86"/> <location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source> <source>&amp;Open...</source>
<translation>&amp;Abrir...</translation> <translation>&amp;Abrir...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source> <source>Actual size</source>
<translation>Tamaño real</translation> <translation>Tamaño real</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="89"/> <location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation>Maximizar/desmaximizar</translation> <translation>Maximizar/desmaximizar</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation>Girar a la derecha</translation> <translation>Girar a la derecha</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation>Girar a la izquierda</translation> <translation>Girar a la izquierda</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation>Imagen anterior</translation> <translation>Imagen anterior</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation>Imagen siguiente</translation> <translation>Imagen siguiente</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation>Mover a la papelera</translation> <translation>Mover a la papelera</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation>Configurar...</translation> <translation>Configurar...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation>Ayuda</translation> <translation>Ayuda</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation>Mostrar en el Explorador de archivos</translation> <translation>Mostrar en el Explorador de archivos</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation>Mostrar en la carpeta</translation> <translation>Mostrar en la carpeta</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation>Salir</translation> <translation>Salir</translation>
</message> </message>
+73 -40
View File
@@ -178,7 +178,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation>Faites glisser l&apos;image ici</translation> <translation>Faites glisser l&apos;image ici</translation>
@@ -214,194 +214,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<source>File url list is empty</source> <source>File url list is empty</source>
<translation>La liste des URL de fichiers est vide</translation> <translation>La liste des URL de fichiers est vide</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="461"/> <location filename="../mainwindow.cpp" line="462"/>
<source>&amp;Copy</source> <source>&amp;Copy</source>
<translation>&amp;Copier</translation> <translation>&amp;Copier</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation>Les données d&apos;image ne sont pas valides</translation> <translation>Les données d&apos;image ne sont pas valides</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation>Mimedata non pris en charge&#xa0;: %1</translation> <translation>Mimedata non pris en charge&#xa0;: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation>Copier P&amp;ixmap</translation> <translation>Copier P&amp;ixmap</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<source>Copy &amp;File Path</source> <source>Copy &amp;File Path</source>
<translation>Copier le &amp;chemin du fichier</translation> <translation>Copier le &amp;chemin du fichier</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation>Propriétés</translation> <translation>Propriétés</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation>Rester en-haut</translation> <translation>Rester en-haut</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation>Mode protégé</translation> <translation>Mode protégé</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>Zoom avant</translation> <translation>Zoom avant</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="91"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>Zoom arrière</translation> <translation>Zoom arrière</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="99"/> <location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source> <source>Pause/Resume Animation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="100"/> <location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source> <source>Animation Go to Next Frame</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="102"/> <location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source> <source>Flip &amp;Horizontally</source>
<translation>Retourner &amp;horizontalement</translation> <translation>Retourner &amp;horizontalement</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="103"/> <location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source> <source>Fit to view</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="104"/> <location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source> <source>Fit to width</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="105"/> <location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source> <source>Fit long image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="108"/> <location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source> <source>&amp;Paste</source>
<translation>Co&amp;ller</translation> <translation>Co&amp;ller</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source> <source>Toggle Checkerboard</source>
<translation>Dés/activer le damier</translation> <translation>Dés/activer le damier</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="86"/> <location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source> <source>&amp;Open...</source>
<translation>&amp;Ouvrir...</translation> <translation>&amp;Ouvrir...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source> <source>Actual size</source>
<translation>Taille actuelle</translation> <translation>Taille actuelle</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="89"/> <location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation>Dés/activer l&apos;agrandissement</translation> <translation>Dés/activer l&apos;agrandissement</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation>Pivoter vers la droite</translation> <translation>Pivoter vers la droite</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation>Image précédente</translation> <translation>Image précédente</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation>Image suivant</translation> <translation>Image suivant</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation>Configurer</translation> <translation>Configurer</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation>Aide</translation> <translation>Aide</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation>Afficher dans le navigateur de fichiers</translation> <translation>Afficher dans le navigateur de fichiers</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation>Afficher dans le dossier</translation> <translation>Afficher dans le dossier</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation>Quitter</translation> <translation>Quitter</translation>
</message> </message>
+116 -83
View File
@@ -178,7 +178,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation>Tarik gambar ke sini</translation> <translation>Tarik gambar ke sini</translation>
@@ -214,194 +214,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<source>File url list is empty</source> <source>File url list is empty</source>
<translation>Daftar url file kosong</translation> <translation>Daftar url file kosong</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="461"/> <location filename="../mainwindow.cpp" line="462"/>
<source>&amp;Copy</source> <source>&amp;Copy</source>
<translation>&amp;Salin</translation> <translation>&amp;Salin</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation>Data gambar tidak valid</translation> <translation>Data gambar tidak valid</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation>Tidak didukung mimedata: %1</translation> <translation>Tidak didukung mimedata: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation>Salin P&amp;ixmap</translation> <translation>Salin P&amp;ixmap</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<source>Copy &amp;File Path</source> <source>Copy &amp;File Path</source>
<translation>Salin &amp;Path Berkas</translation> <translation>Salin &amp;Path Berkas</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation>Properti</translation> <translation>Properti</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation>Tetap di atas</translation> <translation>Tetap di atas</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation>Mode Terlindungi</translation> <translation>Mode Terlindungi</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation>Simpan transformasi</translation> <translation>Simpan transformasi</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>Perbesar</translation> <translation>Perbesar</translation>
</message> </message>
<message>
<location filename="../actionmanager.cpp" line="91"/>
<source>Zoom out</source>
<translation>Perkecil</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="99"/>
<source>Pause/Resume Animation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="100"/>
<source>Animation Go to Next Frame</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="102"/>
<source>Flip &amp;Horizontally</source>
<translation>Putar Secara &amp;Horizontal</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="103"/>
<source>Fit to view</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="104"/>
<source>Fit to width</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="105"/>
<source>Fit long image</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="108"/>
<source>&amp;Paste</source>
<translation>&amp;Tempel</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="92"/>
<source>Toggle Checkerboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="86"/>
<source>&amp;Open...</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Actual size</source> <source>Save &amp;As...</source>
<translation>Ukuran asli</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="89"/>
<source>Toggle maximize</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source>
<translation>Perkecil</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source>
<translation>Putar Secara &amp;Horizontal</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source>
<translation>&amp;Tempel</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source>
<translation>Ukuran asli</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation>Putar ke kanan</translation> <translation>Putar ke kanan</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation>Konfigurasi...</translation> <translation>Konfigurasi...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation>Dukungan</translation> <translation>Dukungan</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation>Keluar</translation> <translation>Keluar</translation>
</message> </message>
+73 -40
View File
@@ -174,7 +174,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation>Trascina qui l&apos;immagine</translation> <translation>Trascina qui l&apos;immagine</translation>
@@ -210,194 +210,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<source>File url list is empty</source> <source>File url list is empty</source>
<translation>L&apos;elenco degli URL dei file è vuoto</translation> <translation>L&apos;elenco degli URL dei file è vuoto</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="461"/> <location filename="../mainwindow.cpp" line="462"/>
<source>&amp;Copy</source> <source>&amp;Copy</source>
<translation>&amp;Copia</translation> <translation>&amp;Copia</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation>I dati dell&apos;immagine non sono validi</translation> <translation>I dati dell&apos;immagine non sono validi</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation>Dati mime non supportati: %1</translation> <translation>Dati mime non supportati: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation>Immagine dagli appunti</translation> <translation>Immagine dagli appunti</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation>Sei sicuro di voler spostare &quot;%1&quot; nel cestino?</translation> <translation>Sei sicuro di voler spostare &quot;%1&quot; nel cestino?</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation>Impossibile spostare il file nel cestino</translation> <translation>Impossibile spostare il file nel cestino</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation>Lo spostamento nel cestino non è riuscito, potrebbe essere causato da un problema di autorizzazione del file, da una limitazione del file system o da una limitazione della piattaforma.</translation> <translation>Lo spostamento nel cestino non è riuscito, potrebbe essere causato da un problema di autorizzazione del file, da una limitazione del file system o da una limitazione della piattaforma.</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation>Copia P&amp;ixmap</translation> <translation>Copia P&amp;ixmap</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<source>Copy &amp;File Path</source> <source>Copy &amp;File Path</source>
<translation>Copia &amp;Percorso file</translation> <translation>Copia &amp;Percorso file</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation>Proprietà</translation> <translation>Proprietà</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation>Rimani in cima</translation> <translation>Rimani in cima</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation>Modalità protetta</translation> <translation>Modalità protetta</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation>Mantieni trasformazione</translation> <translation>Mantieni trasformazione</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>Zoom avanti</translation> <translation>Zoom avanti</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="91"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>Zoom indietro</translation> <translation>Zoom indietro</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="99"/> <location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source> <source>Pause/Resume Animation</source>
<translation>Pausa/Riprendi animazione</translation> <translation>Pausa/Riprendi animazione</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="100"/> <location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source> <source>Animation Go to Next Frame</source>
<translation>Animazione Vai al fotogramma successivo</translation> <translation>Animazione Vai al fotogramma successivo</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="102"/> <location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source> <source>Flip &amp;Horizontally</source>
<translation>Capovolgi &amp;Orizzontalmente</translation> <translation>Capovolgi &amp;Orizzontalmente</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="103"/> <location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source> <source>Fit to view</source>
<translation>Adatto alla visualizzazione</translation> <translation>Adatto alla visualizzazione</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="104"/> <location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source> <source>Fit to width</source>
<translation>Adatta alla larghezza</translation> <translation>Adatta alla larghezza</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="105"/> <location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source> <source>Fit long image</source>
<translation>Adatta immagine lunga</translation> <translation>Adatta immagine lunga</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="108"/> <location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source> <source>&amp;Paste</source>
<translation>&amp;Incolla</translation> <translation>&amp;Incolla</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source> <source>Toggle Checkerboard</source>
<translation>Attiva/disattiva scacchiera</translation> <translation>Attiva/disattiva scacchiera</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="86"/> <location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source> <source>&amp;Open...</source>
<translation>&amp;Apri...</translation> <translation>&amp;Apri...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source> <source>Actual size</source>
<translation>Dimensione reale</translation> <translation>Dimensione reale</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="89"/> <location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation>Attiva massimizzazione</translation> <translation>Attiva massimizzazione</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation>Ruota a destra</translation> <translation>Ruota a destra</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation>Ruota a sinistra</translation> <translation>Ruota a sinistra</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation>Immagine precedente</translation> <translation>Immagine precedente</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation>Immagine successiva</translation> <translation>Immagine successiva</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation>Sposta nel cestino</translation> <translation>Sposta nel cestino</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation>Configura...</translation> <translation>Configura...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation>Aiuto</translation> <translation>Aiuto</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation>Mostra in Esplora file</translation> <translation>Mostra in Esplora file</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation>Mostra nella directory</translation> <translation>Mostra nella directory</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation>Esci</translation> <translation>Esci</translation>
</message> </message>
+73 -40
View File
@@ -174,7 +174,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation></translation> <translation></translation>
@@ -210,194 +210,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<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="461"/> <location filename="../mainwindow.cpp" line="462"/>
<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="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation>mimedata: %1</translation> <translation>mimedata: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation>%1</translation> <translation>%1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<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="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<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="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="91"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="99"/> <location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source> <source>Pause/Resume Animation</source>
<translation> / </translation> <translation> / </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="100"/> <location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source> <source>Animation Go to Next Frame</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="102"/> <location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source> <source>Flip &amp;Horizontally</source>
<translation>(&amp;H)</translation> <translation>(&amp;H)</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="103"/> <location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source> <source>Fit to view</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="104"/> <location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source> <source>Fit to width</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="105"/> <location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source> <source>Fit long image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="108"/> <location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source> <source>&amp;Paste</source>
<translation>(&amp;P)</translation> <translation>(&amp;P)</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source> <source>Toggle Checkerboard</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="86"/> <location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source> <source>&amp;Open...</source>
<translation>(&amp;O)</translation> <translation>(&amp;O)</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source> <source>Actual size</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="89"/> <location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation>...</translation> <translation>...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation></translation> <translation></translation>
</message> </message>
+74 -41
View File
@@ -174,7 +174,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation> </translation> <translation> </translation>
@@ -210,194 +210,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<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="461"/> <location filename="../mainwindow.cpp" line="462"/>
<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="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation> mimedata: %1</translation> <translation> mimedata: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation> </translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation> .</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation>%1 (*.%2)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation> .</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation> : %1</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation>&quot;%1&quot; ?</translation> <translation>&quot;%1&quot; ?</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation> . , .</translation> <translation> . , .</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation>Pixmap (&amp;I)</translation> <translation>Pixmap (&amp;I)</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<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="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="91"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation> (&amp;A)...</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="99"/> <location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source> <source>Pause/Resume Animation</source>
<translation> /</translation> <translation> /</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="100"/> <location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source> <source>Animation Go to Next Frame</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="102"/> <location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source> <source>Flip &amp;Horizontally</source>
<translation> (&amp;H)</translation> <translation> (&amp;H)</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="103"/> <location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source> <source>Fit to view</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="104"/> <location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source> <source>Fit to width</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="105"/> <location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source> <source>Fit long image</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="108"/> <location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source> <source>&amp;Paste</source>
<translation>(&amp;P)</translation> <translation>(&amp;P)</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source> <source>Toggle Checkerboard</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="86"/> <location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source> <source>&amp;Open...</source>
<translation>(&amp;O)...</translation> <translation>(&amp;O)...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source> <source>Actual size</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="89"/> <location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation>...</translation> <translation>...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation></translation> <translation></translation>
</message> </message>
@@ -854,7 +887,7 @@
<message> <message>
<location filename="../settingsdialog.cpp" line="129"/> <location filename="../settingsdialog.cpp" line="129"/>
<source>Limit SVG support to SVG Tiny 1.2</source> <source>Limit SVG support to SVG Tiny 1.2</source>
<translation type="unfinished"></translation> <translation>SVG SVG Tiny 1.2 </translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="130"/> <location filename="../settingsdialog.cpp" line="130"/>
+73 -40
View File
@@ -178,7 +178,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation>Dra bilde hit</translation> <translation>Dra bilde hit</translation>
@@ -214,194 +214,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<source>File url list is empty</source> <source>File url list is empty</source>
<translation>Listen over filnettadresser er ugyldig</translation> <translation>Listen over filnettadresser er ugyldig</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="461"/> <location filename="../mainwindow.cpp" line="462"/>
<source>&amp;Copy</source> <source>&amp;Copy</source>
<translation>&amp;Kopier</translation> <translation>&amp;Kopier</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation>Ugyldig bildedata</translation> <translation>Ugyldig bildedata</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation>Ustøttet MIME-data: %1</translation> <translation>Ustøttet MIME-data: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation>Er du sikker at du vil flytte &quot;%1&quot; til papirkurven?</translation> <translation>Er du sikker at du vil flytte &quot;%1&quot; til papirkurven?</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation>Flytt til papirkurven mislyktes, det kan skyldes filtillatelsesproblem, filsystembegrensning eller plattformbegrensning.</translation> <translation>Flytt til papirkurven mislyktes, det kan skyldes filtillatelsesproblem, filsystembegrensning eller plattformbegrensning.</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation type="unfinished">Kopier p&amp;ixmap</translation> <translation type="unfinished">Kopier p&amp;ixmap</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<source>Copy &amp;File Path</source> <source>Copy &amp;File Path</source>
<translation>Kopier &amp;filbane</translation> <translation>Kopier &amp;filbane</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation>Egenskaper</translation> <translation>Egenskaper</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation>Behold øverst</translation> <translation>Behold øverst</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation>Beskyttet modus</translation> <translation>Beskyttet modus</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation>Behold transformasjon</translation> <translation>Behold transformasjon</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>Førstørr</translation> <translation>Førstørr</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="91"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>Forminsk</translation> <translation>Forminsk</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="99"/> <location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source> <source>Pause/Resume Animation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="100"/> <location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source> <source>Animation Go to Next Frame</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="102"/> <location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source> <source>Flip &amp;Horizontally</source>
<translation>Speilvend &amp;horisontalt</translation> <translation>Speilvend &amp;horisontalt</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="103"/> <location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source> <source>Fit to view</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="104"/> <location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source> <source>Fit to width</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="105"/> <location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source> <source>Fit long image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="108"/> <location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source> <source>&amp;Paste</source>
<translation>&amp;Lim inn</translation> <translation>&amp;Lim inn</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source> <source>Toggle Checkerboard</source>
<translation type="unfinished">Skru av/ rutemønster</translation> <translation type="unfinished">Skru av/ rutemønster</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="86"/> <location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source> <source>&amp;Open...</source>
<translation>&amp;Åpne </translation> <translation>&amp;Åpne </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source> <source>Actual size</source>
<translation>Faktisk størrelse</translation> <translation>Faktisk størrelse</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="89"/> <location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation>Maksimering av/</translation> <translation>Maksimering av/</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation>Roter til høyre</translation> <translation>Roter til høyre</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation>Forrige bilde</translation> <translation>Forrige bilde</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation>Neste bilde</translation> <translation>Neste bilde</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation>Flytt til papirkurven</translation> <translation>Flytt til papirkurven</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation>Sett opp </translation> <translation>Sett opp </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation>Hjelp</translation> <translation>Hjelp</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation>Vis i filutforsker</translation> <translation>Vis i filutforsker</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation type="unfinished">Vis i mappe</translation> <translation type="unfinished">Vis i mappe</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation>Avslutt</translation> <translation>Avslutt</translation>
</message> </message>
+75 -42
View File
@@ -178,7 +178,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation>Sleep een afbeelding hierheen</translation> <translation>Sleep een afbeelding hierheen</translation>
@@ -214,194 +214,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<source>File url list is empty</source> <source>File url list is empty</source>
<translation>De bestandspadlijst is leeg</translation> <translation>De bestandspadlijst is leeg</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="461"/> <location filename="../mainwindow.cpp" line="462"/>
<source>&amp;Copy</source> <source>&amp;Copy</source>
<translation>&amp;Kopiëren</translation> <translation>&amp;Kopiëren</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation>Beschadigde afbeeldingsgegevens</translation> <translation>Beschadigde afbeeldingsgegevens</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation>Niet-ondersteunde mime-gegevens: %1</translation> <translation>Niet-ondersteunde mime-gegevens: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation>Opslaan als</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation>Er is geen afbeelding geopend.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation>%1-afbeelding (*.%2)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation>Er zijn geen ondersteunde formaten beschikbaar.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation>De afbeelding kan niet worden opgeslagen: %1</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation>Afbeelding van klembord</translation> <translation>Afbeelding van klembord</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation>Weet u zeker dat u %1 naar de prullenbak wilt verplaatsen?</translation> <translation>Weet u zeker dat u %1 naar de prullenbak wilt verplaatsen?</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation>Verplaatsen naar prullenbak mislukt</translation> <translation>Verplaatsen naar prullenbak mislukt</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation>Het bestand kan niet naar de prullenbak worden verplaatst, mogelijk door een rechtenprobleem of systeembeperking.</translation> <translation>Het bestand kan niet naar de prullenbak worden verplaatst, mogelijk door een rechtenprobleem of systeembeperking.</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation>P&amp;ixmap kopiëren</translation> <translation>P&amp;ixmap kopiëren</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<source>Copy &amp;File Path</source> <source>Copy &amp;File Path</source>
<translation>&amp;Bestandspad kopiëren</translation> <translation>&amp;Bestandspad kopiëren</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation>Eigenschappen</translation> <translation>Eigenschappen</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation>Altijd bovenop</translation> <translation>Altijd bovenop</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation>Beschermde modus</translation> <translation>Beschermde modus</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation>Bewerkingen onthouden</translation> <translation>Bewerkingen onthouden</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>Inzoomen</translation> <translation>Inzoomen</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="91"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation>Opslaan &amp;als</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>Uitzoomen</translation> <translation>Uitzoomen</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="99"/> <location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source> <source>Pause/Resume Animation</source>
<translation>Animatie pauzeren/hervatten</translation> <translation>Animatie pauzeren/hervatten</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="100"/> <location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source> <source>Animation Go to Next Frame</source>
<translation>Ga naar volgend animatieframe</translation> <translation>Ga naar volgend animatieframe</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="102"/> <location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source> <source>Flip &amp;Horizontally</source>
<translation>&amp;Horizontaal spiegelen</translation> <translation>&amp;Horizontaal spiegelen</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="103"/> <location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source> <source>Fit to view</source>
<translation>Inpassen</translation> <translation>Inpassen</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="104"/> <location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source> <source>Fit to width</source>
<translation>Aanpassen aan breedte</translation> <translation>Aanpassen aan breedte</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="105"/> <location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source> <source>Fit long image</source>
<translation type="unfinished"></translation> <translation>Lange afbeelding inpassen</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="108"/> <location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source> <source>&amp;Paste</source>
<translation>&amp;Plakken</translation> <translation>&amp;Plakken</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source> <source>Toggle Checkerboard</source>
<translation>Schaakbordpatroon aan/uit</translation> <translation>Schaakbordpatroon aan/uit</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="86"/> <location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source> <source>&amp;Open...</source>
<translation>&amp;Openen</translation> <translation>&amp;Openen</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source> <source>Actual size</source>
<translation>Ware grootte</translation> <translation>Ware grootte</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="89"/> <location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation>Maximaliseren aan/uit</translation> <translation>Maximaliseren aan/uit</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation>Naar rechts draaien</translation> <translation>Naar rechts draaien</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation>Naar links draaien</translation> <translation>Naar links draaien</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation>Vorige afbeelding</translation> <translation>Vorige afbeelding</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation>Volgende afbeelding</translation> <translation>Volgende afbeelding</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation>Verplaatsen naar prullenbak</translation> <translation>Verplaatsen naar prullenbak</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation>Instellen...</translation> <translation>Instellen...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation>Hulp</translation> <translation>Hulp</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation>Tonen in bestandsbeheer</translation> <translation>Tonen in bestandsbeheer</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation>Tonen in map</translation> <translation>Tonen in map</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation>Afsluiten</translation> <translation>Afsluiten</translation>
</message> </message>
@@ -858,7 +891,7 @@
<message> <message>
<location filename="../settingsdialog.cpp" line="129"/> <location filename="../settingsdialog.cpp" line="129"/>
<source>Limit SVG support to SVG Tiny 1.2</source> <source>Limit SVG support to SVG Tiny 1.2</source>
<translation type="unfinished"></translation> <translation>Svg-ondersteuning beperken tot SVG Tiny 1.2</translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="130"/> <location filename="../settingsdialog.cpp" line="130"/>
+73 -40
View File
@@ -174,7 +174,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@@ -198,194 +198,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<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="461"/> <location filename="../mainwindow.cpp" line="462"/>
<source>&amp;Copy</source> <source>&amp;Copy</source>
<translation>کاپی کرو</translation> <translation>کاپی کرو</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="569"/> <location filename="../mainwindow.cpp" line="576"/>
<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="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation>تصویر دا نقشہ کاپی کرو</translation> <translation>تصویر دا نقشہ کاپی کرو</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<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="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation>وشیشتاواں</translation> <translation>وشیشتاواں</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation>سرکھیات سیٹنگ</translation> <translation>سرکھیات سیٹنگ</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>وڈا کرو</translation> <translation>وڈا کرو</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="91"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>چھوٹا کرو</translation> <translation>چھوٹا کرو</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="99"/> <location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source> <source>Pause/Resume Animation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="100"/> <location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source> <source>Animation Go to Next Frame</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="102"/> <location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source> <source>Flip &amp;Horizontally</source>
<translation>لیٹویں اُلٹاؤ</translation> <translation>لیٹویں اُلٹاؤ</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="103"/> <location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source> <source>Fit to view</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="104"/> <location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source> <source>Fit to width</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="105"/> <location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source> <source>Fit long image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="108"/> <location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source> <source>&amp;Paste</source>
<translation>پیسٹ کرو</translation> <translation>پیسٹ کرو</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source> <source>Toggle Checkerboard</source>
<translation>چیکبورڈ چالو بدلو</translation> <translation>چیکبورڈ چالو بدلو</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="86"/> <location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source> <source>&amp;Open...</source>
<translation>کھُلھو</translation> <translation>کھُلھو</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source> <source>Actual size</source>
<translation>اصلی اکار</translation> <translation>اصلی اکار</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="89"/> <location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation>ودھو ودھ بدلو</translation> <translation>ودھو ودھ بدلو</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation>سجے گھنماؤ</translation> <translation>سجے گھنماؤ</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation>پچھلی تصویر</translation> <translation>پچھلی تصویر</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation>اگلی تصویر</translation> <translation>اگلی تصویر</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation>مدد</translation> <translation>مدد</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation>بند کرو</translation> <translation>بند کرو</translation>
</message> </message>
+74 -41
View File
@@ -178,7 +178,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation>Перетащите изображение сюда</translation> <translation>Перетащите изображение сюда</translation>
@@ -214,194 +214,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<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="461"/> <location filename="../mainwindow.cpp" line="462"/>
<source>&amp;Copy</source> <source>&amp;Copy</source>
<translation>&amp;Скопировать</translation> <translation>&amp;Скопировать</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation>Параметры изображения недействительны</translation> <translation>Параметры изображения недействительны</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation>Неподдерживаемые mimedata: %1</translation> <translation>Неподдерживаемые mimedata: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation>Сохранить как</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation>В настоящее время нет открытых изображений.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation>%1 Изображение (*.%2)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation>Нет доступных поддерживаемых форматов изображений.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation>Не удалось сохранить изображение: %1</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation>Изображение из буфера обмена</translation> <translation>Изображение из буфера обмена</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation>Вы уверены, что хотите переместить &quot;%1&quot; в корзину?</translation> <translation>Вы уверены, что хотите переместить &quot;%1&quot; в корзину?</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation>Не удалось переместить файл в корзину</translation> <translation>Не удалось переместить файл в корзину</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation>Перемещение в корзину не удалось, возможно, из-за проблем с правами доступа к файлу, ограничений файловой системы или ограничений платформы.</translation> <translation>Перемещение в корзину не удалось, возможно, из-за проблем с правами доступа к файлу, ограничений файловой системы или ограничений платформы.</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation>Скопировать P&amp;ixmap</translation> <translation>Скопировать P&amp;ixmap</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<source>Copy &amp;File Path</source> <source>Copy &amp;File Path</source>
<translation>Скопировать &amp;путь к файлу</translation> <translation>Скопировать &amp;путь к файлу</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation>Свойства</translation> <translation>Свойства</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation>Поверх всех окон</translation> <translation>Поверх всех окон</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation>Защищенный режим</translation> <translation>Защищенный режим</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation>Сохранять трансформацию</translation> <translation>Сохранять трансформацию</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>Увеличить</translation> <translation>Увеличить</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="91"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation>Сохранить как...</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>Уменьшить</translation> <translation>Уменьшить</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="99"/> <location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source> <source>Pause/Resume Animation</source>
<translation>Пауза/Возобновление анимации</translation> <translation>Пауза/Возобновление анимации</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="100"/> <location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source> <source>Animation Go to Next Frame</source>
<translation>Перейти к следующему кадру анимации</translation> <translation>Перейти к следующему кадру анимации</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="102"/> <location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source> <source>Flip &amp;Horizontally</source>
<translation>Отразить по &amp;горизонтали</translation> <translation>Отразить по &amp;горизонтали</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="103"/> <location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source> <source>Fit to view</source>
<translation>Уместить все</translation> <translation>Уместить все</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="104"/> <location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source> <source>Fit to width</source>
<translation>Уместить по ширине</translation> <translation>Уместить по ширине</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="105"/> <location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source> <source>Fit long image</source>
<translation>Уместить по длине</translation> <translation>Уместить по длине</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="108"/> <location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source> <source>&amp;Paste</source>
<translation>&amp;Вставить</translation> <translation>&amp;Вставить</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source> <source>Toggle Checkerboard</source>
<translation>Переключить фоновый рисунок</translation> <translation>Переключить фоновый рисунок</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="86"/> <location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source> <source>&amp;Open...</source>
<translation>&amp;Открыть...</translation> <translation>&amp;Открыть...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source> <source>Actual size</source>
<translation>Фактический размер</translation> <translation>Фактический размер</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="89"/> <location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation>Переключить окно</translation> <translation>Переключить окно</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation>Повернуть вправо</translation> <translation>Повернуть вправо</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation>Повернуть влево</translation> <translation>Повернуть влево</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation>Предыдущее изображение</translation> <translation>Предыдущее изображение</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation>Следующее изображение</translation> <translation>Следующее изображение</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation>Переместить в корзину</translation> <translation>Переместить в корзину</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation>Параметры...</translation> <translation>Параметры...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation>Помощь</translation> <translation>Помощь</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation>Показать в проводнике</translation> <translation>Показать в проводнике</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation>Показать в папке</translation> <translation>Показать в папке</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation>Выход</translation> <translation>Выход</translation>
</message> </message>
@@ -858,7 +891,7 @@
<message> <message>
<location filename="../settingsdialog.cpp" line="129"/> <location filename="../settingsdialog.cpp" line="129"/>
<source>Limit SVG support to SVG Tiny 1.2</source> <source>Limit SVG support to SVG Tiny 1.2</source>
<translation type="unfinished"></translation> <translation>Ограничить поддержку SVG до SVG Tiny 1.2</translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="130"/> <location filename="../settingsdialog.cpp" line="130"/>
+124 -91
View File
@@ -178,7 +178,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@@ -210,194 +210,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<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="461"/> <location filename="../mainwindow.cpp" line="462"/>
<source>&amp;Copy</source> <source>&amp;Copy</source>
<translation>&amp;</translation> <translation>&amp;</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../actionmanager.cpp" line="91"/>
<source>Zoom out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="99"/>
<source>Pause/Resume Animation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="100"/>
<source>Animation Go to Next Frame</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="102"/>
<source>Flip &amp;Horizontally</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="103"/>
<source>Fit to view</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="104"/>
<source>Fit to width</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="105"/>
<source>Fit long image</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="106"/>
<source>Copy P&amp;ixmap</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="107"/>
<source>Copy &amp;File Path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="108"/>
<source>&amp;Paste</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="92"/>
<source>Toggle Checkerboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="86"/>
<source>&amp;Open...</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Actual size</source> <source>Save &amp;As...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="89"/>
<source>Toggle maximize</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="93"/>
<source>Rotate right</source> <source>Zoom out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="109"/>
<source>Copy &amp;File Path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Rotate left</source> <source>Toggle Checkerboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
+935
View File
@@ -0,0 +1,935 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="sl">
<context>
<name>AboutDialog</name>
<message>
<location filename="../aboutdialog.cpp" line="29"/>
<source>About</source>
<translation>O</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="32"/>
<source>Launch application with image file path as argument to load the file.</source>
<translation>Zaženite aplikacijo s potjo do slikovne datoteke kot argumentom za nalaganje datoteke.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="33"/>
<source>Drag and drop image file onto the window is also supported.</source>
<translation>Podprta je tudi funkcija povleci in spusti, da povlečete slikovno datoteko v okno.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="34"/>
<source>None of the operations in this application will alter the pictures on disk.</source>
<translation>Nobena od operacij v tej aplikaciji ne bo spremenila slik na disku.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="35"/>
<source>Context menu option explanation:</source>
<translation>Razlaga možnosti kontekstnega menija:</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="42"/>
<source>Make window stay on top of all other windows.</source>
<translation>Okno naj ostane nad vsemi drugimi okni.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="45"/>
<source>Avoid close window accidentally. (eg. by double clicking the window)</source>
<translation>Izogibajte se nenamernemu zapiranju okna (npr. z dvojnim klikom na okno)</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="48"/>
<source>Avoid resetting the zoom/rotation/flip state that was applied to the image view when switching between images.</source>
<translation>Pri preklapljanju med slikami se izogibajte ponastavitvi stanja povečave/vrtenja/preobrata, ki je bilo uporabljeno za pogled slike.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="55"/>
<source>Version: %1</source>
<translation>Različica: %1</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="66"/>
<source>Logo designed by %1</source>
<translation>Logotip je oblikoval %1</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="68"/>
<source>Built with Qt %1 (%2)</source>
<translation>Zgrajeno s Qt %1 (%2)</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="69"/>
<source>Source code</source>
<translation>Izvorna koda</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="79"/>
<source>Contributors</source>
<translation>Sodelavci</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="81"/>
<source>List of contributors on GitHub</source>
<translation>Seznam sodelavcev na GitHubu</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="82"/>
<source>Thanks to all people who contributed to this project.</source>
<translation>Hvala vsem ljudem, ki so prispevali k temu projektu.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="86"/>
<source>Translators</source>
<translation>Prevajalci</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="87"/>
<source>I would like to thank the following people who volunteered to translate this application.</source>
<translation>Rad bi se zahvalil naslednjim ljudem, ki so se prostovoljno javili za prevod te aplikacije.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="131"/>
<source>%1 is built on the following free software libraries:</source>
<comment>Free as in freedom</comment>
<translation>%1 je zgrajen na naslednjih knjižnicah brezplačne programske opreme:</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="155"/>
<source>&amp;Special Thanks</source>
<translation>&amp;Posebna zahvala</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="157"/>
<source>&amp;Third-party Libraries</source>
<translation>&amp;Knjižnice tretjih oseb</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="93"/>
<source>Your Rights</source>
<translation>Vaše pravice</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="63"/>
<source>Copyright (c) %1 %2</source>
<comment>%1 is year, %2 is the name of copyright holder(s)</comment>
<translation>Avtorske pravice (c) %1 %2</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="95"/>
<source>%1 is released under the MIT License.</source>
<translation>%1 je izdan pod licenco MIT.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="96"/>
<source>This license grants people a number of freedoms:</source>
<translation>Ta licenca daje ljudem številne svoboščine:</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="97"/>
<source>You are free to use %1, for any purpose</source>
<translation>%1 lahko uporabljate za kakršen koli namen</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="98"/>
<source>You are free to distribute %1</source>
<translation>Prosto lahko distribuirate %1</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="99"/>
<source>You can study how %1 works and change it</source>
<translation>Lahko preučite, kako deluje %1, in ga spremenite</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="100"/>
<source>You can distribute changed versions of %1</source>
<translation>Spremenjene različice %1 lahko distribuirate</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="102"/>
<source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
<translation>Licenca MIT vam zagotavlja to svobodo. Nihče vam je ne sme vzeti.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="130"/>
<source>Third-party Libraries used by %1</source>
<translation>Knjižnice tretjih oseb, ki jih uporablja %1</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="153"/>
<source>&amp;Help</source>
<translation>&amp;Pomoč</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="154"/>
<source>&amp;About</source>
<translation>&amp;O</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="156"/>
<source>&amp;License</source>
<translation>&amp;Licenca</translation>
</message>
</context>
<context>
<name>GraphicsScene</name>
<message>
<location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source>
<translation>Povlecite sliko sem</translation>
</message>
</context>
<context>
<name>GraphicsView</name>
<message>
<location filename="../graphicsview.cpp" line="51"/>
<source>File is not a valid image</source>
<translation>Datoteka ni veljavna slika</translation>
</message>
<message>
<location filename="../graphicsview.cpp" line="55"/>
<location filename="../graphicsview.cpp" line="60"/>
<location filename="../graphicsview.cpp" line="71"/>
<source>Image data is invalid or currently unsupported</source>
<translation>Podatki o sliki so neveljavni ali trenutno niso podprti</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="568"/>
<source>File url list is empty</source>
<translation>Seznam url-jev datotek je prazen</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="462"/>
<source>&amp;Copy</source>
<translation>&amp;Kopiraj</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source>
<translation>Podatki slike so neveljavni</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source>
<translation>Ni podprtih podatkov mime: %1</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation>Shrani kot</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation>Trenutno ni odprta nobena slika.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation>Slika %1 (*.%2)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation>Nobenih podprtih formatov slik ni na razpolago.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation>Shranjevanje slike ni uspelo: %1</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source>
<translation>Slika iz odložišča</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation>Ali ste prepričani, da želite premakniti &quot;%1&quot; v koš?</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source>
<translation>Datoteke ni bilo mogoče premakniti v koš</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation>Premik v koš ni uspel. Morda je vzrok težava z dovoljenji za datoteke, omejitev datotečnega sistema ali omejitev platforme.</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source>
<translation>Kopiraj P&amp;ixmapo</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="109"/>
<source>Copy &amp;File Path</source>
<translation>Kopiraj &amp;pot datoteke</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source>
<translation>Lastnosti</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source>
<translation>Ostani na vrhu</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source>
<translation>Zaščiten način</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation>Ohrani transformacijo</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source>
<translation>Povečaj</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation>Shrani &amp;kot...</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source>
<translation>Pomanjšaj</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source>
<translation>Začasna ustavitev/nadaljevanje animacije</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source>
<translation>Animacija Pojdi na naslednji okvir</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source>
<translation>Obrni &amp;vodoravno</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source>
<translation>Prilagodi pogledu</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source>
<translation>Prilagodi širini</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source>
<translation>Prilagodi dolgi sliki</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source>
<translation>&amp;Prilepi</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source>
<translation>Preklopi šahovnico</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source>
<translation>&amp;Odpri...</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source>
<translation>Dejanska velikost</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source>
<translation>Preklopi maksimiranje</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source>
<translation>Zavrti desno</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source>
<translation>Zavrti levo</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source>
<translation>Prejšnja slika</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source>
<translation>Naslednja slika</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source>
<translation>Premakni v koš</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source>
<translation>Konfiguriraj...</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="116"/>
<source>Help</source>
<translation>Pomoč</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation>Prikaži v Raziskovalcu</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source>
<translation>Prikaži v imeniku</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source>
<translation>Izhod</translation>
</message>
</context>
<context>
<name>MetadataDialog</name>
<message>
<location filename="../metadatadialog.cpp" line="84"/>
<source>Image Metadata</source>
<translation>Metapodatki slike</translation>
</message>
</context>
<context>
<name>MetadataModel</name>
<message>
<location filename="../metadatamodel.cpp" line="43"/>
<source>Origin</source>
<comment>Section name.</comment>
<translation>Izvor</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="44"/>
<source>Image</source>
<comment>Section name.</comment>
<translation>Slika</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="48"/>
<source>File</source>
<comment>Section name.</comment>
<translation>Datoteka</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="45"/>
<source>Camera</source>
<comment>Section name.</comment>
<translation>Kamera</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="35"/>
<source>%1 File</source>
<translation>%1 Datoteka</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="42"/>
<source>Description</source>
<comment>Section name.</comment>
<translation>Opis</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="46"/>
<source>Advanced photo</source>
<comment>Section name.</comment>
<translation>Napredna fotografija</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="47"/>
<source>GPS</source>
<comment>Section name.</comment>
<translation>GPS</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="52"/>
<source>Dimensions</source>
<translation>Dimenzije</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="54"/>
<source>Aspect ratio</source>
<translation>Razmerje stranic</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="58"/>
<source>Frame count</source>
<translation>Število sličic</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="62"/>
<source>Name</source>
<translation>Ime</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="64"/>
<source>Item type</source>
<translation>Vrsta elementa</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="66"/>
<source>Folder path</source>
<translation>Pot do imenika</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="68"/>
<source>Size</source>
<translation>Velikost</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="70"/>
<source>Date created</source>
<translation>Datum nastanka</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="72"/>
<source>Date modified</source>
<translation>Datum spremembe</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="79"/>
<source>Title</source>
<translation>Naslov</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="81"/>
<source>Subject</source>
<translation>Zadeva</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="83"/>
<source>Rating</source>
<translation>Ocena</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="85"/>
<source>Tags</source>
<translation>Oznake</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="87"/>
<source>Comments</source>
<translation>Komentarji</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="90"/>
<source>Authors</source>
<translation>Avtorji</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="92"/>
<source>Date taken</source>
<translation>Datum posnetka</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="98"/>
<source>Program name</source>
<translation>Ime programa</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="100"/>
<source>Copyright</source>
<translation>Avtorske pravice</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="103"/>
<source>Horizontal resolution</source>
<translation>Horizontalna ločljivost</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="105"/>
<source>Vertical resolution</source>
<translation>Navpična ločljivost</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="107"/>
<source>Resolution unit</source>
<translation>Enota ločljivosti</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="109"/>
<source>Colour representation</source>
<translation>Barvna predstavitev</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="112"/>
<source>Camera maker</source>
<translation>Izdelovalec kamer</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="114"/>
<source>Camera model</source>
<translation>Model kamere</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="116"/>
<source>F-stop</source>
<translation>F-stop</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="118"/>
<source>Exposure time</source>
<translation>Čas izpostavljenosti</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="120"/>
<source>ISO speed</source>
<translation>Hitrost ISO</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="122"/>
<source>Exposure bias</source>
<translation>Pristranskost izpostavljenosti</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="124"/>
<source>Focal length</source>
<translation>Goriščna razdalja</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="126"/>
<source>Max aperture</source>
<translation>Največja zaslonka</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="128"/>
<source>Metering mode</source>
<translation>Način merjenja</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="130"/>
<source>Subject distance</source>
<translation>Razdalja motiva</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="132"/>
<source>Flash mode</source>
<translation>Način bliskavice</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="134"/>
<source>35mm focal length</source>
<translation>Goriščna razdalja 35 mm</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="137"/>
<source>Lens model</source>
<translation>Model objektiva</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="139"/>
<source>Contrast</source>
<translation>Kontrast</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="141"/>
<source>Brightness</source>
<translation>Svetlost</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="143"/>
<source>Exposure program</source>
<translation>Program izpostavljenosti</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="145"/>
<source>Saturation</source>
<translation>Nasičenost</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="147"/>
<source>Sharpness</source>
<translation>Ostrina</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="149"/>
<source>White balance</source>
<translation>Ravnovesje beline</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="151"/>
<source>Digital zoom</source>
<translation>Digitalna povečava</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="153"/>
<source>EXIF version</source>
<translation>Različica EXIF</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="156"/>
<source>Latitude reference</source>
<translation>Referenčna zemljepisna širina</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="158"/>
<source>Latitude</source>
<translation>Zemljepisna širina</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="160"/>
<source>Longitude reference</source>
<translation>Referenčna dolžina</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="162"/>
<source>Longitude</source>
<translation>Zemljepisna dolžina</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="164"/>
<source>Altitude reference</source>
<translation>Referenčna višina</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="166"/>
<source>Altitude</source>
<translation>Nadmorska višina</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="176"/>
<source>%1 x %2</source>
<translation>%1 x %2</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="194"/>
<source>%1 : %2</source>
<translation>%1 : %2</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="319"/>
<source>Property</source>
<translation>Lastnost</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="319"/>
<source>Value</source>
<translation>Vrednost</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settingsdialog.cpp" line="33"/>
<source>Settings</source>
<translation>Nastavitve</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="41"/>
<source>Options</source>
<translation>Možnosti</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="53"/>
<source>Shortcuts</source>
<translation>Bližnjice</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="63"/>
<source>Editing shortcuts for action &quot;%1&quot;:</source>
<translation>Urejanje bližnjic za dejanje &quot;%1&quot;:</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="72"/>
<source>Failed to set shortcuts</source>
<translation>Nastavitev bližnjic ni uspela</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="73"/>
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
<translation>Preverite, ali so bližnjice podvojene z obstoječimi bližnjicami.</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="80"/>
<source>Do nothing</source>
<translation>Ne naredi ničesar</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="81"/>
<source>Close the window</source>
<translation>Zapri okno</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="82"/>
<source>Toggle maximize</source>
<translation>Preklopi maksimiranje</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="83"/>
<source>Toggle fullscreen</source>
<translation>Preklopi celozaslonski način</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="87"/>
<source>Zoom in and out</source>
<translation>Povečava in pomanjšava</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="88"/>
<source>View next or previous item</source>
<translation>Ogled naslednjega ali prejšnjega elementa</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="92"/>
<source>Auto size</source>
<translation>Samodejna velikost</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="93"/>
<source>Maximized</source>
<translation>Maksimizirano</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="94"/>
<source>Windowed</source>
<translation>Okenski način</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="98"/>
<source>Round (Integer scaling)</source>
<comment>This option means round up for .5 and above</comment>
<translation>Zaokroženo (celoštevilsko skaliranje)</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="99"/>
<source>Ceil (Integer scaling)</source>
<comment>This option means always round up</comment>
<translation>Zaokroževanje navzgor (celoštevilsko skaliranje)</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="100"/>
<source>Floor (Integer scaling)</source>
<comment>This option means always round down</comment>
<translation>Zaokroževanje navzdol (celoštevilsko skaliranje)</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="101"/>
<source>Follow system (Fractional scaling)</source>
<comment>This option means don&apos;t round</comment>
<translation>Sledi sistemu (delno skaliranje)</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="124"/>
<source>Stay on top when start-up</source>
<translation>Ostani na vrhu pri zagonu</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="125"/>
<source>Use built-in close window animation</source>
<translation>Uporabi vgrajeno animacijo zapiranja okna</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="126"/>
<source>Use light-color checkerboard</source>
<translation>Uporabite svetlo šahovnico</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="127"/>
<source>Loop the loaded gallery</source>
<translation>Ponavljaj naloženo galerijo</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="128"/>
<source>Auto long image mode</source>
<translation>Samodejni način dolge slike</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="129"/>
<source>Limit SVG support to SVG Tiny 1.2</source>
<translation>Omeji podporo za SVG na SVG Tiny 1.2</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="130"/>
<source>Double-click behavior</source>
<translation>Obnašanje dvojnega klika</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="131"/>
<source>Mouse wheel behavior</source>
<translation>Obnašanje miškinega kolesca</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="132"/>
<source>Default window size</source>
<translation>Privzeta velikost okna</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="133"/>
<source>HiDPI scale factor rounding policy</source>
<translation>Politika zaokroževanja faktorja merila HiDPI</translation>
</message>
</context>
<context>
<name>ShortcutEdit</name>
<message>
<location filename="../shortcutedit.cpp" line="104"/>
<source>No shortcuts</source>
<translation>Brez bližnjic</translation>
</message>
</context>
<context>
<name>ShortcutEditor</name>
<message>
<location filename="../shortcutedit.cpp" line="70"/>
<source>Shortcut #%1</source>
<translation>Bližnjica #%1</translation>
</message>
</context>
<context>
<name>main</name>
<message>
<location filename="../main.cpp" line="42"/>
<source>Pineapple Pictures</source>
<translation>Pineapple Slike</translation>
</message>
<message>
<location filename="../main.cpp" line="45"/>
<source>List supported image format suffixes, and quit program.</source>
<translation>Naštej podprte pripone slikovnih formatov in zapri program.</translation>
</message>
<message>
<location filename="../main.cpp" line="49"/>
<source>File list.</source>
<translation>Seznam datotek.</translation>
</message>
</context>
</TS>
+73 -40
View File
@@ -174,7 +174,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation> </translation> <translation> </translation>
@@ -198,194 +198,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<source>File url list is empty</source> <source>File url list is empty</source>
<translation> ி ி ி </translation> <translation> ி ி ி </translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="461"/> <location filename="../mainwindow.cpp" line="462"/>
<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="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation> ிி: %1</translation> <translation> ிி: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation>ிிிி </translation> <translation>ிிிி </translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation>ி ி &quot;%1&quot; ிி?</translation> <translation>ி ி &quot;%1&quot; ிி?</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation> ி ி</translation> <translation> ி ி</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation> ி, ி, ி .</translation> <translation> ி, ி, ி .</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation>ி &amp; </translation> <translation>ி &amp; </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<source>Copy &amp;File Path</source> <source>Copy &amp;File Path</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>ி</translation> <translation>ி</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="91"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>ிி</translation> <translation>ிி</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="99"/> <location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source> <source>Pause/Resume Animation</source>
<translation>ி/ி </translation> <translation>ி/ி </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="100"/> <location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source> <source>Animation Go to Next Frame</source>
<translation>ி ி </translation> <translation>ி ி </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="102"/> <location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source> <source>Flip &amp;Horizontally</source>
<translation>ி </translation> <translation>ி </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="103"/> <location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source> <source>Fit to view</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="104"/> <location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source> <source>Fit to width</source>
<translation>ி </translation> <translation>ி </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="105"/> <location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source> <source>Fit long image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="108"/> <location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source> <source>&amp;Paste</source>
<translation> (&amp;p)</translation> <translation> (&amp;p)</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source> <source>Toggle Checkerboard</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="86"/> <location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source> <source>&amp;Open...</source>
<translation>&amp; ி ...</translation> <translation>&amp; ி ...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source> <source>Actual size</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="89"/> <location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation>ி </translation> <translation>ி </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation> </translation> <translation> </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation> ...</translation> <translation> ...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation>ி</translation> <translation>ி</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation> ி ி</translation> <translation> ி ி</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation>ி </translation> <translation>ி </translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation>ி</translation> <translation>ி</translation>
</message> </message>
+74 -41
View File
@@ -178,7 +178,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation>Resmi buraya sürükleyin</translation> <translation>Resmi buraya sürükleyin</translation>
@@ -214,194 +214,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<source>File url list is empty</source> <source>File url list is empty</source>
<translation>Dosya URL listesi boş</translation> <translation>Dosya URL listesi boş</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="461"/> <location filename="../mainwindow.cpp" line="462"/>
<source>&amp;Copy</source> <source>&amp;Copy</source>
<translation>&amp;Kopyala</translation> <translation>&amp;Kopyala</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation>Resim verisi geçersiz</translation> <translation>Resim verisi geçersiz</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation>Desteklenmeyen dosya türü verisi: %1</translation> <translation>Desteklenmeyen dosya türü verisi: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation>Panodaki Resim</translation> <translation>Panodaki Resim</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation>&quot;%1&quot; ögesini geri dönüşüm kutusuna taşımak istediğinizden emin misiniz?</translation> <translation>&quot;%1&quot; ögesini geri dönüşüm kutusuna taşımak istediğinizden emin misiniz?</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation>Dosya çöpe taşınamadı</translation> <translation>Dosya çöpe taşınamadı</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation>Çöp kutusuna taşıma başarısız oldu, dosya izin sorunu, dosya sistemi sınırlaması veya platform sınırlamasından kaynaklanıyor olabilir.</translation> <translation>Çöp kutusuna taşıma başarısız oldu, dosya izin sorunu, dosya sistemi sınırlaması veya platform sınırlamasından kaynaklanıyor olabilir.</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation>P&amp;ixmap&apos;i Kopyala</translation> <translation>P&amp;ixmap&apos;i Kopyala</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<source>Copy &amp;File Path</source> <source>Copy &amp;File Path</source>
<translation>&amp;Dosya Yolunu Kopyala</translation> <translation>&amp;Dosya Yolunu Kopyala</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation>Özellikler</translation> <translation>Özellikler</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation>Üstte tut</translation> <translation>Üstte tut</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation>Korumalı kip</translation> <translation>Korumalı kip</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation>Dönüşümü koru</translation> <translation>Dönüşümü koru</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>Yaklaştır</translation> <translation>Yaklaştır</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="91"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>Uzaklaştır</translation> <translation>Uzaklaştır</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="99"/> <location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source> <source>Pause/Resume Animation</source>
<translation>Canlandırmayı Duraklat/Sürdür</translation> <translation>Canlandırmayı Duraklat/Sürdür</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="100"/> <location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source> <source>Animation Go to Next Frame</source>
<translation>Canlandırma Sonraki Kareye Git</translation> <translation>Canlandırma Sonraki Kareye Git</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="102"/> <location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source> <source>Flip &amp;Horizontally</source>
<translation>&amp;Yatay Çevir</translation> <translation>&amp;Yatay Çevir</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="103"/> <location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source> <source>Fit to view</source>
<translation>Görünüme sığdır</translation> <translation>Görünüme sığdır</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="104"/> <location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source> <source>Fit to width</source>
<translation>Genişliğe sığdır</translation> <translation>Genişliğe sığdır</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="105"/> <location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source> <source>Fit long image</source>
<translation>Geniş resmi sığdır</translation> <translation>Geniş resmi sığdır</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="108"/> <location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source> <source>&amp;Paste</source>
<translation>Ya&amp;pıştır</translation> <translation>Ya&amp;pıştır</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source> <source>Toggle Checkerboard</source>
<translation>Damalı Ekrana Geç</translation> <translation>Damalı Ekrana Geç</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="86"/> <location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source> <source>&amp;Open...</source>
<translation>&amp;...</translation> <translation>&amp;...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source> <source>Actual size</source>
<translation>Gerçek boyut</translation> <translation>Gerçek boyut</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="89"/> <location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation>Tam boyuta geç</translation> <translation>Tam boyuta geç</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation>Sağa döndür</translation> <translation>Sağa döndür</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation>Sola döndür</translation> <translation>Sola döndür</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation>Önceki resim</translation> <translation>Önceki resim</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation>Sonraki resim</translation> <translation>Sonraki resim</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation>Çöp Kutusuna Taşı</translation> <translation>Çöp Kutusuna Taşı</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation>Yapılandır...</translation> <translation>Yapılandır...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation>Yardım</translation> <translation>Yardım</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation>Dosya Gezgini&apos;nde Göster</translation> <translation>Dosya Gezgini&apos;nde Göster</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation>Dizinde göster</translation> <translation>Dizinde göster</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation>Çıkış</translation> <translation>Çıkış</translation>
</message> </message>
@@ -858,7 +891,7 @@
<message> <message>
<location filename="../settingsdialog.cpp" line="129"/> <location filename="../settingsdialog.cpp" line="129"/>
<source>Limit SVG support to SVG Tiny 1.2</source> <source>Limit SVG support to SVG Tiny 1.2</source>
<translation type="unfinished"></translation> <translation>SVG desteğini SVG Tiny 1.2 ile sınırla</translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="130"/> <location filename="../settingsdialog.cpp" line="130"/>
+73 -40
View File
@@ -174,7 +174,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation>Перетягніть зображення сюди</translation> <translation>Перетягніть зображення сюди</translation>
@@ -210,194 +210,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<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="461"/> <location filename="../mainwindow.cpp" line="462"/>
<source>&amp;Copy</source> <source>&amp;Copy</source>
<translation>&amp;Скопіювати</translation> <translation>&amp;Скопіювати</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation>Дані зображення недійсні</translation> <translation>Дані зображення недійсні</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation>Не підтримується mimedata: %1</translation> <translation>Не підтримується mimedata: %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source> <source>Copy P&amp;ixmap</source>
<translation>Скопіювати P&amp;ixmap</translation> <translation>Скопіювати P&amp;ixmap</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<source>Copy &amp;File Path</source> <source>Copy &amp;File Path</source>
<translation>Скопіювати &amp;шлях до файлу</translation> <translation>Скопіювати &amp;шлях до файлу</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation>Властивості</translation> <translation>Властивості</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation>Поверх всіх вікон</translation> <translation>Поверх всіх вікон</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation>Захищений режим</translation> <translation>Захищений режим</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation>Зберігати трансформацію</translation> <translation>Зберігати трансформацію</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation>Збільшити</translation> <translation>Збільшити</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="91"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation>Зменшити</translation> <translation>Зменшити</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="99"/> <location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source> <source>Pause/Resume Animation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="100"/> <location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source> <source>Animation Go to Next Frame</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="102"/> <location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source> <source>Flip &amp;Horizontally</source>
<translation>Перевернути по &amp;горизонталі</translation> <translation>Перевернути по &amp;горизонталі</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="103"/> <location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source> <source>Fit to view</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="104"/> <location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source> <source>Fit to width</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="105"/> <location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source> <source>Fit long image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="108"/> <location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source> <source>&amp;Paste</source>
<translation>&amp;Вставити</translation> <translation>&amp;Вставити</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source> <source>Toggle Checkerboard</source>
<translation>Перемкнути шахову дошку</translation> <translation>Перемкнути шахову дошку</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="86"/> <location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source> <source>&amp;Open...</source>
<translation>&amp;Відкрити...</translation> <translation>&amp;Відкрити...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source> <source>Actual size</source>
<translation>Фактичний розмір</translation> <translation>Фактичний розмір</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="89"/> <location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation>Перемкнути на максимум</translation> <translation>Перемкнути на максимум</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation>Перегорнути праворуч</translation> <translation>Перегорнути праворуч</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation>Попереднє зображення</translation> <translation>Попереднє зображення</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation>Наступне зображення</translation> <translation>Наступне зображення</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation>Налаштувати...</translation> <translation>Налаштувати...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation>Допомога</translation> <translation>Допомога</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation>Показати у файловому провіднику</translation> <translation>Показати у файловому провіднику</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation>Показати у теці</translation> <translation>Показати у теці</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation>Вийти</translation> <translation>Вийти</translation>
</message> </message>
+936
View File
@@ -0,0 +1,936 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="vi">
<context>
<name>AboutDialog</name>
<message>
<location filename="../aboutdialog.cpp" line="29"/>
<source>About</source>
<translation>Giới thiệu về</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="32"/>
<source>Launch application with image file path as argument to load the file.</source>
<translation>Khởi chạy ng dụng với đưng dẫn tệp hình nh làm đi số đ tải tệp.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="33"/>
<source>Drag and drop image file onto the window is also supported.</source>
<translation>Kéo thả tệp hình nh vào cửa sổ cũng đưc hỗ trợ.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="34"/>
<source>None of the operations in this application will alter the pictures on disk.</source>
<translation>Không thao tác nào trong ng dụng này sẽ làm thay đi hình nh trên đĩa.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="35"/>
<source>Context menu option explanation:</source>
<translation>Giải thích tùy chọn menu ngữ cảnh:</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="42"/>
<source>Make window stay on top of all other windows.</source>
<translation>Đt cửa sổ trên cùng của tất cả các cửa sổ khác.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="45"/>
<source>Avoid close window accidentally. (eg. by double clicking the window)</source>
<translation>Tránh tình đóng cửa sổ. ( dụ: bằng cách nhấp đúp vào cửa sổ)</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="48"/>
<source>Avoid resetting the zoom/rotation/flip state that was applied to the image view when switching between images.</source>
<translation>Tránh đt lại trạng thái zoom/xoay/lật đã đưc áp dụng cho xem hình nh khi chuyển đi giữa các hình nh.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="55"/>
<source>Version: %1</source>
<translation>Phiên bản: %1</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="66"/>
<source>Logo designed by %1</source>
<translation>Logo đưc thiết kế bởi %1</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="68"/>
<source>Built with Qt %1 (%2)</source>
<translation>Đưc xây dựng với Qt %1 (%2)</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="69"/>
<source>Source code</source>
<translation> nguồn</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="79"/>
<source>Contributors</source>
<translation>Người đóng góp</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="81"/>
<source>List of contributors on GitHub</source>
<translation>Danh sách những người đóng góp trên GitHub</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="82"/>
<source>Thanks to all people who contributed to this project.</source>
<translation>Cảm ơn tất cả những người đã đóng góp cho dự án này.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="86"/>
<source>Translators</source>
<translation>Vietnam Linux L10n &lt;https://github.com/linux-l10n-vi&gt;
Loc Huynh &lt;https://github.com/hthienloc&gt;</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="87"/>
<source>I would like to thank the following people who volunteered to translate this application.</source>
<translation>Tôi xin cảm ơn những người sau đây đã tình nguyện dịch ng dụng này.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="131"/>
<source>%1 is built on the following free software libraries:</source>
<comment>Free as in freedom</comment>
<translation>%1 đưc xây dựng trên các thư viện phần mềm miễn phí sau:</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="155"/>
<source>&amp;Special Thanks</source>
<translation>&amp;Cảm ơn đc biệt</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="157"/>
<source>&amp;Third-party Libraries</source>
<translation>&amp;Thư viện của bên thứ ba</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="93"/>
<source>Your Rights</source>
<translation>Quyền của bạn</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="63"/>
<source>Copyright (c) %1 %2</source>
<comment>%1 is year, %2 is the name of copyright holder(s)</comment>
<translation>Bản quyền (c) %1 %2</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="95"/>
<source>%1 is released under the MIT License.</source>
<translation>%1 đưc phát hành theo Giấy phép MIT.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="96"/>
<source>This license grants people a number of freedoms:</source>
<translation>Giấy phép này cấp cho mọi người một số quyền tự do:</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="97"/>
<source>You are free to use %1, for any purpose</source>
<translation>Bạn đưc tự do sử dụng %1, cho bất kỳ mục đích nào</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="98"/>
<source>You are free to distribute %1</source>
<translation>Bạn đưc tự do phân phối %1</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="99"/>
<source>You can study how %1 works and change it</source>
<translation>Bạn thể nghiên cứu cách %1 hoạt đng thay đi </translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="100"/>
<source>You can distribute changed versions of %1</source>
<translation>Bạn thể phân phối các phiên bản đã thay đi của %1</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="102"/>
<source>The MIT license guarantees you this freedom. Nobody is ever permitted to take it away.</source>
<translation>Giấy phép MIT đm bảo cho bạn sự tự do này. Không ai đưc phép mang đi.</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="130"/>
<source>Third-party Libraries used by %1</source>
<translation>Thư viện của bên thứ ba đưc %1 sử dụng</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="153"/>
<source>&amp;Help</source>
<translation>&amp;Trợ giúp</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="154"/>
<source>&amp;About</source>
<translation>&amp;Giới thiệu giới thiệu về</translation>
</message>
<message>
<location filename="../aboutdialog.cpp" line="156"/>
<source>&amp;License</source>
<translation>&amp;Giấy phép</translation>
</message>
</context>
<context>
<name>GraphicsScene</name>
<message>
<location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source>
<translation>Kéo hình nh vào đây</translation>
</message>
</context>
<context>
<name>GraphicsView</name>
<message>
<location filename="../graphicsview.cpp" line="51"/>
<source>File is not a valid image</source>
<translation>Tệp không phải hình nh hợp lệ</translation>
</message>
<message>
<location filename="../graphicsview.cpp" line="55"/>
<location filename="../graphicsview.cpp" line="60"/>
<location filename="../graphicsview.cpp" line="71"/>
<source>Image data is invalid or currently unsupported</source>
<translation>Dữ liệu hình nh không hợp lệ hoặc hiện không đưc hỗ trợ</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="568"/>
<source>File url list is empty</source>
<translation>Danh sách url tệp trống</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="462"/>
<source>&amp;Copy</source>
<translation>&amp;Sao chép</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source>
<translation>Dữ liệu hình nh không hợp lệ</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source>
<translation>Dữ liệu mimedata không đưc hỗ trợ: %1</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation>Lưu dưới dạng</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation>Hiện tại không hình nh nào đưc mở.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation>Hình nh %1 (*.%2)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation>Không đnh dạng hình nh đưc hỗ trợ.</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation>Không lưu đưc hình nh: %1</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source>
<translation>Hình nh từ bộ nhớ tạm</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation>Bạn chắc chắn muốn chuyển &quot;%1&quot; vào thùng rác không?</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source>
<translation>Không thể di chuyển tệp vào thùng rác</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation>Di chuyển vào thùng rác không thành công, nguyên nhân thể do vấn đ về quyền đi với tệp, giới hạn hệ thống tệp hoặc giới hạn nền tảng.</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="108"/>
<source>Copy P&amp;ixmap</source>
<translation>Sao chép P&amp;ixmap</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="109"/>
<source>Copy &amp;File Path</source>
<translation>Sao chép Đưng &amp;dẫn tệp</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source>
<translation>Thuộc tính</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source>
<translation>Luôn trên đu</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source>
<translation>Chế đ bảo vệ</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation>Giữ sự chuyển đi</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source>
<translation>Phóng to</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation>Lưu &amp;dưới dạng...</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source>
<translation>Thu nhỏ</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source>
<translation>Tạm dừng/Tiếp tục hoạt nh</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source>
<translation>Hoạt hình Chuyển đến khung tiếp theo</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source>
<translation>Lật &amp;Theo chiều ngang</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source>
<translation>Phù hợp đ xem</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source>
<translation>Vừa với chiều rộng</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source>
<translation>Vừa với hình nh dài</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source>
<translation>&amp;Dán</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source>
<translation>Chuyển đi bàn cờ</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source>
<translation>&amp;Mở...</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source>
<translation>Kích thước thực tế</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source>
<translation>Chuyển đi tối đa hóa</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source>
<translation>Xoay phải</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source>
<translation>Xoay trái</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source>
<translation>Hình nh trước đó</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source>
<translation>Hình nh tiếp theo</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source>
<translation>Chuyển vào Thùng rác</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source>
<translation>Cấu hình...</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="116"/>
<source>Help</source>
<translation>Trợ giúp</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation>Hiển thị trong tệp Explorer</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source>
<translation>Hiển thị trong thư mục</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source>
<translation>Thoát</translation>
</message>
</context>
<context>
<name>MetadataDialog</name>
<message>
<location filename="../metadatadialog.cpp" line="84"/>
<source>Image Metadata</source>
<translation>Siêu dữ liệu hình nh</translation>
</message>
</context>
<context>
<name>MetadataModel</name>
<message>
<location filename="../metadatamodel.cpp" line="43"/>
<source>Origin</source>
<comment>Section name.</comment>
<translation>Nguồn</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="44"/>
<source>Image</source>
<comment>Section name.</comment>
<translation>Hình nh</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="48"/>
<source>File</source>
<comment>Section name.</comment>
<translation>Tệp</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="45"/>
<source>Camera</source>
<comment>Section name.</comment>
<translation>Camera</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="35"/>
<source>%1 File</source>
<translation>Tệp %1</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="42"/>
<source>Description</source>
<comment>Section name.</comment>
<translation> tả</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="46"/>
<source>Advanced photo</source>
<comment>Section name.</comment>
<translation>nh nâng cao</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="47"/>
<source>GPS</source>
<comment>Section name.</comment>
<translation>GPS</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="52"/>
<source>Dimensions</source>
<translation>Kích thước</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="54"/>
<source>Aspect ratio</source>
<translation>Tỷ lệ khung hình</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="58"/>
<source>Frame count</source>
<translation>Số khung hình</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="62"/>
<source>Name</source>
<translation>Tên</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="64"/>
<source>Item type</source>
<translation>Loại mặt hàng</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="66"/>
<source>Folder path</source>
<translation>Đưng dẫn thư mục</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="68"/>
<source>Size</source>
<translation>Kích thước</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="70"/>
<source>Date created</source>
<translation>Ngày tạo</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="72"/>
<source>Date modified</source>
<translation>Ngày sửa đi</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="79"/>
<source>Title</source>
<translation>Tiêu đ</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="81"/>
<source>Subject</source>
<translation>Chủ thể</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="83"/>
<source>Rating</source>
<translation>Đánh giá</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="85"/>
<source>Tags</source>
<translation>Thẻ</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="87"/>
<source>Comments</source>
<translation>Bình luận</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="90"/>
<source>Authors</source>
<translation>Các tác giả</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="92"/>
<source>Date taken</source>
<translation>Ngày chụp</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="98"/>
<source>Program name</source>
<translation>Tên chương trình</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="100"/>
<source>Copyright</source>
<translation>Bản quyền</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="103"/>
<source>Horizontal resolution</source>
<translation>Đ phân giải ngang</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="105"/>
<source>Vertical resolution</source>
<translation>Đ phân giải dọc</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="107"/>
<source>Resolution unit</source>
<translation>Đơn vị đ phân giải</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="109"/>
<source>Colour representation</source>
<translation>Thể hiện màu sắc</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="112"/>
<source>Camera maker</source>
<translation>Nhà sản xuất máy nh</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="114"/>
<source>Camera model</source>
<translation>Mẫu máy nh</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="116"/>
<source>F-stop</source>
<translation>F-dừng lại</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="118"/>
<source>Exposure time</source>
<translation>Thời gian phơi nhiễm</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="120"/>
<source>ISO speed</source>
<translation>Tốc đ ISO</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="122"/>
<source>Exposure bias</source>
<translation>Xu hướng tiếp xúc</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="124"/>
<source>Focal length</source>
<translation>Tiêu cự</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="126"/>
<source>Max aperture</source>
<translation>Khẩu đ tối đa</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="128"/>
<source>Metering mode</source>
<translation>Chế đ đo sáng</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="130"/>
<source>Subject distance</source>
<translation>Khoảng cách chủ đ</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="132"/>
<source>Flash mode</source>
<translation>Chế đ đèn nháy</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="134"/>
<source>35mm focal length</source>
<translation>tiêu cự 35mm</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="137"/>
<source>Lens model</source>
<translation>Mẫu ng kính</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="139"/>
<source>Contrast</source>
<translation>Đ tương phản</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="141"/>
<source>Brightness</source>
<translation>Đ sáng</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="143"/>
<source>Exposure program</source>
<translation>Chương trình phơi sáng</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="145"/>
<source>Saturation</source>
<translation>Đ bão hòa</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="147"/>
<source>Sharpness</source>
<translation>Đ sắc nét</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="149"/>
<source>White balance</source>
<translation>Cân bằng trắng</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="151"/>
<source>Digital zoom</source>
<translation>Zoom kỹ thuật số</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="153"/>
<source>EXIF version</source>
<translation>Phiên bản EXIF</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="156"/>
<source>Latitude reference</source>
<translation>Tham chiếu đ</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="158"/>
<source>Latitude</source>
<translation> đ</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="160"/>
<source>Longitude reference</source>
<translation>Tham chiếu kinh đ</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="162"/>
<source>Longitude</source>
<translation>Kinh đ</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="164"/>
<source>Altitude reference</source>
<translation>Tham chiếu đ cao</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="166"/>
<source>Altitude</source>
<translation>Đ cao</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="176"/>
<source>%1 x %2</source>
<translation>%1 x %2</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="194"/>
<source>%1 : %2</source>
<translation>%1 : %2</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="319"/>
<source>Property</source>
<translation>Tài sản</translation>
</message>
<message>
<location filename="../metadatamodel.cpp" line="319"/>
<source>Value</source>
<translation>Giá trị</translation>
</message>
</context>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../settingsdialog.cpp" line="33"/>
<source>Settings</source>
<translation>Cài đt</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="41"/>
<source>Options</source>
<translation>Tùy chọn</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="53"/>
<source>Shortcuts</source>
<translation>Phím tắt</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="63"/>
<source>Editing shortcuts for action &quot;%1&quot;:</source>
<translation>Chỉnh sửa phím tắt cho hành đng &quot;%1&quot;:</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="72"/>
<source>Failed to set shortcuts</source>
<translation>Không đt đưc phím tắt</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="73"/>
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
<translation>Vui lòng kiểm tra xem các phím tắt bị trùng lặp với các phím tắt hiện hay không.</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="80"/>
<source>Do nothing</source>
<translation>Không làm cả</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="81"/>
<source>Close the window</source>
<translation>Đóng cửa sổ</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="82"/>
<source>Toggle maximize</source>
<translation>Chuyển đi tối đa hóa</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="83"/>
<source>Toggle fullscreen</source>
<translation>Chuyển đi toàn màn hình</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="87"/>
<source>Zoom in and out</source>
<translation>Zoom thu nhỏ</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="88"/>
<source>View next or previous item</source>
<translation>Xem mục tiếp theo hoặc trước đó</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="92"/>
<source>Auto size</source>
<translation>Kích thước tự đng</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="93"/>
<source>Maximized</source>
<translation>Tối đa hóa</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="94"/>
<source>Windowed</source>
<translation> cửa sổ</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="98"/>
<source>Round (Integer scaling)</source>
<comment>This option means round up for .5 and above</comment>
<translation>Tròn (Tỷ lệ số nguyên)</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="99"/>
<source>Ceil (Integer scaling)</source>
<comment>This option means always round up</comment>
<translation>Ceil (Tỷ lệ số nguyên)</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="100"/>
<source>Floor (Integer scaling)</source>
<comment>This option means always round down</comment>
<translation>Tầng (Tỷ lệ số nguyên)</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="101"/>
<source>Follow system (Fractional scaling)</source>
<comment>This option means don&apos;t round</comment>
<translation>Hệ thống theo dõi (Chia tỷ lệ phân số)</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="124"/>
<source>Stay on top when start-up</source>
<translation>Luôn dẫn đu khi khởi nghiệp</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="125"/>
<source>Use built-in close window animation</source>
<translation>Sử dụng hoạt nh đóng cửa sổ tích hợp</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="126"/>
<source>Use light-color checkerboard</source>
<translation>Sử dụng bàn cờ màu sáng</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="127"/>
<source>Loop the loaded gallery</source>
<translation>Lặp lại thư viện đã tải</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="128"/>
<source>Auto long image mode</source>
<translation>Chế đ hình nh dài tự đng</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="129"/>
<source>Limit SVG support to SVG Tiny 1.2</source>
<translation>Giới hạn hỗ trợ SVG SVG Tiny 1.2</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="130"/>
<source>Double-click behavior</source>
<translation>Hành vi bấm đúp</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="131"/>
<source>Mouse wheel behavior</source>
<translation>Hành vi của bánh xe chuột</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="132"/>
<source>Default window size</source>
<translation>Kích thước cửa sổ mặc đnh</translation>
</message>
<message>
<location filename="../settingsdialog.cpp" line="133"/>
<source>HiDPI scale factor rounding policy</source>
<translation>Chính sách làm tròn hệ số tỷ lệ HiDPI</translation>
</message>
</context>
<context>
<name>ShortcutEdit</name>
<message>
<location filename="../shortcutedit.cpp" line="104"/>
<source>No shortcuts</source>
<translation>Không phím tắt</translation>
</message>
</context>
<context>
<name>ShortcutEditor</name>
<message>
<location filename="../shortcutedit.cpp" line="70"/>
<source>Shortcut #%1</source>
<translation>Phím tắt #%1</translation>
</message>
</context>
<context>
<name>main</name>
<message>
<location filename="../main.cpp" line="42"/>
<source>Pineapple Pictures</source>
<translation>Pineapple Pictures</translation>
</message>
<message>
<location filename="../main.cpp" line="45"/>
<source>List supported image format suffixes, and quit program.</source>
<translation>Liệt các hậu tố đnh dạng hình nh đưc hỗ trợ thoát khỏi chương trình.</translation>
</message>
<message>
<location filename="../main.cpp" line="49"/>
<source>File list.</source>
<translation>Danh sách tệp.</translation>
</message>
</context>
</TS>
+73 -40
View File
@@ -178,7 +178,7 @@
<context> <context>
<name>GraphicsScene</name> <name>GraphicsScene</name>
<message> <message>
<location filename="../mainwindow.cpp" line="292"/> <location filename="../mainwindow.cpp" line="293"/>
<location filename="../graphicsscene.cpp" line="102"/> <location filename="../graphicsscene.cpp" line="102"/>
<source>Drag image here</source> <source>Drag image here</source>
<translation></translation> <translation></translation>
@@ -214,194 +214,227 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../mainwindow.cpp" line="190"/> <location filename="../mainwindow.cpp" line="191"/>
<location filename="../mainwindow.cpp" line="561"/> <location filename="../mainwindow.cpp" line="568"/>
<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="461"/> <location filename="../mainwindow.cpp" line="462"/>
<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="569"/> <location filename="../mainwindow.cpp" line="576"/>
<source>Image data is invalid</source> <source>Image data is invalid</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="576"/> <location filename="../mainwindow.cpp" line="583"/>
<source>Not supported mimedata: %1</source> <source>Not supported mimedata: %1</source>
<translation> MimeData %1</translation> <translation> MimeData %1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="783"/> <location filename="../mainwindow.cpp" line="710"/>
<location filename="../mainwindow.cpp" line="727"/>
<location filename="../mainwindow.cpp" line="734"/>
<location filename="../mainwindow.cpp" line="764"/>
<source>Save As</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>No image is currently open.</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="722"/>
<source>%1 Image (*.%2)</source>
<translation>%1 (*.%2)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="728"/>
<source>No supported image formats are available.</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="765"/>
<source>Failed to save image: %1</source>
<translation>%1</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="854"/>
<source>Image From Clipboard</source> <source>Image From Clipboard</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="801"/> <location filename="../mainwindow.cpp" line="872"/>
<source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source> <source>Are you sure you want to move &quot;%1&quot; to recycle bin?</source>
<translation>%1</translation> <translation>%1</translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="805"/> <location filename="../mainwindow.cpp" line="876"/>
<source>Failed to move file to trash</source> <source>Failed to move file to trash</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="806"/> <location filename="../mainwindow.cpp" line="877"/>
<source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source> <source>Move to trash failed, it might caused by file permission issue, file system limitation, or platform limitation.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="106"/> <location filename="../actionmanager.cpp" line="108"/>
<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="../actionmanager.cpp" line="107"/> <location filename="../actionmanager.cpp" line="109"/>
<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="../actionmanager.cpp" line="125"/> <location filename="../actionmanager.cpp" line="127"/>
<source>Properties</source> <source>Properties</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="110"/> <location filename="../actionmanager.cpp" line="112"/>
<location filename="../aboutdialog.cpp" line="41"/> <location filename="../aboutdialog.cpp" line="41"/>
<source>Stay on top</source> <source>Stay on top</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="111"/> <location filename="../actionmanager.cpp" line="113"/>
<location filename="../aboutdialog.cpp" line="44"/> <location filename="../aboutdialog.cpp" line="44"/>
<source>Protected mode</source> <source>Protected mode</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="112"/> <location filename="../actionmanager.cpp" line="114"/>
<location filename="../aboutdialog.cpp" line="47"/> <location filename="../aboutdialog.cpp" line="47"/>
<source>Keep transformation</source> <source>Keep transformation</source>
<comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment> <comment>The &apos;transformation&apos; means the flip/rotation status that currently applied to the image view</comment>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="90"/> <location filename="../actionmanager.cpp" line="92"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="91"/> <location filename="../actionmanager.cpp" line="88"/>
<source>Save &amp;As...</source>
<translation>(&amp;A)...</translation>
</message>
<message>
<location filename="../actionmanager.cpp" line="93"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="99"/> <location filename="../actionmanager.cpp" line="101"/>
<source>Pause/Resume Animation</source> <source>Pause/Resume Animation</source>
<translation>/</translation> <translation>/</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="100"/> <location filename="../actionmanager.cpp" line="102"/>
<source>Animation Go to Next Frame</source> <source>Animation Go to Next Frame</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="102"/> <location filename="../actionmanager.cpp" line="104"/>
<source>Flip &amp;Horizontally</source> <source>Flip &amp;Horizontally</source>
<translation>(&amp;H)</translation> <translation>(&amp;H)</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="103"/> <location filename="../actionmanager.cpp" line="105"/>
<source>Fit to view</source> <source>Fit to view</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="104"/> <location filename="../actionmanager.cpp" line="106"/>
<source>Fit to width</source> <source>Fit to width</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="105"/> <location filename="../actionmanager.cpp" line="107"/>
<source>Fit long image</source> <source>Fit long image</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="108"/> <location filename="../actionmanager.cpp" line="110"/>
<source>&amp;Paste</source> <source>&amp;Paste</source>
<translation>(&amp;P)</translation> <translation>(&amp;P)</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="92"/> <location filename="../actionmanager.cpp" line="94"/>
<source>Toggle Checkerboard</source> <source>Toggle Checkerboard</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="86"/> <location filename="../actionmanager.cpp" line="87"/>
<source>&amp;Open...</source> <source>&amp;Open...</source>
<translation>(&amp;O)...</translation> <translation>(&amp;O)...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="88"/> <location filename="../actionmanager.cpp" line="90"/>
<source>Actual size</source> <source>Actual size</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="89"/> <location filename="../actionmanager.cpp" line="91"/>
<source>Toggle maximize</source> <source>Toggle maximize</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="93"/> <location filename="../actionmanager.cpp" line="95"/>
<source>Rotate right</source> <source>Rotate right</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="94"/> <location filename="../actionmanager.cpp" line="96"/>
<source>Rotate left</source> <source>Rotate left</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="96"/> <location filename="../actionmanager.cpp" line="98"/>
<source>Previous image</source> <source>Previous image</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="97"/> <location filename="../actionmanager.cpp" line="99"/>
<source>Next image</source> <source>Next image</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../mainwindow.cpp" line="800"/> <location filename="../mainwindow.cpp" line="871"/>
<location filename="../actionmanager.cpp" line="109"/> <location filename="../actionmanager.cpp" line="111"/>
<source>Move to Trash</source> <source>Move to Trash</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="113"/> <location filename="../actionmanager.cpp" line="115"/>
<source>Configure...</source> <source>Configure...</source>
<translation>...</translation> <translation>...</translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="114"/> <location filename="../actionmanager.cpp" line="116"/>
<source>Help</source> <source>Help</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="117"/> <location filename="../actionmanager.cpp" line="119"/>
<source>Show in File Explorer</source> <source>Show in File Explorer</source>
<comment>File Explorer is the name of explorer.exe under Windows</comment> <comment>File Explorer is the name of explorer.exe under Windows</comment>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="123"/> <location filename="../actionmanager.cpp" line="125"/>
<source>Show in directory</source> <source>Show in directory</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../actionmanager.cpp" line="126"/> <location filename="../actionmanager.cpp" line="128"/>
<source>Quit</source> <source>Quit</source>
<translation>退</translation> <translation>退</translation>
</message> </message>
-158
View File
@@ -1,158 +0,0 @@
image:
- Visual Studio 2022
environment:
CMAKE_INSTALL_PREFIX: C:\projects\cmake
LIBZ: C:\projects\zlib
LIBEXPAT: C:\projects\libexpat
LIBAVIF: C:\projects\libavif
LIBEXIV2: C:\projects\exiv2
PPKG: C:\projects\ppkg
matrix:
- job_name: mingw_64_qt6_8
QTDIR: C:\Qt\6.8\mingw_64
MINGW64: C:\Qt\mingw_64\Tools\mingw1310_64
KF_BRANCH: master
EXIV2_VERSION: "0.28.7"
EXIV2_CMAKE_OPTIONS: "-DEXIV2_ENABLE_BROTLI=OFF -DEXIV2_ENABLE_INIH=OFF -DEXIV2_BUILD_EXIV2_COMMAND=OFF"
PPIC_CMAKE_OPTIONS: "-DPREFER_QT_5=OFF"
WINDEPLOYQT_ARGS: "--verbose=2 --no-quick-import --no-translations --no-opengl-sw --no-system-d3d-compiler --skip-plugin-types tls,networkinformation"
install:
- mkdir %CMAKE_INSTALL_PREFIX%
- mkdir %LIBZ%
- mkdir %LIBEXPAT%
- mkdir %LIBAVIF%
- mkdir %LIBEXIV2%
- mkdir %PPKG%
- cd %APPVEYOR_BUILD_FOLDER%
- git submodule update --init --recursive
- set PATH=%PATH%;%CMAKE_INSTALL_PREFIX%;%QTDIR%\bin;%MINGW64%\bin;%PPKG%
- set CC=%MINGW64%\bin\gcc.exe
- set CXX=%MINGW64%\bin\g++.exe
build_script:
# prepare
- mkdir 3rdparty
- choco install ninja
- cd %PPKG%
- curl -fsSL -o ppkg.exe https://github.com/BLumia/pineapple-package-manager/releases/latest/download/ppkg.exe
- cd %APPVEYOR_BUILD_FOLDER%
# download and install zlib for KArchive
- cd %LIBZ%
- curl -fsSL -o zlib131.zip https://zlib.net/zlib131.zip
- 7z x zlib131.zip -y
- cd zlib-1.3.1
- mkdir build
- cd build
- cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX%
- cmake --build . --config Release
- cmake --build . --config Release --target install/strip
- cd %APPVEYOR_BUILD_FOLDER%
# install ECM so we can build KImageFormats
- cd 3rdparty
- git clone -b %KF_BRANCH% -q https://invent.kde.org/frameworks/extra-cmake-modules.git
- git rev-parse HEAD
- cd extra-cmake-modules
- cmake -G "Ninja" . -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX% -DBUILD_TESTING=OFF
- cmake --build .
- cmake --build . --target install
- cd %APPVEYOR_BUILD_FOLDER%
# install AOM for libavif AV1 decoding support...
- cd 3rdparty
#- git clone -b v3.9.1 --depth 1 https://aomedia.googlesource.com/aom
#- cd aom
#- mkdir build.aom
#- cd build.aom
#- cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX% -DENABLE_DOCS=OFF -DBUILD_SHARED_LIBS=ON -DAOM_TARGET_CPU=generic -DENABLE_TESTS=OFF -DENABLE_TESTDATA=OFF -DENABLE_TOOLS=OFF -DENABLE_EXAMPLES=0
#- cmake --build . --config Release
#- cmake --build . --config Release --target install/strip
- mkdir aom
- cd aom
- curl -fsSL -o ppkg-aom.zip https://sourceforge.net/projects/pineapple-package-manager/files/packages/mingw-w64-x86_64-windows/aom-3.9.1-2.zip
- ppkg ppkg-aom.zip
- 7z x ppkg-aom.zip LICENSE -y
- cd %APPVEYOR_BUILD_FOLDER%
# install libavif for avif format support of KImageFormats
- cd %LIBAVIF%
- curl -fsSL -o libavif-v1_3_0.zip https://github.com/AOMediaCodec/libavif/archive/v1.3.0.zip
- 7z x libavif-v1_3_0.zip -y
- cd libavif-1.3.0
- mkdir build
- cd build
- cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX% -DAVIF_CODEC_AOM=SYSTEM -DAVIF_CODEC_AOM_DECODE=ON -DAVIF_CODEC_AOM_ENCODE=ON -DAVIF_LIBYUV=LOCAL
- cmake --build . --config Release
- cmake --build . --config Release --target install/strip
- cd %APPVEYOR_BUILD_FOLDER%
# install KArchive for kra format support of KImageFormats
- cd 3rdparty
- git clone -b %KF_BRANCH% -q https://invent.kde.org/frameworks/karchive.git
- git rev-parse HEAD
- cd karchive
- mkdir build
- cd build
- cmake .. -G "Ninja" -DBUILD_TESTING=OFF -DWITH_LIBZSTD=OFF -DWITH_BZIP2=OFF -DWITH_LIBLZMA=OFF -DWITH_OPENSSL=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX%
- cmake --build . --config Release
- cmake --build . --config Release --target install/strip
- cd %APPVEYOR_BUILD_FOLDER%
# build libexpat for libexiv2
- cd %LIBEXPAT%
- curl -fsSL -o R_2_7_3.zip https://github.com/libexpat/libexpat/archive/R_2_7_3.zip
- 7z x R_2_7_3.zip -y
- cd libexpat-R_2_7_3/expat/
- cmake -G "Ninja" . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX% -DEXPAT_BUILD_EXAMPLES=OFF -DEXPAT_BUILD_TESTS=OFF -DEXPAT_BUILD_TOOLS=OFF
- cmake --build . --target install/strip
- cd %APPVEYOR_BUILD_FOLDER%
# build libexiv2
- cd %LIBEXIV2%
- curl -fsSL -o v%EXIV2_VERSION%.zip https://github.com/Exiv2/exiv2/archive/v%EXIV2_VERSION%.zip
- 7z x v%EXIV2_VERSION%.zip -y
- cd exiv2-%EXIV2_VERSION%
- cmake -G "Ninja" . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX% %EXIV2_CMAKE_OPTIONS%
- cmake --build . --target install/strip
- cd %APPVEYOR_BUILD_FOLDER%
# install KImageFormats
- cd 3rdparty
- git clone -b %KF_BRANCH% -q https://invent.kde.org/frameworks/kimageformats.git
- git rev-parse HEAD
- cd kimageformats
- mkdir build
- cd build
- cmake .. -G "Ninja" -DBUILD_TESTING=OFF -DCMAKE_BUILD_TYPE=Release -DKDE_INSTALL_QTPLUGINDIR=%QTDIR%\plugins
- cmake --build . --config Release
- cmake --build . --config Release --target install/strip
- cd %APPVEYOR_BUILD_FOLDER%
# finally...
- mkdir build
- cd build
- cmake .. -G "Ninja" %PPIC_CMAKE_OPTIONS% -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=%CMAKE_INSTALL_PREFIX% -DCMAKE_INSTALL_PREFIX='%cd%'
- cmake --build . --config Release
- cmake --build . --config Release --target install/strip
# fixme: I don't know how to NOT make the binary installed to the ./bin/ folder...
- cd bin
- copy %APPVEYOR_BUILD_FOLDER%\LICENSE
- copy %CMAKE_INSTALL_PREFIX%\bin\libaom.dll
- copy %CMAKE_INSTALL_PREFIX%\bin\libexpat-1.dll
- copy %CMAKE_INSTALL_PREFIX%\bin\libexiv2.dll
- copy %CMAKE_INSTALL_PREFIX%\bin\libavif.dll
- copy %CMAKE_INSTALL_PREFIX%\bin\libzlib.dll
- copy %CMAKE_INSTALL_PREFIX%\bin\libKF?Archive.dll
- windeployqt %WINDEPLOYQT_ARGS% .\ppic.exe
# copy 3rdparty licenses for the libs we vendored for windows...
- mkdir licenses
- cd licenses
- copy %APPVEYOR_BUILD_FOLDER%\3rdparty\aom\LICENSE License.aom.txt
- copy %APPVEYOR_BUILD_FOLDER%\3rdparty\karchive\LICENSES\LGPL-2.0-or-later.txt License.KArchive.txt
- copy %APPVEYOR_BUILD_FOLDER%\3rdparty\kimageformats\LICENSES\LGPL-2.1-or-later.txt License.kimageformats.txt
- copy %LIBEXPAT%\libexpat-R_2_7_3\expat\COPYING License.expat.txt
- copy %LIBAVIF%\libavif-1.3.0\LICENSE License.libavif.txt
- copy %LIBEXIV2%\exiv2-%EXIV2_VERSION%\COPYING License.exiv2.txt
# TODO: Qt, zlib
- cd ..
# for debug..
- tree /f
- cd %APPVEYOR_BUILD_FOLDER%
- xcopy %CMAKE_INSTALL_PREFIX% .\cmake-prefix-copy /E /H /C /I
artifacts:
- path: build\bin
- path: cmake-prefix-copy
+1 -1
View File
@@ -6,7 +6,7 @@ BEGIN
BLOCK "040904E4" BLOCK "040904E4"
BEGIN BEGIN
VALUE "FileDescription", "Pineapple Pictures - Image Viewer" VALUE "FileDescription", "Pineapple Pictures - Image Viewer"
VALUE "LegalCopyright", "MIT/Expat License - Copyright (C) 2024 Gary Wang" VALUE "LegalCopyright", "MIT/Expat License - Copyright (C) 2026 Gary Wang"
VALUE "ProductName", "Pineapple Pictures" VALUE "ProductName", "Pineapple Pictures"
VALUE "ProductVersion", "@PROJECT_VERSION@" VALUE "ProductVersion", "@PROJECT_VERSION@"
END END
+29
View File
@@ -0,0 +1,29 @@
<center>
<p>
<img width='128' height='128' src=':/icons/app-icon.svg'/>
<br/>
<!-- Application name -->
<span>%1</span>
<br/>
<!-- Version info -->
<span>%2</span>
</p>
<hr/>
<p>
<!-- Upstream author and fork author -->
<span>%3</span><span>:&nbsp;</span><a href='https://github.com/BLumia'>@BLumia</a>
<br/>
<span>%4</span><span>:&nbsp;</span><a href='https://github.com/yyc12345'>@yyc12345</a>
<br/>
<!-- Icon author -->
<span>%5</span><span>:&nbsp;</span><a href='https://github.com/Lovelyblack'>@Lovelyblack</a>
</p>
<hr/>
<p>
<!-- Built Qt version info -->
<span>%6</span>
<br/>
<!-- Source code -->
<span>%7</span><span>:&nbsp;</span><a href='https://github.com/BLumia/pineapple-pictures'>GitHub</a>
</p>
</center>
+24
View File
@@ -0,0 +1,24 @@
<!-- General help -->
<h1 align='center'>%1</h1>
<ul>
<li>
<span>%2</span>
<ul>
<li>%3</li>
<li>%4</li>
</ul>
</li>
<li>%5</li>
<li>%6</li>
</ul>
<hr/>
<!-- Context menu option help -->
<h1 align='center'>%7</h1>
<!-- Context menu option list -->
<ul>
<li>
<b>%8</b><span>:</span>
<br/>
<span>%9</span>
</li>
</ul>
+29
View File
@@ -0,0 +1,29 @@
<!-- License -->
<h1 align='center'><b>%1</b></h1>
<p>%2</p>
<hr/>
<!-- VErbatime license -->
<h1 align='center'><b>%3</b></h1>
<pre>
Expat/MIT License
Copyright &copy; 2026 BLumia
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
</pre>
+32
View File
@@ -0,0 +1,32 @@
<!-- Contributor title -->
<h1 align='center'>%1</h1>
<!-- Contributor list -->
<a href='https://github.com/BLumia/pineapple-pictures/graphs/contributors'>%2</a>
<!-- The message to thank these contributors -->
<p>%3</p>
<!-- Translator title -->
<h1 align='center'>%4</h1>
<!-- The message to thank these translators -->
<p>%5</p>
<ul>
<li><u>Catalan</u>: Toni Estévez</li>
<li><u>Chinese (Simplified)</u>: Percy Hong</li>
<li><u>Dutch</u>: Heimen Stoffels</li>
<li><u>French</u>: J. Lavoie, K. Herbert, Maxime Leroy</li>
<li><u>German</u>: K. Herbert, J. Lavoie, sal0max</li>
<li><u>Indonesian</u>: liimee, Reza Almanda</li>
<li><u>Italian</u>: albanobattistella</li>
<li><u>Japanese</u>: Black Cat, mmahhi, Percy Hong</li>
<li><u>Korean</u>: VenusGirl</li>
<li><u>Norwegian Bokmål</u>: Allan Nordhøy, ovl-1</li>
<li><u>Punjabi (Pakistan)</u>: bgo-eiu</li>
<li><u>Russian</u>: Sergey Shornikov, Artem, Andrey</li>
<li><u>Sinhala</u>: HelaBasa</li>
<li><u>Slovenian</u>: Andrej Poženel - SDT</li>
<li><u>Spanish</u>: Toni Estévez, Génesis Toxical, William(ѕ)ⁿ, gallegonovato</li>
<li><u>Tamil</u>: தமிழ்நேரம் (TamilNeram)</li>
<li><u>Turkish</u>: E-Akcaer, Oğuz Ersen, Sabri Ünal</li>
<li><u>Ukrainian</u>: Dan, volkov, Сергій</li>
<li><u>Vietnamese</u>: Loc Huynh</li>
</ul>
+15
View File
@@ -0,0 +1,15 @@
<!-- Title -->
<h1 align='center'><b>%1</b></h1>
<!-- List intro message -->
<p>%2</p>
<p>%3</p>
<ul>
<li>
<a href='https://www.qt.io/'>Qt</a><span>: </span>
<span>GPLv2 + GPLv3 + LGPLv2.1 + LGPLv3</span>
</li>
<li style="display: none;">
<a href='https://www.exiv2.org/'>Exiv2</a><span>: </span>
<span>GPLv2</span>
</li>
</ul>
+2
View File
@@ -12,8 +12,10 @@
<li><u>Punjabi (Pakistan)</u>: bgo-eiu</li> <li><u>Punjabi (Pakistan)</u>: bgo-eiu</li>
<li><u>Russian</u>: Sergey Shornikov, Artem, Andrey</li> <li><u>Russian</u>: Sergey Shornikov, Artem, Andrey</li>
<li><u>Sinhala</u>: HelaBasa</li> <li><u>Sinhala</u>: HelaBasa</li>
<li><u>Slovenian</u>: Andrej Poženel - SDT</li>
<li><u>Spanish</u>: Toni Estévez, Génesis Toxical, William(ѕ)ⁿ, gallegonovato</li> <li><u>Spanish</u>: Toni Estévez, Génesis Toxical, William(ѕ)ⁿ, gallegonovato</li>
<li><u>Tamil</u>: தமிழ்நேரம் (TamilNeram)</li> <li><u>Tamil</u>: தமிழ்நேரம் (TamilNeram)</li>
<li><u>Turkish</u>: E-Akcaer, Oğuz Ersen, Sabri Ünal</li> <li><u>Turkish</u>: E-Akcaer, Oğuz Ersen, Sabri Ünal</li>
<li><u>Ukrainian</u>: Dan, volkov, Сергій</li> <li><u>Ukrainian</u>: Dan, volkov, Сергій</li>
<li><u>Vietnamese</u>: Loc Huynh</li>
</ul> </ul>
+5 -1
View File
@@ -10,6 +10,10 @@
<file>icons/window-close.svg</file> <file>icons/window-close.svg</file>
<file>icons/go-next.svg</file> <file>icons/go-next.svg</file>
<file>icons/go-previous.svg</file> <file>icons/go-previous.svg</file>
<file>plain/translators.html</file> <file>plain/help.html</file>
<file>plain/about.html</file>
<file>plain/special-thanks.html</file>
<file>plain/license.html</file>
<file>plain/third-party-libs.html</file>
</qresource> </qresource>
</RCC> </RCC>
@@ -4,18 +4,26 @@
<name>Pineapple Pictures</name> <name>Pineapple Pictures</name>
<name xml:lang="es">Pineapple Pictures</name> <name xml:lang="es">Pineapple Pictures</name>
<name xml:lang="ja">Pineapple Pictures</name> <name xml:lang="ja">Pineapple Pictures</name>
<name xml:lang="ko">Pineapple Pictures</name>
<name xml:lang="nl">Pineapple Afbeeldingen</name> <name xml:lang="nl">Pineapple Afbeeldingen</name>
<name xml:lang="ru">Pineapple Pictures</name> <name xml:lang="ru">Pineapple Pictures</name>
<name xml:lang="sl">Pineapple Slike</name>
<name xml:lang="ta">அன்னாசி படங்கள்</name> <name xml:lang="ta">அன்னாசி படங்கள்</name>
<name xml:lang="tr">Pineapple Resimler</name>
<name xml:lang="uk">Pineapple Pictures</name> <name xml:lang="uk">Pineapple Pictures</name>
<name xml:lang="vi">Pineapple Pictures</name>
<name xml:lang="zh-CN">菠萝看图</name> <name xml:lang="zh-CN">菠萝看图</name>
<summary>Image Viewer</summary> <summary>Image Viewer</summary>
<summary xml:lang="es">Visor de imágenes</summary> <summary xml:lang="es">Visor de imágenes</summary>
<summary xml:lang="ja">画像ビューアー</summary> <summary xml:lang="ja">画像ビューアー</summary>
<summary xml:lang="ko">이미지 뷰어</summary>
<summary xml:lang="nl">Afbeeldingsweergave</summary> <summary xml:lang="nl">Afbeeldingsweergave</summary>
<summary xml:lang="ru">Просмотр изображений</summary> <summary xml:lang="ru">Просмотр изображений</summary>
<summary xml:lang="sl">Pregledovalnik slik</summary>
<summary xml:lang="ta">பட பார்வையாளர்</summary> <summary xml:lang="ta">பட பார்வையாளர்</summary>
<summary xml:lang="tr">Resim Görüntüleyici</summary>
<summary xml:lang="uk">Переглядач зображень</summary> <summary xml:lang="uk">Переглядач зображень</summary>
<summary xml:lang="vi">Trình xem ảnh</summary>
<summary xml:lang="zh-CN">图像查看器</summary> <summary xml:lang="zh-CN">图像查看器</summary>
<metadata_license>CC0-1.0</metadata_license> <metadata_license>CC0-1.0</metadata_license>
<project_license>MIT</project_license> <project_license>MIT</project_license>
@@ -23,10 +31,13 @@
<p>Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support.</p> <p>Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support.</p>
<p xml:lang="es">Pineapple Pictures es un visor de imágenes ligero y fácil de usar que viene con una práctica miniatura de navegación al hacer zoom, y no contiene ningún soporte de gestión de imágenes.</p> <p xml:lang="es">Pineapple Pictures es un visor de imágenes ligero y fácil de usar que viene con una práctica miniatura de navegación al hacer zoom, y no contiene ningún soporte de gestión de imágenes.</p>
<p xml:lang="ja">Pineapple Picturesは、ズームイン時に便利なナビゲーションサムネイルを備えた軽量で使いやすい画像ビューアです。画像管理のサポートは含まれていません。</p> <p xml:lang="ja">Pineapple Picturesは、ズームイン時に便利なナビゲーションサムネイルを備えた軽量で使いやすい画像ビューアです。画像管理のサポートは含まれていません。</p>
<p xml:lang="ko">Pineapple Pictures는 가볍고 사용하기 쉬운 이미지 뷰어로, 확대 시 편리한 내비게이션 썸네일과 함께 제공되며 이미지 관리 지원이 포함되어 있지 않습니다.</p>
<p xml:lang="nl">Pineapple Afbeeldingen is een licht en eenvoudig te gebruiken afbeeldingsweergaveprogramma met miniatuurnavigatie na inzoomen. Het programma heeft echter geen fotobeheermogelijkheid.</p> <p xml:lang="nl">Pineapple Afbeeldingen is een licht en eenvoudig te gebruiken afbeeldingsweergaveprogramma met miniatuurnavigatie na inzoomen. Het programma heeft echter geen fotobeheermogelijkheid.</p>
<p xml:lang="ru">Pineapple Pictures - это легкий и простой в использовании просмотрщик изображений, оснащенный удобной навигацией по миниатюрам при увеличении масштаба и не содержащий никакой поддержки управления изображениями.</p> <p xml:lang="ru">Pineapple Pictures - это легкий и простой в использовании просмотрщик изображений, оснащенный удобной навигацией по миниатюрам при увеличении масштаба и не содержащий никакой поддержки управления изображениями.</p>
<p xml:lang="sl">Pineapple Pictures je lahek in enostaven pregledovalnik slik, ki ima pri povečavi priročno sličico za navigacijo in ne vsebuje nobene podpore za upravljanje slik.</p>
<p xml:lang="ta">அன்னாசி படங்கள் ஒரு இலகுரக மற்றும் பயன்படுத்த எளிதான பட பார்வையாளராகும், இது பெரிதாக்கும்போது ஒரு எளிமையான வழிசெலுத்தல் சிறுபடத்துடன் வருகிறது, மேலும் எந்த பட மேலாண்மை ஆதரவையும் கொண்டிருக்கவில்லை.</p> <p xml:lang="ta">அன்னாசி படங்கள் ஒரு இலகுரக மற்றும் பயன்படுத்த எளிதான பட பார்வையாளராகும், இது பெரிதாக்கும்போது ஒரு எளிமையான வழிசெலுத்தல் சிறுபடத்துடன் வருகிறது, மேலும் எந்த பட மேலாண்மை ஆதரவையும் கொண்டிருக்கவில்லை.</p>
<p xml:lang="uk">Pineapple Pictures це легкий і простий у використанні переглядач зображень, який постачається зі зручною навігаційною мініатюрою при збільшенні масштабу і не містить жодної підтримки керування зображеннями.</p> <p xml:lang="uk">Pineapple Pictures це легкий і простий у використанні переглядач зображень, який постачається зі зручною навігаційною мініатюрою при збільшенні масштабу і не містить жодної підтримки керування зображеннями.</p>
<p xml:lang="vi">Pineapple Pictures là trình xem hình ảnh nhẹ và dễ sử dụng, đi kèm với hình thu nhỏ điều hướng tiện dụng khi phóng to và không chứa bất kỳ hỗ trợ quản lý hình ảnh nào.</p>
<p xml:lang="zh-CN">菠萝看图是一个轻量级易用的图像查看器,在图片放大时提供了方便的鸟瞰导航功能,且不包含任何图片管理功能。</p> <p xml:lang="zh-CN">菠萝看图是一个轻量级易用的图像查看器,在图片放大时提供了方便的鸟瞰导航功能,且不包含任何图片管理功能。</p>
</description> </description>
<developer id="net.blumia"> <developer id="net.blumia">
@@ -42,6 +53,7 @@
<url type="bugtracker">https://github.com/BLumia/pineapple-pictures/issues</url> <url type="bugtracker">https://github.com/BLumia/pineapple-pictures/issues</url>
<url type="donation">https://ko-fi.com/blumia</url> <url type="donation">https://ko-fi.com/blumia</url>
<url type="translate">https://hosted.weblate.org/projects/pineapple-pictures/</url> <url type="translate">https://hosted.weblate.org/projects/pineapple-pictures/</url>
<url type="vcs-browser">https://github.com/BLumia/pineapple-pictures</url>
<provides> <provides>
<binary>ppic</binary> <binary>ppic</binary>
</provides> </provides>
@@ -50,10 +62,13 @@
<caption>Main window when an image file is loaded</caption> <caption>Main window when an image file is loaded</caption>
<caption xml:lang="es">Ventana principal cuando se carga un archivo de imagen</caption> <caption xml:lang="es">Ventana principal cuando se carga un archivo de imagen</caption>
<caption xml:lang="ja">画像ファイル読み込み時のメインウィンドウ</caption> <caption xml:lang="ja">画像ファイル読み込み時のメインウィンドウ</caption>
<caption xml:lang="ko">이미지 파일이 로드될 때 기본 창</caption>
<caption xml:lang="nl">Hoofdvenster na het laden van een afbeelding</caption> <caption xml:lang="nl">Hoofdvenster na het laden van een afbeelding</caption>
<caption xml:lang="ru">Основное окно после загрузки файла изображения</caption> <caption xml:lang="ru">Основное окно после загрузки файла изображения</caption>
<caption xml:lang="sl">Glavno okno ob nalaganju slikovne datoteke</caption>
<caption xml:lang="ta">ஒரு படக் கோப்பு ஏற்றப்படும் போது முதன்மையான சாளரம்</caption> <caption xml:lang="ta">ஒரு படக் கோப்பு ஏற்றப்படும் போது முதன்மையான சாளரம்</caption>
<caption xml:lang="uk">Головне вікно після завантаження файлу зображення</caption> <caption xml:lang="uk">Головне вікно після завантаження файлу зображення</caption>
<caption xml:lang="vi">Cửa sổ chính khi tải tệp hình ảnh</caption>
<caption xml:lang="zh-CN">加载图片后的主窗口</caption> <caption xml:lang="zh-CN">加载图片后的主窗口</caption>
<image type="source" width="1503" height="640">https://pineapple-pictures.sourceforge.io/ppic-gui-static.png</image> <image type="source" width="1503" height="640">https://pineapple-pictures.sourceforge.io/ppic-gui-static.png</image>
</screenshot> </screenshot>
@@ -61,10 +76,13 @@
<caption>Zooming in a raster image</caption> <caption>Zooming in a raster image</caption>
<caption xml:lang="es">Ampliar una imagen rasterizada</caption> <caption xml:lang="es">Ampliar una imagen rasterizada</caption>
<caption xml:lang="ja">ラスター画像の拡大</caption> <caption xml:lang="ja">ラスター画像の拡大</caption>
<caption xml:lang="ko">래스터 이미지 확대하기</caption>
<caption xml:lang="nl">Inzoomen op een roosterafbeelding</caption> <caption xml:lang="nl">Inzoomen op een roosterafbeelding</caption>
<caption xml:lang="ru">Масштабирование растрового изображения</caption> <caption xml:lang="ru">Масштабирование растрового изображения</caption>
<caption xml:lang="sl">Povečevanje rastrske slike</caption>
<caption xml:lang="ta">ராச்டர் படத்தில் பெரிதாக்குதல்</caption> <caption xml:lang="ta">ராச்டர் படத்தில் பெரிதாக்குதல்</caption>
<caption xml:lang="uk">Масштабування растрового зображення</caption> <caption xml:lang="uk">Масштабування растрового зображення</caption>
<caption xml:lang="vi">Phóng to hình ảnh raster</caption>
<caption xml:lang="zh-CN">放大浏览位图</caption> <caption xml:lang="zh-CN">放大浏览位图</caption>
<image type="source" width="771" height="553">https://pineapple-pictures.sourceforge.io/ppic-zoom-raster.png</image> <image type="source" width="771" height="553">https://pineapple-pictures.sourceforge.io/ppic-zoom-raster.png</image>
</screenshot> </screenshot>
@@ -72,15 +90,66 @@
<caption>Zooming in a vector image</caption> <caption>Zooming in a vector image</caption>
<caption xml:lang="es">Ampliar una imagen vectorial</caption> <caption xml:lang="es">Ampliar una imagen vectorial</caption>
<caption xml:lang="ja">ベクター画像の拡大</caption> <caption xml:lang="ja">ベクター画像の拡大</caption>
<caption xml:lang="ko">벡터 이미지 확대하기</caption>
<caption xml:lang="nl">Inzoomen op een vectorafbeelding</caption> <caption xml:lang="nl">Inzoomen op een vectorafbeelding</caption>
<caption xml:lang="ru">Масштабирование векторного изображения</caption> <caption xml:lang="ru">Масштабирование векторного изображения</caption>
<caption xml:lang="sl">Povečevanje vektorske slike</caption>
<caption xml:lang="ta">ஒரு திசையன் படத்தில் பெரிதாக்குதல்</caption> <caption xml:lang="ta">ஒரு திசையன் படத்தில் பெரிதாக்குதல்</caption>
<caption xml:lang="uk">Масштабування векторного зображення</caption> <caption xml:lang="uk">Масштабування векторного зображення</caption>
<caption xml:lang="vi">Phóng to hình ảnh vector</caption>
<caption xml:lang="zh-CN">放大浏览矢量图</caption> <caption xml:lang="zh-CN">放大浏览矢量图</caption>
<image type="source" width="771" height="553">https://pineapple-pictures.sourceforge.io/ppic-zoom-svg.png</image> <image type="source" width="771" height="553">https://pineapple-pictures.sourceforge.io/ppic-zoom-svg.png</image>
</screenshot> </screenshot>
</screenshots> </screenshots>
<releases> <releases>
<release type="stable" version="1.5.0" date="2026-07-04T00:00:00Z">
<description>
<p>This release adds the following features:</p>
<ul>
<li>Introduced an optional titlebar that display file name and allows drag and double-click to move and toggle maximize state</li>
<li>Windows: Now the application will use the system's built-in animation for open window animation</li>
</ul>
<p>This release fixes the following bug:</p>
<ul>
<li>Show empty url list should also reset window title to blank</li>
</ul>
<p>This release includes the following changes:</p>
<ul>
<li>Update translations</li>
<li>Add vcs-browser link to AppStream metadata</li>
</ul>
<p>With contributions from:</p>
<p>Heimen Stoffels (vistaus), VenusGirl (VenusGirl)</p>
</description>
</release>
<release type="stable" version="1.4.1" date="2026-04-05T00:00:00Z">
<description>
<p>This release includes the following changes:</p>
<ul>
<li>Update translations</li>
<li>Update Qt version to 6.10.3 for Windows and macOS pre-built binaries</li>
</ul>
<p>With contributions from:</p>
<p>Heimen Stoffels (vistaus), Loc Huynh (hthienloc)</p>
</description>
</release>
<release type="stable" version="1.4.0" date="2026-02-11T00:00:00Z">
<description>
<p>This release adds the following features:</p>
<ul>
<li>Action to save image as new file with different format</li>
<li>Add Vietnamese and Slovenian translation</li>
</ul>
<p>This release includes the following changes:</p>
<ul>
<li>Update copyright year to 2026</li>
<li>Update translations</li>
<li>Update Qt version to 6.10.2 for Windows and macOS pre-built binaries</li>
</ul>
<p>With contributions from:</p>
<p>Loc Huynh, Sabri Ünal, VenusGirl, Andrej Poženel, Andrey</p>
</description>
</release>
<release type="stable" version="1.3.0" date="2025-12-20T00:00:00Z"> <release type="stable" version="1.3.0" date="2025-12-20T00:00:00Z">
<description> <description>
<p>This release adds the following features:</p> <p>This release adds the following features:</p>
@@ -2,16 +2,16 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2023-08-22 18:49中国标准时间\n" "POT-Creation-Date: 2023-08-22 18:49中国标准时间\n"
"PO-Revision-Date: 2025-11-30 14:00+0000\n" "PO-Revision-Date: 2025-12-27 02:00+0000\n"
"Last-Translator: VenusGirl <VenusGirl@outlook.com>\n" "Last-Translator: Gary Wang <wzc782970009@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/" "Language-Team: Korean <https://hosted.weblate.org/projects/pineapple-"
"pineapple-pictures/appstream-metadata/ko/>\n" "pictures/appstream-metadata/ko/>\n"
"Language: ko\n" "Language: ko\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.15-dev\n" "X-Generator: Weblate 5.15.1\n"
#. (itstool) path: component/name #. (itstool) path: component/name
#: net.blumia.pineapple-pictures.metainfo.xml:7 #: net.blumia.pineapple-pictures.metainfo.xml:7
@@ -48,4 +48,4 @@ msgstr "벡터 이미지 확대하기"
#. (itstool) path: component/developer_name #. (itstool) path: component/developer_name
#: net.blumia.pineapple-pictures.metainfo.xml:34 #: net.blumia.pineapple-pictures.metainfo.xml:34
msgid "Gary (BLumia) Wang et al." msgid "Gary (BLumia) Wang et al."
msgstr "" msgstr "Gary (BLumia) Wang 외"
@@ -0,0 +1,53 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2023-08-22 18:49中国标准时间\n"
"PO-Revision-Date: 2026-01-25 01:53+0000\n"
"Last-Translator: Andrej Poženel - SDT <anderlli0053@live.com>\n"
"Language-Team: Slovenian <https://hosted.weblate.org/projects/pineapple-"
"pictures/appstream-metadata/sl/>\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
"n%100==4 ? 2 : 3;\n"
"X-Generator: Weblate 5.16-dev\n"
#. (itstool) path: component/name
#: net.blumia.pineapple-pictures.metainfo.xml:7
msgid "Pineapple Pictures"
msgstr "Pineapple Slike"
#. (itstool) path: component/summary
#: net.blumia.pineapple-pictures.metainfo.xml:9
msgid "Image Viewer"
msgstr "Pregledovalnik slik"
#. (itstool) path: description/p
#: net.blumia.pineapple-pictures.metainfo.xml:12
msgid "Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support."
msgstr ""
"Pineapple Pictures je lahek in enostaven pregledovalnik slik, ki ima pri "
"povečavi priročno sličico za navigacijo in ne vsebuje nobene podpore za "
"upravljanje slik."
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:17
msgid "Main window when an image file is loaded"
msgstr "Glavno okno ob nalaganju slikovne datoteke"
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:22
msgid "Zooming in a raster image"
msgstr "Povečevanje rastrske slike"
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:27
msgid "Zooming in a vector image"
msgstr "Povečevanje vektorske slike"
#. (itstool) path: component/developer_name
#: net.blumia.pineapple-pictures.metainfo.xml:34
msgid "Gary (BLumia) Wang et al."
msgstr "Gary (BLumia) Wang et al."
@@ -2,24 +2,26 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2023-08-22 18:49中国标准时间\n" "POT-Creation-Date: 2023-08-22 18:49中国标准时间\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: 2025-12-20 20:00+0000\n"
"Last-Translator: Automatically generated\n" "Last-Translator: Sabri Ünal <yakushabb@gmail.com>\n"
"Language-Team: none\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/pineapple-"
"pictures/appstream-metadata/tr/>\n"
"Language: tr\n" "Language: tr\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.15.1\n"
#. (itstool) path: component/name #. (itstool) path: component/name
#: net.blumia.pineapple-pictures.metainfo.xml:7 #: net.blumia.pineapple-pictures.metainfo.xml:7
msgid "Pineapple Pictures" msgid "Pineapple Pictures"
msgstr "" msgstr "Pineapple Resimler"
#. (itstool) path: component/summary #. (itstool) path: component/summary
#: net.blumia.pineapple-pictures.metainfo.xml:9 #: net.blumia.pineapple-pictures.metainfo.xml:9
msgid "Image Viewer" msgid "Image Viewer"
msgstr "" msgstr "Resim Görüntüleyici"
#. (itstool) path: description/p #. (itstool) path: description/p
#: net.blumia.pineapple-pictures.metainfo.xml:12 #: net.blumia.pineapple-pictures.metainfo.xml:12
@@ -44,4 +46,4 @@ msgstr ""
#. (itstool) path: component/developer_name #. (itstool) path: component/developer_name
#: net.blumia.pineapple-pictures.metainfo.xml:34 #: net.blumia.pineapple-pictures.metainfo.xml:34
msgid "Gary (BLumia) Wang et al." msgid "Gary (BLumia) Wang et al."
msgstr "" msgstr "Gary (BLumia) Wang et al."
@@ -0,0 +1,52 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2023-08-22 18:49中国标准时间\n"
"PO-Revision-Date: 2025-12-25 17:00+0000\n"
"Last-Translator: Loc Huynh <huynhloc.contact@gmail.com>\n"
"Language-Team: Vietnamese <https://hosted.weblate.org/projects/pineapple-"
"pictures/appstream-metadata/vi/>\n"
"Language: vi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.15.1\n"
#. (itstool) path: component/name
#: net.blumia.pineapple-pictures.metainfo.xml:7
msgid "Pineapple Pictures"
msgstr "Pineapple Pictures"
#. (itstool) path: component/summary
#: net.blumia.pineapple-pictures.metainfo.xml:9
msgid "Image Viewer"
msgstr "Trình xem ảnh"
#. (itstool) path: description/p
#: net.blumia.pineapple-pictures.metainfo.xml:12
msgid "Pineapple Pictures is a lightweight and easy-to-use image viewer that comes with a handy navigation thumbnail when zoom-in, and doesn't contain any image management support."
msgstr ""
"Pineapple Pictures là trình xem hình ảnh nhẹ và dễ sử dụng, đi kèm với hình "
"thu nhỏ điều hướng tiện dụng khi phóng to và không chứa bất kỳ hỗ trợ quản "
"lý hình ảnh nào."
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:17
msgid "Main window when an image file is loaded"
msgstr "Cửa sổ chính khi tải tệp hình ảnh"
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:22
msgid "Zooming in a raster image"
msgstr "Phóng to hình ảnh raster"
#. (itstool) path: screenshot/caption
#: net.blumia.pineapple-pictures.metainfo.xml:27
msgid "Zooming in a vector image"
msgstr "Phóng to hình ảnh vector"
#. (itstool) path: component/developer_name
#: net.blumia.pineapple-pictures.metainfo.xml:34
msgid "Gary (BLumia) Wang et al."
msgstr "Gary (BLumia) Wang et al."
-118
View File
@@ -1,118 +0,0 @@
targetApp=ppic.exe
friendlyAppName=Pineapple Pictures
friendlyAppName[zh_CN]=菠萝看图
openCommand="\"{targetAppFullPath}\" \"%1\""
[ProgId/jpeg]
name=JPEG Image
name[zh_CN]=JPEG 图像
extensions=jpg,jpeg,jfif
[ProgId/gif]
name=GIF Animation Image
name[zh_CN]=GIF 动图
[ProgId/png]
name=PNG Image
name[zh_CN]=PNG 图像
[ProgId/svg]
name=Scalable Vector Graphics
name[zh_CN]=可缩放矢量图像
[ProgId/webp]
name=WebP Image
name[zh_CN]=WebP 图像
extensions=webp
[ProgId/avif]
name=AV1 Image File
name[zh_CN]=AV1 图像文件
[ProgId/ico]
name=Windows Icon Image
name[zh_CN]=Windows 图标图像
[ProgId/icns]
name=Apple Icon Image
name[zh_CN]=苹果图标图像
[ProgId/psd]
name=Photoshop Document
name[zh_CN]=Photoshop 文档
extensions=psd,psb,pdd,psdt
[ProgId/kra]
name=Krita Document
name[zh_CN]=Krita 文档
[ProgId/xcf]
name=GIMP Document
name[zh_CN]=GIMP 文档
[ProgId/tga]
name=TARGA Image
name[zh_CN]=TARGA 图像
[ProgId/tif]
name=Tagged Image File Format
name[zh_CN]=标签图像文件格式
extensions=tif,tiff
[ProgId/bmp]
name=Bitmap
name[zh_CN]=位图
[ProgId/wbmp]
name=Wireless Bitmap
name[zh_CN]=无线位图
[ProgId/dds]
name=DirectDraw Surface
[ProgId/hdr]
name=High Dynamic Range Image
name[zh_CN]=高动态范围图像
[ProgId/iff]
name=Interchange File Format
name[zh_CN]=可交换文件格式
[ProgId/pic]
name=Softimage Picture
name[zh_CN]=Softimage 图像
[ProgId/pcx]
name=PiCture eXchange PC Paintbrush Image
name[zh_CN]=PC Paintbrush 图像
[ProgId/qoi]
name=Quite OK Image
name[zh_CN]=挺 OK 图像
[ProgId/ras]
name=Sun Raster Image
name[zh_CN]=Sun 栅格图象
extensions=ras,sun
[ProgId/ora]
name=OpenRaster Image
name[zh_CN]=OpenRaster 图象
[ProgId/ani]
name=Animated Cursor
name[zh_CN]=动态光标
[ProgId/pfm]
name=Portable Float Map
extensions=pfm,phm
[ProgId/rgb]
name=Silicon Graphics Image
extensions=rgb,rgba,bw,sgi
[ProgId/pxr]
name=Pixar Raster Image
[ProgId/sct]
name=Scitex Continuous Tone
-101
View File
@@ -1,101 +0,0 @@
# SPDX-FileCopyrightText: 2025 Gary Wang <git@blumia.net>
#
# SPDX-License-Identifier: MIT
QT += core widgets gui svg svgwidgets
TARGET = ppic
TEMPLATE = app
DEFINES += PPIC_VERSION_STRING=\\\"x.y.z\\\"
win32 {
DEFINES += FLAG_PORTABLE_MODE_SUPPORT=1
}
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
CONFIG += c++17 lrelease embed_translations
SOURCES += \
app/aboutdialog.cpp \
app/main.cpp \
app/framelesswindow.cpp \
app/mainwindow.cpp \
app/graphicsview.cpp \
app/bottombuttongroup.cpp \
app/graphicsscene.cpp \
app/navigatorview.cpp \
app/opacityhelper.cpp \
app/toolbutton.cpp \
app/settings.cpp \
app/settingsdialog.cpp \
app/metadatamodel.cpp \
app/metadatadialog.cpp \
app/exiv2wrapper.cpp \
app/actionmanager.cpp \
app/playlistmanager.cpp \
app/shortcutedit.cpp \
app/fileopeneventhandler.cpp
HEADERS += \
app/aboutdialog.h \
app/framelesswindow.h \
app/mainwindow.h \
app/graphicsview.h \
app/bottombuttongroup.h \
app/graphicsscene.h \
app/navigatorview.h \
app/opacityhelper.h \
app/toolbutton.h \
app/settings.h \
app/settingsdialog.h \
app/metadatamodel.h \
app/metadatadialog.h \
app/exiv2wrapper.h \
app/actionmanager.h \
app/playlistmanager.h \
app/shortcutedit.h \
app/fileopeneventhandler.h
TRANSLATIONS = \
app/translations/PineapplePictures_en.ts \
app/translations/PineapplePictures_zh_CN.ts \
app/translations/PineapplePictures_de.ts \
app/translations/PineapplePictures_es.ts \
app/translations/PineapplePictures_fr.ts \
app/translations/PineapplePictures_nb_NO.ts \
app/translations/PineapplePictures_nl.ts \
app/translations/PineapplePictures_ru.ts \
app/translations/PineapplePictures_si.ts \
app/translations/PineapplePictures_id.ts
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
RESOURCES += \
assets/resources.qrc
# Generate from svg:
# magick -density 512x512 -background none app-icon.svg -define icon:auto-resize app-icon.ico
RC_ICONS = assets/icons/app-icon.ico
# Windows only, for rc file (we're not going to use the .rc file in this repo)
QMAKE_TARGET_PRODUCT = Pineapple Pictures
QMAKE_TARGET_DESCRIPTION = Pineapple Pictures - Image Viewer
QMAKE_TARGET_COPYRIGHT = MIT/Expat License - Copyright (C) 2024 Gary Wang
# MSVC only, since QMake doesn't have a CMAKE_CXX_STANDARD_LIBRARIES or cpp_winlibs similar thing
win32-msvc* {
LIBS += -luser32
}