Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe56bfaf73 | ||
|
|
769fe378e8 | ||
|
|
54a1c8542f |
@@ -0,0 +1,2 @@
|
|||||||
|
ko_fi: blumia
|
||||||
|
custom: ["https://blumia.itch.io/pineapple-pictures"]
|
||||||
@@ -9,16 +9,10 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
- name: Install uv
|
|
||||||
uses: astral-sh/setup-uv@v6
|
|
||||||
with:
|
|
||||||
enable-cache: true
|
|
||||||
- name: Install MetaGlot
|
|
||||||
run: uv tool install git+https://github.com/SarasasChipWorkshop/metaglot.git
|
|
||||||
- name: Install Qt
|
- name: Install Qt
|
||||||
uses: jurplel/install-qt-action@v4
|
uses: jurplel/install-qt-action@v4
|
||||||
with:
|
with:
|
||||||
version: '6.11.2'
|
version: '6.10.3'
|
||||||
modules: 'qtimageformats'
|
modules: 'qtimageformats'
|
||||||
cache: true
|
cache: true
|
||||||
- name: Install Conan and Dependencies
|
- name: Install Conan and Dependencies
|
||||||
|
|||||||
@@ -7,12 +7,6 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
- name: Install uv
|
|
||||||
uses: astral-sh/setup-uv@v6
|
|
||||||
with:
|
|
||||||
enable-cache: true
|
|
||||||
- name: Install MetaGlot
|
|
||||||
run: uv tool install git+https://github.com/SarasasChipWorkshop/metaglot.git
|
|
||||||
- name: Get build dept.
|
- name: Get build dept.
|
||||||
run: |
|
run: |
|
||||||
sudo apt update
|
sudo apt update
|
||||||
@@ -32,33 +26,3 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: ubuntu-24.04-deb-package
|
name: ubuntu-24.04-deb-package
|
||||||
path: build/*.deb
|
path: build/*.deb
|
||||||
|
|
||||||
ubuntu-26-04-build:
|
|
||||||
runs-on: ubuntu-26.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- name: Install uv
|
|
||||||
uses: astral-sh/setup-uv@v6
|
|
||||||
with:
|
|
||||||
enable-cache: true
|
|
||||||
- name: Install MetaGlot
|
|
||||||
run: uv tool install git+https://github.com/SarasasChipWorkshop/metaglot.git
|
|
||||||
- name: Get build dept.
|
|
||||||
run: |
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install cmake qt6-base-dev qt6-svg-dev qt6-tools-dev libexiv2-dev
|
|
||||||
- name: Build it
|
|
||||||
run: |
|
|
||||||
mkdir build
|
|
||||||
cd build
|
|
||||||
cmake ../
|
|
||||||
make
|
|
||||||
cpack -G DEB
|
|
||||||
- name: Try install it
|
|
||||||
run: |
|
|
||||||
cd build
|
|
||||||
sudo apt install ./*.deb
|
|
||||||
- uses: actions/upload-artifact@v6
|
|
||||||
with:
|
|
||||||
name: ubuntu-26.04-deb-package
|
|
||||||
path: build/*.deb
|
|
||||||
|
|||||||
@@ -3,12 +3,49 @@ name: Windows CI
|
|||||||
on: [push, pull_request, workflow_dispatch]
|
on: [push, pull_request, workflow_dispatch]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
msvc-cmake-build:
|
msvc-qmake-build:
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- qt_ver: '6.11.2'
|
- qt_ver: '6.10.3'
|
||||||
|
vs: '2022'
|
||||||
|
aqt_arch: 'win64_msvc2022_64'
|
||||||
|
msvc_arch: 'x64'
|
||||||
|
|
||||||
|
runs-on: windows-2022
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
- name: Install Qt
|
||||||
|
uses: jurplel/install-qt-action@v4
|
||||||
|
with:
|
||||||
|
arch: ${{ matrix.aqt_arch }}
|
||||||
|
version: ${{ matrix.qt_ver }}
|
||||||
|
modules: 'qtimageformats'
|
||||||
|
cache: true
|
||||||
|
- name: Build
|
||||||
|
shell: cmd
|
||||||
|
run: |
|
||||||
|
set VS=${{ matrix.vs }}
|
||||||
|
set VCVARS="C:\Program Files (x86)\Microsoft Visual Studio\%VS%\Enterprise\VC\Auxiliary\Build\vcvarsall.bat"
|
||||||
|
if not exist %VCVARS% set VCVARS="C:\Program Files\Microsoft Visual Studio\%VS%\Enterprise\VC\Auxiliary\Build\vcvarsall.bat"
|
||||||
|
call %VCVARS% ${{ matrix.msvc_arch }}
|
||||||
|
qmake pineapple-pictures.pro
|
||||||
|
nmake
|
||||||
|
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
|
||||||
|
- uses: actions/upload-artifact@v6
|
||||||
|
with:
|
||||||
|
name: "windows-msvc${{ matrix.vs }}-qt${{ matrix.qt_ver }}-qmake-package"
|
||||||
|
path: release/*
|
||||||
|
|
||||||
|
msvc-cmake-build:
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- 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'
|
||||||
@@ -17,12 +54,6 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
- name: Install uv
|
|
||||||
uses: astral-sh/setup-uv@v6
|
|
||||||
with:
|
|
||||||
enable-cache: true
|
|
||||||
- name: Install MetaGlot
|
|
||||||
run: uv tool install git+https://github.com/SarasasChipWorkshop/metaglot.git
|
|
||||||
- name: Install Qt
|
- name: Install Qt
|
||||||
uses: jurplel/install-qt-action@v4
|
uses: jurplel/install-qt-action@v4
|
||||||
with:
|
with:
|
||||||
@@ -30,8 +61,6 @@ jobs:
|
|||||||
version: ${{ matrix.qt_ver }}
|
version: ${{ matrix.qt_ver }}
|
||||||
modules: 'qtimageformats'
|
modules: 'qtimageformats'
|
||||||
cache: true
|
cache: true
|
||||||
# we need this until miurahr/aqtinstall#1007 ships 3.3.1 for Qt >= 6.11.0 for Windows.
|
|
||||||
aqtsource: 'aqtinstall @ git+https://github.com/miurahr/aqtinstall@16db45a70b5905ad596941b223469bc86a56901a'
|
|
||||||
- name: Build
|
- name: Build
|
||||||
shell: cmd
|
shell: cmd
|
||||||
run: |
|
run: |
|
||||||
@@ -65,7 +94,7 @@ jobs:
|
|||||||
curl -fsSL -o libavif-v1_3_0.zip https://github.com/AOMediaCodec/libavif/archive/v1.3.0.zip
|
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 -o"dependencies_src"
|
7z x libavif-v1_3_0.zip -y -o"dependencies_src"
|
||||||
ren .\dependencies_src\libavif-1.3.0 libavif || goto :error
|
ren .\dependencies_src\libavif-1.3.0 libavif || goto :error
|
||||||
cmake ./dependencies_src/libavif -Bbuild_dependencies/libavif -DCMAKE_INSTALL_PREFIX="dependencies_bin" -DAVIF_CODEC_AOM=SYSTEM -DAVIF_CODEC_AOM_DECODE=ON -DAVIF_CODEC_AOM_ENCODE=ON -DAVIF_LIBYUV=LOCAL || goto :error
|
cmake ./dependencies_src/libavif -Bbuild_dependencies/libavif -DCMAKE_INSTALL_PREFIX="dependencies_bin" -DAVIF_CODEC_AOM=SYSTEM -DAVIF_CODEC_AOM_DECODE=ON -DAVIF_CODEC_AOM_ENCODE=ON -DAVIF_LIBYUV=LOCAL
|
||||||
cmake --build build_dependencies/libavif --config Release --target=install || goto :error
|
cmake --build build_dependencies/libavif --config Release --target=install || goto :error
|
||||||
echo ::endgroup::
|
echo ::endgroup::
|
||||||
echo ::group::===== expat =====
|
echo ::group::===== expat =====
|
||||||
@@ -92,23 +121,17 @@ jobs:
|
|||||||
echo ::endgroup::
|
echo ::endgroup::
|
||||||
:: ------ app ------
|
:: ------ app ------
|
||||||
echo ::group::===== App (Build'n'Install) =====
|
echo ::group::===== App (Build'n'Install) =====
|
||||||
cmake -Bbuild . || goto :error
|
cmake -Bbuild .
|
||||||
cmake --build build --config Release || goto :error
|
cmake --build build --config Release
|
||||||
cmake --install build --config Release --prefix "%PWD%\build" || goto :error
|
cmake --install build --config Release --prefix "%PWD%\build"
|
||||||
echo ::endgroup::
|
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 goto :error
|
if ErrorLevel 8 (exit /B 1)
|
||||||
copy LICENSE build\bin
|
copy LICENSE build\bin
|
||||||
copy build\inno-metadata\ppic.iss build\bin\ppic.iss
|
|
||||||
robocopy build\inno-metadata\Strings build\bin\Strings
|
|
||||||
if ErrorLevel 8 goto :error
|
|
||||||
iscc /Q build\bin\ppic.iss || goto :error
|
|
||||||
exit /B 0
|
exit /B 0
|
||||||
:error
|
|
||||||
exit /B 1
|
|
||||||
- uses: actions/upload-artifact@v6
|
- uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: "ppic-windows-msvc${{ matrix.vs }}-qt${{ matrix.qt_ver }}-cmake-setup"
|
name: "windows-msvc${{ matrix.vs }}-qt${{ matrix.qt_ver }}-cmake-package"
|
||||||
path: build/bin/ppic-setup.exe
|
path: build/bin/*
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
project(pineapple-pictures VERSION 1.6.0) # don't forget to update NEWS file and AppStream metadata.
|
project(pineapple-pictures VERSION 1.4.1) # don't forget to update NEWS file and AppStream metadata.
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
include(FeatureSummary)
|
include(FeatureSummary)
|
||||||
@@ -16,11 +16,10 @@ 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)
|
||||||
|
|
||||||
set (QT_MINIMUM_VERSION "6.5")
|
set (QT_MINIMUM_VERSION "6.4")
|
||||||
|
|
||||||
find_package(Qt${QT_VERSION_MAJOR} ${QT_MINIMUM_VERSION} REQUIRED
|
find_package(Qt${QT_VERSION_MAJOR} ${QT_MINIMUM_VERSION} REQUIRED
|
||||||
COMPONENTS Widgets Svg SvgWidgets LinguistTools
|
COMPONENTS Widgets Svg SvgWidgets LinguistTools
|
||||||
@@ -39,12 +38,15 @@ endif ()
|
|||||||
|
|
||||||
set (PPIC_CPP_FILES
|
set (PPIC_CPP_FILES
|
||||||
app/main.cpp
|
app/main.cpp
|
||||||
|
app/framelesswindow.cpp
|
||||||
app/mainwindow.cpp
|
app/mainwindow.cpp
|
||||||
app/actionmanager.cpp
|
app/actionmanager.cpp
|
||||||
app/graphicsview.cpp
|
app/graphicsview.cpp
|
||||||
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
|
||||||
@@ -52,19 +54,20 @@ 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
|
||||||
app/playlistscout.cpp
|
|
||||||
app/playlistscouts/qtscout.cpp
|
|
||||||
app/playlistscouts/explorerscout.cpp
|
|
||||||
)
|
)
|
||||||
|
|
||||||
set (PPIC_HEADER_FILES
|
set (PPIC_HEADER_FILES
|
||||||
|
app/framelesswindow.h
|
||||||
app/mainwindow.h
|
app/mainwindow.h
|
||||||
app/actionmanager.h
|
app/actionmanager.h
|
||||||
app/graphicsview.h
|
app/graphicsview.h
|
||||||
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
|
||||||
@@ -72,17 +75,8 @@ 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
|
||||||
app/playlistscout.h
|
|
||||||
app/playlistscouts/qtscout.h
|
|
||||||
app/playlistscouts/explorerscout.h
|
|
||||||
)
|
|
||||||
|
|
||||||
set (PPIC_UI_FILES
|
|
||||||
app/settingsdialog.ui
|
|
||||||
app/aboutdialog.ui
|
|
||||||
app/metadatadialog.ui
|
|
||||||
app/mainwindow.ui
|
|
||||||
)
|
)
|
||||||
|
|
||||||
set (PPIC_QRC_FILES
|
set (PPIC_QRC_FILES
|
||||||
@@ -96,37 +90,17 @@ set (PPIC_RC_FILES
|
|||||||
set (EXE_NAME ppic)
|
set (EXE_NAME ppic)
|
||||||
|
|
||||||
# Translation
|
# Translation
|
||||||
file (GLOB PPIC_TS_FILES locales/app/*.ts)
|
file (GLOB PPIC_TS_FILES app/translations/*.ts)
|
||||||
set (PPIC_CPP_FILES_FOR_I18N ${PPIC_CPP_FILES})
|
set (PPIC_CPP_FILES_FOR_I18N ${PPIC_CPP_FILES})
|
||||||
|
|
||||||
find_program (UV_EXECUTABLE uv)
|
|
||||||
if (NOT UV_EXECUTABLE)
|
|
||||||
message (FATAL_ERROR "uv is required to run the metaglot tool, install it from https://docs.astral.sh/uv/")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
# Setup Windows RC files
|
configure_file(assets/pineapple-pictures.rc.in pineapple-pictures.rc @ONLY)
|
||||||
set (PPIC_RC_TEMPLATE_FILE ${CMAKE_CURRENT_BINARY_DIR}/pineapple-pictures.rc.in)
|
list(APPEND PPIC_RC_FILES ${CMAKE_CURRENT_BINARY_DIR}/pineapple-pictures.rc)
|
||||||
execute_process (
|
|
||||||
COMMAND ${UV_EXECUTABLE} tool run metaglot render rc
|
|
||||||
--manifest ${CMAKE_SOURCE_DIR}/dist/pineapple-pictures.rc.in.toml
|
|
||||||
--po ${CMAKE_SOURCE_DIR}/locales/winrc/*.po
|
|
||||||
--template ${CMAKE_SOURCE_DIR}/dist/pineapple-pictures.rc.in.liquid
|
|
||||||
--output ${PPIC_RC_TEMPLATE_FILE}
|
|
||||||
RESULT_VARIABLE METAGLOT_RESULT
|
|
||||||
)
|
|
||||||
if (NOT METAGLOT_RESULT EQUAL 0)
|
|
||||||
message (FATAL_ERROR "Failed to generate Windows RC file template via MetaGlot (exit code: ${METAGLOT_RESULT}).")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
configure_file (${PPIC_RC_TEMPLATE_FILE} ${CMAKE_CURRENT_BINARY_DIR}/pineapple-pictures.rc @ONLY)
|
|
||||||
list (APPEND PPIC_RC_FILES ${CMAKE_CURRENT_BINARY_DIR}/pineapple-pictures.rc)
|
|
||||||
endif ()
|
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}
|
||||||
)
|
)
|
||||||
@@ -143,11 +117,6 @@ else()
|
|||||||
qt_add_translations(${EXE_NAME} ${ADD_TRANSLATIONS_ADDITIONAL_ARGS} TS_FILES ${PPIC_TS_FILES} QM_FILES_OUTPUT_VARIABLE PPIC_QM_FILES)
|
qt_add_translations(${EXE_NAME} ${ADD_TRANSLATIONS_ADDITIONAL_ARGS} TS_FILES ${PPIC_TS_FILES} QM_FILES_OUTPUT_VARIABLE PPIC_QM_FILES)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# YYC MARK:
|
|
||||||
# This is essential, otherwise Qt UIC generated UI header file
|
|
||||||
# can not find our header files if there are custom widgets inside UI file.
|
|
||||||
target_include_directories(${EXE_NAME} PRIVATE app/)
|
|
||||||
|
|
||||||
target_sources(${EXE_NAME} PRIVATE ${PPIC_QM_FILES})
|
target_sources(${EXE_NAME} PRIVATE ${PPIC_QM_FILES})
|
||||||
|
|
||||||
target_link_libraries (${EXE_NAME} Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Svg Qt${QT_VERSION_MAJOR}::SvgWidgets)
|
target_link_libraries (${EXE_NAME} Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Svg Qt${QT_VERSION_MAJOR}::SvgWidgets)
|
||||||
@@ -229,67 +198,20 @@ if (WIN32)
|
|||||||
set_target_properties(${EXE_NAME} PROPERTIES
|
set_target_properties(${EXE_NAME} PROPERTIES
|
||||||
WIN32_EXECUTABLE TRUE
|
WIN32_EXECUTABLE TRUE
|
||||||
)
|
)
|
||||||
|
|
||||||
# Setup Inno Setup script file
|
|
||||||
set (PPIC_INNO_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/inno-metadata)
|
|
||||||
execute_process (
|
|
||||||
COMMAND ${UV_EXECUTABLE} tool run metaglot render inno
|
|
||||||
--manifest ${CMAKE_SOURCE_DIR}/dist/ppic.iss.in.toml
|
|
||||||
--po ${CMAKE_SOURCE_DIR}/locales/inno/*.po
|
|
||||||
--iss-template ${CMAKE_SOURCE_DIR}/dist/ppic.iss.in.liquid
|
|
||||||
--isl-template ${CMAKE_SOURCE_DIR}/dist/ppic.isl.liquid
|
|
||||||
--iss-path ppic.iss.in
|
|
||||||
--isl-path "Strings/{{ lang }}.isl"
|
|
||||||
--output ${PPIC_INNO_OUTPUT_DIR}
|
|
||||||
RESULT_VARIABLE METAGLOT_INNO_RESULT
|
|
||||||
)
|
|
||||||
if (NOT METAGLOT_INNO_RESULT EQUAL 0)
|
|
||||||
message (FATAL_ERROR "Failed to render Inno Setup script via MetaGlot (exit code: ${METAGLOT_INNO_RESULT}).")
|
|
||||||
endif ()
|
|
||||||
configure_file (${PPIC_INNO_OUTPUT_DIR}/ppic.iss.in ${PPIC_INNO_OUTPUT_DIR}/ppic.iss @ONLY)
|
|
||||||
elseif (APPLE)
|
elseif (APPLE)
|
||||||
# Include icon to project
|
set_source_files_properties(assets/icons/app-icon.icns PROPERTIES
|
||||||
set_source_files_properties(dist/sarasacw-picture.icns PROPERTIES
|
|
||||||
MACOSX_PACKAGE_LOCATION "Resources"
|
MACOSX_PACKAGE_LOCATION "Resources"
|
||||||
)
|
)
|
||||||
target_sources(${EXE_NAME} PRIVATE dist/sarasacw-picture.icns)
|
target_sources(${EXE_NAME} PUBLIC assets/icons/app-icon.icns)
|
||||||
|
|
||||||
# Setup Info.plist related directory.
|
|
||||||
set (PPIC_PLIST_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/plist-metadata)
|
|
||||||
# Render Info.plist and its strings.
|
|
||||||
execute_process (
|
|
||||||
COMMAND ${UV_EXECUTABLE} tool run metaglot render plist
|
|
||||||
--manifest ${CMAKE_SOURCE_DIR}/dist/Info.plist.in.toml
|
|
||||||
--po ${CMAKE_SOURCE_DIR}/locales/plist/*.po
|
|
||||||
--plist-template ${CMAKE_SOURCE_DIR}/dist/Info.plist.in.liquid
|
|
||||||
--strings-template ${CMAKE_SOURCE_DIR}/dist/InfoPlist.strings.liquid
|
|
||||||
--plist-path Info.plist.in
|
|
||||||
--strings-path "Resources/{{ lang }}.lproj/InfoPlist.strings"
|
|
||||||
--output ${PPIC_PLIST_OUTPUT_DIR}
|
|
||||||
RESULT_VARIABLE METAGLOT_PLIST_RESULT
|
|
||||||
)
|
|
||||||
if (NOT METAGLOT_PLIST_RESULT EQUAL 0)
|
|
||||||
message (FATAL_ERROR "Failed to render Info.plist metadata via MetaGlot (exit code: ${METAGLOT_PLIST_RESULT}).")
|
|
||||||
endif ()
|
|
||||||
# Include these to project.
|
|
||||||
file (GLOB PPIC_PLIST_STRINGS_FILES ${PPIC_PLIST_OUTPUT_DIR}/Resources/*.lproj/InfoPlist.strings)
|
|
||||||
foreach (plist_strings_file ${PPIC_PLIST_STRINGS_FILES})
|
|
||||||
get_filename_component (plist_lproj_dir ${plist_strings_file} DIRECTORY)
|
|
||||||
get_filename_component (plist_lproj_name ${plist_lproj_dir} NAME)
|
|
||||||
set_source_files_properties (${plist_strings_file} PROPERTIES
|
|
||||||
MACOSX_PACKAGE_LOCATION "Resources/${plist_lproj_name}"
|
|
||||||
)
|
|
||||||
target_sources (${EXE_NAME} PRIVATE ${plist_strings_file})
|
|
||||||
endforeach ()
|
|
||||||
# See https://cmake.org/cmake/help/v3.15/prop_tgt/MACOSX_BUNDLE_INFO_PLIST.html
|
# See https://cmake.org/cmake/help/v3.15/prop_tgt/MACOSX_BUNDLE_INFO_PLIST.html
|
||||||
set_target_properties(${EXE_NAME} PROPERTIES
|
set_target_properties(${EXE_NAME} PROPERTIES
|
||||||
MACOSX_BUNDLE TRUE
|
MACOSX_BUNDLE TRUE
|
||||||
MACOSX_BUNDLE_INFO_PLIST ${PPIC_PLIST_OUTPUT_DIR}/Info.plist.in
|
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/dist/MacOSXBundleInfo.plist.in
|
||||||
MACOSX_BUNDLE_INFO_STRING "${PROJECT_VERSION}, Copyright (C) 2026 Gary Wang"
|
MACOSX_BUNDLE_BUNDLE_NAME "Pineapple Pictures"
|
||||||
MACOSX_BUNDLE_GUI_IDENTIFIER net.blumia.pineapple-pictures
|
MACOSX_BUNDLE_GUI_IDENTIFIER net.blumia.pineapple-pictures
|
||||||
MACOSX_BUNDLE_ICON_FILE sarasacw-picture.icns # contains the .icns file name, *without* the path.
|
MACOSX_BUNDLE_ICON_FILE app-icon.icns # contains the .icns file name, *without* the path.
|
||||||
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
|
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
|
||||||
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}
|
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
|
||||||
)
|
)
|
||||||
elseif (UNIX)
|
elseif (UNIX)
|
||||||
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||||
@@ -298,45 +220,20 @@ elseif (UNIX)
|
|||||||
|
|
||||||
# install icon
|
# install icon
|
||||||
install (
|
install (
|
||||||
DIRECTORY dist/freedesktop-icons/
|
FILES assets/icons/app-icon.svg
|
||||||
DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor"
|
DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps"
|
||||||
|
RENAME net.blumia.pineapple-pictures.svg
|
||||||
)
|
)
|
||||||
|
|
||||||
# generate and install desktop entry file
|
# install shortcut
|
||||||
set (PPIC_DESKTOP_FILE ${CMAKE_CURRENT_BINARY_DIR}/net.blumia.pineapple-pictures.desktop)
|
|
||||||
execute_process (
|
|
||||||
COMMAND ${UV_EXECUTABLE} tool run metaglot render desktop
|
|
||||||
--manifest ${CMAKE_SOURCE_DIR}/dist/net.blumia.pineapple-pictures.desktop.toml
|
|
||||||
--po ${CMAKE_SOURCE_DIR}/locales/desktop/*.po
|
|
||||||
--template ${CMAKE_SOURCE_DIR}/dist/net.blumia.pineapple-pictures.desktop.liquid
|
|
||||||
--output ${PPIC_DESKTOP_FILE}
|
|
||||||
RESULT_VARIABLE METAGLOT_DESKTOP_RESULT
|
|
||||||
)
|
|
||||||
if (NOT METAGLOT_DESKTOP_RESULT EQUAL 0)
|
|
||||||
message (FATAL_ERROR "Failed to generate .desktop via MetaGlot (exit code: ${METAGLOT_DESKTOP_RESULT}).")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
install (
|
install (
|
||||||
FILES ${PPIC_DESKTOP_FILE}
|
FILES dist/net.blumia.pineapple-pictures.desktop
|
||||||
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications"
|
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications"
|
||||||
)
|
)
|
||||||
|
|
||||||
# generate and install app metadata file for appstream (and some other stuff using this metadata like snapcraft)
|
# install app metadata file for appstream (and some other stuff using this metadata like snapcraft)
|
||||||
set (PPIC_METAINFO_FILE ${CMAKE_CURRENT_BINARY_DIR}/net.blumia.pineapple-pictures.metainfo.xml)
|
|
||||||
execute_process (
|
|
||||||
COMMAND ${UV_EXECUTABLE} tool run metaglot render appstream
|
|
||||||
--manifest ${CMAKE_SOURCE_DIR}/dist/net.blumia.pineapple-pictures.metainfo.xml.toml
|
|
||||||
--po ${CMAKE_SOURCE_DIR}/locales/appstream/*.po
|
|
||||||
--template ${CMAKE_SOURCE_DIR}/dist/net.blumia.pineapple-pictures.metainfo.xml.liquid
|
|
||||||
--output ${PPIC_METAINFO_FILE}
|
|
||||||
RESULT_VARIABLE METAGLOT_METAINFO_RESULT
|
|
||||||
)
|
|
||||||
if (NOT METAGLOT_METAINFO_RESULT EQUAL 0)
|
|
||||||
message (FATAL_ERROR "Failed to generate .metainfo.xml via MetaGlot (exit code: ${METAGLOT_METAINFO_RESULT}).")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
install (
|
install (
|
||||||
FILES ${PPIC_METAINFO_FILE}
|
FILES dist/appstream/net.blumia.pineapple-pictures.metainfo.xml
|
||||||
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo"
|
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo"
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
@@ -372,6 +269,20 @@ if (DEFINED QM_FILE_INSTALL_DIR)
|
|||||||
DESTINATION ${QM_FILE_INSTALL_DIR}
|
DESTINATION ${QM_FILE_INSTALL_DIR}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
install(
|
||||||
|
FILES
|
||||||
|
dist/passoc/generic.ico
|
||||||
|
dist/passoc/jpeg.ico
|
||||||
|
dist/passoc/gif.ico
|
||||||
|
dist/passoc/svg.ico
|
||||||
|
dist/passoc/png.ico
|
||||||
|
dist/passoc/psd.ico
|
||||||
|
DESTINATION "${CMAKE_INSTALL_BINDIR}/icons"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||||
|
|
||||||
# CPACK: General Settings
|
# CPACK: General Settings
|
||||||
|
|||||||
@@ -1,41 +1,3 @@
|
|||||||
Version 1.6.0
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
Released: 2026-08-22
|
|
||||||
|
|
||||||
Features:
|
|
||||||
* Allow dragging window from titlebar to move window when maximized
|
|
||||||
* Add an option to show/hide bird-eye view
|
|
||||||
|
|
||||||
Bugfixes:
|
|
||||||
* Maximize the window when the image size matches the screen size
|
|
||||||
* Fix window might stuck when drag move on some ill-formed window manager
|
|
||||||
* Make titlebar respect RTL layout
|
|
||||||
|
|
||||||
Miscellaneous:
|
|
||||||
* Update translations
|
|
||||||
* Update Qt version to 6.11.2 for Windows and macOS pre-built binaries
|
|
||||||
|
|
||||||
Contributors:
|
|
||||||
Tech-Tac, Heimen Stoffels (vistaus), VenusGirl, Oğuz Ersen
|
|
||||||
|
|
||||||
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
|
Version 1.4.1
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
Released: 2026-04-05
|
Released: 2026-04-05
|
||||||
|
|||||||
@@ -1,18 +1,9 @@
|
|||||||
# Sarasas Chip Workshop Picture
|
# Sarasas Chip Workshop Picture
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> SarasaCW Picture are still in refactoring. Please do not use it until this message removes.
|
|
||||||
|
|
||||||
Yet another legacy Windows Photo Viewer with cross-platform support.
|
Yet another legacy Windows Photo Viewer with cross-platform support.
|
||||||
|
|
||||||
[](https://github.com/SarasasChipWorkshop/sarasacw-picture/actions/workflows/windows.yml)
|
> [!IMPORTANT]
|
||||||
[](https://github.com/SarasasChipWorkshop/sarasacw-picture/actions/workflows/macos.yml)
|
> SarasaCW Picture are still in refactoring. Please do not use it until this message removes.
|
||||||
[](https://github.com/SarasasChipWorkshop/sarasacw-picture/actions/workflows/ubuntu.yml)
|
|
||||||
|
|
||||||
<!--
|
|
||||||
TODO: Add main window illustration in future.
|
|
||||||

|
|
||||||
-->
|
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
||||||
@@ -20,43 +11,74 @@ Sarasas Chip Workshop Picture (abbr. SarasaCW Picture) is a lightweight image vi
|
|||||||
|
|
||||||
SarasaCW Picture is the **hard fork** of [Pineapple Pictures](https://github.com/BLumia/pineapple-pictures) since Pineapple Pictures 1.4.1 version.
|
SarasaCW Picture is the **hard fork** of [Pineapple Pictures](https://github.com/BLumia/pineapple-pictures) since Pineapple Pictures 1.4.1 version.
|
||||||
|
|
||||||
## Installation
|
<!--
|
||||||
|
|
||||||
Download from the places maintained by the author of this repository:
|
|CI|Build Status|
|
||||||
|
|---|---|
|
||||||
|
|Windows Build|[](https://github.com/BLumia/pineapple-pictures/actions/workflows/windows.yml)|
|
||||||
|
|macOS Build|[](https://github.com/BLumia/pineapple-pictures/actions/workflows/macos.yml)|
|
||||||
|
|Ubuntu Build|[](https://github.com/BLumia/pineapple-pictures/actions/workflows/ubuntu.yml)|
|
||||||
|
|
||||||
- [GitHub Release Page](https://github.com/SarasasChipWorkshop/sarasacw-picture/releases)
|

|
||||||
|
|
||||||
|
## Get it!
|
||||||
|
|
||||||
|
### Maintained by the original author
|
||||||
|
|
||||||
|
- [GitHub Release Page](https://github.com/BLumia/pineapple-pictures/releases)
|
||||||
|
- [SourceForge](https://sourceforge.net/projects/pineapple-pictures/)
|
||||||
|
- Archlinux AUR: [pineapple-pictures](https://aur.archlinux.org/packages/pineapple-pictures/) | [pineapple-pictures-git](https://aur.archlinux.org/packages/pineapple-pictures-git/)
|
||||||
|
- [Itch.io Store](https://blumia.itch.io/pineapple-pictures)
|
||||||
|
|
||||||
|
### Maintained by contributors / certain distro's package maintainers
|
||||||
|
|
||||||
|
[](https://repology.org/project/pineapple-pictures/versions)
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
|
|
||||||
The new feature request of this application are freezed now because this application basically is a replica of legacy Windows Photo Viewer with additional cross-platform support. However, bug report and translation are welcome.
|
Beside feedback and code contribution, other contributions are also welcome!
|
||||||
|
|
||||||
## Build Instruction
|
### Help Translation!
|
||||||
|
|
||||||
|
[Translate this project on Weblate!](https://hosted.weblate.org/projects/pineapple-pictures/)
|
||||||
|
|
||||||
|
### Funding
|
||||||
|
|
||||||
|
[](https://ko-fi.com/blumia)
|
||||||
|
|
||||||
|
[Afdian](https://afdian.com/a/BLumia)
|
||||||
|
|
||||||
|
## Build it manually:
|
||||||
|
|
||||||
Current state, we need:
|
Current state, we need:
|
||||||
|
|
||||||
- `cmake`: as the build system.
|
- `cmake`: as the build system.
|
||||||
- `python3`, `uv` and [`metaglot`](https://github.com/SarasasChipWorkshop/metaglot): as the metadata localization processor.
|
- `qt6` with `qt6-svg` and `qt6-tools`: since the app is using Qt.
|
||||||
- `qt6` with `qt6-svg` and `qt6-tools`: since the app is using Qt.
|
- `libexiv2`: able to display more image metadata. (optional, but recommended)
|
||||||
- `libexiv2`: able to display more image metadata. (optional, but recommended)
|
|
||||||
|
|
||||||
Then we can build it with any proper C++ compiler like g++ or MSVC.
|
Then we can build it with any proper c++ compiler like g++ or msvc.
|
||||||
|
|
||||||
Building it just requires normal cmake building steps:
|
Building it just requires normal cmake building steps:
|
||||||
|
|
||||||
```bash
|
``` bash
|
||||||
$ mkdir build && cd build
|
$ mkdir build && cd build
|
||||||
$ cmake ..
|
$ cmake ..
|
||||||
$ cmake --build .
|
$ cmake --build . # or simply using `make` if you are using Makefile as the cmake generator.
|
||||||
```
|
```
|
||||||
|
|
||||||
After that, a `scwpic` executable file will be available to use. You can also optionally install it by using the target `install`. After the build process, you can also use `cpack` to make a package.
|
After that, a `ppic` executable file will be available to use. You can also optionally install it by using the target `install` (or simply `make install` in case you are using Makefile). After the build process, you can also use `cpack` to make a package.
|
||||||
|
|
||||||
The project will try to build with `exiv2` when it's available at build time, if you would like to build the project without `exiv2`, pass `-DEXIV2_METADATA_SUPPORT=OFF` to `cmake`. The project will also not use `exiv2` if it's not found, the `EXIV2_METADATA_SUPPORT` option can be useful if you have `exiv2` but specifically don't want to use it.
|
The project will try to build with `exiv2` when it's available at build time, if you would like to build the project without `exiv2`, pass `-DEXIV2_METADATA_SUPPORT=OFF` to `cmake`. The project will also not use `exiv2` if it's not found, the `EXIV2_METADATA_SUPPORT` option can be useful if you have `exiv2` but specifically don't want to use it.
|
||||||
|
|
||||||
Image formats supports rely on Qt's imageformats plugins, just get the plugins you need from your distro's package manager will be fine. For Windows user, you may need build and install the imageformats plugin manually, read the content below.
|
Image formats supports rely on Qt's imageformats plugins, just get the plugins you need from your distro's package manager will be fine. For Windows user, you may need build and install the imageformats plugin manually, read the content below.
|
||||||
|
|
||||||
It's possible to build it under Windows, Linux, macOS, and maybe other desktop platforms that Qt is ported to.
|
It's possible to build it under Windows, Linux, macOS, and maybe other desktop platforms that Qt is ported to. For platform specific build instructions, please read the [related wiki page](https://github.com/BLumia/pineapple-pictures/wiki/Platform-Specific-Build-Instructions).
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Although there is a `pineapple-pictures.pro` file which can be used for QMake build, it's only for testing purpose and it doesn't have `exiv2` support included. Using QMake to build this project is NOT supported, please use CMake if possible.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
SarasaCW Picture 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.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|||||||
@@ -1,62 +0,0 @@
|
|||||||
# Sarasas Chip Workshop 照片查看器
|
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> SarasaCW 照片查看器还在重构中。在这条信息被移除之前请不要使用它。
|
|
||||||
|
|
||||||
简单轻量的、具有跨平台支持的、经典样式的 Windows 照片查看器。
|
|
||||||
|
|
||||||
[](https://github.com/SarasasChipWorkshop/sarasacw-picture/actions/workflows/windows.yml)
|
|
||||||
[](https://github.com/SarasasChipWorkshop/sarasacw-picture/actions/workflows/macos.yml)
|
|
||||||
[](https://github.com/SarasasChipWorkshop/sarasacw-picture/actions/workflows/ubuntu.yml)
|
|
||||||
|
|
||||||
<!--
|
|
||||||
TODO: Add main window illustration in future.
|
|
||||||

|
|
||||||
-->
|
|
||||||
|
|
||||||
## 简介
|
|
||||||
|
|
||||||
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 版本开始。
|
|
||||||
|
|
||||||
## 安装
|
|
||||||
|
|
||||||
从本仓库作者维护的地方下载:
|
|
||||||
|
|
||||||
- [GitHub Release 页面](https://github.com/SarasasChipWorkshop/sarasacw-picture/releases)
|
|
||||||
|
|
||||||
## 参与贡献
|
|
||||||
|
|
||||||
现在已冻结该应用的新功能请求,因为这个应用基本上是经典样式的 Windows 照片查看器的复刻,只是增加了跨平台支持。不过仍然欢迎针对该项目的错误报告和翻译。
|
|
||||||
|
|
||||||
## 构建指导
|
|
||||||
|
|
||||||
当前状态,我们需要先确保如下依赖可用:
|
|
||||||
|
|
||||||
- `cmake`:我们所使用的构建系统
|
|
||||||
- `python3`、`uv` 和 [`metaglot`](https://github.com/SarasasChipWorkshop/metaglot):我们所使用的元数据本地化处理器
|
|
||||||
- 包含 `qt6-svg` 与 `qt6-tools` 组件的 `qt6`:此应用基于 Qt
|
|
||||||
- `libexiv2`:用以获取和显示更多的图像元信息(可选,推荐)
|
|
||||||
|
|
||||||
然后我们就可以使用任何常规的 C++ 编译器如 g++ 或 MSVC 来进行构建了
|
|
||||||
|
|
||||||
构建过程就是常规的 CMake 应用构建过程:
|
|
||||||
|
|
||||||
``` bash
|
|
||||||
$ mkdir build && cd build
|
|
||||||
$ cmake ..
|
|
||||||
$ cmake --build . # 如果你使用 Makefile 作为 CMake 生成器,也可以直接简单的使用 `make`
|
|
||||||
```
|
|
||||||
|
|
||||||
完毕后,一个名为 `scwpic` 的可执行程序即会被生成以供使用。您也可以选择通过使用 CMake 生成的 `install` 目标继续将其安装到您的设备上。构建步骤完毕后,您也可以使用 `cpack` 来对应用程序进行打包。
|
|
||||||
|
|
||||||
当 `exiv2` 在构建时可用时,此项目将尝试使用其进行构建,若您不希望使用 `exiv2`,请传递 `-DEXIV2_METADATA_SUPPORT=OFF` 参数给 `cmake`。此项目在找不到 `exiv2` 时并不会使用 `exiv2`,`EXIV2_METADATA_SUPPORT` 选项可供尽管存在可用的 `exiv2` 但您明确不希望启用其支持时使用。
|
|
||||||
|
|
||||||
此应用的图片格式支持依赖于 Qt 的 imageformats 插件,直接从您所用的发行版获取对应的图像格式插件即可。对于 Windows 用户,您可能需要手动构建和使用图像格式插件。下方给出了进一步的说明。
|
|
||||||
|
|
||||||
在 Windows、Linux 以及 macOS 系统均可构建此应用,其它有移植 Qt 支持的平台也可能可以进行构建。
|
|
||||||
|
|
||||||
## 许可协议
|
|
||||||
|
|
||||||
SarasaCW 照片查看器整体使用 MIT 协议进行发布。项目所随的部分源文件可能具备不同但与之兼容的许可协议。
|
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
# 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|构建状态|
|
||||||
|
|---|---|
|
||||||
|
|Windows Build|[](https://github.com/BLumia/pineapple-pictures/actions/workflows/windows.yml)|
|
||||||
|
|macOS Build|[](https://github.com/BLumia/pineapple-pictures/actions/workflows/macos.yml)|
|
||||||
|
|Ubuntu Build|[](https://github.com/BLumia/pineapple-pictures/actions/workflows/ubuntu.yml)|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 立即获取!
|
||||||
|
|
||||||
|
### 由原作者维护
|
||||||
|
|
||||||
|
- [GitHub Release 页面](https://github.com/BLumia/pineapple-pictures/releases)
|
||||||
|
- [SourceForge](https://sourceforge.net/projects/pineapple-pictures/)
|
||||||
|
- Archlinux AUR: [pineapple-pictures](https://aur.archlinux.org/packages/pineapple-pictures/) | [pineapple-pictures-git](https://aur.archlinux.org/packages/pineapple-pictures-git/)
|
||||||
|
- [Itch.io 商店](https://blumia.itch.io/pineapple-pictures)
|
||||||
|
- Flatpak (于 FlatHub): [net.blumia.pineapple-pictures](https://flathub.org/apps/net.blumia.pineapple-pictures) *([我应当使用 flatpak 版吗?](https://github.com/BLumia/pineapple-pictures/wiki/Container%E2%80%90based-Packaging-Solutions-Support))*
|
||||||
|
|
||||||
|
### 由贡献者/对应发行版的打包人员维护
|
||||||
|
|
||||||
|
[](https://repology.org/project/pineapple-pictures/versions)
|
||||||
|
|
||||||
|
## 参与贡献
|
||||||
|
|
||||||
|
除了参与反馈和代码贡献外,也欢迎各种类型的贡献!
|
||||||
|
|
||||||
|
### 帮助翻译!
|
||||||
|
|
||||||
|
[在 Weblate 上帮助此项目翻译到更多语言!](https://hosted.weblate.org/projects/pineapple-pictures/)
|
||||||
|
|
||||||
|
### 打赏
|
||||||
|
|
||||||
|
[Afdian | 爱发电](https://afdian.com/a/BLumia)
|
||||||
|
|
||||||
|
[](https://ko-fi.com/blumia)
|
||||||
|
|
||||||
|
## 手动构建步骤:
|
||||||
|
|
||||||
|
当前状态,我们需要先确保如下依赖可用:
|
||||||
|
|
||||||
|
- `cmake`: 我们所使用的构建系统
|
||||||
|
- 包含 `qt6-svg` 与 `qt6-tools` 组件的 `qt6`: 此应用基于 Qt
|
||||||
|
- `libexiv2`: 用以获取和显示更多的图像元信息(可选,推荐)
|
||||||
|
|
||||||
|
然后我们就可以使用任何常规的 c++ 编译器如 g++ 或 msvc 来进行构建了
|
||||||
|
|
||||||
|
构建过程就是常规的 CMake 应用构建过程:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ mkdir build && cd build
|
||||||
|
$ cmake ..
|
||||||
|
$ cmake --build . # 如果你使用 Makefile 作为 CMake 生成器,也可以直接简单的使用 `make`
|
||||||
|
```
|
||||||
|
|
||||||
|
完毕后,一个名为 `ppic` 的可执行程序即会被生成以供使用。您也可以选择通过使用 CMake 生成的 `install` 目标继续将其安装到您的设备上(假设您使用 Makefile,即可执行 `make install` 来进行安装)。构建步骤完毕后,您也可以使用 `cpack` 来对应用程序进行打包。
|
||||||
|
|
||||||
|
当 `exiv2` 在构建时可用时,此项目将尝试使用其进行构建,若您不希望使用 `exiv2`,请传递 `-DEXIV2_METADATA_SUPPORT=OFF` 参数给 `cmake`。此项目在找不到 `exiv2` 时并不会使用 `exiv2`,`EXIV2_METADATA_SUPPORT` 选项可供尽管存在可用的 `exiv2` 但您明确不希望启用其支持时使用。
|
||||||
|
|
||||||
|
此应用的图片格式支持依赖于 Qt 的 imageformats 插件,直接从您所用的发行版获取对应的图像格式插件即可。对于 Windows 用户,您可能需要手动构建和使用图像格式插件。下方给出了进一步的说明。
|
||||||
|
|
||||||
|
在 Windows、Linux 以及 macOS 系统均可构建此应用,其它有移植 Qt 支持的平台也可能可以进行构建。若要了解一些平台相关的构建指引,请参阅[相关的 Wiki 页面](https://github.com/BLumia/pineapple-pictures/wiki/Platform-Specific-Build-Instructions)。
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> 尽管存在一个可用于 QMake 构建的 `pineapple-pictures.pro` 文件,但其仅供简单测试所用且其并不包含 `exiv2` 支持。使用 QMake 构建此项目是 **不受支持** 的,请尽可能考虑使用 CMake。
|
||||||
|
|
||||||
|
## 许可协议
|
||||||
|
|
||||||
|
菠萝看图整体使用 MIT 协议进行发布。项目所随的部分源文件可能具备不同但与之兼容的许可协议。
|
||||||
|
|
||||||
|
-->
|
||||||
@@ -9,27 +9,21 @@ SPDX-FileCopyrightText = "None"
|
|||||||
SPDX-License-Identifier = "CC0-1.0"
|
SPDX-License-Identifier = "CC0-1.0"
|
||||||
|
|
||||||
[[annotations]]
|
[[annotations]]
|
||||||
path = ["README**.md", "NEWS", "assets/**.rc.in", "assets/**.qrc", "dist/appstream/**", "dist/**.in", "dist/**.desktop", "dist/**.rc.in.toml", "dist/**.rc.in.liquid"]
|
path = ["README**.md", "NEWS", "assets/**.rc.in", "assets/**.qrc", "dist/appstream/**", "dist/**.in", "dist/**.desktop"]
|
||||||
precedence = "aggregate"
|
precedence = "aggregate"
|
||||||
SPDX-FileCopyrightText = "None"
|
SPDX-FileCopyrightText = "None"
|
||||||
SPDX-License-Identifier = "CC0-1.0"
|
SPDX-License-Identifier = "CC0-1.0"
|
||||||
|
|
||||||
[[annotations]]
|
[[annotations]]
|
||||||
path = ["locales/app/**.ts", "locales/winrc/**", "assets/plain/translators.html"]
|
path = ["dist/passoc/**"]
|
||||||
precedence = "aggregate"
|
precedence = "aggregate"
|
||||||
SPDX-FileCopyrightText = "Translators from hosted.weblate.org"
|
SPDX-FileCopyrightText = "2025 Gary Wang"
|
||||||
SPDX-License-Identifier = "MIT"
|
|
||||||
|
|
||||||
[[annotations]]
|
|
||||||
path = ["dist/msix/**.svg", "dist/msix/**.toml"]
|
|
||||||
precedence = "aggregate"
|
|
||||||
SPDX-FileCopyrightText = "2026 Gary Wang"
|
|
||||||
SPDX-License-Identifier = "MIT"
|
SPDX-License-Identifier = "MIT"
|
||||||
|
|
||||||
[[annotations]]
|
[[annotations]]
|
||||||
path = ["app/translations/**.ts", "assets/plain/translators.html"]
|
path = ["app/translations/**.ts", "assets/plain/translators.html"]
|
||||||
precedence = "aggregate"
|
precedence = "aggregate"
|
||||||
SPDX-FileCopyrightText = "2026 yyc12345"
|
SPDX-FileCopyrightText = "Translators from hosted.weblate.org"
|
||||||
SPDX-License-Identifier = "MIT"
|
SPDX-License-Identifier = "MIT"
|
||||||
|
|
||||||
[[annotations]]
|
[[annotations]]
|
||||||
|
|||||||
@@ -3,94 +3,176 @@
|
|||||||
// 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), ui(new QT_PREPEND_NAMESPACE(Ui::AboutDialog))
|
: QDialog(parent)
|
||||||
|
, 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)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
this->setWindowTitle(tr("About"));
|
||||||
setWindowFlag(Qt::WindowContextHelpButtonHint, false);
|
|
||||||
|
|
||||||
// blumia: Chain two arg() here since it seems lupdate will remove one of them if we use
|
const QStringList helpStr {
|
||||||
// the old `arg(QCoreApp::translate(), tr())` way, but it's worth to mention
|
u"<p>%1</p>"_s.arg(tr("Launch application with image file path as argument to load the file.")),
|
||||||
// `arg(QCoreApp::translate(), this->tr())` works, but lupdate will complain about the usage.
|
u"<p>%1</p>"_s.arg(tr("Drag and drop image file onto the window is also supported.")),
|
||||||
const QString HELP_HTML = loadEmbeddedHtml(u":/htmls/help.html"_s)
|
u"<p>%1</p>"_s.arg(tr("None of the operations in this application will alter the pictures on disk.")),
|
||||||
.arg(tr("General Help"))
|
u"<p>%1</p>"_s.arg(tr("Context menu option explanation:")),
|
||||||
.arg(tr("Launch application with image file path as argument to load the file."))
|
u"<ul>"_s,
|
||||||
.arg(tr("Passing in a single image file will load all the images in that directory and start viewing from that image."))
|
// blumia: Chain two arg() here since it seems lupdate will remove one of them if we use
|
||||||
.arg(tr("Passing in multiple image files lets you view them one by one."))
|
// the old `arg(QCoreApp::translate(), tr())` way, but it's worth to mention
|
||||||
.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.
|
||||||
.arg(tr("None of the operations in this application will alter the pictures on disk."))
|
u"<li><b>%1</b>:<br/>%2</li>"_s
|
||||||
.arg(tr("Context Menu Help"))
|
.arg(QCoreApplication::translate("MainWindow", "Stay on top"))
|
||||||
.arg(tr("Keep transformation", "The same meaning of MainWindow's Keep transformation."))
|
.arg(tr("Make window stay on top of all other windows.")),
|
||||||
.arg(tr("Avoid resetting the zoom/rotation/flip state that was applied to the image view when switching between images."))
|
u"<li><b>%1</b>:<br/>%2</li>"_s
|
||||||
.arg(tr("Checkerboard", "The same meaning of MainWindow's Checkerboard."))
|
.arg(QCoreApplication::translate("MainWindow", "Protected mode"))
|
||||||
.arg(tr("Checkerboard light and dark theme can be adjusted in the configuration window, or easily switch it by holding Shift and clicking the button."));
|
.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 QString APP_NAME_ARG = qApp->applicationDisplayName();
|
const QStringList aboutStr {
|
||||||
const QString APP_VERSION_ARG =
|
u"<center><img width='128' height='128' src=':/icons/app-icon.svg'/><br/>"_s,
|
||||||
|
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;
|
)),
|
||||||
const QString QT_ARCH_ARG = QSysInfo::buildCpuArchitecture();
|
u"<hr/>"_s,
|
||||||
const QString ABOUT_HTML = loadEmbeddedHtml(u":/htmls/about.html"_s)
|
tr("Copyright (c) %1 %2", "%1 is year, %2 is the name of copyright holder(s)")
|
||||||
.arg(APP_NAME_ARG)
|
.arg(u"2026"_s, u"<a href='https://github.com/BLumia'>@BLumia</a>"_s),
|
||||||
.arg(tr("Version: %1").arg(APP_VERSION_ARG))
|
u"<br/>"_s,
|
||||||
.arg(tr("Upstream author"))
|
tr("Logo designed by %1").arg(u"<a href='https://github.com/Lovelyblack'>@Lovelyblack</a>"_s),
|
||||||
.arg(tr("Hard fork author"))
|
u"<hr/>"_s,
|
||||||
.arg(tr("Logo designer"))
|
tr("Built with Qt %1 (%2)").arg(QT_VERSION_STR, QSysInfo::buildCpuArchitecture()),
|
||||||
.arg(tr("Built with Qt %1 (%2)").arg(QT_VERSION_ARG).arg(QT_ARCH_ARG))
|
QStringLiteral("<br/><a href='%1'>%2</a>").arg("https://github.com/BLumia/pineapple-pictures", tr("Source code")),
|
||||||
.arg(tr("Source code"));
|
u"</center>"_s
|
||||||
|
};
|
||||||
|
|
||||||
const QString SPECIAL_THANKS_HTML = loadEmbeddedHtml(u":/htmls/special-thanks.html"_s)
|
QFile translaterHtml(u":/plain/translators.html"_s);
|
||||||
.arg(tr("Contributors"))
|
bool canOpenFile = translaterHtml.open(QIODevice::ReadOnly);
|
||||||
.arg(tr("List of contributors on GitHub"))
|
const QByteArray & translatorList = canOpenFile ? translaterHtml.readAll() : QByteArrayLiteral("");
|
||||||
.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 QString LICENSE_HTML = loadEmbeddedHtml(u":/htmls/license.html"_s)
|
const QStringList specialThanksStr {
|
||||||
.arg(tr("License"))
|
u"<h1 align='center'>%1</h1><a href='%2'>%3</a><p>%4</p>"_s.arg(
|
||||||
.arg(tr("This application is released under the MIT License."))
|
tr("Contributors"),
|
||||||
.arg(tr("License Verbatim Copy"));
|
u"https://github.com/BLumia/pineapple-pictures/graphs/contributors"_s,
|
||||||
|
tr("List of contributors on GitHub"),
|
||||||
|
tr("Thanks to all people who contributed to this project.")
|
||||||
|
),
|
||||||
|
|
||||||
const QString THIRD_PARTY_LIBS_HTML = loadEmbeddedHtml(u":/htmls/third-party-libs.html"_s)
|
u"<h1 align='center'>%1</h1><p>%2</p>%3"_s.arg(
|
||||||
.arg(tr("Third-party Libraries"))
|
tr("Translators"),
|
||||||
.arg(tr("This application is built on the following free software libraries.", "Free as in freedom"))
|
tr("I would like to thank the following people who volunteered to translate this application."),
|
||||||
.arg(tr("Some of them are optional and might not be included with this distribution depending on the build environment."));
|
translatorList
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
ui->m_helpTextEdit->setHtml(HELP_HTML);
|
const QStringList licenseStr {
|
||||||
ui->m_aboutTextEdit->setHtml(ABOUT_HTML);
|
u"<h1 align='center'><b>%1</b></h1>"_s.arg(tr("Your Rights")),
|
||||||
ui->m_specialThanksTextEdit->setHtml(SPECIAL_THANKS_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_licenseTextEdit->setHtml(LICENSE_HTML);
|
tr("%1 is released under the MIT License."), // %1
|
||||||
ui->m_3rdPartyLibsTextEdit->setHtml(THIRD_PARTY_LIBS_HTML);
|
tr("This license grants people a number of freedoms:"), // %2
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
connect(ui->m_buttonBox, QOverload<QAbstractButton *>::of(&QDialogButtonBox::clicked), this, [this](QAbstractButton * btn){
|
const QString mitLicense(QStringLiteral(R"(Expat/MIT License
|
||||||
Q_UNUSED(btn)
|
|
||||||
|
Copyright © 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.
|
||||||
|
)"));
|
||||||
|
|
||||||
|
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
|
||||||
|
|||||||
@@ -8,9 +8,9 @@
|
|||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
namespace Ui {
|
class QTextBrowser;
|
||||||
class AboutDialog;
|
class QTabWidget;
|
||||||
}
|
class QDialogButtonBox;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
class AboutDialog : public QDialog
|
class AboutDialog : public QDialog
|
||||||
@@ -23,7 +23,14 @@ public:
|
|||||||
QSize sizeHint() const override;
|
QSize sizeHint() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QT_PREPEND_NAMESPACE(Ui::AboutDialog) *ui;
|
QTabWidget * m_tabWidget = nullptr;
|
||||||
|
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
|
||||||
|
|||||||
@@ -1,106 +0,0 @@
|
|||||||
<?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>&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>&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>&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>&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>&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>
|
|
||||||
@@ -4,205 +4,153 @@
|
|||||||
|
|
||||||
#include "actionmanager.h"
|
#include "actionmanager.h"
|
||||||
|
|
||||||
#include "settings.h"
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "playlistmanager.h"
|
|
||||||
#include "graphicsview.h"
|
|
||||||
#include "graphicsscene.h"
|
|
||||||
|
|
||||||
#include <QGuiApplication>
|
#include <QGuiApplication>
|
||||||
#include <QSvgRenderer>
|
#include <QSvgRenderer>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
|
||||||
static QIcon loadHidpiIcon(const QString &resp, QSize sz = QSize(32, 32))
|
#define ICON_NAME(name)\
|
||||||
|
QStringLiteral(":/icons/" #name ".svg")
|
||||||
|
|
||||||
|
#define ACTION_NAME(s) QStringLiteral(STRIFY(s))
|
||||||
|
#define STRIFY(s) #s
|
||||||
|
|
||||||
|
QIcon ActionManager::loadHidpiIcon(const QString &resp, QSize sz)
|
||||||
{
|
{
|
||||||
QPixmap pm = QPixmap(resp);
|
QSvgRenderer r(resp);
|
||||||
pm.scaled(sz * qApp->devicePixelRatio(), Qt::KeepAspectRatio);
|
QPixmap pm = QPixmap(sz * qApp->devicePixelRatio());
|
||||||
|
pm.fill(Qt::transparent);
|
||||||
|
QPainter p(&pm);
|
||||||
|
r.render(&p);
|
||||||
pm.setDevicePixelRatio(qApp->devicePixelRatio());
|
pm.setDevicePixelRatio(qApp->devicePixelRatio());
|
||||||
return QIcon(pm);
|
return QIcon(pm);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActionManager::setupAction(MainWindow *mainWindow)
|
void ActionManager::setupAction(MainWindow *mainWindow)
|
||||||
{
|
{
|
||||||
// region: Action and Its Icon Creation
|
|
||||||
|
|
||||||
// Declare some convenient macros and lambdas.
|
|
||||||
|
|
||||||
#define ICON_NAME(name)\
|
|
||||||
QStringLiteral(":/icons/" #name ".png")
|
|
||||||
|
|
||||||
#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) : loadHidpiIcon(i));
|
(*a)->setIcon(iconFromTheme ? QIcon::fromTheme(i) : ActionManager::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))
|
||||||
/// This macro for register normal action.
|
CREATE_NEW_ICON_ACTION(mainWindow, actionActualSize, zoom-original);
|
||||||
#define CREATE_NEW_ACTION(w, a) create_action(w, &a, QString(), ACTION_NAME(a))
|
CREATE_NEW_ICON_ACTION(mainWindow, actionToggleMaximize, view-fullscreen);
|
||||||
/// This macro for register Qt theme action.
|
|
||||||
#define CREATE_NEW_THEMEICON_ACTION(w, a, i) create_action(w, &a, QLatin1String(STRIFY(i)), ACTION_NAME(a), true)
|
|
||||||
/// This macro for register action with our custom icon.
|
|
||||||
#define CREATE_NEW_ICON_ACTION(w, a, i) create_action(w, &a, ICON_NAME(i), ACTION_NAME(a), false)
|
|
||||||
|
|
||||||
CREATE_NEW_ACTION(mainWindow, actionCopyPixmap);
|
|
||||||
CREATE_NEW_ACTION(mainWindow, actionCopyFilePath);
|
|
||||||
|
|
||||||
CREATE_NEW_ICON_ACTION(mainWindow, actionPrevPicture, go-previous);
|
|
||||||
CREATE_NEW_ICON_ACTION(mainWindow, actionNextPicture, go-next);
|
|
||||||
|
|
||||||
CREATE_NEW_ICON_ACTION(mainWindow, actionActualSize, fit-to-size);
|
|
||||||
CREATE_NEW_ICON_ACTION(mainWindow, actionFitToScreen, fit-to-screen);
|
|
||||||
CREATE_NEW_ACTION(mainWindow, actionFitByWidth);
|
|
||||||
CREATE_NEW_ACTION(mainWindow, actionFitByHeight);
|
|
||||||
CREATE_NEW_ICON_ACTION(mainWindow, actionZoomIn, zoom-in);
|
CREATE_NEW_ICON_ACTION(mainWindow, actionZoomIn, zoom-in);
|
||||||
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, actionRotateClockwise, object-rotate-right);
|
||||||
|
#undef CREATE_NEW_ICON_ACTION
|
||||||
|
|
||||||
CREATE_NEW_ICON_ACTION(mainWindow, actionFlipHorizontal, flip-horizontal);
|
#define CREATE_NEW_ACTION(w, a) create_action(w, &a, QString(), ACTION_NAME(a))
|
||||||
CREATE_NEW_ICON_ACTION(mainWindow, actionFlipVertical, flip-vertical);
|
#define CREATE_NEW_THEMEICON_ACTION(w, a, i) create_action(w, &a, QLatin1String(STRIFY(i)), ACTION_NAME(a), true)
|
||||||
CREATE_NEW_ICON_ACTION(mainWindow, actionRotateClockwise, rotate-right);
|
CREATE_NEW_ACTION(mainWindow, actionRotateCounterClockwise);
|
||||||
CREATE_NEW_ICON_ACTION(mainWindow, actionRotateCounterClockwise, rotate-left);
|
CREATE_NEW_ACTION(mainWindow, actionPrevPicture);
|
||||||
|
CREATE_NEW_ACTION(mainWindow, actionNextPicture);
|
||||||
|
|
||||||
CREATE_NEW_ACTION(mainWindow, actionToggleAvoidResetTransform);
|
|
||||||
CREATE_NEW_ACTION(mainWindow, actionToggleCheckerboard);
|
|
||||||
CREATE_NEW_ACTION(mainWindow, actionTogglePauseAnimation);
|
CREATE_NEW_ACTION(mainWindow, actionTogglePauseAnimation);
|
||||||
CREATE_NEW_ACTION(mainWindow, actionAnimationNextFrame);
|
CREATE_NEW_ACTION(mainWindow, actionAnimationNextFrame);
|
||||||
|
|
||||||
CREATE_NEW_ACTION(mainWindow, actionTrash/*, edit-delete*/);
|
CREATE_NEW_THEMEICON_ACTION(mainWindow, actionOpen, document-open);
|
||||||
CREATE_NEW_ACTION(mainWindow, actionLocateInFileManager/*, system-file-manager*/);
|
CREATE_NEW_ACTION(mainWindow, actionHorizontalFlip);
|
||||||
CREATE_NEW_ICON_ACTION(mainWindow, actionProperties, image-info);
|
CREATE_NEW_ACTION(mainWindow, actionFitInView);
|
||||||
|
CREATE_NEW_ACTION(mainWindow, actionFitByWidth);
|
||||||
|
CREATE_NEW_ACTION(mainWindow, actionFitLongImage);
|
||||||
|
CREATE_NEW_THEMEICON_ACTION(mainWindow, actionCopyPixmap, edit-copy);
|
||||||
|
CREATE_NEW_ACTION(mainWindow, actionCopyFilePath);
|
||||||
|
CREATE_NEW_THEMEICON_ACTION(mainWindow, actionPaste, edit-paste);
|
||||||
|
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, actionSettings);
|
CREATE_NEW_ACTION(mainWindow, actionSettings);
|
||||||
CREATE_NEW_ACTION(mainWindow, actionHelp/*, system-help*/);
|
CREATE_NEW_THEMEICON_ACTION(mainWindow, actionHelp, system-help);
|
||||||
|
CREATE_NEW_THEMEICON_ACTION(mainWindow, actionLocateInFileManager, system-file-manager);
|
||||||
// Remove convenient macros
|
CREATE_NEW_THEMEICON_ACTION(mainWindow, actionProperties, document-properties);
|
||||||
|
CREATE_NEW_ACTION(mainWindow, actionQuitApp);
|
||||||
#undef CREATE_NEW_ICON_ACTION
|
|
||||||
#undef CREATE_NEW_THEMEICON_ACTION
|
|
||||||
#undef CREATE_NEW_ACTION
|
#undef CREATE_NEW_ACTION
|
||||||
|
#undef CREATE_NEW_THEMEICON_ACTION
|
||||||
|
|
||||||
#undef STRIFY
|
retranslateUi(mainWindow);
|
||||||
#undef ACTION_NAME
|
|
||||||
#undef ICON_NAME
|
|
||||||
|
|
||||||
// endregion
|
QMetaObject::connectSlotsByName(mainWindow);
|
||||||
|
}
|
||||||
|
|
||||||
// region: Setup Checkable Action
|
void ActionManager::retranslateUi(MainWindow *mainWindow)
|
||||||
|
{
|
||||||
|
Q_UNUSED(mainWindow);
|
||||||
|
|
||||||
actionToggleAvoidResetTransform->setCheckable(true);
|
actionOpen->setText(QCoreApplication::translate("MainWindow", "&Open...", nullptr));
|
||||||
actionToggleCheckerboard->setCheckable(true);
|
|
||||||
actionTogglePauseAnimation->setCheckable(true);
|
|
||||||
|
|
||||||
// endregion
|
actionActualSize->setText(QCoreApplication::translate("MainWindow", "Actual size", nullptr));
|
||||||
|
actionToggleMaximize->setText(QCoreApplication::translate("MainWindow", "Toggle maximize", nullptr));
|
||||||
// region: Action Translatable Text Setup
|
actionZoomIn->setText(QCoreApplication::translate("MainWindow", "Zoom in", nullptr));
|
||||||
|
actionZoomOut->setText(QCoreApplication::translate("MainWindow", "Zoom out", nullptr));
|
||||||
actionCopyPixmap->setText(QCoreApplication::translate("MainWindow", "Copy P&ixmap", nullptr));
|
actionToggleCheckerboard->setText(QCoreApplication::translate("MainWindow", "Toggle Checkerboard", nullptr));
|
||||||
actionCopyFilePath->setText(QCoreApplication::translate("MainWindow", "Copy &File Path", nullptr));
|
actionRotateClockwise->setText(QCoreApplication::translate("MainWindow", "Rotate right", nullptr));
|
||||||
|
actionRotateCounterClockwise->setText(QCoreApplication::translate("MainWindow", "Rotate left", nullptr));
|
||||||
|
|
||||||
actionPrevPicture->setText(QCoreApplication::translate("MainWindow", "Previous image", nullptr));
|
actionPrevPicture->setText(QCoreApplication::translate("MainWindow", "Previous image", nullptr));
|
||||||
actionNextPicture->setText(QCoreApplication::translate("MainWindow", "Next image", nullptr));
|
actionNextPicture->setText(QCoreApplication::translate("MainWindow", "Next image", nullptr));
|
||||||
|
|
||||||
actionActualSize->setText(QCoreApplication::translate("MainWindow", "Actual size", nullptr));
|
|
||||||
actionFitToScreen->setText(QCoreApplication::translate("MainWindow", "Fit to screen", nullptr));
|
|
||||||
actionFitByWidth->setText(QCoreApplication::translate("MainWindow", "Fit by width", nullptr));
|
|
||||||
actionFitByHeight->setText(QCoreApplication::translate("MainWindow", "Fit by height", nullptr));
|
|
||||||
actionZoomIn->setText(QCoreApplication::translate("MainWindow", "Zoom in", nullptr));
|
|
||||||
actionZoomOut->setText(QCoreApplication::translate("MainWindow", "Zoom out", nullptr));
|
|
||||||
|
|
||||||
actionFlipHorizontal->setText(QCoreApplication::translate("MainWindow", "Flip &Horizontally", nullptr));
|
|
||||||
actionFlipVertical->setText(QCoreApplication::translate("MainWindow", "Flip &Vertically", nullptr));
|
|
||||||
actionRotateClockwise->setText(QCoreApplication::translate("MainWindow", "Rotate right", nullptr));
|
|
||||||
actionRotateCounterClockwise->setText(QCoreApplication::translate("MainWindow", "Rotate left", nullptr));
|
|
||||||
|
|
||||||
actionToggleAvoidResetTransform->setText(QCoreApplication::translate("MainWindow", "Keep transformation", "The 'transformation' means the flip/rotation status that currently applied to the image view"));
|
|
||||||
actionToggleCheckerboard->setText(QCoreApplication::translate("MainWindow", "Toggle Checkerboard", nullptr));
|
|
||||||
actionTogglePauseAnimation->setText(QCoreApplication::translate("MainWindow", "Pause/Resume Animation", nullptr));
|
actionTogglePauseAnimation->setText(QCoreApplication::translate("MainWindow", "Pause/Resume Animation", nullptr));
|
||||||
actionAnimationNextFrame->setText(QCoreApplication::translate("MainWindow", "Animation Go to Next Frame", nullptr));
|
actionAnimationNextFrame->setText(QCoreApplication::translate("MainWindow", "Animation Go to Next Frame", nullptr));
|
||||||
|
|
||||||
|
actionHorizontalFlip->setText(QCoreApplication::translate("MainWindow", "Flip &Horizontally", nullptr));
|
||||||
|
actionFitInView->setText(QCoreApplication::translate("MainWindow", "Fit to view", 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));
|
||||||
|
actionCopyFilePath->setText(QCoreApplication::translate("MainWindow", "Copy &File Path", 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"));
|
||||||
|
actionSettings->setText(QCoreApplication::translate("MainWindow", "Configure...", nullptr));
|
||||||
|
actionHelp->setText(QCoreApplication::translate("MainWindow", "Help", nullptr));
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
actionLocateInFileManager->setText(
|
actionLocateInFileManager->setText(
|
||||||
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));
|
||||||
actionSettings->setText(QCoreApplication::translate("MainWindow", "Configure...", nullptr));
|
|
||||||
actionHelp->setText(QCoreApplication::translate("MainWindow", "Help", nullptr));
|
|
||||||
// endregion
|
|
||||||
|
|
||||||
QMetaObject::connectSlotsByName(mainWindow);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActionManager::setupShortcuts()
|
void ActionManager::setupShortcuts()
|
||||||
{
|
{
|
||||||
actionCopyPixmap->setShortcut(QKeySequence::Copy);
|
actionOpen->setShortcut(QKeySequence::Open);
|
||||||
|
actionSaveAs->setShortcut(QKeySequence::SaveAs);
|
||||||
actionPrevPicture->setShortcuts({
|
|
||||||
QKeySequence(Qt::Key_Left),
|
|
||||||
QKeySequence(Qt::Key_PageUp),
|
|
||||||
});
|
|
||||||
actionNextPicture->setShortcuts({
|
|
||||||
QKeySequence(Qt::Key_Right),
|
|
||||||
QKeySequence(Qt::Key_PageDown),
|
|
||||||
});
|
|
||||||
|
|
||||||
actionActualSize->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_0));
|
actionActualSize->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_0));
|
||||||
actionZoomIn->setShortcut(QKeySequence::ZoomIn);
|
actionZoomIn->setShortcut(QKeySequence::ZoomIn);
|
||||||
actionZoomOut->setShortcut(QKeySequence::ZoomOut);
|
actionZoomOut->setShortcut(QKeySequence::ZoomOut);
|
||||||
|
actionPrevPicture->setShortcuts({
|
||||||
|
QKeySequence(Qt::Key_PageUp),
|
||||||
|
QKeySequence(Qt::Key_Left),
|
||||||
|
});
|
||||||
|
actionNextPicture->setShortcuts({
|
||||||
|
QKeySequence(Qt::Key_PageDown),
|
||||||
|
QKeySequence(Qt::Key_Right),
|
||||||
|
});
|
||||||
|
actionHorizontalFlip->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_R));
|
||||||
|
actionCopyPixmap->setShortcut(QKeySequence::Copy);
|
||||||
|
actionPaste->setShortcut(QKeySequence::Paste);
|
||||||
actionTrash->setShortcut(QKeySequence::Delete);
|
actionTrash->setShortcut(QKeySequence::Delete);
|
||||||
actionProperties->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_I));
|
|
||||||
|
|
||||||
actionSettings->setShortcut(QKeySequence::Preferences);
|
|
||||||
actionHelp->setShortcut(QKeySequence::HelpContents);
|
actionHelp->setShortcut(QKeySequence::HelpContents);
|
||||||
}
|
actionSettings->setShortcut(QKeySequence::Preferences);
|
||||||
|
actionProperties->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_I));
|
||||||
void ActionManager::updateActionState(PlaylistManager* pm, GraphicsView* gv)
|
actionQuitApp->setShortcuts({
|
||||||
{
|
QKeySequence(Qt::Key_Space),
|
||||||
const auto* gs = gv->scene();
|
QKeySequence(Qt::Key_Escape)
|
||||||
const auto* settings = Settings::instance();
|
});
|
||||||
|
|
||||||
// Update copy actions
|
|
||||||
bool canCopy = pm->currentIndex().has_value();
|
|
||||||
actionCopyPixmap->setEnabled(canCopy);
|
|
||||||
actionCopyFilePath->setEnabled(canCopy);
|
|
||||||
|
|
||||||
// Update Prev/Next Picture State
|
|
||||||
const int galleryFileCount = pm->totalCount();
|
|
||||||
const bool loopGallery = settings->loopGallery();
|
|
||||||
actionPrevPicture->setEnabled(galleryFileCount > 1 && (loopGallery || !pm->isFirstIndex()));
|
|
||||||
actionNextPicture->setEnabled(galleryFileCount > 1 && (loopGallery || !pm->isLastIndex()));
|
|
||||||
|
|
||||||
// Update Avoid Reset Transform
|
|
||||||
actionToggleAvoidResetTransform->setChecked(gv->isAvoidResetTransform());
|
|
||||||
// Update Checkerboard
|
|
||||||
actionToggleCheckerboard->setChecked(gv->isCheckerboard());
|
|
||||||
// Update Animation Graphics Action
|
|
||||||
bool canPauseAnimation = gs->canPauseAnimation();
|
|
||||||
actionTogglePauseAnimation->setEnabled(canPauseAnimation);
|
|
||||||
if (canPauseAnimation) {
|
|
||||||
actionTogglePauseAnimation->setChecked(gs->isPauseAnimation());
|
|
||||||
} else {
|
|
||||||
actionTogglePauseAnimation->setChecked(false);
|
|
||||||
}
|
|
||||||
bool canSkipAnimation = gs->canSkipAnimationFrame();
|
|
||||||
actionAnimationNextFrame->setEnabled(canSkipAnimation);
|
|
||||||
|
|
||||||
// Update trash, located in explorer and properties.
|
|
||||||
bool hasLoadedFile = pm->currentIndex().has_value();
|
|
||||||
actionTrash->setEnabled(hasLoadedFile);
|
|
||||||
actionLocateInFileManager->setEnabled(hasLoadedFile);
|
|
||||||
actionProperties->setEnabled(hasLoadedFile);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,11 +8,7 @@
|
|||||||
#include <QAction>
|
#include <QAction>
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
class PlaylistManager;
|
|
||||||
class GraphicsView;
|
|
||||||
|
|
||||||
/// Action Manager is separated from Main Window
|
|
||||||
/// to manage all actions specifically.
|
|
||||||
class ActionManager
|
class ActionManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -20,41 +16,44 @@ public:
|
|||||||
~ActionManager() = default;
|
~ActionManager() = default;
|
||||||
|
|
||||||
void setupAction(MainWindow * mainWindow);
|
void setupAction(MainWindow * mainWindow);
|
||||||
|
void retranslateUi(MainWindow *MainWindow);
|
||||||
void setupShortcuts();
|
void setupShortcuts();
|
||||||
|
|
||||||
public slots:
|
static QIcon loadHidpiIcon(const QString &resp, QSize sz = QSize(32, 32));
|
||||||
void updateActionState(PlaylistManager* pm, GraphicsView* gv);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QAction *actionCopyPixmap;
|
QAction *actionOpen;
|
||||||
QAction *actionCopyFilePath;
|
|
||||||
|
QAction *actionActualSize;
|
||||||
|
QAction *actionToggleMaximize;
|
||||||
|
QAction *actionZoomIn;
|
||||||
|
QAction *actionZoomOut;
|
||||||
|
QAction *actionToggleCheckerboard;
|
||||||
|
QAction *actionRotateClockwise;
|
||||||
|
QAction *actionRotateCounterClockwise;
|
||||||
|
|
||||||
QAction *actionPrevPicture;
|
QAction *actionPrevPicture;
|
||||||
QAction *actionNextPicture;
|
QAction *actionNextPicture;
|
||||||
|
|
||||||
QAction *actionActualSize;
|
|
||||||
QAction *actionFitToScreen;
|
|
||||||
QAction *actionFitByWidth;
|
|
||||||
QAction *actionFitByHeight;
|
|
||||||
QAction *actionZoomIn;
|
|
||||||
QAction *actionZoomOut;
|
|
||||||
|
|
||||||
QAction *actionFlipHorizontal;
|
|
||||||
QAction *actionFlipVertical;
|
|
||||||
QAction *actionRotateClockwise;
|
|
||||||
QAction *actionRotateCounterClockwise;
|
|
||||||
|
|
||||||
QAction *actionToggleAvoidResetTransform;
|
|
||||||
QAction *actionToggleCheckerboard;
|
|
||||||
QAction *actionTogglePauseAnimation;
|
QAction *actionTogglePauseAnimation;
|
||||||
QAction *actionAnimationNextFrame;
|
QAction *actionAnimationNextFrame;
|
||||||
|
|
||||||
|
QAction *actionHorizontalFlip;
|
||||||
|
QAction *actionFitInView;
|
||||||
|
QAction *actionFitByWidth;
|
||||||
|
QAction *actionFitLongImage;
|
||||||
|
QAction *actionCopyPixmap;
|
||||||
|
QAction *actionCopyFilePath;
|
||||||
|
QAction *actionPaste;
|
||||||
QAction *actionTrash;
|
QAction *actionTrash;
|
||||||
QAction *actionLocateInFileManager;
|
QAction *actionToggleStayOnTop;
|
||||||
QAction *actionProperties;
|
QAction *actionToggleProtectMode;
|
||||||
|
QAction *actionToggleAvoidResetTransform;
|
||||||
QAction *actionSettings;
|
QAction *actionSettings;
|
||||||
QAction *actionHelp;
|
QAction *actionHelp;
|
||||||
|
QAction *actionLocateInFileManager;
|
||||||
|
QAction *actionProperties;
|
||||||
|
QAction *actionQuitApp;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ACTIONMANAGER_H
|
#endif // ACTIONMANAGER_H
|
||||||
|
|||||||
@@ -4,42 +4,54 @@
|
|||||||
|
|
||||||
#include "bottombuttongroup.h"
|
#include "bottombuttongroup.h"
|
||||||
|
|
||||||
|
#include "opacityhelper.h"
|
||||||
|
|
||||||
#include <QToolButton>
|
#include <QToolButton>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
BottomButtonGroup::BottomButtonGroup(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);
|
||||||
this->setLayout(mainLayout);
|
this->setLayout(mainLayout);
|
||||||
this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
|
this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
|
||||||
this->setStyleSheet(R"#(
|
this->setStyleSheet("BottomButtonGroup {"
|
||||||
BottomButtonGroup {
|
"border: 1px solid gray;"
|
||||||
border-style: none;
|
"border-top-left-radius: 10px;"
|
||||||
background: transparent;
|
"border-top-right-radius: 10px;"
|
||||||
}
|
"border-style: none;"
|
||||||
QToolButton {
|
"background-color:rgba(0,0,0,120)"
|
||||||
background: transparent;
|
"}"
|
||||||
border-style: none;
|
"QToolButton {"
|
||||||
}
|
"background:transparent;"
|
||||||
)#");
|
"}"
|
||||||
}
|
"QToolButton:!focus {"
|
||||||
|
"border-style: none;"
|
||||||
|
"}");
|
||||||
|
|
||||||
void BottomButtonGroup::addActions(const std::vector<QAction *> & actionList) {
|
auto newActionBtn = [this](QAction * action) -> QToolButton * {
|
||||||
for (QAction * action : actionList) {
|
|
||||||
// Create button
|
|
||||||
QToolButton * btn = new QToolButton(this);
|
QToolButton * btn = new QToolButton(this);
|
||||||
btn->setDefaultAction(action);
|
btn->setDefaultAction(action);
|
||||||
btn->setIconSize(QSize(32, 32));
|
btn->setIconSize(QSize(32, 32));
|
||||||
btn->setFixedSize(40, 40);
|
btn->setFixedSize(40, 40);
|
||||||
// Add button
|
return btn;
|
||||||
layout()->addWidget(btn);
|
};
|
||||||
|
|
||||||
|
for (QAction * action : actionList) {
|
||||||
|
addButton(newActionBtn(action));
|
||||||
}
|
}
|
||||||
updateGeometry();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BottomButtonGroup::addAction(QAction* action) {
|
void BottomButtonGroup::setOpacity(qreal opacity, bool animated)
|
||||||
addActions({action});
|
{
|
||||||
|
m_opacityHelper->setOpacity(opacity, animated);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BottomButtonGroup::addButton(QAbstractButton *button)
|
||||||
|
{
|
||||||
|
layout()->addWidget(button);
|
||||||
|
updateGeometry();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,14 +10,18 @@
|
|||||||
#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(QWidget *parent = nullptr);
|
explicit BottomButtonGroup(const std::vector<QAction *> & actionList, QWidget *parent = nullptr);
|
||||||
|
|
||||||
void addActions(const std::vector<QAction *> & actionList);
|
void setOpacity(qreal opacity, bool animated = true);
|
||||||
void addAction(QAction* action);
|
void addButton(QAbstractButton *button);
|
||||||
|
|
||||||
|
private:
|
||||||
|
OpacityHelper * m_opacityHelper;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BOTTOMBUTTONGROUP_H
|
#endif // BOTTOMBUTTONGROUP_H
|
||||||
|
|||||||
@@ -0,0 +1,160 @@
|
|||||||
|
// SPDX-FileCopyrightText: 2022 Gary Wang <wzc782970009@gmail.com>
|
||||||
|
// SPDX-FileCopyrightText: 2023 Tad Young <yyc12321@outlook.com>
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
#include "framelesswindow.h"
|
||||||
|
|
||||||
|
#include <QMouseEvent>
|
||||||
|
#include <QHoverEvent>
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
#include <QWindow>
|
||||||
|
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
#include "windows.h"
|
||||||
|
void fixWindowStyle(QWidget * that)
|
||||||
|
{
|
||||||
|
HWND hwnd = (HWND)that->winId();
|
||||||
|
|
||||||
|
LONG style = GetWindowLong(hwnd, GWL_STYLE);
|
||||||
|
style |= WS_THICKFRAME | WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SYSMENU;
|
||||||
|
SetWindowLong(hwnd, GWL_STYLE, style);
|
||||||
|
|
||||||
|
SetWindowPos(hwnd, nullptr, 0, 0, 0, 0,
|
||||||
|
SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE |
|
||||||
|
SWP_NOZORDER | SWP_NOACTIVATE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
FramelessWindow::FramelessWindow(QWidget *parent)
|
||||||
|
: QWidget(parent)
|
||||||
|
, m_centralLayout(new QVBoxLayout(this))
|
||||||
|
, m_oldCursorShape(Qt::ArrowCursor)
|
||||||
|
, m_oldEdges()
|
||||||
|
{
|
||||||
|
this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint);
|
||||||
|
this->setMouseTracking(true);
|
||||||
|
this->setAttribute(Qt::WA_Hover, true);
|
||||||
|
this->installEventFilter(this);
|
||||||
|
|
||||||
|
m_centralLayout->setContentsMargins(QMargins());
|
||||||
|
}
|
||||||
|
|
||||||
|
void FramelessWindow::setCentralWidget(QWidget *widget)
|
||||||
|
{
|
||||||
|
if (m_centralWidget) {
|
||||||
|
m_centralLayout->removeWidget(m_centralWidget);
|
||||||
|
m_centralWidget->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_centralLayout->addWidget(widget);
|
||||||
|
m_centralWidget = widget;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FramelessWindow::installResizeCapture(QObject* widget)
|
||||||
|
{
|
||||||
|
widget->installEventFilter(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FramelessWindow::showEvent(QShowEvent *event)
|
||||||
|
{
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
fixWindowStyle(this);
|
||||||
|
#endif // Q_OS_WIN
|
||||||
|
return QWidget::showEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
// SPDX-FileCopyrightText: 2022 Gary Wang <wzc782970009@gmail.com>
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
#ifndef FRAMELESSWINDOW_H
|
||||||
|
#define FRAMELESSWINDOW_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QVBoxLayout;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
class FramelessWindow : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit FramelessWindow(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
void setCentralWidget(QWidget * widget);
|
||||||
|
void installResizeCapture(QObject* widget);
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
void showEvent(QShowEvent *event) override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool eventFilter(QObject *o, QEvent *e) override;
|
||||||
|
bool mouseHover(QHoverEvent* event, QWidget* wg);
|
||||||
|
bool mousePress(QMouseEvent* event);
|
||||||
|
|
||||||
|
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;
|
||||||
|
QWidget * m_centralWidget = nullptr; // just a pointer, doesn't take the ownership.
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FRAMELESSWINDOW_H
|
||||||
@@ -6,9 +6,6 @@
|
|||||||
|
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
|
||||||
#include <QStyleHints>
|
|
||||||
#include <QOperatingSystemVersion>
|
|
||||||
#include <QGuiApplication>
|
|
||||||
#include <QGraphicsSceneMouseEvent>
|
#include <QGraphicsSceneMouseEvent>
|
||||||
#include <QMimeData>
|
#include <QMimeData>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
@@ -19,33 +16,6 @@
|
|||||||
#include <QMovie>
|
#include <QMovie>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
|
||||||
static const QColor& ColorSchemaToTextForeground(Qt::ColorScheme colorScheme) {
|
|
||||||
// YYC MARK:
|
|
||||||
// If we are using Windows 10 and lower system or Qt which do not support "Windows 11"
|
|
||||||
// theme (lower than Qt 6.7), we should only support light mode.
|
|
||||||
// Because Qt's dark-mode-aware "Windows 11" theme is only well-supported on Windows 11.
|
|
||||||
#if defined(Q_OS_WIN)
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 7, 0)
|
|
||||||
colorScheme = Qt::ColorScheme::Light;
|
|
||||||
#else
|
|
||||||
if (QOperatingSystemVersion::current() < QOperatingSystemVersion::Windows11) {
|
|
||||||
colorScheme = Qt::ColorScheme::Light;
|
|
||||||
}
|
|
||||||
#endif // QT_VERSION < QT_VERSION_CHECK(6, 7, 0)
|
|
||||||
#endif // defined(Q_OS_WIN)
|
|
||||||
|
|
||||||
switch (colorScheme) {
|
|
||||||
case Qt::ColorScheme::Dark:
|
|
||||||
static QColor WHITE = QColor("White");
|
|
||||||
return WHITE;
|
|
||||||
case Qt::ColorScheme::Light:
|
|
||||||
case Qt::ColorScheme::Unknown:
|
|
||||||
default:
|
|
||||||
static QColor BLACK = QColor("Black");
|
|
||||||
return BLACK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class PGraphicsPixmapItem : public QGraphicsPixmapItem
|
class PGraphicsPixmapItem : public QGraphicsPixmapItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -129,8 +99,7 @@ private:
|
|||||||
GraphicsScene::GraphicsScene(QObject *parent)
|
GraphicsScene::GraphicsScene(QObject *parent)
|
||||||
: QGraphicsScene(parent)
|
: QGraphicsScene(parent)
|
||||||
{
|
{
|
||||||
showText(tr("Drag image here", "The same meaning of MainWindow's hint."));
|
showText(tr("Drag image here"));
|
||||||
connect(qGuiApp->styleHints(), &QStyleHints::colorSchemeChanged, this, &GraphicsScene::updateStyle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GraphicsScene::~GraphicsScene()
|
GraphicsScene::~GraphicsScene()
|
||||||
@@ -152,7 +121,7 @@ void GraphicsScene::showText(const QString &text)
|
|||||||
{
|
{
|
||||||
this->clear();
|
this->clear();
|
||||||
QGraphicsTextItem * textItem = this->addText(text);
|
QGraphicsTextItem * textItem = this->addText(text);
|
||||||
textItem->setDefaultTextColor(ColorSchemaToTextForeground(qGuiApp->styleHints()->colorScheme()));
|
textItem->setDefaultTextColor(QColor("White"));
|
||||||
m_theThing = textItem;
|
m_theThing = textItem;
|
||||||
this->setSceneRect(m_theThing->boundingRect());
|
this->setSceneRect(m_theThing->boundingRect());
|
||||||
}
|
}
|
||||||
@@ -200,57 +169,27 @@ bool GraphicsScene::trySetTransformationMode(Qt::TransformationMode mode, float
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Fetch graphics item as our custom animated item.
|
|
||||||
/// Return nullptr means this item is not animated item.
|
|
||||||
static PGraphicsMovieItem* fetchAnimatedItem(QGraphicsItem *item) {
|
|
||||||
return qgraphicsitem_cast<PGraphicsMovieItem *>(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GraphicsScene::canPauseAnimation() const {
|
|
||||||
return fetchAnimatedItem(m_theThing) != nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GraphicsScene::isPauseAnimation() const {
|
|
||||||
auto* animatedItem = fetchAnimatedItem(m_theThing);
|
|
||||||
if (animatedItem != nullptr) {
|
|
||||||
return animatedItem->movie()->state() == QMovie::Paused;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GraphicsScene::togglePauseAnimation()
|
bool GraphicsScene::togglePauseAnimation()
|
||||||
{
|
{
|
||||||
auto* animatedItem = fetchAnimatedItem(m_theThing);
|
PGraphicsMovieItem * animatedItem = qgraphicsitem_cast<PGraphicsMovieItem *>(m_theThing);
|
||||||
if (animatedItem != nullptr) {
|
if (animatedItem) {
|
||||||
animatedItem->movie()->setPaused(animatedItem->movie()->state() != QMovie::Paused);
|
animatedItem->movie()->setPaused(animatedItem->movie()->state() != QMovie::Paused);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
return false;
|
||||||
|
|
||||||
bool GraphicsScene::canSkipAnimationFrame() const {
|
|
||||||
return isPauseAnimation();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GraphicsScene::skipAnimationFrame(int delta)
|
bool GraphicsScene::skipAnimationFrame(int delta)
|
||||||
{
|
{
|
||||||
auto* animatedItem = fetchAnimatedItem(m_theThing);
|
PGraphicsMovieItem * animatedItem = qgraphicsitem_cast<PGraphicsMovieItem *>(m_theThing);
|
||||||
|
if (animatedItem) {
|
||||||
// Only paused animated item can skip frame
|
const int frameCount = animatedItem->movie()->frameCount();
|
||||||
if (animatedItem == nullptr) {
|
const int currentFrame = animatedItem->movie()->currentFrameNumber();
|
||||||
return false;
|
const int targetFrame = (currentFrame + delta) % frameCount;
|
||||||
|
animatedItem->movie()->setPaused(true);
|
||||||
|
return animatedItem->movie()->jumpToFrame(targetFrame);
|
||||||
}
|
}
|
||||||
if (animatedItem->movie()->state() != QMovie::Paused) {
|
return false;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Perform skip
|
|
||||||
const int frameCount = animatedItem->movie()->frameCount();
|
|
||||||
const int currentFrame = animatedItem->movie()->currentFrameNumber();
|
|
||||||
const int targetFrame = (currentFrame + delta) % frameCount;
|
|
||||||
return animatedItem->movie()->jumpToFrame(targetFrame);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QPixmap GraphicsScene::renderToPixmap()
|
QPixmap GraphicsScene::renderToPixmap()
|
||||||
@@ -267,14 +206,3 @@ QPixmap GraphicsScene::renderToPixmap()
|
|||||||
|
|
||||||
return pixmap;
|
return pixmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsScene::updateStyle(Qt::ColorScheme colorScheme) {
|
|
||||||
Q_UNUSED(colorScheme)
|
|
||||||
|
|
||||||
QGraphicsItem * item = this->m_theThing;
|
|
||||||
if (item == nullptr) return;
|
|
||||||
QGraphicsTextItem * textItem = qgraphicsitem_cast<QGraphicsTextItem*>(item);
|
|
||||||
if (textItem == nullptr) return;
|
|
||||||
|
|
||||||
textItem->setDefaultTextColor(ColorSchemaToTextForeground(colorScheme));
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -21,26 +21,11 @@ public:
|
|||||||
|
|
||||||
bool trySetTransformationMode(Qt::TransformationMode mode, float scaleHint);
|
bool trySetTransformationMode(Qt::TransformationMode mode, float scaleHint);
|
||||||
|
|
||||||
/// Check whether current thing is animation.
|
|
||||||
/// Only animation thing can be paused.
|
|
||||||
bool canPauseAnimation() const;
|
|
||||||
/// Check whether we are pasuing an animation graphics.
|
|
||||||
bool isPauseAnimation() const;
|
|
||||||
/// Toggle animation graphics pause state.
|
|
||||||
/// Return true for successfully toggle, otherwise false.
|
|
||||||
bool togglePauseAnimation();
|
bool togglePauseAnimation();
|
||||||
/// Check whether we can skip animation frame.
|
|
||||||
/// Only paused animation graphics can skip frame.
|
|
||||||
bool canSkipAnimationFrame() const;
|
|
||||||
/// Skip paused animation graphics with given frame.
|
|
||||||
/// Return true for successfully skip, otherwise false.
|
|
||||||
bool skipAnimationFrame(int delta = 1);
|
bool skipAnimationFrame(int delta = 1);
|
||||||
|
|
||||||
QPixmap renderToPixmap();
|
QPixmap renderToPixmap();
|
||||||
|
|
||||||
private slots:
|
|
||||||
void updateStyle(Qt::ColorScheme colorScheme);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QGraphicsItem * m_theThing = nullptr;
|
QGraphicsItem * m_theThing = nullptr;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -7,8 +7,6 @@
|
|||||||
#include "graphicsscene.h"
|
#include "graphicsscene.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
|
||||||
#include <QStyleHints>
|
|
||||||
#include <QOperatingSystemVersion>
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QColorSpace>
|
#include <QColorSpace>
|
||||||
#include <QMouseEvent>
|
#include <QMouseEvent>
|
||||||
@@ -25,12 +23,11 @@ GraphicsView::GraphicsView(QWidget *parent)
|
|||||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
setResizeAnchor(QGraphicsView::AnchorUnderMouse);
|
setResizeAnchor(QGraphicsView::AnchorUnderMouse);
|
||||||
setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
|
setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
|
||||||
|
setStyleSheet("background-color: rgba(0, 0, 0, 220);"
|
||||||
|
"border-radius: 3px;");
|
||||||
setAcceptDrops(false);
|
setAcceptDrops(false);
|
||||||
setCheckerboardEnabled(false);
|
setCheckerboardEnabled(false);
|
||||||
|
|
||||||
updateStyle(qGuiApp->styleHints()->colorScheme());
|
|
||||||
connect(qGuiApp->styleHints(), &QStyleHints::colorSchemeChanged, this, &GraphicsView::updateStyle);
|
|
||||||
|
|
||||||
connect(horizontalScrollBar(), &QScrollBar::valueChanged, this, &GraphicsView::viewportRectChanged);
|
connect(horizontalScrollBar(), &QScrollBar::valueChanged, this, &GraphicsView::viewportRectChanged);
|
||||||
connect(verticalScrollBar(), &QScrollBar::valueChanged, this, &GraphicsView::viewportRectChanged);
|
connect(verticalScrollBar(), &QScrollBar::valueChanged, this, &GraphicsView::viewportRectChanged);
|
||||||
}
|
}
|
||||||
@@ -140,7 +137,8 @@ void GraphicsView::resetTransform()
|
|||||||
|
|
||||||
void GraphicsView::zoomView(qreal scaleFactor)
|
void GraphicsView::zoomView(qreal scaleFactor)
|
||||||
{
|
{
|
||||||
m_enableFitToScreen = 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());
|
||||||
@@ -224,19 +222,6 @@ void GraphicsView::fitByOrientation(Qt::Orientation ori, bool scaleDownOnly)
|
|||||||
QRectF originalScene = sceneRect();
|
QRectF originalScene = sceneRect();
|
||||||
QTransform currentTransform = transform();
|
QTransform currentTransform = transform();
|
||||||
|
|
||||||
// TODO:
|
|
||||||
// I guess following code may be optimized by matrix arithmetic operation.
|
|
||||||
// There is an AI given solution. But I didn't use it.
|
|
||||||
// Because I want to keep the same behavior of upstream.
|
|
||||||
|
|
||||||
// // Horizontal fit: Let the position of top center of viewport, (cx, 0), be inversely mapped to scene.
|
|
||||||
// // And compensate the behavior of `centerOn` which put given point to the center of viewport.
|
|
||||||
// QTransform inv = currentTransform.inverted();
|
|
||||||
// QPointF viewCx = viewport()->rect().center().x();
|
|
||||||
// QPointF viewCy = viewport()->rect().center().y();
|
|
||||||
// // The target is viewport top center. Its y=0, so `centerOn` required scene point is (viewCx, -viewCy).
|
|
||||||
// centerOn(inv.map(QPointF(viewCx, -viewCy)));
|
|
||||||
|
|
||||||
if (ori == Qt::Horizontal) {
|
if (ori == Qt::Horizontal) {
|
||||||
// For horizontal fit (fit by width), position at top (for tall images)
|
// For horizontal fit (fit by width), position at top (for tall images)
|
||||||
// Find the scene point that corresponds to the top-center of the transformed image
|
// Find the scene point that corresponds to the top-center of the transformed image
|
||||||
@@ -289,12 +274,37 @@ void GraphicsView::fitByOrientation(Qt::Orientation ori, bool scaleDownOnly)
|
|||||||
centerOn(sceneLeftCenter);
|
centerOn(sceneLeftCenter);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_enableFitToScreen = false;
|
m_enableFitInView = false;
|
||||||
|
|
||||||
applyTransformationModeByScaleFactor();
|
applyTransformationModeByScaleFactor();
|
||||||
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()) {
|
||||||
@@ -302,6 +312,14 @@ 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);
|
||||||
@@ -312,7 +330,8 @@ void GraphicsView::displayScene()
|
|||||||
emit navigatorViewRequired(false, transform());
|
emit navigatorViewRequired(false, transform());
|
||||||
}
|
}
|
||||||
|
|
||||||
m_enableFitToScreen = true;
|
m_longImageMode = false;
|
||||||
|
m_enableFitInView = true;
|
||||||
m_firstUserMediaLoaded = true;
|
m_firstUserMediaLoaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,12 +345,17 @@ bool GraphicsView::isSceneBiggerThanView() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Automately do fit in view when viewport(window) smaller than image original size.
|
// Automately do fit in view when viewport(window) smaller than image original size.
|
||||||
void GraphicsView::setEnableAutoFitToScreen(bool enable)
|
void GraphicsView::setEnableAutoFitInView(bool enable)
|
||||||
{
|
{
|
||||||
m_enableFitToScreen = enable;
|
m_enableFitInView = enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GraphicsView::isAvoidResetTransform() const
|
void GraphicsView::setLongImageMode(bool enable)
|
||||||
|
{
|
||||||
|
m_longImageMode = enable;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GraphicsView::avoidResetTransform() const
|
||||||
{
|
{
|
||||||
return m_avoidResetTransform;
|
return m_avoidResetTransform;
|
||||||
}
|
}
|
||||||
@@ -341,15 +365,6 @@ void GraphicsView::setAvoidResetTransform(bool avoidReset)
|
|||||||
m_avoidResetTransform = avoidReset;
|
m_avoidResetTransform = avoidReset;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GraphicsView::isCheckerboard() const {
|
|
||||||
return m_checkerboardEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GraphicsView::toggleCheckerboard(bool invertCheckerboardColor)
|
|
||||||
{
|
|
||||||
setCheckerboardEnabled(!m_checkerboardEnabled, invertCheckerboardColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline double zeroOrOne(double number)
|
inline double zeroOrOne(double number)
|
||||||
{
|
{
|
||||||
return qFuzzyIsNull(number) ? 0 : (number > 0 ? 1 : -1);
|
return qFuzzyIsNull(number) ? 0 : (number > 0 ? 1 : -1);
|
||||||
@@ -364,37 +379,9 @@ QTransform GraphicsView::resetScale(const QTransform & orig)
|
|||||||
orig.dx(), orig.dy());
|
orig.dx(), orig.dy());
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsView::updateStyle(Qt::ColorScheme colorScheme) {
|
void GraphicsView::toggleCheckerboard(bool invertCheckerboardColor)
|
||||||
// YYC MARK:
|
{
|
||||||
// If we are using Windows 10 and lower system or Qt which do not support "Windows 11"
|
setCheckerboardEnabled(!m_checkerboardEnabled, invertCheckerboardColor);
|
||||||
// theme (lower than Qt 6.7), we should only support light mode.
|
|
||||||
// Because Qt's dark-mode-aware "Windows 11" theme is only well-supported on Windows 11.
|
|
||||||
#if defined(Q_OS_WIN)
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 7, 0)
|
|
||||||
colorScheme = Qt::ColorScheme::Light;
|
|
||||||
#else
|
|
||||||
if (QOperatingSystemVersion::current() < QOperatingSystemVersion::Windows11) {
|
|
||||||
colorScheme = Qt::ColorScheme::Light;
|
|
||||||
}
|
|
||||||
#endif // QT_VERSION < QT_VERSION_CHECK(6, 7, 0)
|
|
||||||
#endif // defined(Q_OS_WIN)
|
|
||||||
|
|
||||||
switch (colorScheme) {
|
|
||||||
case Qt::ColorScheme::Dark:
|
|
||||||
setStyleSheet(R"#(
|
|
||||||
border-style: none;
|
|
||||||
background-color: black;
|
|
||||||
)#");
|
|
||||||
break;
|
|
||||||
case Qt::ColorScheme::Light:
|
|
||||||
case Qt::ColorScheme::Unknown:
|
|
||||||
default:
|
|
||||||
setStyleSheet(R"#(
|
|
||||||
border-style: none;
|
|
||||||
background-color: white;
|
|
||||||
)#");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsView::mousePressEvent(QMouseEvent *event)
|
void GraphicsView::mousePressEvent(QMouseEvent *event)
|
||||||
@@ -440,11 +427,16 @@ void GraphicsView::wheelEvent(QWheelEvent *event)
|
|||||||
|
|
||||||
void GraphicsView::resizeEvent(QResizeEvent *event)
|
void GraphicsView::resizeEvent(QResizeEvent *event)
|
||||||
{
|
{
|
||||||
if (m_enableFitToScreen) {
|
if (m_longImageMode) {
|
||||||
|
// 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()
|
||||||
// but we leave the m_enableToScreen value unchanged in case
|
// but we leave the m_enableFitInView value unchanged in case
|
||||||
// user resize down the window again.
|
// user resize down the window again.
|
||||||
} else if (originalSizeSmallerThanWindow && scaleFactor() < 1) {
|
} else if (originalSizeSmallerThanWindow && scaleFactor() < 1) {
|
||||||
resetScale();
|
resetScale();
|
||||||
|
|||||||
@@ -38,22 +38,24 @@ public:
|
|||||||
|
|
||||||
void displayScene();
|
void displayScene();
|
||||||
bool isSceneBiggerThanView() const;
|
bool isSceneBiggerThanView() const;
|
||||||
void setEnableAutoFitToScreen(bool enable = true);
|
void setEnableAutoFitInView(bool enable = true);
|
||||||
|
void setLongImageMode(bool enable = true);
|
||||||
|
|
||||||
bool isAvoidResetTransform() const;
|
bool avoidResetTransform() const;
|
||||||
void setAvoidResetTransform(bool avoidReset);
|
void setAvoidResetTransform(bool avoidReset);
|
||||||
|
|
||||||
bool isCheckerboard() const;
|
|
||||||
void toggleCheckerboard(bool invertCheckerboardColor = false);
|
|
||||||
|
|
||||||
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();
|
||||||
|
|
||||||
private slots:
|
public slots:
|
||||||
void updateStyle(Qt::ColorScheme colorScheme);
|
void toggleCheckerboard(bool invertCheckerboardColor = false);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void mousePressEvent(QMouseEvent * event) override;
|
void mousePressEvent(QMouseEvent * event) override;
|
||||||
@@ -72,7 +74,8 @@ private:
|
|||||||
// Consider switch to 3 state for "no fit", "always fit" and "fit when view is smaller"?
|
// Consider switch to 3 state for "no fit", "always fit" and "fit when view is smaller"?
|
||||||
// ... or even more? e.g. "fit/snap width" things...
|
// ... 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_enableFitToScreen = 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;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
#include "playlistmanager.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
|
||||||
#ifdef Q_OS_MACOS
|
#ifdef Q_OS_MACOS
|
||||||
@@ -67,19 +68,21 @@ int main(int argc, char *argv[])
|
|||||||
a.installEventFilter(fileOpenEventHandler);
|
a.installEventFilter(fileOpenEventHandler);
|
||||||
a.connect(fileOpenEventHandler, &FileOpenEventHandler::fileOpen, [&w](const QUrl & url){
|
a.connect(fileOpenEventHandler, &FileOpenEventHandler::fileOpen, [&w](const QUrl & url){
|
||||||
if (w.isHidden()) {
|
if (w.isHidden()) {
|
||||||
|
w.setWindowOpacity(1);
|
||||||
w.showNormal();
|
w.showNormal();
|
||||||
} else {
|
} else {
|
||||||
w.activateWindow();
|
w.activateWindow();
|
||||||
}
|
}
|
||||||
w.showFiles({url});
|
w.showUrls({url});
|
||||||
w.initWindowSize();
|
w.initWindowSize();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Handle dock icon clicks to show hidden window
|
// Handle dock icon clicks to show hidden window
|
||||||
a.connect(&a, &QApplication::applicationStateChanged, [&w](Qt::ApplicationState state) {
|
a.connect(&a, &QApplication::applicationStateChanged, [&w](Qt::ApplicationState state) {
|
||||||
if (state == Qt::ApplicationActive && w.isHidden()) {
|
if (state == Qt::ApplicationActive && w.isHidden()) {
|
||||||
w.showFiles({});
|
w.showUrls({});
|
||||||
w.galleryCurrent(false);
|
w.galleryCurrent(true, true);
|
||||||
|
w.setWindowOpacity(1);
|
||||||
w.showNormal();
|
w.showNormal();
|
||||||
w.raise();
|
w.raise();
|
||||||
w.activateWindow();
|
w.activateWindow();
|
||||||
@@ -87,8 +90,12 @@ int main(int argc, char *argv[])
|
|||||||
});
|
});
|
||||||
#endif // Q_OS_MACOS
|
#endif // Q_OS_MACOS
|
||||||
|
|
||||||
QStringList fileList = parser.positionalArguments();
|
QStringList urlStrList = parser.positionalArguments();
|
||||||
w.showFiles(fileList);
|
QList<QUrl> && urlList = PlaylistManager::convertToUrlList(urlStrList);
|
||||||
|
|
||||||
|
if (!urlList.isEmpty()) {
|
||||||
|
w.showUrls(urlList);
|
||||||
|
}
|
||||||
|
|
||||||
w.initWindowSize();
|
w.initWindowSize();
|
||||||
|
|
||||||
|
|||||||
@@ -5,19 +5,25 @@
|
|||||||
#ifndef MAINWINDOW_H
|
#ifndef MAINWINDOW_H
|
||||||
#define MAINWINDOW_H
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
#include <QWidget>
|
#include "framelesswindow.h"
|
||||||
|
|
||||||
|
#include <QParallelAnimationGroup>
|
||||||
|
#include <QPropertyAnimation>
|
||||||
|
#include <QPushButton>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QGraphicsOpacityEffect;
|
||||||
|
class QGraphicsView;
|
||||||
class QFileSystemWatcher;
|
class QFileSystemWatcher;
|
||||||
namespace Ui {
|
|
||||||
class MainWindow;
|
|
||||||
}
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
class ActionManager;
|
class ActionManager;
|
||||||
class PlaylistManager;
|
class PlaylistManager;
|
||||||
|
class ToolButton;
|
||||||
class MainWindow : public QWidget
|
class GraphicsView;
|
||||||
|
class NavigatorView;
|
||||||
|
class BottomButtonGroup;
|
||||||
|
class MainWindow : public FramelessWindow
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@@ -25,26 +31,42 @@ public:
|
|||||||
explicit MainWindow(QWidget *parent = nullptr);
|
explicit MainWindow(QWidget *parent = nullptr);
|
||||||
~MainWindow() override;
|
~MainWindow() override;
|
||||||
|
|
||||||
void showFiles(const QStringList& files);
|
void showUrls(const QList<QUrl> &urls);
|
||||||
void showFiles(const QList<QUrl>& urls);
|
|
||||||
void initWindowSize();
|
void initWindowSize();
|
||||||
|
void adjustWindowSizeBySceneRect();
|
||||||
|
QUrl currentImageFileUrl() const;
|
||||||
|
|
||||||
void clearGallery();
|
void clearGallery();
|
||||||
void galleryPrev();
|
void galleryPrev();
|
||||||
void galleryNext();
|
void galleryNext();
|
||||||
void galleryCurrent(bool fromFileWatcher);
|
void galleryCurrent(bool showLoadImageHintWhenEmpty, bool reloadImage);
|
||||||
|
|
||||||
static QStringList supportedImageFormats();
|
static QStringList supportedImageFormats();
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
|
void showEvent(QShowEvent *event) override;
|
||||||
|
void enterEvent(QEnterEvent *event) override;
|
||||||
|
void leaveEvent(QEvent *event) override;
|
||||||
|
void mousePressEvent(QMouseEvent *event) override;
|
||||||
|
void mouseMoveEvent(QMouseEvent *event) override;
|
||||||
|
void mouseReleaseEvent(QMouseEvent *event) override;
|
||||||
|
void mouseDoubleClickEvent(QMouseEvent *event) override;
|
||||||
void wheelEvent(QWheelEvent *event) override;
|
void wheelEvent(QWheelEvent *event) override;
|
||||||
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
void contextMenuEvent(QContextMenuEvent *event) override;
|
void contextMenuEvent(QContextMenuEvent *event) override;
|
||||||
void dragEnterEvent(QDragEnterEvent *event) override;
|
void dragEnterEvent(QDragEnterEvent *event) override;
|
||||||
void dragMoveEvent(QDragMoveEvent *event) override;
|
void dragMoveEvent(QDragMoveEvent *event) override;
|
||||||
void dropEvent(QDropEvent *event) override;
|
void dropEvent(QDropEvent *event) override;
|
||||||
|
|
||||||
void centerWindow();
|
void centerWindow();
|
||||||
|
void closeWindow();
|
||||||
|
void updateWidgetsPosition();
|
||||||
|
void toggleProtectedMode();
|
||||||
|
void toggleStayOnTop();
|
||||||
void toggleAvoidResetTransform();
|
void toggleAvoidResetTransform();
|
||||||
|
bool stayOnTop() const;
|
||||||
|
bool canPaste() const;
|
||||||
|
void quitAppAction(bool force = false);
|
||||||
void toggleFullscreen();
|
void toggleFullscreen();
|
||||||
void toggleMaximize();
|
void toggleMaximize();
|
||||||
|
|
||||||
@@ -52,46 +74,62 @@ protected:
|
|||||||
QSize sizeHint() const override;
|
QSize sizeHint() const override;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_actionCopyPixmap_triggered();
|
void on_actionOpen_triggered();
|
||||||
void on_actionCopyFilePath_triggered();
|
|
||||||
|
void on_actionActualSize_triggered();
|
||||||
|
void on_actionToggleMaximize_triggered();
|
||||||
|
void on_actionZoomIn_triggered();
|
||||||
|
void on_actionZoomOut_triggered();
|
||||||
|
void on_actionToggleCheckerboard_triggered();
|
||||||
|
void on_actionRotateClockwise_triggered();
|
||||||
|
void on_actionRotateCounterClockwise_triggered();
|
||||||
|
|
||||||
void on_actionPrevPicture_triggered();
|
void on_actionPrevPicture_triggered();
|
||||||
void on_actionNextPicture_triggered();
|
void on_actionNextPicture_triggered();
|
||||||
|
|
||||||
void on_actionActualSize_triggered();
|
|
||||||
void on_actionFitToScreen_triggered();
|
|
||||||
void on_actionFitByWidth_triggered();
|
|
||||||
void on_actionFitByHeight_triggered();
|
|
||||||
void on_actionZoomIn_triggered();
|
|
||||||
void on_actionZoomOut_triggered();
|
|
||||||
|
|
||||||
void on_actionFlipHorizontal_triggered();
|
|
||||||
void on_actionFlipVertical_triggered();
|
|
||||||
void on_actionRotateClockwise_triggered();
|
|
||||||
void on_actionRotateCounterClockwise_triggered();
|
|
||||||
|
|
||||||
void on_actionToggleAvoidResetTransform_triggered();
|
|
||||||
void on_actionToggleCheckerboard_triggered();
|
|
||||||
void on_actionTogglePauseAnimation_triggered();
|
void on_actionTogglePauseAnimation_triggered();
|
||||||
void on_actionAnimationNextFrame_triggered();
|
void on_actionAnimationNextFrame_triggered();
|
||||||
|
|
||||||
|
void on_actionHorizontalFlip_triggered();
|
||||||
|
void on_actionFitInView_triggered();
|
||||||
|
void on_actionFitByWidth_triggered();
|
||||||
|
void on_actionFitLongImage_triggered();
|
||||||
|
void on_actionCopyPixmap_triggered();
|
||||||
|
void on_actionCopyFilePath_triggered();
|
||||||
|
void on_actionPaste_triggered();
|
||||||
void on_actionTrash_triggered();
|
void on_actionTrash_triggered();
|
||||||
void on_actionLocateInFileManager_triggered();
|
void on_actionToggleStayOnTop_triggered();
|
||||||
void on_actionProperties_triggered();
|
void on_actionToggleProtectMode_triggered();
|
||||||
|
void on_actionToggleAvoidResetTransform_triggered();
|
||||||
void on_actionSettings_triggered();
|
void on_actionSettings_triggered();
|
||||||
void on_actionHelp_triggered();
|
void on_actionHelp_triggered();
|
||||||
|
void on_actionProperties_triggered();
|
||||||
|
void on_actionLocateInFileManager_triggered();
|
||||||
|
void on_actionQuitApp_triggered();
|
||||||
|
|
||||||
|
void doCloseWindow();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool updateFileWatcher(const QString & basePath = QString());
|
bool updateFileWatcher(const QString & basePath = QString());
|
||||||
void updateActionState();
|
void updateGalleryButtonsVisibility();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QT_PREPEND_NAMESPACE(Ui::MainWindow) *ui;
|
|
||||||
|
|
||||||
ActionManager *m_am;
|
ActionManager *m_am;
|
||||||
PlaylistManager *m_pm;
|
PlaylistManager *m_pm;
|
||||||
|
|
||||||
|
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;
|
||||||
|
bool m_protectedMode = false;
|
||||||
|
bool m_clickedOnWindow = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
|||||||
@@ -1,169 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>MainWindow</class>
|
|
||||||
<widget class="QWidget" name="MainWindow">
|
|
||||||
<property name="windowModality">
|
|
||||||
<enum>Qt::NonModal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>640</width>
|
|
||||||
<height>480</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="acceptDrops">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<layout class="QVBoxLayout" name="m_centralLayout">
|
|
||||||
<property name="spacing">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="leftMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<item>
|
|
||||||
<widget class="GraphicsView" name="m_gv">
|
|
||||||
<property name="frameShape">
|
|
||||||
<enum>QFrame::NoFrame</enum>
|
|
||||||
</property>
|
|
||||||
<property name="verticalScrollBarPolicy">
|
|
||||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
|
||||||
</property>
|
|
||||||
<property name="horizontalScrollBarPolicy">
|
|
||||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QWidget" name="bottomBar" native="true">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>0</width>
|
|
||||||
<height>72</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>16777215</width>
|
|
||||||
<height>72</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<layout class="QHBoxLayout" name="bottomBarLayout">
|
|
||||||
<property name="spacing">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="leftMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<item>
|
|
||||||
<widget class="QWidget" name="m_navPH" native="true">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>99</width>
|
|
||||||
<height>72</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>99</width>
|
|
||||||
<height>72</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="leftSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="BottomButtonGroup" name="m_bottomButtonGroup"/>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="rightSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="NavigatorView" name="m_nav">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>99</width>
|
|
||||||
<height>72</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>99</width>
|
|
||||||
<height>72</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="frameShape">
|
|
||||||
<enum>QFrame::NoFrame</enum>
|
|
||||||
</property>
|
|
||||||
<property name="verticalScrollBarPolicy">
|
|
||||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
|
||||||
</property>
|
|
||||||
<property name="horizontalScrollBarPolicy">
|
|
||||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
<widget class="QMenu" name="m_subMenuCopy">
|
|
||||||
<property name="title">
|
|
||||||
<string>&Copy</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QMenu" name="m_subMenuTransform">
|
|
||||||
<property name="title">
|
|
||||||
<string>&Transform</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QMenu" name="m_menu"/>
|
|
||||||
</widget>
|
|
||||||
<customwidgets>
|
|
||||||
<customwidget>
|
|
||||||
<class>GraphicsView</class>
|
|
||||||
<extends>QGraphicsView</extends>
|
|
||||||
<header>graphicsview.h</header>
|
|
||||||
</customwidget>
|
|
||||||
<customwidget>
|
|
||||||
<class>NavigatorView</class>
|
|
||||||
<extends>QGraphicsView</extends>
|
|
||||||
<header>navigatorview.h</header>
|
|
||||||
</customwidget>
|
|
||||||
<customwidget>
|
|
||||||
<class>BottomButtonGroup</class>
|
|
||||||
<extends>QGroupBox</extends>
|
|
||||||
<header>bottombuttongroup.h</header>
|
|
||||||
</customwidget>
|
|
||||||
</customwidgets>
|
|
||||||
<resources/>
|
|
||||||
<connections/>
|
|
||||||
</ui>
|
|
||||||
@@ -3,12 +3,12 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
#include "metadatadialog.h"
|
#include "metadatadialog.h"
|
||||||
#include "ui_metadatadialog.h"
|
|
||||||
|
|
||||||
#include <QDialogButtonBox>
|
#include <QDialogButtonBox>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QStyledItemDelegate>
|
#include <QStyledItemDelegate>
|
||||||
#include <QTreeView>
|
#include <QTreeView>
|
||||||
|
#include <QVBoxLayout>
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
|
|
||||||
#include "metadatamodel.h"
|
#include "metadatamodel.h"
|
||||||
@@ -73,33 +73,30 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
MetadataDialog::MetadataDialog(QWidget *parent)
|
MetadataDialog::MetadataDialog(QWidget *parent)
|
||||||
: QDialog(parent), ui(new QT_PREPEND_NAMESPACE(Ui::MetadataDialog))
|
: QDialog(parent)
|
||||||
|
, m_treeView(new PropertyTreeView(this))
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
|
||||||
setWindowFlag(Qt::WindowContextHelpButtonHint, false);
|
|
||||||
|
|
||||||
// YYC MARK:
|
|
||||||
// Because we use custom QTreeView and we do not want to expose it to public domain.
|
|
||||||
// So I have to use this way as the compromise.
|
|
||||||
|
|
||||||
// Create our custom QTreeView and insert them
|
|
||||||
m_treeView = new PropertyTreeView(this);
|
|
||||||
auto* layout = ui->verticalLayout;
|
|
||||||
const int index = layout->indexOf(ui->m_buttonBox);
|
|
||||||
layout->insertWidget(index, m_treeView);
|
|
||||||
|
|
||||||
// Setup our custom QTreeView
|
|
||||||
m_treeView->setRootIsDecorated(false);
|
m_treeView->setRootIsDecorated(false);
|
||||||
m_treeView->setIndentation(0);
|
m_treeView->setIndentation(0);
|
||||||
m_treeView->setItemDelegate(new PropertyTreeItemDelegate(m_treeView));
|
m_treeView->setItemDelegate(new PropertyTreeItemDelegate(m_treeView));
|
||||||
m_treeView->header()->resizeSection(0, sizeHint().width() / 2);
|
m_treeView->header()->resizeSection(0, sizeHint().width() / 2);
|
||||||
|
|
||||||
connect(ui->m_buttonBox, &QDialogButtonBox::rejected, this, &QDialog::close);
|
setWindowTitle(tr("Image Metadata"));
|
||||||
|
|
||||||
|
QDialogButtonBox * buttonBox = new QDialogButtonBox(QDialogButtonBox::Close);
|
||||||
|
|
||||||
|
setLayout(new QVBoxLayout);
|
||||||
|
layout()->addWidget(m_treeView);
|
||||||
|
layout()->addWidget(buttonBox);
|
||||||
|
|
||||||
|
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::close);
|
||||||
|
|
||||||
|
setWindowFlag(Qt::WindowContextHelpButtonHint, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
MetadataDialog::~MetadataDialog()
|
MetadataDialog::~MetadataDialog()
|
||||||
{
|
{
|
||||||
delete ui;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MetadataDialog::setMetadataModel(MetadataModel * model)
|
void MetadataDialog::setMetadataModel(MetadataModel * model)
|
||||||
|
|||||||
@@ -11,12 +11,6 @@ QT_BEGIN_NAMESPACE
|
|||||||
class QTreeView;
|
class QTreeView;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
namespace Ui {
|
|
||||||
class MetadataDialog;
|
|
||||||
}
|
|
||||||
QT_END_NAMESPACE
|
|
||||||
|
|
||||||
class MetadataModel;
|
class MetadataModel;
|
||||||
class MetadataDialog : public QDialog
|
class MetadataDialog : public QDialog
|
||||||
{
|
{
|
||||||
@@ -31,7 +25,6 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QTreeView * m_treeView = nullptr;
|
QTreeView * m_treeView = nullptr;
|
||||||
QT_PREPEND_NAMESPACE(Ui::MetadataDialog) *ui;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // METADATADIALOG_H
|
#endif // METADATADIALOG_H
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>MetadataDialog</class>
|
|
||||||
<widget class="QDialog" name="MetadataDialog">
|
|
||||||
<property name="windowModality">
|
|
||||||
<enum>Qt::NonModal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>Image Metadata</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QDialogButtonBox" name="m_buttonBox">
|
|
||||||
<property name="standardButtons">
|
|
||||||
<set>QDialogButtonBox::Close</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections/>
|
|
||||||
</ui>
|
|
||||||
@@ -5,9 +5,8 @@
|
|||||||
#include "navigatorview.h"
|
#include "navigatorview.h"
|
||||||
|
|
||||||
#include "graphicsview.h"
|
#include "graphicsview.h"
|
||||||
|
#include "opacityhelper.h"
|
||||||
|
|
||||||
#include <QStyleHints>
|
|
||||||
#include <QOperatingSystemVersion>
|
|
||||||
#include <QMouseEvent>
|
#include <QMouseEvent>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
@@ -15,12 +14,12 @@
|
|||||||
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);
|
||||||
|
setStyleSheet("background-color: rgba(0, 0, 0, 120);"
|
||||||
updateStyle(qGuiApp->styleHints()->colorScheme());
|
"border-radius: 3px;");
|
||||||
connect(qGuiApp->styleHints(), &QStyleHints::colorSchemeChanged, this, &NavigatorView::updateStyle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// doesn't take or manage its ownership
|
// doesn't take or manage its ownership
|
||||||
@@ -29,6 +28,11 @@ 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
|
||||||
@@ -41,39 +45,6 @@ void NavigatorView::updateMainViewportRegion()
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void NavigatorView::updateStyle(Qt::ColorScheme colorScheme) {
|
|
||||||
// YYC MARK:
|
|
||||||
// If we are using Windows 10 and lower system or Qt which do not support "Windows 11"
|
|
||||||
// theme (lower than Qt 6.7), we should only support light mode.
|
|
||||||
// Because Qt's dark-mode-aware "Windows 11" theme is only well-supported on Windows 11.
|
|
||||||
#if defined(Q_OS_WIN)
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 7, 0)
|
|
||||||
colorScheme = Qt::ColorScheme::Light;
|
|
||||||
#else
|
|
||||||
if (QOperatingSystemVersion::current() < QOperatingSystemVersion::Windows11) {
|
|
||||||
colorScheme = Qt::ColorScheme::Light;
|
|
||||||
}
|
|
||||||
#endif // QT_VERSION < QT_VERSION_CHECK(6, 7, 0)
|
|
||||||
#endif // defined(Q_OS_WIN)
|
|
||||||
|
|
||||||
switch (colorScheme) {
|
|
||||||
case Qt::ColorScheme::Dark:
|
|
||||||
setStyleSheet(R"#(
|
|
||||||
border-style: none;
|
|
||||||
background-color: rgba(255, 255, 255, 70);
|
|
||||||
)#");
|
|
||||||
break;
|
|
||||||
case Qt::ColorScheme::Light:
|
|
||||||
case Qt::ColorScheme::Unknown:
|
|
||||||
default:
|
|
||||||
setStyleSheet(R"#(
|
|
||||||
border-style: none;
|
|
||||||
background-color: rgba(0, 0, 0, 70);
|
|
||||||
)#");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void NavigatorView::mousePressEvent(QMouseEvent *event)
|
void NavigatorView::mousePressEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
m_mouseDown = true;
|
m_mouseDown = true;
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include <QGraphicsView>
|
#include <QGraphicsView>
|
||||||
|
|
||||||
|
class OpacityHelper;
|
||||||
class GraphicsView;
|
class GraphicsView;
|
||||||
class NavigatorView : public QGraphicsView
|
class NavigatorView : public QGraphicsView
|
||||||
{
|
{
|
||||||
@@ -15,13 +16,11 @@ 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();
|
||||||
|
|
||||||
private slots:
|
|
||||||
void updateStyle(Qt::ColorScheme colorScheme);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void mousePressEvent(QMouseEvent * event) override;
|
void mousePressEvent(QMouseEvent * event) override;
|
||||||
void mouseMoveEvent(QMouseEvent * event) override;
|
void mouseMoveEvent(QMouseEvent * event) override;
|
||||||
@@ -33,6 +32,7 @@ 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
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
// 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();
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
// 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
|
||||||
@@ -3,107 +3,194 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
#include "playlistmanager.h"
|
#include "playlistmanager.h"
|
||||||
#include "playlistscout.h"
|
|
||||||
|
|
||||||
#include <QCollator>
|
#include <QCollator>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
|
|
||||||
PlaylistManager::PlaylistManager(QObject *parent)
|
PlaylistModel::PlaylistModel(QObject *parent)
|
||||||
: QObject(parent)
|
: QAbstractListModel(parent)
|
||||||
, m_currentIndex(std::nullopt)
|
|
||||||
, m_playlist()
|
|
||||||
, m_allowedSuffixes()
|
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PlaylistModel::~PlaylistModel()
|
||||||
|
= default;
|
||||||
|
|
||||||
|
void PlaylistModel::setPlaylist(const QList<QUrl> &urls)
|
||||||
|
{
|
||||||
|
beginResetModel();
|
||||||
|
m_playlist = urls;
|
||||||
|
endResetModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
QModelIndex PlaylistModel::loadPlaylist(const QList<QUrl> & urls)
|
||||||
|
{
|
||||||
|
if (urls.isEmpty()) return {};
|
||||||
|
if (urls.count() == 1) {
|
||||||
|
return loadPlaylist(urls.constFirst());
|
||||||
|
} else {
|
||||||
|
setPlaylist(urls);
|
||||||
|
return index(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QModelIndex PlaylistModel::loadPlaylist(const QUrl &url)
|
||||||
|
{
|
||||||
|
QFileInfo info(url.toLocalFile());
|
||||||
|
QDir dir(info.path());
|
||||||
|
QString && currentFileName = info.fileName();
|
||||||
|
|
||||||
|
if (dir.path() == m_currentDir) {
|
||||||
|
int idx = indexOf(url);
|
||||||
|
return idx == -1 ? appendToPlaylist(url) : index(idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList entryList = dir.entryList(
|
||||||
|
m_autoLoadSuffixes,
|
||||||
|
QDir::Files | QDir::NoSymLinks, QDir::NoSort);
|
||||||
|
|
||||||
|
QCollator collator;
|
||||||
|
collator.setNumericMode(true);
|
||||||
|
|
||||||
|
std::sort(entryList.begin(), entryList.end(), collator);
|
||||||
|
|
||||||
|
QList<QUrl> playlist;
|
||||||
|
|
||||||
|
int idx = -1;
|
||||||
|
for (int i = 0; i < entryList.count(); i++) {
|
||||||
|
const QString & fileName = entryList.at(i);
|
||||||
|
const QString & oneEntry = dir.absoluteFilePath(fileName);
|
||||||
|
const QUrl & url = QUrl::fromLocalFile(oneEntry);
|
||||||
|
playlist.append(url);
|
||||||
|
if (fileName == currentFileName) {
|
||||||
|
idx = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (idx == -1) {
|
||||||
|
idx = playlist.count();
|
||||||
|
playlist.append(url);
|
||||||
|
}
|
||||||
|
m_currentDir = dir.path();
|
||||||
|
|
||||||
|
setPlaylist(playlist);
|
||||||
|
|
||||||
|
return index(idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
QModelIndex PlaylistModel::appendToPlaylist(const QUrl &url)
|
||||||
|
{
|
||||||
|
const int lastIndex = rowCount();
|
||||||
|
beginInsertRows(QModelIndex(), lastIndex, lastIndex);
|
||||||
|
m_playlist.append(url);
|
||||||
|
endInsertRows();
|
||||||
|
return index(lastIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PlaylistModel::removeAt(int index)
|
||||||
|
{
|
||||||
|
if (index < 0 || index >= rowCount()) return false;
|
||||||
|
beginRemoveRows(QModelIndex(), index, index);
|
||||||
|
m_playlist.removeAt(index);
|
||||||
|
endRemoveRows();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PlaylistModel::indexOf(const QUrl &url) const
|
||||||
|
{
|
||||||
|
return m_playlist.indexOf(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
QUrl PlaylistModel::urlByIndex(int index) const
|
||||||
|
{
|
||||||
|
return m_playlist.value(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList PlaylistModel::autoLoadFilterSuffixes() const
|
||||||
|
{
|
||||||
|
return m_autoLoadSuffixes;
|
||||||
|
}
|
||||||
|
|
||||||
|
QHash<int, QByteArray> PlaylistModel::roleNames() const
|
||||||
|
{
|
||||||
|
QHash<int, QByteArray> result = QAbstractListModel::roleNames();
|
||||||
|
result.insert(UrlRole, "url");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PlaylistModel::rowCount(const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
return m_playlist.count();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant PlaylistModel::data(const QModelIndex &index, int role) const
|
||||||
|
{
|
||||||
|
if (!index.isValid()) return {};
|
||||||
|
|
||||||
|
switch (role) {
|
||||||
|
case Qt::DisplayRole:
|
||||||
|
return m_playlist.at(index.row()).fileName();
|
||||||
|
case UrlRole:
|
||||||
|
return m_playlist.at(index.row());
|
||||||
|
}
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
PlaylistManager::PlaylistManager(QObject *parent)
|
||||||
|
: QObject(parent)
|
||||||
|
{
|
||||||
|
connect(&m_model, &PlaylistModel::rowsRemoved, this,
|
||||||
|
[this](const QModelIndex &, int, int) {
|
||||||
|
if (m_model.rowCount() <= m_currentIndex) {
|
||||||
|
setProperty("currentIndex", m_currentIndex - 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
auto onRowCountChanged = [this](){
|
||||||
|
emit totalCountChanged(m_model.rowCount());
|
||||||
|
};
|
||||||
|
|
||||||
|
connect(&m_model, &PlaylistModel::rowsInserted, this, onRowCountChanged);
|
||||||
|
connect(&m_model, &PlaylistModel::rowsRemoved, this, onRowCountChanged);
|
||||||
|
connect(&m_model, &PlaylistModel::modelReset, this, onRowCountChanged);
|
||||||
|
}
|
||||||
|
|
||||||
PlaylistManager::~PlaylistManager()
|
PlaylistManager::~PlaylistManager()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// region: Allowed Suffixes Operations
|
PlaylistModel *PlaylistManager::model()
|
||||||
|
{
|
||||||
const QStringList& PlaylistManager::allowedSuffixes() const {
|
return &m_model;
|
||||||
return m_allowedSuffixes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlaylistManager::setAllowedSuffixes(const QStringList& nameFilters) {
|
void PlaylistManager::setPlaylist(const QList<QUrl> &urls)
|
||||||
m_allowedSuffixes = nameFilters;
|
{
|
||||||
emit allowedSuffixesChanged(m_allowedSuffixes);
|
m_model.setPlaylist(urls);
|
||||||
}
|
}
|
||||||
|
|
||||||
// endregion
|
QModelIndex PlaylistManager::loadPlaylist(const QList<QUrl> &urls)
|
||||||
|
{
|
||||||
// region: Playlist Loader and Reset
|
QModelIndex idx = m_model.loadPlaylist(urls);
|
||||||
|
setProperty("currentIndex", idx.row());
|
||||||
bool PlaylistManager::loadPlaylist(const QStringList& files) {
|
return idx;
|
||||||
// Convert string list to url list first
|
|
||||||
QList<QUrl> urls;
|
|
||||||
for (const QString & file : std::as_const(files)) {
|
|
||||||
urls.append(urlFromString(file));
|
|
||||||
}
|
|
||||||
|
|
||||||
return loadPlaylist(urls);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PlaylistManager::loadPlaylist(const QList<QUrl>& urls) {
|
QModelIndex PlaylistManager::loadPlaylist(const QUrl &url)
|
||||||
// Check its count, and check M3U8 playlist for single file case.
|
{
|
||||||
if (urls.isEmpty()) {
|
QModelIndex idx = m_model.loadPlaylist(url);
|
||||||
clearPlaylist();
|
setProperty("currentIndex", idx.row());
|
||||||
return true;
|
return idx;
|
||||||
} else if (urls.count() == 1) {
|
|
||||||
const QUrl& firstUrl = urls.first();
|
|
||||||
const QString lowerCaseUrlPath(firstUrl.path().toLower());
|
|
||||||
if (lowerCaseUrlPath.endsWith(".m3u8") || lowerCaseUrlPath.endsWith(".m3u")) {
|
|
||||||
return loadM3U8Playlist(firstUrl);
|
|
||||||
} else {
|
|
||||||
return loadSingleFilePlaylist(firstUrl);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return loadMultipleFilesPlaylist(std::move(urls));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PlaylistManager::loadSingleFilePlaylist(const QUrl& url) {
|
QModelIndex PlaylistManager::loadM3U8Playlist(const QUrl &url)
|
||||||
// Check URL at first
|
{
|
||||||
if (!checkUrl(url))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// Scout playlist by given file
|
|
||||||
auto scoutResult = PlaylistScout::scout(url, m_allowedSuffixes);
|
|
||||||
if (!scoutResult.has_value()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup playlist with index
|
|
||||||
setPlaylist(std::move(scoutResult->playlist), scoutResult->indexHint);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PlaylistManager::loadMultipleFilesPlaylist(const QList<QUrl>&& urls) {
|
|
||||||
// Check all of them are valid
|
|
||||||
for (const auto& url : std::as_const(urls)) {
|
|
||||||
if (!checkUrl(url)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set playlist and return
|
|
||||||
setPlaylist(std::move(urls));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PlaylistManager::loadM3U8Playlist(const QUrl& url) {
|
|
||||||
// Check URL at first
|
|
||||||
if (!checkUrl(url))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
QList<QUrl> urls;
|
|
||||||
QFile file(url.toLocalFile());
|
QFile file(url.toLocalFile());
|
||||||
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||||
|
QList<QUrl> urls;
|
||||||
while (!file.atEnd()) {
|
while (!file.atEnd()) {
|
||||||
QString line = file.readLine();
|
QString line = file.readLine();
|
||||||
if (line.startsWith('#')) {
|
if (line.startsWith('#')) {
|
||||||
@@ -111,185 +198,86 @@ bool PlaylistManager::loadM3U8Playlist(const QUrl& url) {
|
|||||||
}
|
}
|
||||||
QFileInfo fileInfo(file);
|
QFileInfo fileInfo(file);
|
||||||
QUrl item = QUrl::fromUserInput(line, fileInfo.absolutePath());
|
QUrl item = QUrl::fromUserInput(line, fileInfo.absolutePath());
|
||||||
if (!checkUrl(item)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
urls.append(item);
|
urls.append(item);
|
||||||
}
|
}
|
||||||
|
return loadPlaylist(urls);
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return {};
|
||||||
}
|
|
||||||
|
|
||||||
setPlaylist(std::move(urls));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlaylistManager::setPlaylist(const QList<QUrl>&& urls, std::optional<qsizetype> indexHint) {
|
|
||||||
// Setup playlist
|
|
||||||
m_playlist = std::move(urls);
|
|
||||||
|
|
||||||
// Set index with hint
|
|
||||||
if (indexHint.has_value()) {
|
|
||||||
m_currentIndex = *indexHint;
|
|
||||||
}
|
|
||||||
sanitizeIndex();
|
|
||||||
|
|
||||||
// Raise signal
|
|
||||||
emit playlistChanged(totalCount());
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlaylistManager::clearPlaylist() {
|
|
||||||
m_playlist.clear();
|
|
||||||
sanitizeIndex();
|
|
||||||
emit playlistChanged(this->totalCount());
|
|
||||||
}
|
|
||||||
|
|
||||||
// endregion
|
|
||||||
|
|
||||||
// region: Playlist Operations
|
|
||||||
|
|
||||||
void PlaylistManager::appendToPlaylist(const QString &file)
|
|
||||||
{
|
|
||||||
return appendToPlaylist(urlFromString(file));
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlaylistManager::appendToPlaylist(const QUrl &url)
|
|
||||||
{
|
|
||||||
m_playlist.append(url);
|
|
||||||
sanitizeIndex();
|
|
||||||
emit playlistChanged(totalCount());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PlaylistManager::insertIntoPlaylist(qsizetype index, const QString &file)
|
|
||||||
{
|
|
||||||
return insertIntoPlaylist(index, urlFromString(file));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PlaylistManager::insertIntoPlaylist(qsizetype index, const QUrl &url)
|
|
||||||
{
|
|
||||||
if (index < 0 || index > totalCount()) {
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
m_playlist.insert(index, url);
|
|
||||||
sanitizeIndex();
|
|
||||||
emit playlistChanged(totalCount());
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PlaylistManager::removeFromPlaylist(qsizetype index)
|
int PlaylistManager::totalCount() const
|
||||||
{
|
{
|
||||||
if (index < 0 || index >= totalCount()) {
|
return m_model.rowCount();
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
m_playlist.removeAt(index);
|
|
||||||
sanitizeIndex();
|
|
||||||
emit playlistChanged(totalCount());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// endregion
|
QModelIndex PlaylistManager::previousIndex() const
|
||||||
|
|
||||||
// region: Index Operations
|
|
||||||
|
|
||||||
qsizetype PlaylistManager::totalCount() const
|
|
||||||
{
|
{
|
||||||
return m_playlist.count();
|
int count = totalCount();
|
||||||
|
if (count == 0) return {};
|
||||||
|
|
||||||
|
return m_model.index(isFirstIndex() ? count - 1 : m_currentIndex - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<qsizetype> PlaylistManager::previousIndex() const
|
QModelIndex PlaylistManager::nextIndex() const
|
||||||
{
|
{
|
||||||
if (!m_currentIndex.has_value() || totalCount() <= 0) return std::nullopt;
|
int count = totalCount();
|
||||||
return (isFirstIndex() ? totalCount() - 1 : *m_currentIndex - 1);
|
if (count == 0) return {};
|
||||||
|
|
||||||
|
return m_model.index(isLastIndex() ? 0 : m_currentIndex + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<qsizetype> PlaylistManager::nextIndex() const
|
QModelIndex PlaylistManager::curIndex() const
|
||||||
{
|
{
|
||||||
if (!m_currentIndex.has_value() || totalCount() <= 0) return std::nullopt;
|
return m_model.index(m_currentIndex);
|
||||||
return (isLastIndex() ? 0 : *m_currentIndex + 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PlaylistManager::isFirstIndex() const
|
bool PlaylistManager::isFirstIndex() const
|
||||||
{
|
{
|
||||||
return m_currentIndex.has_value() && *m_currentIndex == 0;
|
return m_currentIndex == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PlaylistManager::isLastIndex() const
|
bool PlaylistManager::isLastIndex() const
|
||||||
{
|
{
|
||||||
return m_currentIndex.has_value() && *m_currentIndex + 1 == totalCount();
|
return m_currentIndex + 1 == totalCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<qsizetype> PlaylistManager::currentIndex() const
|
void PlaylistManager::setCurrentIndex(const QModelIndex &index)
|
||||||
{
|
{
|
||||||
return m_currentIndex;
|
if (index.isValid() && index.row() >= 0 && index.row() < totalCount()) {
|
||||||
|
setProperty("currentIndex", index.row());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PlaylistManager::setCurrentIndex(qsizetype index)
|
QUrl PlaylistManager::urlByIndex(const QModelIndex &index)
|
||||||
{
|
{
|
||||||
if (!m_currentIndex.has_value()) {
|
return m_model.urlByIndex(index.row());
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (index < 0 || index >= totalCount()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (*m_currentIndex == index) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_currentIndex = index;
|
|
||||||
emit currentIndexChanged(index);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QUrl PlaylistManager::urlByIndex(qsizetype index) const
|
QString PlaylistManager::localFileByIndex(const QModelIndex &index)
|
||||||
{
|
|
||||||
return m_playlist.value(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
QString PlaylistManager::localFileByIndex(qsizetype index) const
|
|
||||||
{
|
{
|
||||||
return urlByIndex(index).toLocalFile();
|
return urlByIndex(index).toLocalFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
// endregion
|
bool PlaylistManager::removeAt(const QModelIndex &index)
|
||||||
|
|
||||||
// region: Misc
|
|
||||||
|
|
||||||
void PlaylistManager::sanitizeIndex()
|
|
||||||
{
|
{
|
||||||
auto cnt = totalCount();
|
return m_model.removeAt(index.row());
|
||||||
if (cnt == 0) {
|
}
|
||||||
// If playlist is empty, current index should be invalid.
|
|
||||||
m_currentIndex = std::nullopt;
|
void PlaylistManager::setAutoLoadFilterSuffixes(const QStringList &nameFilters)
|
||||||
} else {
|
{
|
||||||
if (m_currentIndex.has_value()) {
|
m_model.setProperty("autoLoadFilterSuffixes", nameFilters);
|
||||||
// Clamp current index in playlist range.
|
}
|
||||||
// If it is already in range, not change was done.
|
|
||||||
auto currentIndex = *m_currentIndex;
|
QList<QUrl> PlaylistManager::convertToUrlList(const QStringList &files)
|
||||||
if (currentIndex < 0) {
|
{
|
||||||
m_currentIndex = 0;
|
QList<QUrl> urlList;
|
||||||
} else if (currentIndex >= cnt) {
|
for (const QString & str : std::as_const(files)) {
|
||||||
m_currentIndex = cnt - 1;
|
QUrl url = QUrl::fromLocalFile(str);
|
||||||
} else {
|
if (url.isValid()) {
|
||||||
; // No change.
|
urlList.append(url);
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// If there is no set value for current index,
|
|
||||||
// set it at the beginning of playlist.
|
|
||||||
m_currentIndex = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
bool PlaylistManager::checkUrl(const QUrl& url)
|
return urlList;
|
||||||
{
|
|
||||||
return url.isValid() && url.isLocalFile();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QUrl PlaylistManager::urlFromString(const QString& file)
|
|
||||||
{
|
|
||||||
return QUrl::fromLocalFile(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
// endregion
|
|
||||||
|
|||||||
@@ -5,126 +5,84 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QObject>
|
#include <QAbstractListModel>
|
||||||
#include <optional>
|
|
||||||
|
class PlaylistModel : public QAbstractListModel
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
enum PlaylistRole {
|
||||||
|
UrlRole = Qt::UserRole
|
||||||
|
};
|
||||||
|
Q_ENUM(PlaylistRole)
|
||||||
|
Q_PROPERTY(QStringList autoLoadFilterSuffixes MEMBER m_autoLoadSuffixes NOTIFY autoLoadFilterSuffixesChanged)
|
||||||
|
|
||||||
|
explicit PlaylistModel(QObject *parent = nullptr);
|
||||||
|
~PlaylistModel() override;
|
||||||
|
|
||||||
|
void setPlaylist(const QList<QUrl> & urls);
|
||||||
|
QModelIndex loadPlaylist(const QList<QUrl> & urls);
|
||||||
|
QModelIndex loadPlaylist(const QUrl & url);
|
||||||
|
QModelIndex appendToPlaylist(const QUrl & url);
|
||||||
|
bool removeAt(int index);
|
||||||
|
int indexOf(const QUrl & url) const;
|
||||||
|
QUrl urlByIndex(int index) const;
|
||||||
|
QStringList autoLoadFilterSuffixes() const;
|
||||||
|
|
||||||
|
QHash<int, QByteArray> roleNames() const override;
|
||||||
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void autoLoadFilterSuffixesChanged(QStringList suffixes);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// model data
|
||||||
|
QList<QUrl> m_playlist;
|
||||||
|
// properties
|
||||||
|
QStringList m_autoLoadSuffixes = {};
|
||||||
|
// internal
|
||||||
|
QString m_currentDir;
|
||||||
|
};
|
||||||
|
|
||||||
/// The manager of playlist.
|
|
||||||
class PlaylistManager : public QObject
|
class PlaylistManager : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
/// Constructs a PlaylistManager with an optional parent QObject.
|
Q_PROPERTY(int currentIndex MEMBER m_currentIndex NOTIFY currentIndexChanged)
|
||||||
explicit PlaylistManager(QObject* parent = nullptr);
|
Q_PROPERTY(QStringList autoLoadFilterSuffixes WRITE setAutoLoadFilterSuffixes)
|
||||||
/// Destructor.
|
Q_PROPERTY(PlaylistModel * model READ model CONSTANT)
|
||||||
|
|
||||||
|
explicit PlaylistManager(QObject *parent = nullptr);
|
||||||
~PlaylistManager();
|
~PlaylistManager();
|
||||||
|
|
||||||
/// Get the allowed file suffixes of this playlist.
|
PlaylistModel * model();
|
||||||
/// @return The current list of allowed suffixes.
|
|
||||||
const QStringList& allowedSuffixes() const;
|
|
||||||
/// Set the allowed file suffixes of this playlist.
|
|
||||||
/// @remark This only works for "load the whole directory by one file" case.
|
|
||||||
/// @param[in] nameFilters The new list of allowed suffixes.
|
|
||||||
void setAllowedSuffixes(const QStringList& nameFilters);
|
|
||||||
|
|
||||||
/// Load user specified files as playlist.
|
void setPlaylist(const QList<QUrl> & url);
|
||||||
/// @remark The wrapper for another overload.
|
Q_INVOKABLE QModelIndex loadPlaylist(const QList<QUrl> & urls);
|
||||||
/// @return True for successful load, otherwise false.
|
Q_INVOKABLE QModelIndex loadPlaylist(const QUrl & url);
|
||||||
bool loadPlaylist(const QStringList& files);
|
Q_INVOKABLE QModelIndex loadM3U8Playlist(const QUrl & url);
|
||||||
/// Load user specified URLs as playlist.
|
|
||||||
/// @remark This function automatically dispatch these files into correct sub-load functions.
|
|
||||||
/// @return True for successful load, otherwise false.
|
|
||||||
bool loadPlaylist(const QList<QUrl>& urls);
|
|
||||||
/// Clear the entire playlist and reset current index.
|
|
||||||
void clearPlaylist();
|
|
||||||
|
|
||||||
/// Append a local file path to the playlist.
|
int totalCount() const;
|
||||||
void appendToPlaylist(const QString& file);
|
QModelIndex previousIndex() const;
|
||||||
/// Append a URL to the playlist.
|
QModelIndex nextIndex() const;
|
||||||
void appendToPlaylist(const QUrl& url);
|
QModelIndex curIndex() const;
|
||||||
/// Insert a local file path at the given index.
|
|
||||||
/// @return True if inserted successfully, false if index is out of range.
|
|
||||||
bool insertIntoPlaylist(qsizetype index, const QString& file);
|
|
||||||
/// Insert a URL at the given index.
|
|
||||||
/// @return True if inserted successfully, false if index is out of range.
|
|
||||||
bool insertIntoPlaylist(qsizetype index, const QUrl& url);
|
|
||||||
/// Remove the entry at the given index.
|
|
||||||
/// @return True if removed successfully, false if index is out of range.
|
|
||||||
bool removeFromPlaylist(qsizetype index);
|
|
||||||
|
|
||||||
/// Returns the total number of items in the playlist.
|
|
||||||
/// @return Total count of entries in the playlist.
|
|
||||||
qsizetype totalCount() const;
|
|
||||||
/// Try fetching previous index.
|
|
||||||
/// @details This previous index is gallery-loop-aware.
|
|
||||||
/// @return std::nullopt if playlist is empty, otherwise the previous index considering gallery loop.
|
|
||||||
std::optional<qsizetype> previousIndex() const;
|
|
||||||
/// Try fetching next index.
|
|
||||||
/// @details This next index is gallery-loop-aware.
|
|
||||||
/// @return std::nullopt if playlist is empty, otherwise the next index considering gallery loop.
|
|
||||||
std::optional<qsizetype> nextIndex() const;
|
|
||||||
/// Check whether current index is the first index.
|
|
||||||
/// @return False if current index is not the first index or playlist is empty, otherwise true.
|
|
||||||
bool isFirstIndex() const;
|
bool isFirstIndex() const;
|
||||||
/// Check whether current index is the last index.
|
|
||||||
/// @return False if current index is not the last index or playlist is empty, otherwise true.
|
|
||||||
bool isLastIndex() const;
|
bool isLastIndex() const;
|
||||||
/// Returns the current index.
|
void setCurrentIndex(const QModelIndex & index);
|
||||||
/// @return std::nullopt if the playlist is empty, otherwise the current index.
|
QUrl urlByIndex(const QModelIndex & index);
|
||||||
std::optional<qsizetype> currentIndex() const;
|
QString localFileByIndex(const QModelIndex & index);
|
||||||
/// Set the current index.
|
bool removeAt(const QModelIndex & index);
|
||||||
/// @remark Index only can be set when playlist is not empty.
|
|
||||||
/// @return True if successful set, including "not changed" set, otherwise false.
|
void setAutoLoadFilterSuffixes(const QStringList &nameFilters);
|
||||||
/// This return value only indicates whether we can set index and given index is valid for setting.
|
|
||||||
/// If "no changed" set occurs, this function returns true, but doesn't raise current index changed signal.
|
static QList<QUrl> convertToUrlList(const QStringList & files);
|
||||||
bool setCurrentIndex(qsizetype index);
|
|
||||||
/// Returns the URL at the given index.
|
|
||||||
/// @return The URL if index is valid.
|
|
||||||
/// This class guarantee that this QUrl is pointing to a local file.
|
|
||||||
QUrl urlByIndex(qsizetype index) const;
|
|
||||||
/// Returns the local file path at the given index.
|
|
||||||
/// @return The local file path if index is valid.
|
|
||||||
/// This class guarantee that local file path always is valid.
|
|
||||||
QString localFileByIndex(qsizetype index) const;
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void allowedSuffixesChanged(const QStringList& suffixes);
|
void currentIndexChanged(int index);
|
||||||
/// Raised when index was changed bu setter.
|
void totalCountChanged(int count);
|
||||||
/// The argument holds the new current index.
|
|
||||||
/// Please note that this signal will NOT be raised by the whole playlist change caused index change.
|
|
||||||
void currentIndexChanged(qsizetype index);
|
|
||||||
/// The whole playlist was changed, involving loading, editing and deleting some or full entries.
|
|
||||||
/// The argument holds the total count of new play list.
|
|
||||||
void playlistChanged(qsizetype count);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// The fundamental playlist setter.
|
int m_currentIndex = -1;
|
||||||
/// @details All playlist load functions will call this function to set playlist at last.
|
PlaylistModel m_model;
|
||||||
/// @param[in] urls ALl urls in this list should be checked by checkUrl() function.
|
|
||||||
/// @param[in] indexHint Try to set current index to this index if possible.
|
|
||||||
void setPlaylist(const QList<QUrl>&& urls, std::optional<qsizetype> indexHint = std::nullopt);
|
|
||||||
/// Load playlist from a single file.
|
|
||||||
/// @details This function scans the same directory for siblings matching allowed suffixes, sorted naturally.
|
|
||||||
/// @return True if the playlist was loaded successfully, false otherwise.
|
|
||||||
bool loadSingleFilePlaylist(const QUrl& url);
|
|
||||||
/// Load playlist from multiple URLs directly.
|
|
||||||
/// @return True if all URLs are valid, false otherwise.
|
|
||||||
bool loadMultipleFilesPlaylist(const QList<QUrl>&& urls);
|
|
||||||
/// Load playlist from an M3U/M3U8 playlist file.
|
|
||||||
/// @return True if loaded successfully, false otherwise.
|
|
||||||
bool loadM3U8Playlist(const QUrl& url);
|
|
||||||
|
|
||||||
/// Make sure that current index is valid.
|
|
||||||
/// @details This function usually is used by those functions manipulating playlist.
|
|
||||||
void sanitizeIndex();
|
|
||||||
|
|
||||||
/// Check whether given QUrl is proper to be put into playlist.
|
|
||||||
/// @details Only the url pointing to local file can be put into playlist.
|
|
||||||
static bool checkUrl(const QUrl& url);
|
|
||||||
/// Convert a string to local file into a QUrl.
|
|
||||||
/// @param[in] file The string pointing to local file.
|
|
||||||
static QUrl urlFromString(const QString& file);
|
|
||||||
|
|
||||||
std::optional<qsizetype> m_currentIndex;
|
|
||||||
QList<QUrl> m_playlist;
|
|
||||||
QStringList m_allowedSuffixes;
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2026 yyc12345 <yyc12321@outlook.com>
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
#include "playlistscout.h"
|
|
||||||
|
|
||||||
#include "playlistscouts/qtscout.h"
|
|
||||||
#include "playlistscouts/explorerscout.h"
|
|
||||||
|
|
||||||
std::optional<PlaylistScout::ScoutResult> PlaylistScout::scout(
|
|
||||||
const QUrl &url, const QStringList &allowedSuffixes) {
|
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
|
||||||
// In Windows, Qt approach can not aware Windows Explorer custom sort order.
|
|
||||||
// So we need to try using Win32 functions for fetching it at first.
|
|
||||||
if (auto rv = PlaylistScout::Explorer::scout(url, allowedSuffixes); rv.has_value()) {
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
#endif // Q_OS_WIN
|
|
||||||
|
|
||||||
// TODO: We may add macOS Finder, KDE Dolphin and etc supports in future.
|
|
||||||
|
|
||||||
// Qt way is the last fallback.
|
|
||||||
return PlaylistScout::Qt::scout(url, allowedSuffixes);
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2026 yyc12345 <yyc12321@outlook.com>
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <QUrl>
|
|
||||||
#include <QStringList>
|
|
||||||
#include <QList>
|
|
||||||
#include <optional>
|
|
||||||
|
|
||||||
namespace PlaylistScout {
|
|
||||||
/// The result of scout
|
|
||||||
struct ScoutResult {
|
|
||||||
/// The final fetched playlist (it can be empty).
|
|
||||||
/// Each item must be a QUrl pointing to a local file.
|
|
||||||
QList<QUrl> playlist;
|
|
||||||
/// The index of given file located in playlist.
|
|
||||||
/// Nullopt if it is not presented in playlist.
|
|
||||||
std::optional<qsizetype> indexHint;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// @brief Scout available image files in given file's parent dir with given allowed suffixes.
|
|
||||||
/// @param[in] url The path to file whose parent dir is our target dir for finding image files.
|
|
||||||
/// @param[in] allowedSuffixes
|
|
||||||
/// Each items in this list is a wildcard pattern for matching allowed file name, like \c *.png .
|
|
||||||
/// The fetched item will be preserved if its name matching any of them.
|
|
||||||
/// If this list is empty, there is no restrictions for finding files.
|
|
||||||
/// @return Scout result if success, otherwise nullopt.
|
|
||||||
std::optional<ScoutResult> scout(const QUrl &url, const QStringList &allowedSuffixes);
|
|
||||||
}
|
|
||||||
@@ -1,332 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2026 yyc12345 <yyc12321@outlook.com>
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
#include "explorerscout.h"
|
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
|
||||||
|
|
||||||
#include <QDir>
|
|
||||||
#include <QDebug>
|
|
||||||
#include <QFileInfo>
|
|
||||||
#include <QRegularExpression>
|
|
||||||
|
|
||||||
#include <optional>
|
|
||||||
|
|
||||||
#include <exdisp.h> // IShellWindows, CLSID_ShellWindows
|
|
||||||
#include <servprov.h> // IServiceProvider
|
|
||||||
#include <shlguid.h> // SID_STopLevelBrowser
|
|
||||||
#include <shlobj.h>
|
|
||||||
|
|
||||||
// YYC MARK:
|
|
||||||
// We use custom RAII wrappers instead of existing COM smart pointers because the
|
|
||||||
// project may be built with MinGW, which does not have good compatibility with
|
|
||||||
// CComPtr and Microsoft's WRL ComPtr (<wrl/client.h>).
|
|
||||||
// Furthermore, PIDLs are not COM objects (they are freed via ILFree, not Release),
|
|
||||||
// so no standard smart pointer covers them regardless of compiler.
|
|
||||||
|
|
||||||
/// RAII wrapper for COM initialization (CoInitialize / CoUninitialize).
|
|
||||||
/// Must be declared before any COM objects (e.g., ComPtr, UniquePidl) so that
|
|
||||||
/// CoUninitialize runs after all COM objects are released during scope exit.
|
|
||||||
class ComGuard {
|
|
||||||
public:
|
|
||||||
ComGuard() : m_hr(CoInitialize(nullptr)) {}
|
|
||||||
~ComGuard() { if (SUCCEEDED(m_hr)) CoUninitialize(); }
|
|
||||||
ComGuard(const ComGuard&) = delete;
|
|
||||||
ComGuard& operator=(const ComGuard&) = delete;
|
|
||||||
|
|
||||||
bool IsInitialized() const { return SUCCEEDED(m_hr); }
|
|
||||||
|
|
||||||
private:
|
|
||||||
HRESULT m_hr;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// RAII wrapper for COM interface pointers.
|
|
||||||
template <typename T>
|
|
||||||
class ComPtr {
|
|
||||||
public:
|
|
||||||
ComPtr() = default;
|
|
||||||
ComPtr(std::nullptr_t) {}
|
|
||||||
~ComPtr() { Reset(); }
|
|
||||||
ComPtr(const ComPtr&) = delete;
|
|
||||||
ComPtr& operator=(const ComPtr&) = delete;
|
|
||||||
ComPtr(ComPtr&& other) noexcept : m_ptr(other.m_ptr) { other.m_ptr = nullptr; }
|
|
||||||
ComPtr& operator=(ComPtr&& other) noexcept {
|
|
||||||
if (this != &other) {
|
|
||||||
Reset();
|
|
||||||
m_ptr = other.m_ptr;
|
|
||||||
other.m_ptr = nullptr;
|
|
||||||
}
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
T* operator->() const { return m_ptr; }
|
|
||||||
T* Get() const { return m_ptr; }
|
|
||||||
T** GetAddressOf() { return &m_ptr; }
|
|
||||||
explicit operator bool() const { return m_ptr != nullptr; }
|
|
||||||
void Reset() { if (m_ptr) { m_ptr->Release(); m_ptr = nullptr; } }
|
|
||||||
|
|
||||||
private:
|
|
||||||
T* m_ptr = nullptr;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// RAII wrapper for PIDL (Item ID List).
|
|
||||||
class UniquePidl {
|
|
||||||
public:
|
|
||||||
UniquePidl() = default;
|
|
||||||
explicit UniquePidl(LPITEMIDLIST pidl) : m_pidl(pidl) {}
|
|
||||||
~UniquePidl() { Reset(); }
|
|
||||||
UniquePidl(const UniquePidl&) = delete;
|
|
||||||
UniquePidl& operator=(const UniquePidl&) = delete;
|
|
||||||
UniquePidl(UniquePidl&& other) noexcept : m_pidl(other.m_pidl) { other.m_pidl = nullptr; }
|
|
||||||
UniquePidl& operator=(UniquePidl&& other) noexcept {
|
|
||||||
if (this != &other) {
|
|
||||||
Reset();
|
|
||||||
m_pidl = other.m_pidl;
|
|
||||||
other.m_pidl = nullptr;
|
|
||||||
}
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
LPCITEMIDLIST Get() const { return m_pidl; }
|
|
||||||
LPITEMIDLIST* GetAddressOf() { return &m_pidl; }
|
|
||||||
explicit operator bool() const { return m_pidl != nullptr; }
|
|
||||||
void Reset() { if (m_pidl) { ILFree(m_pidl); m_pidl = nullptr; } }
|
|
||||||
|
|
||||||
private:
|
|
||||||
LPITEMIDLIST m_pidl = nullptr;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Outputs a diagnostic warning for debugging Windows Explorer integration failures.
|
|
||||||
static void ReportError(const QString& detail)
|
|
||||||
{
|
|
||||||
qWarning("Windows Explorer file list fetch error: %s",
|
|
||||||
qPrintable(detail));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Normalizes a Windows directory path for case-insensitive comparison:
|
|
||||||
/// converts to native separators, lowercases, and ensures a trailing backslash.
|
|
||||||
static QString NormalizePath(const QString& path)
|
|
||||||
{
|
|
||||||
QString result = QDir::toNativeSeparators(path).toLower();
|
|
||||||
if (!result.endsWith(QChar('\\'))) {
|
|
||||||
result += QChar('\\');
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Checks whether the Explorer window represented by the given IDispatch is
|
|
||||||
/// displaying the target folder. Returns its IFolderView2 on match, or null.
|
|
||||||
static ComPtr<IFolderView2> TryMatchWindow(IDispatch* dispatch, const QString& normalizedTarget)
|
|
||||||
{
|
|
||||||
// Navigate: IDispatch -> IServiceProvider -> IShellBrowser.
|
|
||||||
ComPtr<IServiceProvider> serviceProvider;
|
|
||||||
if (FAILED(dispatch->QueryInterface(IID_PPV_ARGS(serviceProvider.GetAddressOf())))) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
ComPtr<IShellBrowser> shellBrowser;
|
|
||||||
if (FAILED(serviceProvider->QueryService(SID_STopLevelBrowser,
|
|
||||||
IID_PPV_ARGS(shellBrowser.GetAddressOf())))) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// IShellBrowser -> active IShellView.
|
|
||||||
ComPtr<IShellView> shellView;
|
|
||||||
if (FAILED(shellBrowser->QueryActiveShellView(shellView.GetAddressOf()))) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Retrieve the folder's path via IPersistIDList.
|
|
||||||
ComPtr<IPersistIDList> persistIdList;
|
|
||||||
if (FAILED(shellView->QueryInterface(IID_PPV_ARGS(persistIdList.GetAddressOf())))) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
UniquePidl folderPidl;
|
|
||||||
if (FAILED(persistIdList->GetIDList(folderPidl.GetAddressOf()))) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
PWSTR pathStr = nullptr;
|
|
||||||
if (FAILED(SHGetNameFromIDList(folderPidl.Get(), SIGDN_DESKTOPABSOLUTEPARSING, &pathStr))) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString windowPath = NormalizePath(QString::fromWCharArray(pathStr));
|
|
||||||
CoTaskMemFree(pathStr);
|
|
||||||
|
|
||||||
if (windowPath != normalizedTarget) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Path matches — query IFolderView2 from the ShellView.
|
|
||||||
ComPtr<IFolderView2> folderView2;
|
|
||||||
if (FAILED(shellView->QueryInterface(IID_PPV_ARGS(folderView2.GetAddressOf())))) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
return folderView2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Tries to find a live Explorer window that is currently displaying the given
|
|
||||||
/// folder path. Returns the IFolderView2 from that window, or an empty ComPtr.
|
|
||||||
///
|
|
||||||
/// Explorer's sort order is stored only in the running Explorer process's memory.
|
|
||||||
/// Creating a new shell view via IShellFolder::CreateViewObject yields a default
|
|
||||||
/// sort (always by name), so we must find the actual live IFolderView2 instead.
|
|
||||||
///
|
|
||||||
/// Reference:
|
|
||||||
/// - https://www.stephenli.ca/getting-windows-explorers-current-directory-sort-order
|
|
||||||
/// - https://github.com/d2phap/ImageGlass/blob/75a296287f338edcf409eee3917531b25ff5d927/v9/Components/ImageGlass.Base/FileSystem/FileFinder.cs
|
|
||||||
/// - NuGet Package: D2Phap.EggShell
|
|
||||||
static ComPtr<IFolderView2> FindLiveFolderView(const QString& targetFolderPath)
|
|
||||||
{
|
|
||||||
// Create the Shell windows collection (all open Explorer windows).
|
|
||||||
ComPtr<IShellWindows> shellWindows;
|
|
||||||
if (FAILED(CoCreateInstance(CLSID_ShellWindows, nullptr, CLSCTX_ALL,
|
|
||||||
IID_PPV_ARGS(shellWindows.GetAddressOf())))) {
|
|
||||||
ReportError("Failed to create IShellWindows instance");
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString normalizedTarget = NormalizePath(targetFolderPath);
|
|
||||||
|
|
||||||
// 1. Try the Desktop window first — it may contain the file the user opened.
|
|
||||||
{
|
|
||||||
VARIANT varLoc;
|
|
||||||
VariantInit(&varLoc);
|
|
||||||
varLoc.vt = VT_I4;
|
|
||||||
varLoc.lVal = 0;
|
|
||||||
|
|
||||||
VARIANT varLocRoot;
|
|
||||||
VariantInit(&varLocRoot);
|
|
||||||
|
|
||||||
long desktopHwnd = 0;
|
|
||||||
ComPtr<IDispatch> desktopDispatch;
|
|
||||||
HRESULT findHr = shellWindows->FindWindowSW(
|
|
||||||
&varLoc, &varLocRoot, SWC_DESKTOP,
|
|
||||||
&desktopHwnd, SWFO_NEEDDISPATCH,
|
|
||||||
desktopDispatch.GetAddressOf());
|
|
||||||
|
|
||||||
VariantClear(&varLoc);
|
|
||||||
VariantClear(&varLocRoot);
|
|
||||||
|
|
||||||
if (SUCCEEDED(findHr) && desktopDispatch) {
|
|
||||||
ComPtr<IFolderView2> result = TryMatchWindow(desktopDispatch.Get(), normalizedTarget);
|
|
||||||
if (result) return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. Iterate regular Explorer windows.
|
|
||||||
LONG count = 0;
|
|
||||||
shellWindows->get_Count(&count);
|
|
||||||
|
|
||||||
for (LONG i = 0; i < count; i++) {
|
|
||||||
VARIANT varIndex;
|
|
||||||
VariantInit(&varIndex);
|
|
||||||
varIndex.vt = VT_I4;
|
|
||||||
varIndex.lVal = i;
|
|
||||||
|
|
||||||
ComPtr<IDispatch> dispatch;
|
|
||||||
HRESULT itemHr = shellWindows->Item(varIndex, dispatch.GetAddressOf());
|
|
||||||
VariantClear(&varIndex);
|
|
||||||
|
|
||||||
if (FAILED(itemHr) || !dispatch) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
ComPtr<IFolderView2> result = TryMatchWindow(dispatch.Get(), normalizedTarget);
|
|
||||||
if (result) return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::optional<PlaylistScout::ScoutResult> PlaylistScout::Explorer::scout(
|
|
||||||
const QUrl &url, const QStringList &allowedSuffixes) {
|
|
||||||
PlaylistScout::ScoutResult rv;
|
|
||||||
|
|
||||||
QFileInfo info(url.toLocalFile());
|
|
||||||
QString folderPath = info.path();
|
|
||||||
QString currentFileName = info.fileName();
|
|
||||||
|
|
||||||
// Pre-compile wildcard suffix filters into regular expressions for performance.
|
|
||||||
QList<QRegularExpression> nameRegexps;
|
|
||||||
for (const QString &pattern : allowedSuffixes) {
|
|
||||||
nameRegexps.append(QRegularExpression(
|
|
||||||
QRegularExpression::wildcardToRegularExpression(pattern),
|
|
||||||
QRegularExpression::CaseInsensitiveOption));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize COM. The ComGuard must be declared before any COM objects
|
|
||||||
// below so that CoUninitialize runs after all of them are released.
|
|
||||||
ComGuard comGuard;
|
|
||||||
if (!comGuard.IsInitialized()) {
|
|
||||||
ReportError("COM initialization failed");
|
|
||||||
return std::nullopt;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find a live Explorer window that is currently displaying the target folder.
|
|
||||||
ComPtr<IFolderView2> folderView2 = FindLiveFolderView(folderPath);
|
|
||||||
if (!folderView2) {
|
|
||||||
ReportError("No open Explorer window matches the folder: " + folderPath);
|
|
||||||
return std::nullopt;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get items already sorted in Explorer's view order, as an IShellItemArray.
|
|
||||||
// SVGIO_ALLVIEW returns all items; SVGIO_FLAG_VIEWORDER respects the view's sort.
|
|
||||||
ComPtr<IShellItemArray> itemArray;
|
|
||||||
if (FAILED(folderView2->Items(SVGIO_ALLVIEW | SVGIO_FLAG_VIEWORDER,
|
|
||||||
IID_PPV_ARGS(itemArray.GetAddressOf())))) {
|
|
||||||
ReportError("IFolderView2::Items(SVGIO_ALLVIEW | SVGIO_FLAG_VIEWORDER) failed");
|
|
||||||
return std::nullopt;
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD itemCount = 0;
|
|
||||||
itemArray->GetCount(&itemCount);
|
|
||||||
|
|
||||||
// Enumerate sorted items, filter by pattern, and build the playlist.
|
|
||||||
for (DWORD i = 0; i < itemCount; i++) {
|
|
||||||
ComPtr<IShellItem> shellItem;
|
|
||||||
if (FAILED(itemArray->GetItemAt(i, shellItem.GetAddressOf()))) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the full parsing path of the item.
|
|
||||||
PWSTR pathStr = nullptr;
|
|
||||||
if (FAILED(shellItem->GetDisplayName(SIGDN_DESKTOPABSOLUTEPARSING, &pathStr)) || !pathStr) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
QString filePath = QString::fromWCharArray(pathStr);
|
|
||||||
CoTaskMemFree(pathStr);
|
|
||||||
|
|
||||||
// Skip directories — the view may include folders alongside files.
|
|
||||||
QFileInfo fileInfo(filePath);
|
|
||||||
if (!fileInfo.isFile()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString fileName = fileInfo.fileName();
|
|
||||||
|
|
||||||
// Match against compiled wildcard patterns.
|
|
||||||
bool matches = nameRegexps.isEmpty();
|
|
||||||
for (const QRegularExpression &re : std::as_const(nameRegexps)) {
|
|
||||||
if (re.match(fileName).hasMatch()) {
|
|
||||||
matches = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!matches) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
rv.playlist.append(QUrl::fromLocalFile(filePath));
|
|
||||||
if (fileName == currentFileName) {
|
|
||||||
rv.indexHint = rv.playlist.size() - 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // Q_OS_WIN
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2026 yyc12345 <yyc12321@outlook.com>
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "../playlistscout.h"
|
|
||||||
#include <QtSystemDetection>
|
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
|
||||||
|
|
||||||
namespace PlaylistScout::Explorer {
|
|
||||||
std::optional<ScoutResult> scout(const QUrl &url, const QStringList &allowedSuffixes);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // Q_OS_WIN
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2025 Gary Wang <git@blumia.net>
|
|
||||||
// SPDX-FileCopyrightText: 2026 yyc12345 <yyc12321@outlook.com>
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
#include "qtscout.h"
|
|
||||||
|
|
||||||
#include <QFileInfo>
|
|
||||||
#include <QDir>
|
|
||||||
#include <QCollator>
|
|
||||||
|
|
||||||
std::optional<PlaylistScout::ScoutResult> PlaylistScout::Qt::scout(
|
|
||||||
const QUrl &url, const QStringList &allowedSuffixes) {
|
|
||||||
PlaylistScout::ScoutResult rv;
|
|
||||||
|
|
||||||
QFileInfo info(url.toLocalFile());
|
|
||||||
QDir dir(info.path());
|
|
||||||
QString currentFileName = info.fileName();
|
|
||||||
|
|
||||||
QStringList entryList = dir.entryList(
|
|
||||||
allowedSuffixes, QDir::Files | QDir::NoSymLinks, QDir::NoSort);
|
|
||||||
|
|
||||||
QCollator collator;
|
|
||||||
collator.setNumericMode(true);
|
|
||||||
|
|
||||||
std::sort(entryList.begin(), entryList.end(), collator);
|
|
||||||
|
|
||||||
for (qsizetype i = 0; i < entryList.count(); i++) {
|
|
||||||
const QString &fileName = entryList.at(i);
|
|
||||||
const QString &oneEntry = dir.absoluteFilePath(fileName);
|
|
||||||
const QUrl &url = QUrl::fromLocalFile(oneEntry);
|
|
||||||
|
|
||||||
rv.playlist.append(url);
|
|
||||||
if (fileName == currentFileName) {
|
|
||||||
rv.indexHint = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2026 yyc12345 <yyc12321@outlook.com>
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "../playlistscout.h"
|
|
||||||
|
|
||||||
namespace PlaylistScout::Qt {
|
|
||||||
std::optional<ScoutResult> scout(const QUrl &url, const QStringList &allowedSuffixes);
|
|
||||||
}
|
|
||||||
@@ -13,14 +13,6 @@
|
|||||||
#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>
|
||||||
@@ -42,9 +34,25 @@ namespace QEnumHelper
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Settings::showNavigatorView() const
|
Settings *Settings::m_settings_instance = nullptr;
|
||||||
|
|
||||||
|
Settings *Settings::instance()
|
||||||
{
|
{
|
||||||
return m_qsettings->value("show_navigator_view", true).toBool();
|
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
|
||||||
@@ -57,6 +65,11 @@ 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
|
||||||
@@ -70,27 +83,43 @@ bool Settings::svgTiny12Only() const
|
|||||||
#endif // QT_VERSION < QT_VERSION_CHECK(6, 9, 3)
|
#endif // QT_VERSION < QT_VERSION_CHECK(6, 9, 3)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Settings::DoubleClickBehavior Settings::doubleClickBehavior() const
|
||||||
|
{
|
||||||
|
QString result = m_qsettings->value("double_click_behavior", "Close").toString();
|
||||||
|
|
||||||
|
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", "").toString();
|
QString result = m_qsettings->value("mouse_wheel_behavior", "Zoom").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", "").toString();
|
QString result = m_qsettings->value("init_window_size_behavior", "Auto").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", "").toString();
|
QString result = m_qsettings->value("hidpi_scale_factor_behavior", "PassThrough").toString();
|
||||||
|
|
||||||
return QEnumHelper::fromString<Qt::HighDpiScaleFactorRoundingPolicy>(result, Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
return QEnumHelper::fromString<Qt::HighDpiScaleFactorRoundingPolicy>(result, Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Settings::setShowNavigatorView(bool on)
|
void Settings::setStayOnTop(bool on)
|
||||||
{
|
{
|
||||||
m_qsettings->setValue("show_navigator_view", 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();
|
m_qsettings->sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,12 +135,24 @@ 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);
|
||||||
m_qsettings->sync();
|
m_qsettings->sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Settings::setDoubleClickBehavior(DoubleClickBehavior dcb)
|
||||||
|
{
|
||||||
|
m_qsettings->setValue("double_click_behavior", QEnumHelper::toString(dcb));
|
||||||
|
m_qsettings->sync();
|
||||||
|
}
|
||||||
|
|
||||||
void Settings::setMouseWheelBehavior(MouseWheelBehavior mwb)
|
void Settings::setMouseWheelBehavior(MouseWheelBehavior mwb)
|
||||||
{
|
{
|
||||||
m_qsettings->setValue("mouse_wheel_behavior", QEnumHelper::toString(mwb));
|
m_qsettings->setValue("mouse_wheel_behavior", QEnumHelper::toString(mwb));
|
||||||
@@ -130,6 +171,47 @@ 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...
|
||||||
@@ -148,8 +230,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(QObject *parent)
|
Settings::Settings()
|
||||||
: QObject(parent)
|
: QObject(qApp)
|
||||||
{
|
{
|
||||||
QString configPath;
|
QString configPath;
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,14 @@ class Settings : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
enum DoubleClickBehavior {
|
||||||
|
Ignore,
|
||||||
|
Close,
|
||||||
|
Maximize,
|
||||||
|
FullScreen,
|
||||||
|
};
|
||||||
|
Q_ENUM(DoubleClickBehavior)
|
||||||
|
|
||||||
enum MouseWheelBehavior {
|
enum MouseWheelBehavior {
|
||||||
Zoom,
|
Zoom,
|
||||||
Switch,
|
Switch,
|
||||||
@@ -18,6 +26,7 @@ public:
|
|||||||
Q_ENUM(MouseWheelBehavior)
|
Q_ENUM(MouseWheelBehavior)
|
||||||
|
|
||||||
enum WindowSizeBehavior {
|
enum WindowSizeBehavior {
|
||||||
|
Auto,
|
||||||
Maximized,
|
Maximized,
|
||||||
Windowed,
|
Windowed,
|
||||||
};
|
};
|
||||||
@@ -25,24 +34,36 @@ public:
|
|||||||
|
|
||||||
static Settings *instance();
|
static Settings *instance();
|
||||||
|
|
||||||
bool showNavigatorView() const;
|
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;
|
||||||
MouseWheelBehavior mouseWheelBehavior() const;
|
MouseWheelBehavior mouseWheelBehavior() const;
|
||||||
WindowSizeBehavior initWindowSizeBehavior() const;
|
WindowSizeBehavior initWindowSizeBehavior() const;
|
||||||
Qt::HighDpiScaleFactorRoundingPolicy hiDpiScaleFactorBehavior() const;
|
Qt::HighDpiScaleFactorRoundingPolicy hiDpiScaleFactorBehavior() const;
|
||||||
|
|
||||||
void setShowNavigatorView(bool on);
|
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 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(QObject *parent = nullptr);
|
Settings();
|
||||||
|
|
||||||
|
static Settings *m_settings_instance;
|
||||||
|
|
||||||
QSettings *m_qsettings;
|
QSettings *m_qsettings;
|
||||||
|
|
||||||
|
|||||||
@@ -3,95 +3,158 @@
|
|||||||
// 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 <QApplication>
|
#include <QAction>
|
||||||
#include <QTimer>
|
#include <QCheckBox>
|
||||||
|
#include <QComboBox>
|
||||||
|
#include <QFormLayout>
|
||||||
|
#include <QKeySequenceEdit>
|
||||||
|
#include <QScrollArea>
|
||||||
|
#include <QSplitter>
|
||||||
#include <QStringListModel>
|
#include <QStringListModel>
|
||||||
#include <type_traits>
|
#include <QMessageBox>
|
||||||
|
|
||||||
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::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::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), ui(new QT_PREPEND_NAMESPACE(Ui::SettingsDialog))
|
: QDialog(parent)
|
||||||
|
, 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)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
this->setWindowTitle(tr("Settings"));
|
||||||
setWindowFlag(Qt::WindowContextHelpButtonHint, false);
|
|
||||||
|
|
||||||
auto* settings = Settings::instance();
|
QHBoxLayout * mainLayout = new QHBoxLayout(this);
|
||||||
ui->m_showNavigatorView->setChecked(Settings::instance()->showNavigatorView());
|
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_mouseWheelBehavior->setModel(MW_OPTIONS.buildComboBoxModel(this));
|
QFormLayout * settingsForm = new QFormLayout(settingsFormHolder);
|
||||||
Settings::MouseWheelBehavior mwb = settings->mouseWheelBehavior();
|
settingsTabs->addTab(settingsFormHolder, tr("Options"));
|
||||||
ui->m_mouseWheelBehavior->setCurrentIndex(MW_OPTIONS.to_index(mwb));
|
|
||||||
ui->m_initWindowSizeBehavior->setModel(IWS_OPTIONS.buildComboBoxModel(this));
|
QSplitter * shortcutEditorSplitter = new QSplitter;
|
||||||
Settings::WindowSizeBehavior iwsb = settings->initWindowSizeBehavior();
|
shortcutEditorSplitter->setOrientation(Qt::Vertical);
|
||||||
ui->m_initWindowSizeBehavior->setCurrentIndex(IWS_OPTIONS.to_index(iwsb));
|
shortcutEditorSplitter->setChildrenCollapsible(false);
|
||||||
ui->m_hiDpiRoundingPolicyBehavior->setModel(HIDPI_OPTIONS.buildComboBoxModel(this));
|
QScrollArea * shortcutScrollArea = new QScrollArea;
|
||||||
Qt::HighDpiScaleFactorRoundingPolicy hidpi = settings->hiDpiScaleFactorBehavior();
|
shortcutEditorSplitter->addWidget(shortcutScrollArea);
|
||||||
ui->m_hiDpiRoundingPolicyBehavior->setCurrentIndex(HIDPI_OPTIONS.to_index(hidpi));
|
shortcutScrollArea->setWidgetResizable(true);
|
||||||
|
shortcutScrollArea->setMinimumHeight(200);
|
||||||
|
QWidget * shortcutsFormHolder = new QWidget;
|
||||||
|
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
|
||||||
@@ -101,45 +164,51 @@ 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(ui->m_showNavigatorView, &QCHECKBOX_CHECKSTATECHANGED, this, [ = ](QT_CHECKSTATE state){
|
connect(m_stayOnTop, &QCHECKBOX_CHECKSTATECHANGED, this, [ = ](QT_CHECKSTATE state){
|
||||||
Settings::instance()->setShowNavigatorView(state == Qt::Checked);
|
Settings::instance()->setStayOnTop(state == Qt::Checked);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(ui->m_useLightCheckerboard, &QCHECKBOX_CHECKSTATECHANGED, this, [ = ](QT_CHECKSTATE state){
|
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(ui->m_loopGallery, &QCHECKBOX_CHECKSTATECHANGED, this, [ = ](QT_CHECKSTATE state){
|
connect(m_loopGallery, &QCHECKBOX_CHECKSTATECHANGED, this, [ = ](QT_CHECKSTATE state){
|
||||||
Settings::instance()->setLoopGallery(state == Qt::Checked);
|
Settings::instance()->setLoopGallery(state == Qt::Checked);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(ui->m_svgTiny12Only, &QCHECKBOX_CHECKSTATECHANGED, this, [ = ](QT_CHECKSTATE state){
|
connect(m_autoLongImageMode, &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(ui->m_mouseWheelBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){
|
connect(m_doubleClickBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){
|
||||||
Settings::instance()->setMouseWheelBehavior(MW_OPTIONS.to_value(index));
|
Settings::instance()->setDoubleClickBehavior(_dc_options.at(index).first);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(ui->m_initWindowSizeBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){
|
connect(m_mouseWheelBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){
|
||||||
Settings::instance()->setInitWindowSizeBehavior(IWS_OPTIONS.to_value(index));
|
Settings::instance()->setMouseWheelBehavior(_mw_options.at(index).first);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(ui->m_hiDpiRoundingPolicyBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){
|
connect(m_initWindowSizeBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){
|
||||||
Settings::instance()->setHiDpiScaleFactorBehavior(HIDPI_OPTIONS.to_value(index));
|
Settings::instance()->setInitWindowSizeBehavior(_iws_options.at(index).first);
|
||||||
});
|
});
|
||||||
|
|
||||||
// YYC MARK:
|
connect(m_hiDpiRoundingPolicyBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){
|
||||||
// Use adjustSize() to make sure all ComboBox are expanded by its items.
|
Settings::instance()->setHiDpiScaleFactorBehavior(_hidpi_options.at(index).first);
|
||||||
// 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();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
adjustSize();
|
||||||
|
setWindowFlag(Qt::WindowContextHelpButtonHint, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsDialog::~SettingsDialog()
|
SettingsDialog::~SettingsDialog()
|
||||||
{
|
{
|
||||||
delete ui;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,14 +5,11 @@
|
|||||||
#ifndef SETTINGSDIALOG_H
|
#ifndef SETTINGSDIALOG_H
|
||||||
#define SETTINGSDIALOG_H
|
#define SETTINGSDIALOG_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
class QCheckBox;
|
||||||
namespace Ui {
|
class QComboBox;
|
||||||
class SettingsDialog;
|
|
||||||
}
|
|
||||||
QT_END_NAMESPACE
|
|
||||||
|
|
||||||
class SettingsDialog : public QDialog
|
class SettingsDialog : public QDialog
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -20,8 +17,21 @@ public:
|
|||||||
explicit SettingsDialog(QWidget *parent = nullptr);
|
explicit SettingsDialog(QWidget *parent = nullptr);
|
||||||
~SettingsDialog();
|
~SettingsDialog();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QT_PREPEND_NAMESPACE(Ui::SettingsDialog) *ui;
|
QCheckBox * m_stayOnTop = nullptr;
|
||||||
|
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
|
||||||
|
|||||||
@@ -1,88 +0,0 @@
|
|||||||
<?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_showNavigatorView">
|
|
||||||
<property name="text">
|
|
||||||
<string>Show navigation view</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0" colspan="2">
|
|
||||||
<widget class="QCheckBox" name="m_useLightCheckerboard">
|
|
||||||
<property name="text">
|
|
||||||
<string>Use light-color checkerboard</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0" colspan="2">
|
|
||||||
<widget class="QCheckBox" name="m_loopGallery">
|
|
||||||
<property name="text">
|
|
||||||
<string>Loop the loaded gallery</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" 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="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>
|
|
||||||
@@ -0,0 +1,126 @@
|
|||||||
|
// 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();
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
// 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;
|
||||||
|
};
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
// 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);
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
// 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
|
||||||
@@ -174,7 +174,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +210,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<location filename="../mainwindow.cpp" line="568"/>
|
||||||
<source>File url list is empty</source>
|
<source>File url list is empty</source>
|
||||||
<translation>La llista d'ubicacions és buida</translation>
|
<translation>La llista d'ubicacions és buida</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>&Copia</translation>
|
<translation>&Copia</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -403,7 +403,7 @@
|
|||||||
<translation>Imatge següent</translation>
|
<translation>Imatge següent</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<location filename="../actionmanager.cpp" line="111"/>
|
||||||
<source>Move to Trash</source>
|
<source>Move to Trash</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
@@ -761,161 +761,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>Paràmetres</translation>
|
<translation>Paràmetres</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>No facis res</translation>
|
<translation>No facis res</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>Tanca la finestra</translation>
|
<translation>Tanca la finestra</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>Commuta la maximització</translation>
|
<translation>Commuta la maximització</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>Amplia i redueix</translation>
|
<translation>Amplia i redueix</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>Mostra l'element següent o l'anterior</translation>
|
<translation>Mostra l'element següent o l'anterior</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation>Mida automàtica</translation>
|
<translation>Mida automàtica</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>Maximitza</translation>
|
<translation>Maximitza</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>Mantingues a sobre a l'inici</translation>
|
<translation>Mantingues a sobre a l'inici</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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 type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>Comportament del doble clic</translation>
|
<translation>Comportament del doble clic</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>Comportament de la roda del ratolí</translation>
|
<translation>Comportament de la roda del ratolí</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>Mida de la finestra per defecte</translation>
|
<translation>Mida de la finestra per defecte</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +214,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>&Kopieren</translation>
|
<translation>&Kopieren</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -407,7 +407,7 @@
|
|||||||
<translation>Nächstes Bild</translation>
|
<translation>Nächstes Bild</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<location filename="../actionmanager.cpp" line="111"/>
|
||||||
<source>Move to Trash</source>
|
<source>Move to Trash</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
@@ -765,161 +765,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>Einstellungen</translation>
|
<translation>Einstellungen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>Nichts tun</translation>
|
<translation>Nichts tun</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>Fenster schließen</translation>
|
<translation>Fenster schließen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>Maximieren umschalten</translation>
|
<translation>Maximieren umschalten</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>Hinein- und Hinauszoomen</translation>
|
<translation>Hinein- und Hinauszoomen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>Zeige nächstes oder vorheriges Element</translation>
|
<translation>Zeige nächstes oder vorheriges Element</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation>Automatische Größe</translation>
|
<translation>Automatische Größe</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>Maximiert</translation>
|
<translation>Maximiert</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>Beim Start oben bleiben</translation>
|
<translation>Beim Start oben bleiben</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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 type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>Doppelklickverhalten</translation>
|
<translation>Doppelklickverhalten</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>Mausradverhalten</translation>
|
<translation>Mausradverhalten</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>Standard-Fenstergröße</translation>
|
<translation>Standard-Fenstergröße</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -174,7 +174,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +198,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -391,7 +391,7 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<location filename="../actionmanager.cpp" line="111"/>
|
||||||
<source>Move to Trash</source>
|
<source>Move to Trash</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
@@ -749,161 +749,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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 type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +214,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>&Copiar</translation>
|
<translation>&Copiar</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation>¿Estás seguro de que quieres mover "%1" a la papelera de reciclaje?</translation>
|
<translation>¿Estás seguro de que quieres mover "%1" a la papelera de reciclaje?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -407,7 +407,7 @@
|
|||||||
<translation>Imagen siguiente</translation>
|
<translation>Imagen siguiente</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<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>
|
||||||
@@ -765,161 +765,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>Preferencias</translation>
|
<translation>Preferencias</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation>Opciones</translation>
|
<translation>Opciones</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation>Atajos</translation>
|
<translation>Atajos</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation>Editando atajos para la acción "%1":</translation>
|
<translation>Editando atajos para la acción "%1":</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation>No se pudieron establecer accesos directos</translation>
|
<translation>No se pudieron establecer accesos directos</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation>Por favor, verifique si los accesos directos están duplicados.</translation>
|
<translation>Por favor, verifique si los accesos directos están duplicados.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>No hacer nada</translation>
|
<translation>No hacer nada</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>Cerrar la ventana</translation>
|
<translation>Cerrar la ventana</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>Maximizar/desmaximizar</translation>
|
<translation>Maximizar/desmaximizar</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>Ampliar y reducir</translation>
|
<translation>Ampliar y reducir</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>Mostrar el elemento siguiente/anterior</translation>
|
<translation>Mostrar el elemento siguiente/anterior</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation>Tamaño automático</translation>
|
<translation>Tamaño automático</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>Maximizar</translation>
|
<translation>Maximizar</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation>Redondeo (escala de enteros)</translation>
|
<translation>Redondeo (escala de enteros)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation>Ceil (redondear enteros hacia arriba)</translation>
|
<translation>Ceil (redondear enteros hacia arriba)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation>Floor (redondear enteros hacia abajo)</translation>
|
<translation>Floor (redondear enteros hacia abajo)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation>Redondeo (redondear los enteros)</translation>
|
<translation>Redondeo (redondear los enteros)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>Mantener encima al inicio</translation>
|
<translation>Mantener encima al inicio</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation>Utilice un tablero de ajedrez de color claro</translation>
|
<translation>Utilice un tablero de ajedrez de color claro</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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 type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>Comportamiento del doble clic</translation>
|
<translation>Comportamiento del doble clic</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>Comportamiento de la rueda del ratón</translation>
|
<translation>Comportamiento de la rueda del ratón</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>Tamaño de la ventana por defecto</translation>
|
<translation>Tamaño de la ventana por defecto</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation>Política de redondeo del factor de escala HiDPI</translation>
|
<translation>Política de redondeo del factor de escala HiDPI</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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'image ici</translation>
|
<translation>Faites glisser l'image ici</translation>
|
||||||
@@ -214,71 +214,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>&Copier</translation>
|
<translation>&Copier</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<location filename="../mainwindow.cpp" line="576"/>
|
||||||
<source>Image data is invalid</source>
|
<source>Image data is invalid</source>
|
||||||
<translation>Les données d'image ne sont pas valides</translation>
|
<translation>Les données d'image ne sont pas valides</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="599"/>
|
<location filename="../mainwindow.cpp" line="583"/>
|
||||||
<source>Not supported mimedata: %1</source>
|
<source>Not supported mimedata: %1</source>
|
||||||
<translation>Mimedata non pris en charge : %1</translation>
|
<translation>Mimedata non pris en charge : %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -407,7 +407,7 @@
|
|||||||
<translation>Image suivant</translation>
|
<translation>Image suivant</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<location filename="../actionmanager.cpp" line="111"/>
|
||||||
<source>Move to Trash</source>
|
<source>Move to Trash</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
@@ -765,161 +765,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>Paramètres</translation>
|
<translation>Paramètres</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>Ne rien faire</translation>
|
<translation>Ne rien faire</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>Fermer la fenêtre</translation>
|
<translation>Fermer la fenêtre</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>Activer/désactiver l'agrandissement</translation>
|
<translation>Activer/désactiver l'agrandissement</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>Zoom avant et arrière</translation>
|
<translation>Zoom avant et arrière</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>Voir l'élément suivant ou précédent</translation>
|
<translation>Voir l'élément suivant ou précédent</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation>Taille automatique</translation>
|
<translation>Taille automatique</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>Agrandi</translation>
|
<translation>Agrandi</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>Rester en-haut lors du démarrage</translation>
|
<translation>Rester en-haut lors du démarrage</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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 type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>Comportement du double-clic</translation>
|
<translation>Comportement du double-clic</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>Comportement de la molette de la souris</translation>
|
<translation>Comportement de la molette de la souris</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>Taille de la fenêtre par défaut</translation>
|
<translation>Taille de la fenêtre par défaut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +214,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>&Salin</translation>
|
<translation>&Salin</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -407,7 +407,7 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<location filename="../actionmanager.cpp" line="111"/>
|
||||||
<source>Move to Trash</source>
|
<source>Move to Trash</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
@@ -765,161 +765,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>Pengaturan</translation>
|
<translation>Pengaturan</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>Jangan lakukan apapun</translation>
|
<translation>Jangan lakukan apapun</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>Tutup jendela</translation>
|
<translation>Tutup jendela</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>Perbesar dan perkecil</translation>
|
<translation>Perbesar dan perkecil</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>Lihat item berikutnya atau sebelumnya</translation>
|
<translation>Lihat item berikutnya atau sebelumnya</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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 type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -174,7 +174,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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'immagine</translation>
|
<translation>Trascina qui l'immagine</translation>
|
||||||
@@ -210,71 +210,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<location filename="../mainwindow.cpp" line="568"/>
|
||||||
<source>File url list is empty</source>
|
<source>File url list is empty</source>
|
||||||
<translation>L'elenco degli URL dei file è vuoto</translation>
|
<translation>L'elenco degli URL dei file è vuoto</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>&Copia</translation>
|
<translation>&Copia</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<location filename="../mainwindow.cpp" line="576"/>
|
||||||
<source>Image data is invalid</source>
|
<source>Image data is invalid</source>
|
||||||
<translation>I dati dell'immagine non sono validi</translation>
|
<translation>I dati dell'immagine non sono validi</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation>Sei sicuro di voler spostare "%1" nel cestino?</translation>
|
<translation>Sei sicuro di voler spostare "%1" nel cestino?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -403,7 +403,7 @@
|
|||||||
<translation>Immagine successiva</translation>
|
<translation>Immagine successiva</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<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>
|
||||||
@@ -761,161 +761,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>Impostazioni</translation>
|
<translation>Impostazioni</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation>Opzioni</translation>
|
<translation>Opzioni</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation>Scorciatoie</translation>
|
<translation>Scorciatoie</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation>Modifica delle scorciatoie per l'azione "%1":</translation>
|
<translation>Modifica delle scorciatoie per l'azione "%1":</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation>Impossibile impostare le scorciatoie</translation>
|
<translation>Impossibile impostare le scorciatoie</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation>Controlla se i collegamenti sono duplicati con collegamenti esistenti.</translation>
|
<translation>Controlla se i collegamenti sono duplicati con collegamenti esistenti.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>Non fare nulla</translation>
|
<translation>Non fare nulla</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>Chiudi la finestra</translation>
|
<translation>Chiudi la finestra</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>Attiva massimizzazione</translation>
|
<translation>Attiva massimizzazione</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation>Attiva schermo intero</translation>
|
<translation>Attiva schermo intero</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>Zoom avanti e indietro</translation>
|
<translation>Zoom avanti e indietro</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>Visualizza l'elemento successivo o precedente</translation>
|
<translation>Visualizza l'elemento successivo o precedente</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation>Dimensione automatica</translation>
|
<translation>Dimensione automatica</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>Massimizzato</translation>
|
<translation>Massimizzato</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation>Finestrato</translation>
|
<translation>Finestrato</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation>Round (ridimensionamento intero)</translation>
|
<translation>Round (ridimensionamento intero)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation>Ceil (ridimensionamento intero)</translation>
|
<translation>Ceil (ridimensionamento intero)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation>Floor (ridimensionamento intero)</translation>
|
<translation>Floor (ridimensionamento intero)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation>Segui il sistema (scala frazionaria)</translation>
|
<translation>Segui il sistema (scala frazionaria)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>Rimani in cima quando si avvia</translation>
|
<translation>Rimani in cima quando si avvia</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation>Utilizza l'animazione di chiusura della finestra integrata</translation>
|
<translation>Utilizza l'animazione di chiusura della finestra integrata</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation>Utilizzare scacchiera di colore chiaro</translation>
|
<translation>Utilizzare scacchiera di colore chiaro</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation>Esegui il loop della galleria caricata</translation>
|
<translation>Esegui il loop della galleria caricata</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation>Modalità immagine lunga automatica</translation>
|
<translation>Modalità immagine lunga automatica</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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 type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>Comportamento del doppio clic</translation>
|
<translation>Comportamento del doppio clic</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>Comportamento della rotellina del mouse</translation>
|
<translation>Comportamento della rotellina del mouse</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>Dimensioni predefinite della finestra</translation>
|
<translation>Dimensioni predefinite della finestra</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation>Politica di arrotondamento del fattore di scala HiDPI</translation>
|
<translation>Politica di arrotondamento del fattore di scala HiDPI</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -174,7 +174,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +210,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>コピー(&C)</translation>
|
<translation>コピー(&C)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation>「%1」をゴミ箱に移動しますか?</translation>
|
<translation>「%1」をゴミ箱に移動しますか?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -403,7 +403,7 @@
|
|||||||
<translation>次の画像</translation>
|
<translation>次の画像</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<location filename="../actionmanager.cpp" line="111"/>
|
||||||
<source>Move to Trash</source>
|
<source>Move to Trash</source>
|
||||||
<translation>ゴミ箱へ移動する</translation>
|
<translation>ゴミ箱へ移動する</translation>
|
||||||
@@ -761,161 +761,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>設定</translation>
|
<translation>設定</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation>オプション</translation>
|
<translation>オプション</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation>ショートカット</translation>
|
<translation>ショートカット</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation>「%1」のショートカットを編集します:</translation>
|
<translation>「%1」のショートカットを編集します:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation>ショートカットの設定に失敗しました</translation>
|
<translation>ショートカットの設定に失敗しました</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation>既存のショートカットと重複していないことを確認してください。</translation>
|
<translation>既存のショートカットと重複していないことを確認してください。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>何もしない</translation>
|
<translation>何もしない</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>ウィンドウを終了する</translation>
|
<translation>ウィンドウを終了する</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>最大サイズに切り替える</translation>
|
<translation>最大サイズに切り替える</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation>フルスクリーン表示に切り替える</translation>
|
<translation>フルスクリーン表示に切り替える</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>拡大・縮小</translation>
|
<translation>拡大・縮小</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>次の項目または前の項目を表示</translation>
|
<translation>次の項目または前の項目を表示</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation>オートサイズ</translation>
|
<translation>オートサイズ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>最大化</translation>
|
<translation>最大化</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation>四捨五入 (整数スケーリング)</translation>
|
<translation>四捨五入 (整数スケーリング)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation>切り上げ (整数スケーリング)</translation>
|
<translation>切り上げ (整数スケーリング)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation>切り捨て (整数スケーリング)</translation>
|
<translation>切り捨て (整数スケーリング)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation>システム設定に従う (小数スケーリング)</translation>
|
<translation>システム設定に従う (小数スケーリング)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>起動時に最前面に表示する</translation>
|
<translation>起動時に最前面に表示する</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation>明るい色の格子模様を使用する</translation>
|
<translation>明るい色の格子模様を使用する</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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 type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>ダブルクリックの動作</translation>
|
<translation>ダブルクリックの動作</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>マウスホイールの動作</translation>
|
<translation>マウスホイールの動作</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>既定のウィンドウサイズ</translation>
|
<translation>既定のウィンドウサイズ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation>高DPIスケーリングの四捨五入方法</translation>
|
<translation>高DPIスケーリングの四捨五入方法</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -174,7 +174,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +210,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>복사(&C)</translation>
|
<translation>복사(&C)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation>다른 이름으로 저장</translation>
|
<translation>다른 이름으로 저장</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation>현재 열려 있는 이미지가 없습니다.</translation>
|
<translation>현재 열려 있는 이미지가 없습니다.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation>%1 이미지 (*.%2)</translation>
|
<translation>%1 이미지 (*.%2)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation>지원되는 이미지 형식을 사용할 수 없습니다.</translation>
|
<translation>지원되는 이미지 형식을 사용할 수 없습니다.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation>이미지 저장 실패: %1</translation>
|
<translation>이미지 저장 실패: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation>"%1"을 휴지통으로 옮기시겠습니까?</translation>
|
<translation>"%1"을 휴지통으로 옮기시겠습니까?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -403,7 +403,7 @@
|
|||||||
<translation>다음 이미지</translation>
|
<translation>다음 이미지</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<location filename="../actionmanager.cpp" line="111"/>
|
||||||
<source>Move to Trash</source>
|
<source>Move to Trash</source>
|
||||||
<translation>휴지통으로 이동</translation>
|
<translation>휴지통으로 이동</translation>
|
||||||
@@ -761,161 +761,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>설정</translation>
|
<translation>설정</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation>옵션</translation>
|
<translation>옵션</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation>단축키</translation>
|
<translation>단축키</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation>작업 "%1"의 단축키 편집:</translation>
|
<translation>작업 "%1"의 단축키 편집:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation>단축키 설정 실패</translation>
|
<translation>단축키 설정 실패</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation>단축키가 기존 단축키와 중복되는지 확인해 주세요.</translation>
|
<translation>단축키가 기존 단축키와 중복되는지 확인해 주세요.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>아무것도 하지 않음</translation>
|
<translation>아무것도 하지 않음</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>창 닫기</translation>
|
<translation>창 닫기</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>최대화 전환</translation>
|
<translation>최대화 전환</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation>전체 화면 전환</translation>
|
<translation>전체 화면 전환</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>확대 및 축소</translation>
|
<translation>확대 및 축소</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>다음 또는 이전 항목 보기</translation>
|
<translation>다음 또는 이전 항목 보기</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation>자동 크기</translation>
|
<translation>자동 크기</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>최대화</translation>
|
<translation>최대화</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation>창 모드</translation>
|
<translation>창 모드</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation>반올림 (정수 스케일링)</translation>
|
<translation>반올림 (정수 스케일링)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation>올림 (정수 스케일링)</translation>
|
<translation>올림 (정수 스케일링)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation>내림 (정수 스케일링)</translation>
|
<translation>내림 (정수 스케일링)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation>시스템 따르기 (소수점 스케일링)</translation>
|
<translation>시스템 따르기 (소수점 스케일링)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>시작 시 맨 위에 유지</translation>
|
<translation>시작 시 맨 위에 유지</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation>내장된 창 닫기 애니메이션 사용</translation>
|
<translation>내장된 창 닫기 애니메이션 사용</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation>제목 표시줄 표시</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation>조감도 보기 표시</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation>밝은 색상의 바둑판 사용</translation>
|
<translation>밝은 색상의 바둑판 사용</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation>로드된 갤러리 반복</translation>
|
<translation>로드된 갤러리 반복</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation>자동 긴 이미지 모드</translation>
|
<translation>자동 긴 이미지 모드</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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>SVG 지원을 SVG Tiny 1.2로 제한</translation>
|
<translation>SVG 지원을 SVG Tiny 1.2로 제한</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>더블 클릭 동작</translation>
|
<translation>더블 클릭 동작</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>마우스 휠 동작</translation>
|
<translation>마우스 휠 동작</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>기본 창 크기</translation>
|
<translation>기본 창 크기</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation>HiDPI 배율 반올림 정책</translation>
|
<translation>HiDPI 배율 반올림 정책</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +214,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>&Kopier</translation>
|
<translation>&Kopier</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation>Er du sikker på at du vil flytte "%1" til papirkurven?</translation>
|
<translation>Er du sikker på at du vil flytte "%1" til papirkurven?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -407,7 +407,7 @@
|
|||||||
<translation>Neste bilde</translation>
|
<translation>Neste bilde</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<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>
|
||||||
@@ -765,161 +765,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>Innstillinger</translation>
|
<translation>Innstillinger</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>Ikke gjør noe</translation>
|
<translation>Ikke gjør noe</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>Lukk vinduet</translation>
|
<translation>Lukk vinduet</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>Maksimering av/på</translation>
|
<translation>Maksimering av/på</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>Zoom inn og ut</translation>
|
<translation>Zoom inn og ut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>Vis neste eller forrige element</translation>
|
<translation>Vis neste eller forrige element</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation type="unfinished">Automatisk størrelse</translation>
|
<translation type="unfinished">Automatisk størrelse</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>Maksimert</translation>
|
<translation>Maksimert</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>Behold i forgrunnen ved oppstart</translation>
|
<translation>Behold i forgrunnen ved oppstart</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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 type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>Dobbeltklikksoppførsel</translation>
|
<translation>Dobbeltklikksoppførsel</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>Musehjulsoppførsel</translation>
|
<translation>Musehjulsoppførsel</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>Forvalgt vindusstørrelse</translation>
|
<translation>Forvalgt vindusstørrelse</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +214,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>&Kopiëren</translation>
|
<translation>&Kopiëren</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation>Opslaan als</translation>
|
<translation>Opslaan als</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation>Er is geen afbeelding geopend.</translation>
|
<translation>Er is geen afbeelding geopend.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation>%1-afbeelding (*.%2)</translation>
|
<translation>%1-afbeelding (*.%2)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation>Er zijn geen ondersteunde formaten beschikbaar.</translation>
|
<translation>Er zijn geen ondersteunde formaten beschikbaar.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation>De afbeelding kan niet worden opgeslagen: %1</translation>
|
<translation>De afbeelding kan niet worden opgeslagen: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" 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="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -407,7 +407,7 @@
|
|||||||
<translation>Volgende afbeelding</translation>
|
<translation>Volgende afbeelding</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<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>
|
||||||
@@ -765,161 +765,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>Instellingen</translation>
|
<translation>Instellingen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation>Opties</translation>
|
<translation>Opties</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation>Sneltoetsen</translation>
|
<translation>Sneltoetsen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation>Bewerken van sneltoetsen voor actie ‘%1’:</translation>
|
<translation>Bewerken van sneltoetsen voor actie ‘%1’:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation>Instellen mislukt</translation>
|
<translation>Instellen mislukt</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation>Controleer of de gekozen sneltoetsen niet al in gebruik zijn.</translation>
|
<translation>Controleer of de gekozen sneltoetsen niet al in gebruik zijn.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>Niets doen</translation>
|
<translation>Niets doen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>Venster sluiten</translation>
|
<translation>Venster sluiten</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>Maximaliseren/Demaximaliseren</translation>
|
<translation>Maximaliseren/Demaximaliseren</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation>Schermvullende weergave aan/uit</translation>
|
<translation>Schermvullende weergave aan/uit</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>In-/Uitzoomen</translation>
|
<translation>In-/Uitzoomen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>Ga naar volgende of vorige item</translation>
|
<translation>Ga naar volgende of vorige item</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation>Automatische grootte</translation>
|
<translation>Automatische grootte</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>Gemaximaliseerd</translation>
|
<translation>Gemaximaliseerd</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation>Venster</translation>
|
<translation>Venster</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation>Rond (geheel getal)</translation>
|
<translation>Rond (geheel getal)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation>Keil (geheel getal)</translation>
|
<translation>Keil (geheel getal)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation>Grond (geheel getal)</translation>
|
<translation>Grond (geheel getal)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation>Systeeminstelling (fractionele schaal)</translation>
|
<translation>Systeeminstelling (fractionele schaal)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>Automatisch altijd bovenop</translation>
|
<translation>Automatisch altijd bovenop</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation>Meegeleverde animatie voor venster sluiten gebruiken</translation>
|
<translation>Meegeleverde animatie voor venster sluiten gebruiken</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation>Titelbalk tonen</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation>Vogelvluchtweergave</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation>Licht schaakbordpatroon gebruiken</translation>
|
<translation>Licht schaakbordpatroon gebruiken</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation>Gekozen galerij herhalen</translation>
|
<translation>Gekozen galerij herhalen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation>Automatische langeafbeeldingsmodus</translation>
|
<translation>Automatische langeafbeeldingsmodus</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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>Svg-ondersteuning beperken tot SVG Tiny 1.2</translation>
|
<translation>Svg-ondersteuning beperken tot SVG Tiny 1.2</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>Dubbelklikgedrag</translation>
|
<translation>Dubbelklikgedrag</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>Scrollwielgedrag</translation>
|
<translation>Scrollwielgedrag</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>Standaard vensterafmetingen</translation>
|
<translation>Standaard vensterafmetingen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation>HiDPI-schaalfactor - afrondbeleid</translation>
|
<translation>HiDPI-schaalfactor - afrondbeleid</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -174,7 +174,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +198,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>کاپی کرو</translation>
|
<translation>کاپی کرو</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -391,7 +391,7 @@
|
|||||||
<translation>اگلی تصویر</translation>
|
<translation>اگلی تصویر</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<location filename="../actionmanager.cpp" line="111"/>
|
||||||
<source>Move to Trash</source>
|
<source>Move to Trash</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
@@ -749,161 +749,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>سیٹنگاں</translation>
|
<translation>سیٹنگاں</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation type="unfinished">ودھو ودھ بدلو</translation>
|
<translation type="unfinished">ودھو ودھ بدلو</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>ودھ توں ودھ</translation>
|
<translation>ودھ توں ودھ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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 type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +214,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>&Скопировать</translation>
|
<translation>&Скопировать</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation>Сохранить как</translation>
|
<translation>Сохранить как</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation>В настоящее время нет открытых изображений.</translation>
|
<translation>В настоящее время нет открытых изображений.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation>%1 Изображение (*.%2)</translation>
|
<translation>%1 Изображение (*.%2)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation>Нет доступных поддерживаемых форматов изображений.</translation>
|
<translation>Нет доступных поддерживаемых форматов изображений.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation>Не удалось сохранить изображение: %1</translation>
|
<translation>Не удалось сохранить изображение: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation>Вы уверены, что хотите переместить "%1" в корзину?</translation>
|
<translation>Вы уверены, что хотите переместить "%1" в корзину?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -407,7 +407,7 @@
|
|||||||
<translation>Следующее изображение</translation>
|
<translation>Следующее изображение</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<location filename="../actionmanager.cpp" line="111"/>
|
||||||
<source>Move to Trash</source>
|
<source>Move to Trash</source>
|
||||||
<translation>Переместить в корзину</translation>
|
<translation>Переместить в корзину</translation>
|
||||||
@@ -765,161 +765,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>Параметры</translation>
|
<translation>Параметры</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation>Опции</translation>
|
<translation>Опции</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation>Ярлыки</translation>
|
<translation>Ярлыки</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation>Сокращенные команды для действия "%1":</translation>
|
<translation>Сокращенные команды для действия "%1":</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation>Не удалось установить ярлыки</translation>
|
<translation>Не удалось установить ярлыки</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation>Пожалуйста, проверьте, не дублируются ли ярлыки с существующими ярлыками.</translation>
|
<translation>Пожалуйста, проверьте, не дублируются ли ярлыки с существующими ярлыками.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>Ничего не делать</translation>
|
<translation>Ничего не делать</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>Закрыть окно</translation>
|
<translation>Закрыть окно</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>Переключить окно</translation>
|
<translation>Переключить окно</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation>Переключить полноэкранный режим</translation>
|
<translation>Переключить полноэкранный режим</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>Увеличение и уменьшение масштаба</translation>
|
<translation>Увеличение и уменьшение масштаба</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>Следующее или предыдущее изображение</translation>
|
<translation>Следующее или предыдущее изображение</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation>Авторазмер</translation>
|
<translation>Авторазмер</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>Максимизировать</translation>
|
<translation>Максимизировать</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation>Оконный</translation>
|
<translation>Оконный</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation>Round (целочисленное масштабирование)</translation>
|
<translation>Round (целочисленное масштабирование)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation>Ceil (целочисленное масштабирование)</translation>
|
<translation>Ceil (целочисленное масштабирование)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation>Floor (целочисленное масштабирование)</translation>
|
<translation>Floor (целочисленное масштабирование)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation>Следовать системе (дробное масштабирование)</translation>
|
<translation>Следовать системе (дробное масштабирование)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>Поверх всех окон при запуске</translation>
|
<translation>Поверх всех окон при запуске</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation>Использовать встроенную анимацию закрытия окна</translation>
|
<translation>Использовать встроенную анимацию закрытия окна</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation>Использовать легкий шахматный узор</translation>
|
<translation>Использовать легкий шахматный узор</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation>Зациклить загруженную галерею</translation>
|
<translation>Зациклить загруженную галерею</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation>Режим автоматического увеличения изображения</translation>
|
<translation>Режим автоматического увеличения изображения</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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>Ограничить поддержку SVG до SVG Tiny 1.2</translation>
|
<translation>Ограничить поддержку SVG до SVG Tiny 1.2</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>Действие при двойном щелчке</translation>
|
<translation>Действие при двойном щелчке</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>Действие колеса мыши</translation>
|
<translation>Действие колеса мыши</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>Размер окна по умолчанию</translation>
|
<translation>Размер окна по умолчанию</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation>Политика округления коэффициента масштабирования HiDPI</translation>
|
<translation>Политика округления коэффициента масштабирования HiDPI</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +210,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>&පිටපත්</translation>
|
<translation>&පිටපත්</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -398,7 +398,7 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<location filename="../actionmanager.cpp" line="111"/>
|
||||||
<source>Move to Trash</source>
|
<source>Move to Trash</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
@@ -761,161 +761,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>සැකසුම්</translation>
|
<translation>සැකසුම්</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>කිසිවක් නොකරන්න</translation>
|
<translation>කිසිවක් නොකරන්න</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>කවුළුව වහන්න</translation>
|
<translation>කවුළුව වහන්න</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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 type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -174,7 +174,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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>Povlecite sliko sem</translation>
|
<translation>Povlecite sliko sem</translation>
|
||||||
@@ -198,71 +198,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<location filename="../mainwindow.cpp" line="568"/>
|
||||||
<source>File url list is empty</source>
|
<source>File url list is empty</source>
|
||||||
<translation>Seznam url-jev datotek je prazen</translation>
|
<translation>Seznam url-jev datotek je prazen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>&Kopiraj</translation>
|
<translation>&Kopiraj</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<location filename="../mainwindow.cpp" line="576"/>
|
||||||
<source>Image data is invalid</source>
|
<source>Image data is invalid</source>
|
||||||
<translation>Podatki slike so neveljavni</translation>
|
<translation>Podatki slike so neveljavni</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="599"/>
|
<location filename="../mainwindow.cpp" line="583"/>
|
||||||
<source>Not supported mimedata: %1</source>
|
<source>Not supported mimedata: %1</source>
|
||||||
<translation>Ni podprtih podatkov mime: %1</translation>
|
<translation>Ni podprtih podatkov mime: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation>Shrani kot</translation>
|
<translation>Shrani kot</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation>Trenutno ni odprta nobena slika.</translation>
|
<translation>Trenutno ni odprta nobena slika.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation>Slika %1 (*.%2)</translation>
|
<translation>Slika %1 (*.%2)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation>Nobenih podprtih formatov slik ni na razpolago.</translation>
|
<translation>Nobenih podprtih formatov slik ni na razpolago.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation>Shranjevanje slike ni uspelo: %1</translation>
|
<translation>Shranjevanje slike ni uspelo: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<location filename="../mainwindow.cpp" line="854"/>
|
||||||
<source>Image From Clipboard</source>
|
<source>Image From Clipboard</source>
|
||||||
<translation>Slika iz odložišča</translation>
|
<translation>Slika iz odložišča</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation>Ali ste prepričani, da želite premakniti "%1" v koš?</translation>
|
<translation>Ali ste prepričani, da želite premakniti "%1" v koš?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<location filename="../mainwindow.cpp" line="876"/>
|
||||||
<source>Failed to move file to trash</source>
|
<source>Failed to move file to trash</source>
|
||||||
<translation>Datoteke ni bilo mogoče premakniti v koš</translation>
|
<translation>Datoteke ni bilo mogoče premakniti v koš</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="898"/>
|
<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>Premik v koš ni uspel. Morda je vzrok težava z dovoljenji za datoteke, omejitev datotečnega sistema ali omejitev platforme.</translation>
|
<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>
|
||||||
@@ -391,7 +391,7 @@
|
|||||||
<translation>Naslednja slika</translation>
|
<translation>Naslednja slika</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<location filename="../actionmanager.cpp" line="111"/>
|
||||||
<source>Move to Trash</source>
|
<source>Move to Trash</source>
|
||||||
<translation>Premakni v koš</translation>
|
<translation>Premakni v koš</translation>
|
||||||
@@ -749,161 +749,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>Nastavitve</translation>
|
<translation>Nastavitve</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation>Možnosti</translation>
|
<translation>Možnosti</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation>Bližnjice</translation>
|
<translation>Bližnjice</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation>Urejanje bližnjic za dejanje "%1":</translation>
|
<translation>Urejanje bližnjic za dejanje "%1":</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation>Nastavitev bližnjic ni uspela</translation>
|
<translation>Nastavitev bližnjic ni uspela</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation>Preverite, ali so bližnjice podvojene z obstoječimi bližnjicami.</translation>
|
<translation>Preverite, ali so bližnjice podvojene z obstoječimi bližnjicami.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>Ne naredi ničesar</translation>
|
<translation>Ne naredi ničesar</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>Zapri okno</translation>
|
<translation>Zapri okno</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>Preklopi maksimiranje</translation>
|
<translation>Preklopi maksimiranje</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation>Preklopi celozaslonski način</translation>
|
<translation>Preklopi celozaslonski način</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>Povečava in pomanjšava</translation>
|
<translation>Povečava in pomanjšava</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>Ogled naslednjega ali prejšnjega elementa</translation>
|
<translation>Ogled naslednjega ali prejšnjega elementa</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation>Samodejna velikost</translation>
|
<translation>Samodejna velikost</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>Maksimizirano</translation>
|
<translation>Maksimizirano</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation>Okenski način</translation>
|
<translation>Okenski način</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation>Zaokroženo (celoštevilsko skaliranje)</translation>
|
<translation>Zaokroženo (celoštevilsko skaliranje)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation>Zaokroževanje navzgor (celoštevilsko skaliranje)</translation>
|
<translation>Zaokroževanje navzgor (celoštevilsko skaliranje)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation>Zaokroževanje navzdol (celoštevilsko skaliranje)</translation>
|
<translation>Zaokroževanje navzdol (celoštevilsko skaliranje)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation>Sledi sistemu (delno skaliranje)</translation>
|
<translation>Sledi sistemu (delno skaliranje)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>Ostani na vrhu pri zagonu</translation>
|
<translation>Ostani na vrhu pri zagonu</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation>Uporabi vgrajeno animacijo zapiranja okna</translation>
|
<translation>Uporabi vgrajeno animacijo zapiranja okna</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation>Uporabite svetlo šahovnico</translation>
|
<translation>Uporabite svetlo šahovnico</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation>Ponavljaj naloženo galerijo</translation>
|
<translation>Ponavljaj naloženo galerijo</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation>Samodejni način dolge slike</translation>
|
<translation>Samodejni način dolge slike</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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>Omeji podporo za SVG na SVG Tiny 1.2</translation>
|
<translation>Omeji podporo za SVG na SVG Tiny 1.2</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>Obnašanje dvojnega klika</translation>
|
<translation>Obnašanje dvojnega klika</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>Obnašanje miškinega kolesca</translation>
|
<translation>Obnašanje miškinega kolesca</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>Privzeta velikost okna</translation>
|
<translation>Privzeta velikost okna</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation>Politika zaokroževanja faktorja merila HiDPI</translation>
|
<translation>Politika zaokroževanja faktorja merila HiDPI</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -174,7 +174,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +198,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>நகலெடு (&c)</translation>
|
<translation>நகலெடு (&c)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation>பின் மறுசுழற்சி செய்ய "%1" ஐ நகர்த்த விரும்புகிறீர்களா?</translation>
|
<translation>பின் மறுசுழற்சி செய்ய "%1" ஐ நகர்த்த விரும்புகிறீர்களா?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -391,7 +391,7 @@
|
|||||||
<translation>அடுத்த படம்</translation>
|
<translation>அடுத்த படம்</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<location filename="../actionmanager.cpp" line="111"/>
|
||||||
<source>Move to Trash</source>
|
<source>Move to Trash</source>
|
||||||
<translation>குப்பைக்கு நகர்த்தவும்</translation>
|
<translation>குப்பைக்கு நகர்த்தவும்</translation>
|
||||||
@@ -749,161 +749,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>அமைப்புகள்</translation>
|
<translation>அமைப்புகள்</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation>விருப்பங்கள்</translation>
|
<translation>விருப்பங்கள்</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation>குறுக்குவழிகள்</translation>
|
<translation>குறுக்குவழிகள்</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation>செயலுக்கான குறுக்குவழிகளைத் திருத்துதல் "%1":</translation>
|
<translation>செயலுக்கான குறுக்குவழிகளைத் திருத்துதல் "%1":</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation>குறுக்குவழிகளை அமைப்பதில் தோல்வி</translation>
|
<translation>குறுக்குவழிகளை அமைப்பதில் தோல்வி</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation>தற்போதுள்ள குறுக்குவழிகளுடன் குறுக்குவழிகள் நகல் செய்யப்பட்டுள்ளதா என்று சரிபார்க்கவும்.</translation>
|
<translation>தற்போதுள்ள குறுக்குவழிகளுடன் குறுக்குவழிகள் நகல் செய்யப்பட்டுள்ளதா என்று சரிபார்க்கவும்.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>எதுவும் செய்ய வேண்டாம்</translation>
|
<translation>எதுவும் செய்ய வேண்டாம்</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>சாளரத்தை மூடு</translation>
|
<translation>சாளரத்தை மூடு</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>அதிகபட்சத்தை மாற்றவும்</translation>
|
<translation>அதிகபட்சத்தை மாற்றவும்</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation>மாற்று முழுத்திரை</translation>
|
<translation>மாற்று முழுத்திரை</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>உள்ளேயும் வெளியேயும் பெரிதாக்கவும்</translation>
|
<translation>உள்ளேயும் வெளியேயும் பெரிதாக்கவும்</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>அடுத்த அல்லது முந்தைய உருப்படியைக் காண்க</translation>
|
<translation>அடுத்த அல்லது முந்தைய உருப்படியைக் காண்க</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation>வாகன அளவு</translation>
|
<translation>வாகன அளவு</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>அதிகபட்சம்</translation>
|
<translation>அதிகபட்சம்</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation>சாளரம்</translation>
|
<translation>சாளரம்</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation>சுற்று (முழு எண் அளவிடுதல்)</translation>
|
<translation>சுற்று (முழு எண் அளவிடுதல்)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation>சீல் (முழு எண் அளவிடுதல்)</translation>
|
<translation>சீல் (முழு எண் அளவிடுதல்)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation>மாடி (முழு எண் அளவிடுதல்)</translation>
|
<translation>மாடி (முழு எண் அளவிடுதல்)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation>கணினியைப் பின்பற்றவும் (பகுதியளவு அளவிடுதல்)</translation>
|
<translation>கணினியைப் பின்பற்றவும் (பகுதியளவு அளவிடுதல்)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>தொடக்கத்தில் இருக்கும்போது மேலே இருங்கள்</translation>
|
<translation>தொடக்கத்தில் இருக்கும்போது மேலே இருங்கள்</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation>உள்ளமைக்கப்பட்ட நெருக்கமான சாளர அனிமேஷனைப் பயன்படுத்தவும்</translation>
|
<translation>உள்ளமைக்கப்பட்ட நெருக்கமான சாளர அனிமேஷனைப் பயன்படுத்தவும்</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation>ஒளி-வண்ண செக்கர்போர்டைப் பயன்படுத்தவும்</translation>
|
<translation>ஒளி-வண்ண செக்கர்போர்டைப் பயன்படுத்தவும்</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation>ஏற்றப்பட்ட கேலரியை சுற்றுங்கள்</translation>
|
<translation>ஏற்றப்பட்ட கேலரியை சுற்றுங்கள்</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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 type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>நடத்தை இருமுறை சொடுக்கு செய்யவும்</translation>
|
<translation>நடத்தை இருமுறை சொடுக்கு செய்யவும்</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>சுட்டி சக்கர நடத்தை</translation>
|
<translation>சுட்டி சக்கர நடத்தை</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>இயல்புநிலை சாளர அளவு</translation>
|
<translation>இயல்புநிலை சாளர அளவு</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation>HIDPI அளவிலான காரணி ரவுண்டிங் கொள்கை</translation>
|
<translation>HIDPI அளவிலான காரணி ரவுண்டிங் கொள்கை</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +214,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>&Kopyala</translation>
|
<translation>&Kopyala</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation>Farklı Kaydet</translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation>Şu anda açık bir resim yok.</translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation>%1 Resim (*.%2)</translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation>Desteklenen resim biçimi yok.</translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation>Resim kaydedilemedi: %1</translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation>"%1" ögesini geri dönüşüm kutusuna taşımak istediğinizden emin misiniz?</translation>
|
<translation>"%1" ögesini geri dönüşüm kutusuna taşımak istediğinizden emin misiniz?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -324,7 +324,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../actionmanager.cpp" line="88"/>
|
<location filename="../actionmanager.cpp" line="88"/>
|
||||||
<source>Save &As...</source>
|
<source>Save &As...</source>
|
||||||
<translation>Farklı &Kaydet...</translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../actionmanager.cpp" line="93"/>
|
<location filename="../actionmanager.cpp" line="93"/>
|
||||||
@@ -407,7 +407,7 @@
|
|||||||
<translation>Sonraki resim</translation>
|
<translation>Sonraki resim</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<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>
|
||||||
@@ -765,161 +765,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>Ayarlar</translation>
|
<translation>Ayarlar</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation>Seçenekler</translation>
|
<translation>Seçenekler</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation>Kısayollar</translation>
|
<translation>Kısayollar</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation>"%1" için kısayol düzenleniyor:</translation>
|
<translation>"%1" için kısayol düzenleniyor:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation>Kısayollar ayarlanamadı</translation>
|
<translation>Kısayollar ayarlanamadı</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation>Kısayolların var olan kısayollarla çakışma durumunu denetleyin.</translation>
|
<translation>Kısayolların var olan kısayollarla çakışma durumunu denetleyin.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>Hiçbir şey yapma</translation>
|
<translation>Hiçbir şey yapma</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>Pencereyi kapat</translation>
|
<translation>Pencereyi kapat</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>Tam boyuta geç</translation>
|
<translation>Tam boyuta geç</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation>Tam ekranı aç/kapat</translation>
|
<translation>Tam ekranı aç/kapat</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>Yaklaştır ve uzaklaştır</translation>
|
<translation>Yaklaştır ve uzaklaştır</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>Sonraki veya önceki ögeyi görüntüle</translation>
|
<translation>Sonraki veya önceki ögeyi görüntüle</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation>Otomatik boyut</translation>
|
<translation>Otomatik boyut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>Tam boyut</translation>
|
<translation>Tam boyut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation>Pencereli</translation>
|
<translation>Pencereli</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation>Yuvarlak (Tamsayı ölçekleme)</translation>
|
<translation>Yuvarlak (Tamsayı ölçekleme)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation>Tavan (Tamsayı ölçekleme)</translation>
|
<translation>Tavan (Tamsayı ölçekleme)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation>Kat (Tamsayı ölçekleme)</translation>
|
<translation>Kat (Tamsayı ölçekleme)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation>Sistemi takip et (Kesirli ölçekleme)</translation>
|
<translation>Sistemi takip et (Kesirli ölçekleme)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>Açılışta pencerelerin üstünde kal</translation>
|
<translation>Açılışta pencerelerin üstünde kal</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation>Yerleşik kapat pencere canlandırmasını kullan</translation>
|
<translation>Yerleşik kapat pencere canlandırmasını kullan</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation>Başlık çubuğunu göster</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation>Kuş bakışı görünümünü göster</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation>Açık renk dama tahtası kullan</translation>
|
<translation>Açık renk dama tahtası kullan</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation>Yüklenen galeriyi döngüye al</translation>
|
<translation>Yüklenen galeriyi döngüye al</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation>Kendiliğinden uzun resim kipi</translation>
|
<translation>Kendiliğinden uzun resim kipi</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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>SVG desteğini SVG Tiny 1.2 ile sınırla</translation>
|
<translation>SVG desteğini SVG Tiny 1.2 ile sınırla</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>Çift tıklama davranışı</translation>
|
<translation>Çift tıklama davranışı</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>Fare tekeri davranışı</translation>
|
<translation>Fare tekeri davranışı</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>Öntanımlı pencere boyutu</translation>
|
<translation>Öntanımlı pencere boyutu</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation>HiDPI ölçek katsayısı yuvarlama ilkesi</translation>
|
<translation>HiDPI ölçek katsayısı yuvarlama ilkesi</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -174,7 +174,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +210,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>&Скопіювати</translation>
|
<translation>&Скопіювати</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -403,7 +403,7 @@
|
|||||||
<translation>Наступне зображення</translation>
|
<translation>Наступне зображення</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<location filename="../actionmanager.cpp" line="111"/>
|
||||||
<source>Move to Trash</source>
|
<source>Move to Trash</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
@@ -761,161 +761,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>Налаштування</translation>
|
<translation>Налаштування</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>Нічого не робити</translation>
|
<translation>Нічого не робити</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>Закрити вікно</translation>
|
<translation>Закрити вікно</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>Перемкнути на максимум</translation>
|
<translation>Перемкнути на максимум</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>Збільшення та зменшення</translation>
|
<translation>Збільшення та зменшення</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>Переглянути наступний або попередній елемент</translation>
|
<translation>Переглянути наступний або попередній елемент</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation>Автоматичний розмір</translation>
|
<translation>Автоматичний розмір</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>Максимізувати</translation>
|
<translation>Максимізувати</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation>Round (цілочисельне масштабування)</translation>
|
<translation>Round (цілочисельне масштабування)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation>Ceil (цілочисельне масштабування)</translation>
|
<translation>Ceil (цілочисельне масштабування)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation>Floor (цілочисельне масштабування)</translation>
|
<translation>Floor (цілочисельне масштабування)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation>Стежити за системою (дробове масштабування)</translation>
|
<translation>Стежити за системою (дробове масштабування)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>Поверх всіх вікон під час запуску</translation>
|
<translation>Поверх всіх вікон під час запуску</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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 type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>Поведінка при подвійному кліку</translation>
|
<translation>Поведінка при подвійному кліку</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>Поведінка колеса миші</translation>
|
<translation>Поведінка колеса миші</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>Розмір вікна за замовчуванням</translation>
|
<translation>Розмір вікна за замовчуванням</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation>Політика округлення коефіцієнта HiDPI</translation>
|
<translation>Політика округлення коефіцієнта HiDPI</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -175,7 +175,7 @@ Loc Huynh <https://github.com/hthienloc></translation>
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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>Kéo hình ảnh vào đây</translation>
|
<translation>Kéo hình ảnh vào đây</translation>
|
||||||
@@ -199,71 +199,71 @@ Loc Huynh <https://github.com/hthienloc></translation>
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<location filename="../mainwindow.cpp" line="568"/>
|
||||||
<source>File url list is empty</source>
|
<source>File url list is empty</source>
|
||||||
<translation>Danh sách url tệp trống</translation>
|
<translation>Danh sách url tệp trống</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>&Sao chép</translation>
|
<translation>&Sao chép</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<location filename="../mainwindow.cpp" line="576"/>
|
||||||
<source>Image data is invalid</source>
|
<source>Image data is invalid</source>
|
||||||
<translation>Dữ liệu hình ảnh không hợp lệ</translation>
|
<translation>Dữ liệu hình ảnh không hợp lệ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="599"/>
|
<location filename="../mainwindow.cpp" line="583"/>
|
||||||
<source>Not supported mimedata: %1</source>
|
<source>Not supported mimedata: %1</source>
|
||||||
<translation>Dữ liệu mimedata không được hỗ trợ: %1</translation>
|
<translation>Dữ liệu mimedata không được hỗ trợ: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation>Lưu dưới dạng</translation>
|
<translation>Lưu dưới dạng</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation>Hiện tại không có hình ảnh nào được mở.</translation>
|
<translation>Hiện tại không có hình ảnh nào được mở.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation>Hình ảnh %1 (*.%2)</translation>
|
<translation>Hình ảnh %1 (*.%2)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation>Không có định dạng hình ảnh được hỗ trợ.</translation>
|
<translation>Không có định dạng hình ảnh được hỗ trợ.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation>Không lưu được hình ảnh: %1</translation>
|
<translation>Không lưu được hình ảnh: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<location filename="../mainwindow.cpp" line="854"/>
|
||||||
<source>Image From Clipboard</source>
|
<source>Image From Clipboard</source>
|
||||||
<translation>Hình ảnh từ bộ nhớ tạm</translation>
|
<translation>Hình ảnh từ bộ nhớ tạm</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation>Bạn có chắc chắn muốn chuyển "%1" vào thùng rác không?</translation>
|
<translation>Bạn có chắc chắn muốn chuyển "%1" vào thùng rác không?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<location filename="../mainwindow.cpp" line="876"/>
|
||||||
<source>Failed to move file to trash</source>
|
<source>Failed to move file to trash</source>
|
||||||
<translation>Không thể di chuyển tệp vào thùng rác</translation>
|
<translation>Không thể di chuyển tệp vào thùng rác</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="898"/>
|
<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>Di chuyển vào thùng rác không thành công, nguyên nhân có thể là 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>
|
<translation>Di chuyển vào thùng rác không thành công, nguyên nhân có thể là 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>
|
||||||
@@ -392,7 +392,7 @@ Loc Huynh <https://github.com/hthienloc></translation>
|
|||||||
<translation>Hình ảnh tiếp theo</translation>
|
<translation>Hình ảnh tiếp theo</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<location filename="../actionmanager.cpp" line="111"/>
|
||||||
<source>Move to Trash</source>
|
<source>Move to Trash</source>
|
||||||
<translation>Chuyển vào Thùng rác</translation>
|
<translation>Chuyển vào Thùng rác</translation>
|
||||||
@@ -750,161 +750,151 @@ Loc Huynh <https://github.com/hthienloc></translation>
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>Cài đặt</translation>
|
<translation>Cài đặt</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation>Tùy chọn</translation>
|
<translation>Tùy chọn</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation>Phím tắt</translation>
|
<translation>Phím tắt</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation>Chỉnh sửa phím tắt cho hành động "%1":</translation>
|
<translation>Chỉnh sửa phím tắt cho hành động "%1":</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation>Không đặt được phím tắt</translation>
|
<translation>Không đặt được phím tắt</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<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 có bị trùng lặp với các phím tắt hiện có hay không.</translation>
|
<translation>Vui lòng kiểm tra xem các phím tắt có bị trùng lặp với các phím tắt hiện có hay không.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>Không làm gì cả</translation>
|
<translation>Không làm gì cả</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>Đóng cửa sổ</translation>
|
<translation>Đóng cửa sổ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>Chuyển đổi tối đa hóa</translation>
|
<translation>Chuyển đổi tối đa hóa</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation>Chuyển đổi toàn màn hình</translation>
|
<translation>Chuyển đổi toàn màn hình</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>Zoom và thu nhỏ</translation>
|
<translation>Zoom và thu nhỏ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>Xem mục tiếp theo hoặc trước đó</translation>
|
<translation>Xem mục tiếp theo hoặc trước đó</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation>Kích thước tự động</translation>
|
<translation>Kích thước tự động</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>Tối đa hóa</translation>
|
<translation>Tối đa hóa</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation>Có cửa sổ</translation>
|
<translation>Có cửa sổ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation>Tròn (Tỷ lệ số nguyên)</translation>
|
<translation>Tròn (Tỷ lệ số nguyên)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation>Ceil (Tỷ lệ số nguyên)</translation>
|
<translation>Ceil (Tỷ lệ số nguyên)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation>Tầng (Tỷ lệ số nguyên)</translation>
|
<translation>Tầng (Tỷ lệ số nguyên)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation>Hệ thống theo dõi (Chia tỷ lệ phân số)</translation>
|
<translation>Hệ thống theo dõi (Chia tỷ lệ phân số)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>Luôn dẫn đầu khi khởi nghiệp</translation>
|
<translation>Luôn dẫn đầu khi khởi nghiệp</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation>Sử dụng hoạt ảnh đóng cửa sổ tích hợp</translation>
|
<translation>Sử dụng hoạt ảnh đóng cửa sổ tích hợp</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation>Sử dụng bàn cờ màu sáng</translation>
|
<translation>Sử dụng bàn cờ màu sáng</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation>Lặp lại thư viện đã tải</translation>
|
<translation>Lặp lại thư viện đã tải</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation>Chế độ hình ảnh dài tự động</translation>
|
<translation>Chế độ hình ảnh dài tự động</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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>Giới hạn hỗ trợ SVG ở SVG Tiny 1.2</translation>
|
<translation>Giới hạn hỗ trợ SVG ở SVG Tiny 1.2</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>Hành vi bấm đúp</translation>
|
<translation>Hành vi bấm đúp</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>Hành vi của bánh xe chuột</translation>
|
<translation>Hành vi của bánh xe chuột</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>Kích thước cửa sổ mặc định</translation>
|
<translation>Kích thước cửa sổ mặc định</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation>Chính sách làm tròn hệ số tỷ lệ HiDPI</translation>
|
<translation>Chính sách làm tròn hệ số tỷ lệ HiDPI</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>GraphicsScene</name>
|
<name>GraphicsScene</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="305"/>
|
<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,71 +214,71 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="196"/>
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
<location filename="../mainwindow.cpp" line="584"/>
|
<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="478"/>
|
<location filename="../mainwindow.cpp" line="462"/>
|
||||||
<source>&Copy</source>
|
<source>&Copy</source>
|
||||||
<translation>复制(&C)</translation>
|
<translation>复制(&C)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="592"/>
|
<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="599"/>
|
<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="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<location filename="../mainwindow.cpp" line="748"/>
|
<location filename="../mainwindow.cpp" line="727"/>
|
||||||
<location filename="../mainwindow.cpp" line="755"/>
|
<location filename="../mainwindow.cpp" line="734"/>
|
||||||
<location filename="../mainwindow.cpp" line="785"/>
|
<location filename="../mainwindow.cpp" line="764"/>
|
||||||
<source>Save As</source>
|
<source>Save As</source>
|
||||||
<translation>另存为</translation>
|
<translation>另存为</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="731"/>
|
<location filename="../mainwindow.cpp" line="710"/>
|
||||||
<source>No image is currently open.</source>
|
<source>No image is currently open.</source>
|
||||||
<translation>当前未打开图像。</translation>
|
<translation>当前未打开图像。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="743"/>
|
<location filename="../mainwindow.cpp" line="722"/>
|
||||||
<source>%1 Image (*.%2)</source>
|
<source>%1 Image (*.%2)</source>
|
||||||
<translation>%1 图像 (*.%2)</translation>
|
<translation>%1 图像 (*.%2)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="749"/>
|
<location filename="../mainwindow.cpp" line="728"/>
|
||||||
<source>No supported image formats are available.</source>
|
<source>No supported image formats are available.</source>
|
||||||
<translation>没有可用的图像格式。</translation>
|
<translation>没有可用的图像格式。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="786"/>
|
<location filename="../mainwindow.cpp" line="765"/>
|
||||||
<source>Failed to save image: %1</source>
|
<source>Failed to save image: %1</source>
|
||||||
<translation>保存图像失败:%1</translation>
|
<translation>保存图像失败:%1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="875"/>
|
<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="893"/>
|
<location filename="../mainwindow.cpp" line="872"/>
|
||||||
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
<source>Are you sure you want to move "%1" to recycle bin?</source>
|
||||||
<translation>您确认要将“%1”移动到回收站吗?</translation>
|
<translation>您确认要将“%1”移动到回收站吗?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="897"/>
|
<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="898"/>
|
<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>
|
||||||
@@ -407,7 +407,7 @@
|
|||||||
<translation>下一个图像</translation>
|
<translation>下一个图像</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../mainwindow.cpp" line="892"/>
|
<location filename="../mainwindow.cpp" line="871"/>
|
||||||
<location filename="../actionmanager.cpp" line="111"/>
|
<location filename="../actionmanager.cpp" line="111"/>
|
||||||
<source>Move to Trash</source>
|
<source>Move to Trash</source>
|
||||||
<translation>移至回收站</translation>
|
<translation>移至回收站</translation>
|
||||||
@@ -765,161 +765,151 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>SettingsDialog</name>
|
<name>SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="35"/>
|
<location filename="../settingsdialog.cpp" line="33"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation>设定</translation>
|
<translation>设定</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="43"/>
|
<location filename="../settingsdialog.cpp" line="41"/>
|
||||||
<source>Options</source>
|
<source>Options</source>
|
||||||
<translation>选项</translation>
|
<translation>选项</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="55"/>
|
<location filename="../settingsdialog.cpp" line="53"/>
|
||||||
<source>Shortcuts</source>
|
<source>Shortcuts</source>
|
||||||
<translation>快捷键</translation>
|
<translation>快捷键</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="65"/>
|
<location filename="../settingsdialog.cpp" line="63"/>
|
||||||
<source>Editing shortcuts for action "%1":</source>
|
<source>Editing shortcuts for action "%1":</source>
|
||||||
<translation>编辑“%1”的快捷键:</translation>
|
<translation>编辑“%1”的快捷键:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="74"/>
|
<location filename="../settingsdialog.cpp" line="72"/>
|
||||||
<source>Failed to set shortcuts</source>
|
<source>Failed to set shortcuts</source>
|
||||||
<translation>快捷键设置失败</translation>
|
<translation>快捷键设置失败</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="75"/>
|
<location filename="../settingsdialog.cpp" line="73"/>
|
||||||
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
<source>Please check if shortcuts are duplicated with existing shortcuts.</source>
|
||||||
<translation>请检查快捷键是否与现有快捷键冲突。</translation>
|
<translation>请检查快捷键是否与现有快捷键冲突。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="82"/>
|
<location filename="../settingsdialog.cpp" line="80"/>
|
||||||
<source>Do nothing</source>
|
<source>Do nothing</source>
|
||||||
<translation>什么也不做</translation>
|
<translation>什么也不做</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="83"/>
|
<location filename="../settingsdialog.cpp" line="81"/>
|
||||||
<source>Close the window</source>
|
<source>Close the window</source>
|
||||||
<translation>关闭窗口</translation>
|
<translation>关闭窗口</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="84"/>
|
<location filename="../settingsdialog.cpp" line="82"/>
|
||||||
<source>Toggle maximize</source>
|
<source>Toggle maximize</source>
|
||||||
<translation>最大化窗口</translation>
|
<translation>最大化窗口</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="85"/>
|
<location filename="../settingsdialog.cpp" line="83"/>
|
||||||
<source>Toggle fullscreen</source>
|
<source>Toggle fullscreen</source>
|
||||||
<translation>全屏窗口</translation>
|
<translation>全屏窗口</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="89"/>
|
<location filename="../settingsdialog.cpp" line="87"/>
|
||||||
<source>Zoom in and out</source>
|
<source>Zoom in and out</source>
|
||||||
<translation>放大和缩小</translation>
|
<translation>放大和缩小</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="90"/>
|
<location filename="../settingsdialog.cpp" line="88"/>
|
||||||
<source>View next or previous item</source>
|
<source>View next or previous item</source>
|
||||||
<translation>查看下一项或上一项</translation>
|
<translation>查看下一项或上一项</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="94"/>
|
<location filename="../settingsdialog.cpp" line="92"/>
|
||||||
<source>Auto size</source>
|
<source>Auto size</source>
|
||||||
<translation>自动大小</translation>
|
<translation>自动大小</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="95"/>
|
<location filename="../settingsdialog.cpp" line="93"/>
|
||||||
<source>Maximized</source>
|
<source>Maximized</source>
|
||||||
<translation>最大化</translation>
|
<translation>最大化</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="96"/>
|
<location filename="../settingsdialog.cpp" line="94"/>
|
||||||
<source>Windowed</source>
|
<source>Windowed</source>
|
||||||
<translation>窗口化</translation>
|
<translation>窗口化</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="100"/>
|
<location filename="../settingsdialog.cpp" line="98"/>
|
||||||
<source>Round (Integer scaling)</source>
|
<source>Round (Integer scaling)</source>
|
||||||
<comment>This option means round up for .5 and above</comment>
|
<comment>This option means round up for .5 and above</comment>
|
||||||
<translation>四舍五入(整数缩放)</translation>
|
<translation>四舍五入(整数缩放)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="101"/>
|
<location filename="../settingsdialog.cpp" line="99"/>
|
||||||
<source>Ceil (Integer scaling)</source>
|
<source>Ceil (Integer scaling)</source>
|
||||||
<comment>This option means always round up</comment>
|
<comment>This option means always round up</comment>
|
||||||
<translation>向上取整(整数缩放)</translation>
|
<translation>向上取整(整数缩放)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="102"/>
|
<location filename="../settingsdialog.cpp" line="100"/>
|
||||||
<source>Floor (Integer scaling)</source>
|
<source>Floor (Integer scaling)</source>
|
||||||
<comment>This option means always round down</comment>
|
<comment>This option means always round down</comment>
|
||||||
<translation>向下取整(整数缩放)</translation>
|
<translation>向下取整(整数缩放)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="103"/>
|
<location filename="../settingsdialog.cpp" line="101"/>
|
||||||
<source>Follow system (Fractional scaling)</source>
|
<source>Follow system (Fractional scaling)</source>
|
||||||
<comment>This option means don't round</comment>
|
<comment>This option means don't round</comment>
|
||||||
<translation>跟随系统(小数缩放)</translation>
|
<translation>跟随系统(小数缩放)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="126"/>
|
<location filename="../settingsdialog.cpp" line="124"/>
|
||||||
<source>Stay on top when start-up</source>
|
<source>Stay on top when start-up</source>
|
||||||
<translation>启动时保持窗口总在最前</translation>
|
<translation>启动时保持窗口总在最前</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="127"/>
|
<location filename="../settingsdialog.cpp" line="125"/>
|
||||||
<source>Use built-in close window animation</source>
|
<source>Use built-in close window animation</source>
|
||||||
<translation>使用内置的关闭窗口动画</translation>
|
<translation>使用内置的关闭窗口动画</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="128"/>
|
<location filename="../settingsdialog.cpp" line="126"/>
|
||||||
<source>Show title bar</source>
|
|
||||||
<translation>显示标题栏</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="129"/>
|
|
||||||
<source>Show bird's-eye view</source>
|
|
||||||
<translation>显示鸟瞰图</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../settingsdialog.cpp" line="130"/>
|
|
||||||
<source>Use light-color checkerboard</source>
|
<source>Use light-color checkerboard</source>
|
||||||
<translation>使用亮色棋盘格</translation>
|
<translation>使用亮色棋盘格</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="131"/>
|
<location filename="../settingsdialog.cpp" line="127"/>
|
||||||
<source>Loop the loaded gallery</source>
|
<source>Loop the loaded gallery</source>
|
||||||
<translation>循环所加载的图像列表</translation>
|
<translation>循环所加载的图像列表</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="132"/>
|
<location filename="../settingsdialog.cpp" line="128"/>
|
||||||
<source>Auto long image mode</source>
|
<source>Auto long image mode</source>
|
||||||
<translation>自动进入长图模式</translation>
|
<translation>自动进入长图模式</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="133"/>
|
<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>限制 SVG 支持标准到 SVG Tiny 1.2</translation>
|
<translation>限制 SVG 支持标准到 SVG Tiny 1.2</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="134"/>
|
<location filename="../settingsdialog.cpp" line="130"/>
|
||||||
<source>Double-click behavior</source>
|
<source>Double-click behavior</source>
|
||||||
<translation>双击时的行为</translation>
|
<translation>双击时的行为</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="135"/>
|
<location filename="../settingsdialog.cpp" line="131"/>
|
||||||
<source>Mouse wheel behavior</source>
|
<source>Mouse wheel behavior</source>
|
||||||
<translation>鼠标滚轮行为</translation>
|
<translation>鼠标滚轮行为</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="136"/>
|
<location filename="../settingsdialog.cpp" line="132"/>
|
||||||
<source>Default window size</source>
|
<source>Default window size</source>
|
||||||
<translation>默认窗口大小</translation>
|
<translation>默认窗口大小</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settingsdialog.cpp" line="137"/>
|
<location filename="../settingsdialog.cpp" line="133"/>
|
||||||
<source>HiDPI scale factor rounding policy</source>
|
<source>HiDPI scale factor rounding policy</source>
|
||||||
<translation>HiDPI 高分屏缩放策略</translation>
|
<translation>HiDPI 高分屏缩放策略</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
<center>
|
|
||||||
<p>
|
|
||||||
<img width='128' height='128' src=':/icons/app-icon.png'/>
|
|
||||||
<br/>
|
|
||||||
<!-- Application name -->
|
|
||||||
<span>%1</span>
|
|
||||||
<br/>
|
|
||||||
<!-- Version info -->
|
|
||||||
<span>%2</span>
|
|
||||||
</p>
|
|
||||||
<hr/>
|
|
||||||
<p>
|
|
||||||
<!-- Upstream author and fork author -->
|
|
||||||
<span>%3</span><span>: </span><a href='https://github.com/BLumia'>@BLumia</a>
|
|
||||||
<br/>
|
|
||||||
<span>%4</span><span>: </span><a href='https://github.com/yyc12345'>@yyc12345</a>
|
|
||||||
<br/>
|
|
||||||
<!-- Icon author -->
|
|
||||||
<span>%5</span><span>: </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>: </span><a href='https://github.com/BLumia/pineapple-pictures'>GitHub</a>
|
|
||||||
</p>
|
|
||||||
</center>
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
<!-- 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>
|
|
||||||
<li>
|
|
||||||
<b>%10</b><span>:</span>
|
|
||||||
<br/>
|
|
||||||
<span>%11</span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
<!-- 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 © 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>
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
<!-- 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>
|
|
||||||
|
After Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.4 KiB |
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 75 75" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;">
|
||||||
|
<g transform="matrix(1,0,0,1,-119,-102)">
|
||||||
|
<g id="go-next" transform="matrix(1.25,0,0,1.44231,119,-7.61538)">
|
||||||
|
<rect x="0" y="76" width="60" height="52" style="fill:none;"/>
|
||||||
|
<g transform="matrix(0.8,0,0,0.693333,0.260244,25.056)">
|
||||||
|
<circle cx="37.175" cy="110.977" r="33.175" style="fill-opacity:0.15;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
<g id="path867" transform="matrix(0.8,0,0,0.693333,1.80436,76.0055)">
|
||||||
|
<path d="M31.578,26.175L42.911,37.508L31.578,48.809" style="fill:none;fill-rule:nonzero;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 2.4 KiB |
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 75 75" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;">
|
||||||
|
<g transform="matrix(1,0,0,1,-39,-102)">
|
||||||
|
<g id="go-previous" transform="matrix(1.25,0,0,1.44231,39,-7.61538)">
|
||||||
|
<rect x="0" y="76" width="60" height="52" style="fill:none;"/>
|
||||||
|
<g transform="matrix(0.8,0,0,0.693333,0.260244,25.056)">
|
||||||
|
<circle cx="37.175" cy="110.977" r="33.175" style="fill-opacity:0.15;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
<g id="path867" transform="matrix(0.8,0,0,0.693333,-1.8205,76.0055)">
|
||||||
|
<path d="M43.442,26.175L32.109,37.508L43.442,48.809" style="fill:none;fill-rule:nonzero;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
|
||||||
|
<g transform="matrix(1,0,0,1,-74,-7.10543e-15)">
|
||||||
|
<g id="object-rotate-right" transform="matrix(1,0,0,1,74,7.10543e-15)">
|
||||||
|
<rect x="0" y="0" width="32" height="32" style="fill:none;"/>
|
||||||
|
<g transform="matrix(1,0,0,1,-1,-0.275147)">
|
||||||
|
<g transform="matrix(1,0,0,1,-74,-7.10543e-15)">
|
||||||
|
<path d="M100,18C100,22.967 95.967,27 91,27C86.033,27 82,22.967 82,18C82,13.033 86.033,9 91,9" style="fill:none;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.984136,-0.177418,0.177418,0.984136,-74.2676,16.4198)">
|
||||||
|
<path d="M89,13L93,9L89,5" style="fill:none;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
|
||||||
|
<g transform="matrix(1,0,0,1,0,-37)">
|
||||||
|
<g id="view-background-checkerboard" transform="matrix(1,0,0,1,0,37)">
|
||||||
|
<rect x="0" y="0" width="32" height="32" style="fill:none;"/>
|
||||||
|
<g id="rect814" transform="matrix(0.964431,0,0,0.907545,0.187581,-988.266)">
|
||||||
|
<rect x="6.027" y="1095.56" width="10.369" height="11.019" style="fill:white;fill-opacity:0.87;"/>
|
||||||
|
</g>
|
||||||
|
<g id="rect814-4" transform="matrix(0.984615,0,0,0.898704,-0.143354,-978.502)">
|
||||||
|
<rect x="16.396" y="1106.6" width="10.156" height="11.127" style="fill:white;fill-opacity:0.87;"/>
|
||||||
|
</g>
|
||||||
|
<g id="rect814-2" transform="matrix(0.963684,0,0,0.898697,0.199828,-978.495)">
|
||||||
|
<rect x="6.019" y="1106.6" width="10.377" height="11.127" style="fill:white;fill-opacity:0.07;"/>
|
||||||
|
</g>
|
||||||
|
<g id="rect814-2-6" transform="matrix(0.980558,0,0,0.898693,-0.0768322,-978.47)">
|
||||||
|
<rect x="16.396" y="1095.45" width="10.198" height="11.127" style="fill:white;fill-opacity:0.07;"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1,0,0,0.952381,-74,-34)">
|
||||||
|
<rect x="80" y="42" width="20" height="21" style="fill:none;stroke:white;stroke-width:2.05px;"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
|
||||||
|
<g transform="matrix(1,0,0,1,-37,-37)">
|
||||||
|
<g id="view-fullscreen" transform="matrix(1,0,0,1,37,37)">
|
||||||
|
<rect x="0" y="0" width="32" height="32" style="fill:none;"/>
|
||||||
|
<g transform="matrix(1,0,0,1,-36,-37)">
|
||||||
|
<path d="M42,49L42,43L48,43" style="fill:none;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(-1,1.22465e-16,1.22465e-16,1,68,-37)">
|
||||||
|
<path d="M42,49L42,43L48,43" style="fill:none;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1,-2.46519e-32,-2.46519e-32,-1,-36,69)">
|
||||||
|
<path d="M42,49L42,43L48,43" style="fill:none;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1.11111,0,0,1.14286,-42.3333,-42.8571)">
|
||||||
|
<rect x="48" y="48" width="9" height="7" style="fill:none;stroke:white;stroke-width:1.77px;"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(-1,-1.22465e-16,1.22465e-16,-1,68,69)">
|
||||||
|
<path d="M42,49L42,43L48,43" style="fill:none;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,71 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="32"
|
||||||
|
height="32"
|
||||||
|
viewBox="0 0 8.4666665 8.4666669"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||||
|
sodipodi:docname="window-close.svg">
|
||||||
|
<defs
|
||||||
|
id="defs2" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#000000"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.69803922"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="22.627417"
|
||||||
|
inkscape:cx="19.29838"
|
||||||
|
inkscape:cy="15.79404"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:pagecheckerboard="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1001"
|
||||||
|
inkscape:window-x="-9"
|
||||||
|
inkscape:window-y="-9"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-288.5333)">
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="m 2.100237,290.55098 4.3234589,4.22265"
|
||||||
|
id="path817"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#ffffff;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
d="m 2.099406,294.78651 4.3414732,-4.24185"
|
||||||
|
id="path819"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
|
||||||
|
<rect id="zoom-in" x="0" y="0" width="32" height="32" style="fill:none;"/>
|
||||||
|
<g id="zoom-in1" serif:id="zoom-in">
|
||||||
|
<g>
|
||||||
|
<g transform="matrix(1,0,0,1,-1,0)">
|
||||||
|
<circle cx="16" cy="15" r="9" style="fill:none;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.8,0.8,-0.8,0.8,27.6,-17.2)">
|
||||||
|
<path d="M21,28L26,28" style="fill:none;stroke:white;stroke-width:2.65px;"/>
|
||||||
|
</g>
|
||||||
|
<path d="M11,15L19,15" style="fill:none;stroke:white;stroke-width:2px;"/>
|
||||||
|
<path d="M15,11L15,19" style="fill:none;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-miterlimit:1.5;">
|
||||||
|
<g transform="matrix(1,0,0,1,-74,-37)">
|
||||||
|
<g id="zoom-original" transform="matrix(1,0,0,1,74,37)">
|
||||||
|
<rect x="0" y="0" width="32" height="32" style="fill:none;"/>
|
||||||
|
<g transform="matrix(1,0,0,1,-73,-37)">
|
||||||
|
<path d="M85,57L85,49L84,49" style="fill:none;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1,0,0,1,-74,-37)">
|
||||||
|
<rect x="89" y="50" width="2" height="2" style="fill:white;"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1,0,0,1,-74,-33)">
|
||||||
|
<rect x="89" y="50" width="2" height="2" style="fill:white;"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1,0,0,1,-64,-37)">
|
||||||
|
<path d="M85,57L85,49L84,49" style="fill:none;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1,0,0,0.952381,-74,-34)">
|
||||||
|
<rect x="80" y="42" width="20" height="21" style="fill:none;stroke:white;stroke-width:2.05px;stroke-linecap:round;stroke-linejoin:round;"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
|
||||||
|
<g transform="matrix(1,0,0,1,-74,0)">
|
||||||
|
<g id="zoom-out" transform="matrix(1,0,0,1,74,0)">
|
||||||
|
<rect x="0" y="0" width="32" height="32" style="fill:none;"/>
|
||||||
|
<g>
|
||||||
|
<g transform="matrix(1,0,0,1,-1,0)">
|
||||||
|
<circle cx="16" cy="15" r="9" style="fill:none;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.8,0.8,-0.8,0.8,27.6,-17.2)">
|
||||||
|
<path d="M21,28L26,28" style="fill:none;stroke:white;stroke-width:2.65px;"/>
|
||||||
|
</g>
|
||||||
|
<path d="M11,15L19,15" style="fill:none;stroke:white;stroke-width:2px;"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,18 @@
|
|||||||
|
IDI_ICON1 ICON DISCARDABLE "@CMAKE_CURRENT_SOURCE_DIR@/assets/icons/app-icon.ico"
|
||||||
|
1 VERSIONINFO
|
||||||
|
BEGIN
|
||||||
|
BLOCK "StringFileInfo"
|
||||||
|
BEGIN
|
||||||
|
BLOCK "040904E4"
|
||||||
|
BEGIN
|
||||||
|
VALUE "FileDescription", "Pineapple Pictures - Image Viewer"
|
||||||
|
VALUE "LegalCopyright", "MIT/Expat License - Copyright (C) 2026 Gary Wang"
|
||||||
|
VALUE "ProductName", "Pineapple Pictures"
|
||||||
|
VALUE "ProductVersion", "@PROJECT_VERSION@"
|
||||||
|
END
|
||||||
|
END
|
||||||
|
BLOCK "VarFileInfo"
|
||||||
|
BEGIN
|
||||||
|
VALUE "Translation", 0x409, 1200
|
||||||
|
END
|
||||||
|
END
|
||||||