Compare commits

...

8 Commits

Author SHA1 Message Date
Alf Gaida
5eaa08fe49
Adding upstream version 0.6.0.
Signed-off-by: Alf Gaida <agaida@siduction.org>
2017-10-22 00:24:10 +02:00
Alf Gaida
4a8f2ba14a
Adding upstream version 0.5.1.
Signed-off-by: Alf Gaida <agaida@siduction.org>
2016-12-22 02:34:55 +01:00
Alf Gaida
d53be78755 Adding upstream version 0.5.0. 2016-09-24 12:48:49 +02:00
Alf Gaida
de1fa415b2 Adding upstream version 0.4.1~38-gf8fc532. 2016-07-20 18:14:29 +02:00
Alf Gaida
4ac585f605 Adding upstream version 0.4.0+20160108. 2016-02-07 20:16:27 +01:00
Alf Gaida
bc98f04c8a Adding upstream version 0.4.0+20151117. 2015-11-19 17:30:54 +01:00
Alf Gaida
7a6ecc3364 Adding upstream version 0.4.0+20151031. 2015-10-31 19:02:00 +01:00
Alf Gaida
95a2f6c084 Adding upstream version 0.4.0+20150828. 2015-09-04 19:47:04 +02:00
93 changed files with 2519 additions and 8917 deletions

1
.gitignore vendored
View File

@ -1 +0,0 @@
build

View File

@ -3,7 +3,7 @@ Upstream Authors:
Hong Jen Yee (PCMan) <pcman.tw@gmail.com> Hong Jen Yee (PCMan) <pcman.tw@gmail.com>
Copyright: Copyright:
Copyright (c) 2013-2014 LXQt team Copyright (c) 2013-2017 LXQt team
License: GPL-2 and LGPL-2.1+ License: GPL-2+ and LGPL-2.1+
The full text of the licenses can be found in the 'COPYING' file. The full text of the licenses can be found in the 'COPYING' file.

218
CHANGELOG Normal file
View File

@ -0,0 +1,218 @@
lximage-qt-0.6.0 / 2017-10-21
=============================
* Add ImageShack upload provider.
* Fix warnings issued by GCC and Clang.
* Ensure file is closed when upload finishes.
* Make image URL read-only.
* Update copyright in initial file comment for new additions.
* Make QNetworkAccessManager static and fix initialization order in UploadDialog.
* Add support for uploading files (fixes #98).
* Bump versions
* Don't export github templates
* Don't use hardcoded install dir
* Update CMakeLists.txt
* Fix regression in thumbnail view
* Add Lithuanian .desktop files
* liblxqt don't fit here
* Copied issue-template
* Drops Qt5Core_VERSION_STRING
* set Qt::AA_UseHighDpiPixmaps to true
* MainWindow: Fix crash for quick image changes
* Use GNUInstallDirs
* jobs: Do proper error handling
* Adapt to changes in libfm-qt(the c++11 port)
* Use the new lxqt-build-tools new FindExif CMake module
* Simpler code for ScreenshotSelectAreaGraphicsView class.
* Change Screenshot select area green color by actual hightlight color. Use lximage-qt private variables style.
* Adapt to C++11 and RAM improvements.
* Screenshot captures an area of the screen.
* Use const iterators
* Bump year
* File and folder DND Fixes https://github.com/lxde/lximage-qt/issues/69.
0.5.1 / 2016-12-21
==================
* Release 0.5.1: Update changelog
* Bump patch version and (#82)
* Create lximage-qt-screenshot_it.desktop (#83)
* Add *da.desktop files
* Desktop entry files: Fix typo in French translation
* [MRG] Display first image when loading a directory (v2) (#75)
* Desktop entry files: Add French translation
* Use lxqt-build-tools
* Use the new lxqt-build-tools package
* Fixed A Cast (#71)
* Remove cpack (#70)
0.5.0 / 2016-09-24
==================
* Release 0.5.0: Add changelog
* Bump version to 0.5.0 (#67)
* Remove Core and Qt from Categories in desktop file (#64)
* Extend README.md
* Fix broken compatibility introduced by libfm-qt API changes. This closes lxde/lximage-qt#63.
* Add Catalan translations
* Quieten compiler warning
* Code cleanup
* Use LXQtCompilerSettings cmake module
* Treat SVG files separately as SVG images
* build: Update translations based on *.ui
* Fix typo in Portuguese translation for desktop file
* Fix typo in German translation for desktop file (#55)
* build: Use external translations (#54)
* ts-files removal (#53)
* Hide cursor smartly in fullscreen mode
* build: Use liblxqt's TranslateDesktop module
* Adds support for GIF animation.
* Implement an EOG-like behavior on starting By clicking on an image for the first time, the user wants to see it clearly with lximage-qt. So, the following behavior is implemented here:
* Add --version command line option
* Fix missing Russian translation in desktop file
* Fix memory leak if taking screenshot with cursor
* Polish translation updated
* Another update
* Improved Russian translation - thanks to uazure
* Fix typo
* Add Russian translation
* Italian translation update
* CMake: Adapt to libfm-qt Targets
* Turn on C++11 support. This closes bug lxde/lximage-qt #36.
* Exec should have an argument
* all GPL files are (or any later)
* Add release script
* Update translations
* Set the color table properly for scaled images
* Add Greek (el) translation Remove needless country variant from language code
* Corrected language code (de_DE -> de) of german translation, marked translations as done.
* replace tabs with spaces
* remove trailing spaces
* replace glib with Qt for command-line parsing
* Don't save file in private mode
* Prevents the slideshow timeout to be set to 0 in the UI
* Correctly include CMake modules in intree/superbuild mode
* Remove lximage-qt from the Utilities category
* Update README
* Update .gitignore
* Hungarian translations added
* save and restore window size and maximized state
0.4.0 / 2015-02-18
==================
* Release v0.4.0
* src/CMakeLists.txt: do not completely overwrite CMAKE_CXX_FLAGS
* Create lximage-qt_it.desktop
* Create lximage-qt_it.ts
* CMakeLists cleanups
* Portuguese update
* Added german translation, re-generated all other .ts files.
* Added keyboard shortcut to print.
* Adds .desktop translation support
* Portuguese language update
* Remove debian directory (Close #9)
* Fix typo Zoomo -> Zoom
* Use proper naming conventions for translations
* Clean up CMakeLists, dropping support for Qt 5
0.3.0 / 2014-10-15
==================
* Release v0.3.0
* Rename preferencedialog.ui to preferencesdialog.ui
* Ignore build dir.
* debian: enable qt5 by default
* Fix lxde/lxde-qt #269 - Screenshots are not saved aedequately unless file extension is chosen manually.
* Support Qt5 and libfm-qt5.
* Make sure all enums are handled in switch
0.2.0 / 2014-05-09
==================
* Release 0.2.0
* Update desktop files
* Update README/COPYING/AUTHORS
* Add some missing link_directories()
* Commit from LXDE Pootle server by user yinghua_wang.: 70 of 70 strings translated (0 fuzzy).
* Add CPack rules for creating tarball
* Avoid creating a scaled image cache if current scale factor is 1.0 (original size).
* Rewrite the scaled image caching code in LxImage::ImageView to improve its readability and correctness.
* Add LxImage::Job class as a base class for multi-threading jobs.
* Avoid copying subimages to speed up scaling images.
* Limit the size of pixmap cache.
* Limit the size of pixmap cache.
* Create a cache for the high-quality scaled image of the currently viewport and use it to override the default paintEvent() of QGraphicsView as needed. This improves the image quality a lot when we scale down large photos.
* Cancel autoZoomFit when calling zoomOriginal(), zoomIn(), and zoomOut().
* Add copy and paste buttons to the toolbar.
* Automatically zoom to fit current window size by default.
* Make the preferences dialog non-modal and apply the settings to all existing windows.
* Add "Delete file" and "File properties" actions to the file menu.
* Add a very basic thumbnails pane based on Fm::FolderView of libfm-qt.
* Implement the preferences dialog. * Enable keyboard shortcuts in fullscreen mode.
* Implement very basic slide show functionality.
* Jump to the previous or the next image by using mouse wheel.
* Avoid scaling up an image while zoomFit() if it's smaller than the current view.
* Support grabbing mouse cursor when taking a screenshot.
* Add very basic printing support.
* Commit from LXDE Pootle server by user adrianoh2.: 70 of 70 strings translated (0 fuzzy).
* Commit from LXDE Pootle server by user Fitoschido.: 70 of 70 strings translated (0 fuzzy).
* Commit from LXDE Pootle server by user hirkmt.: 70 of 70 strings translated (0 fuzzy).
* Remove xsettings support and add an option in the preference dialog to set a fallback icon theme instead.
* New files added from LXDE Pootle server based on templates
* New files added from LXDE Pootle server based on templates
* Improve cmake integration for translations. The *.ts files are only updated when UPDATE_TRANSLATIONS cmake option is turned on.
* Commit from LXDE Pootle server by user zvacet.: 65 of 70 strings translated (0 fuzzy).
* Commit from LXDE Pootle server by user zvacet.: 50 of 70 strings translated (0 fuzzy).
* Commit from LXDE Pootle server by user wwycheuk.: 65 of 70 strings translated (0 fuzzy).
* Commit from LXDE Pootle server by user mbouzada.: 70 of 70 strings translated (0 fuzzy).
* New files added from LXDE Pootle server based on templates
* New files added from LXDE Pootle server based on templates
* Commit from LXDE Pootle server by user Fitoschido.: 68 of 70 strings translated (0 fuzzy).
* New files added from LXDE Pootle server based on templates
* New files added from LXDE Pootle server based on templates
* Corrected caml cased string toolBar.
* Commit from LXDE Pootle server by user smarquespt.: 70 of 70 strings translated (0 fuzzy).
* Commit from LXDE Pootle server by user brother.: 24 of 24 strings translated (0 fuzzy).
* Correct misspelled 'Zoom'.
* Commit from LXDE Pootle server by user andika.: 70 of 70 strings translated (0 fuzzy).
* New files added from LXDE Pootle server based on templates
* Commit from LXDE Pootle server by user strebski.: 70 of 70 strings translated (0 fuzzy).
* New files added from LXDE Pootle server based on templates
* New files added from LXDE Pootle server based on templates
* New files added from LXDE Pootle server based on templates
* New files added from LXDE Pootle server based on templates
* New files added from LXDE Pootle server based on templates
* Commit from LXDE Pootle server by user LStranger.: 70 of 70 strings translated (0 fuzzy).
* Commit from LXDE Pootle server by user brother.: 70 of 70 strings translated (0 fuzzy).
* Commit from LXDE Pootle server by user LStranger.: 2 of 70 strings translated (0 fuzzy).
* New files added from LXDE Pootle server based on templates
* New files added from LXDE Pootle server based on templates
* New files added from LXDE Pootle server based on templates
* Add zh_TW translation and a template ts file.
* Add a desktop entry file for the built-in screenshot tool.
* Add --screenshot command line argument to launch the built-in screenshot utility.
* Improve the screenshot tool. Implement pasting from clipboard.
* Add ability to taking screenshots to lximage-qt.
* debian : Add missing libx11 build-depend
* Add missing files.
* Add Xdg::DesktopSettings for detecting desktop-specific settings. Get icon theme name via XSettings or config files when available.
* Supporting saving files. (needs some more polishing, though).
* Add a basic debian directory to enable daily builds.
* Add a context menu.
* Use libexif to read EXIF orientation tags then apply them to images loaded.
* Refactor - move image loading code to LxImage::LoadImageJob class.
* Remove unused data member.
* Add a preferences dialog (not working yet). Little adjustment for menu positions and add placeholders for features not implemented.
* Fix filename encoding handling so non-English filenames can be passed correctly from command line arguments.
* Canonicalize filenames passed through command line arguments. Add an icon borrowed from GPicView. Rearrange menus and implement "fullscreen" and "copy to clipboard".
* Implement basic single instance support and command line argument parsing.
* Properly cancel pending tasks and make going back/forward more smooth. Enhance window title display.
* Little fix to avoid loading a cancelled image.
* Supports rotation of images.
* Use the latest libfm-qt APIs to filter out non-image files. Implement jumping to first and last file in the folder.
* Fix incorrect reference couting of GCancellable objects to avoid crashes. Add some shortcut keys to improve usability.
* Use glib/gio GInputStream + GIOSchedulerJob to load the images with multi-threading. Refactor, simplify class methods of LxImage::MainWindow.
* Use libfm to load folders containing the specified image. Add dependency on libexif for future implementation of EXIF related stuff. Add LxImage::Applcation class to handle application initiation.
* Initial import into git

View File

@ -1,39 +1,38 @@
cmake_minimum_required(VERSION 2.8.11) cmake_minimum_required(VERSION 3.0.2)
project(lximage-qt) project(lximage-qt)
include(GNUInstallDirs) include(GNUInstallDirs)
# additional cmake files
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
set(MAJOR_VERSION 0) set(MAJOR_VERSION 0)
set(MINOR_VERSION 4) set(MINOR_VERSION 6)
set(PATCH_VERSION 0) set(PATCH_VERSION 0)
set(LXIMAGE_VERSION ${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION})
set(LXQTBT_MINIMUM_VERSION "0.4.0")
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt5Widgets REQUIRED) find_package(Qt5Widgets REQUIRED)
find_package(Qt5Network REQUIRED)
find_package(Qt5DBus REQUIRED) find_package(Qt5DBus REQUIRED)
find_package(Qt5PrintSupport REQUIRED QUIET) find_package(Qt5PrintSupport REQUIRED)
find_package(Qt5X11Extras REQUIRED QUIET) find_package(Qt5X11Extras REQUIRED)
find_package(Qt5LinguistTools REQUIRED QUIET) find_package(Qt5LinguistTools REQUIRED)
message(STATUS "Building with Qt ${Qt5Core_VERSION_STRING}") find_package(Qt5Svg REQUIRED)
find_package(fm-qt REQUIRED)
find_package(lxqt-build-tools ${LXQTBT_MINIMUM_VERSION} REQUIRED)
find_package(Exif REQUIRED)
message(STATUS "Building with Qt ${Qt5Core_VERSION}")
find_package(PkgConfig REQUIRED) include(LXQtCompilerSettings NO_POLICY_SCOPE)
pkg_check_modules(GLIB REQUIRED glib-2.0)
# FIXME: we'll need this to provide detail info for photos in the future
pkg_check_modules(EXIF REQUIRED libexif)
pkg_check_modules(LIBFM_QT REQUIRED libfm-qt5 libfm>=1.2)
# TODO: make the X11 stuff optional. # TODO: make the X11 stuff optional.
# for screenshot support # for screenshot support
find_package(X11 REQUIRED) find_package(X11 REQUIRED)
find_package(PkgConfig REQUIRED)
# Xfixes is needed to capture the mouse cursor image # Xfixes is needed to capture the mouse cursor image
pkg_check_modules(XFIXES REQUIRED xfixes) pkg_check_modules(XFIXES REQUIRED xfixes)
@ -46,12 +45,3 @@ install(
DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/48x48/apps" DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/48x48/apps"
) )
# building tarball with CPack -------------------------------------------------
include(InstallRequiredSystemLibraries)
set(CPACK_PACKAGE_VERSION_MAJOR ${MAJOR_VERSION})
set(CPACK_PACKAGE_VERSION_MINOR ${MINOR_VERSION})
set(CPACK_PACKAGE_VERSION_PATCH ${PATCH_VERSION})
set(CPACK_GENERATOR TBZ2)
set(CPACK_SOURCE_GENERATOR TBZ2)
set(CPACK_SOURCE_IGNORE_FILES /build/;.gitignore;.*~;.git;.kdev4;temp)
include(CPack)

8
README
View File

@ -1,8 +0,0 @@
# lximage-qt
A simple and fast image viewer.
The Qt port of LXImage
Upstream:
http://lxqt.org
http://git.lxde.org/gitweb/?p=lxde/lximage-qt.git

25
README.md Normal file
View File

@ -0,0 +1,25 @@
# LXImage-Qt
## Overview
LXImage-Qt is the Qt port of LXImage, a simple and fast image viewer.
In addition it features a tool to take screenshots.
It is maintained by the LXQt project but can be used independently from this desktop environment.
## Installation
### Compiling source code
Runtime dependencies are qtx11extras and [libfm-qt](https://github.com/lxde/libfm-qt) (LXImage-Qt used to depend on [PCManFM-Qt](https://github.com/lxde/pcmanfm-qt) but the relevant code belongs to what was outsourced in libfm-qt).
Additional build dependencies are CMake and optionally Git to pull latest VCS checkouts. The localization files were outsourced to repository [lxqt-l10n](https://github.com/lxde/lxqt-l10n) so the corresponding dependencies are needed, too. Please refer to this repository's `README.md` for further information.
Code configuration is handled by CMake. CMake variable `CMAKE_INSTALL_PREFIX` has to be set to `/usr` on most operating systems.
To build run `make`, to install `make install` which accepts variable `DESTDIR` as usual.
### Binary packages
Official binary packages are available in Arch Linux, Debian (as of Debian stretch), Fedora and openSUSE (Leap 42.1 and Tumbleweed).
Just use the distributions' package manager to search for string 'lximage'.

View File

@ -1,107 +0,0 @@
#=============================================================================
# The lxqt_translate_desktop() function was copied from the the
# LXQt LxQtTranste.cmake
#
# Original Author: Alexander Sokolov <sokoloff.a@gmail.com>
#
# funtion lxqt_translate_desktop(_RESULT
# SOURCES <sources>
# [TRANSLATION_DIR] translation_directory
# )
# Output:
# _RESULT The generated .desktop (.desktop) files
#
# Input:
#
# SOURCES List of input desktop files (.destktop.in) to be translated
# (merged), relative to the CMakeList.txt.
#
# TRANSLATION_DIR Optional path to the directory with the .ts files,
# relative to the CMakeList.txt. Defaults to
# "translations".
#
#=============================================================================
function(lxqt_translate_desktop _RESULT)
# Parse arguments ***************************************
set(oneValueArgs TRANSLATION_DIR)
set(multiValueArgs SOURCES)
cmake_parse_arguments(_ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
# check for unknown arguments
set(_UNPARSED_ARGS ${_ARGS_UNPARSED_ARGUMENTS})
if (NOT ${_UNPARSED_ARGS} STREQUAL "")
MESSAGE(FATAL_ERROR
"Unknown arguments '${_UNPARSED_ARGS}'.\n"
"See lxqt_translate_desktop() documenation for more information.\n"
)
endif()
if (NOT DEFINED _ARGS_SOURCES)
set(${_RESULT} "" PARENT_SCOPE)
return()
else()
set(_sources ${_ARGS_SOURCES})
endif()
if (NOT DEFINED _ARGS_TRANSLATION_DIR)
set(_translationDir "translations")
else()
set(_translationDir ${_ARGS_TRANSLATION_DIR})
endif()
get_filename_component (_translationDir ${_translationDir} ABSOLUTE)
foreach (_inFile ${_sources})
get_filename_component(_inFile ${_inFile} ABSOLUTE)
get_filename_component(_fileName ${_inFile} NAME_WE)
#Extract the real extension ............
get_filename_component(_fileExt ${_inFile} EXT)
string(REPLACE ".in" "" _fileExt ${_fileExt})
#.......................................
set(_outFile "${CMAKE_CURRENT_BINARY_DIR}/${_fileName}${_fileExt}")
file(GLOB _translations
${_translationDir}/${_fileName}_*${_fileExt}
${_translationDir}/local/${_fileName}_*${_fileExt}
)
set(_pattern "'\\[.*]\\s*='")
if (_translations)
add_custom_command(OUTPUT ${_outFile}
COMMAND grep -v "'#TRANSLATIONS_DIR='" ${_inFile} > ${_outFile}
COMMAND grep -h ${_pattern} ${_translations} >> ${_outFile}
COMMENT "Generating ${_fileName}${_fileExt}"
)
else()
add_custom_command(OUTPUT ${_outFile}
COMMAND grep -v "'#TRANSLATIONS_DIR='" ${_inFile} > ${_outFile}
COMMENT "Generating ${_fileName}${_fileExt}"
)
endif()
set(__result ${__result} ${_outFile})
# TX file ***********************************************
set(_txFile "${CMAKE_BINARY_DIR}/tx/${_fileName}${_fileExt}.tx.sh")
string(REPLACE "${CMAKE_SOURCE_DIR}/" "" _tx_translationDir ${_translationDir})
string(REPLACE "${CMAKE_SOURCE_DIR}/" "" _tx_inFile ${_inFile})
string(REPLACE "." "" _fileType ${_fileExt})
file(WRITE ${_txFile}
"[ -f ${_inFile} ] || exit 0\n"
"echo '[lxde-qt.${_fileName}_${_fileType}]'\n"
"echo 'type = DESKTOP'\n"
"echo 'source_lang = en'\n"
"echo 'source_file = ${_tx_inFile}'\n"
"echo 'file_filter = ${_tx_translationDir}/${_fileName}_<lang>${_fileExt}'\n"
"echo ''\n"
)
endforeach()
set(${_RESULT} ${__result} PARENT_SCOPE)
endfunction(lxqt_translate_desktop)

View File

@ -5,5 +5,5 @@ GenericName=Screenshot
Comment=Take a screenshot Comment=Take a screenshot
Exec=lximage-qt --screenshot Exec=lximage-qt --screenshot
Icon=camera-photo Icon=camera-photo
Categories=Graphics;Utility;Core;Qt; Categories=Graphics;Core;Qt;
StartupNotify=true StartupNotify=true

View File

@ -4,8 +4,8 @@ Name=LXImage
GenericName=Image Viewer GenericName=Image Viewer
Comment=The LXQt image viewer Comment=The LXQt image viewer
Icon=lximage-qt Icon=lximage-qt
Exec=lximage-qt Exec=lximage-qt %F
StartupNotify=true StartupNotify=true
Terminal=false Terminal=false
Categories=Graphics;Utility;Core;Qt;Viewer;RasterGraphics;2DGraphics;Photography; Categories=Graphics;Viewer;RasterGraphics;2DGraphics;Photography;
MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/png;image/tiff;image/x-bmp;image/x-pcx;image/x-tga;image/x-portable-pixmap;image/x-portable-bitmap;image/x-targa;image/x-portable-greymap;application/pcx;image/svg+xml;image/svg-xml; MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/png;image/tiff;image/x-bmp;image/x-pcx;image/x-tga;image/x-portable-pixmap;image/x-portable-bitmap;image/x-targa;image/x-portable-greymap;application/pcx;image/svg+xml;image/svg-xml;

View File

@ -1,4 +0,0 @@
[Project]
Name=lximage-qt
Manager=KDevCMakeManager
VersionControl=

28
release.sh Executable file
View File

@ -0,0 +1,28 @@
#!/bin/bash
PROJECT="lximage-qt"
version="$1"
prefix=$PROJECT-$version
shift
if [[ -z $version ]]; then
>&2 echo "USAGE: $0 <tag>"
exit 1
fi
mkdir -p "dist/$version"
echo "Creating $prefix.tar.gz"
git archive -9 --format tar.gz $version --prefix="$prefix/" > "dist/$version/$prefix.tar.gz"
gpg --armor --detach-sign "dist/$version/$prefix.tar.gz"
echo "Creating $prefix.tar.xz"
git archive -9 --format tar.xz $version --prefix="$prefix/" > "dist/$version/$prefix.tar.xz"
gpg --armor --detach-sign "dist/$version/$prefix.tar.xz"
cd "dist/$version"
sha1sum --tag *.tar.gz *.tar.xz >> CHECKSUMS
sha256sum --tag *.tar.gz *.tar.xz >> CHECKSUMS
cd ..
echo "Uploading to lxqt.org..."
scp -r "$version" "downloads.lxqt.org:/srv/downloads.lxqt.org/$PROJECT/"

View File

@ -1,12 +1,4 @@
# set visibility to hidden to hide symbols, unlesss they're exporeted manually in the code
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_NO_KEYWORDS -fno-exceptions")
include_directories( include_directories(
${QTX_INCLUDE_DIRS}
${CMAKE_CURRENT_BINARY_DIR}
${GLIB_INCLUDE_DIRS}
${EXIF_INCLUDE_DIRS}
${LIBFM_QT_INCLUDE_DIRS}
${X11_INCLUDE_DIR} ${X11_INCLUDE_DIR}
${XFIXES_INCLUDE_DIRS} ${XFIXES_INCLUDE_DIRS}
) )
@ -24,11 +16,21 @@ set(lximage-qt_SRCS
application.cpp application.cpp
imageview.cpp imageview.cpp
modelfilter.cpp modelfilter.cpp
job.cpp
loadimagejob.cpp loadimagejob.cpp
saveimagejob.cpp saveimagejob.cpp
screenshotdialog.cpp screenshotdialog.cpp
screenshotselectarea.cpp
screenshotselectareagraphicsview.cpp
settings.cpp settings.cpp
graphicsscene.cpp
upload/imageshackprovider.cpp
upload/imageshackupload.cpp
upload/imgurprovider.cpp
upload/imgurupload.cpp
upload/provider.cpp
upload/upload.cpp
upload/uploaddialog.cpp
) )
qt5_add_dbus_adaptor(lximage-qt_SRCS qt5_add_dbus_adaptor(lximage-qt_SRCS
@ -43,20 +45,29 @@ set(lximage-qt_UIS
mainwindow.ui mainwindow.ui
preferencesdialog.ui preferencesdialog.ui
screenshotdialog.ui screenshotdialog.ui
upload/uploaddialog.ui
) )
qt5_wrap_ui(lximage-qt_UI_H ${lximage-qt_UIS}) qt5_wrap_ui(lximage-qt_UI_H ${lximage-qt_UIS})
# add translation for lximage-qt # add translation for lximage-qt
file(GLOB TS_FILES translations/*.ts) include(LXQtTranslateTs)
option(UPDATE_TRANSLATIONS "Update source translation translations/*.ts files") lxqt_translate_ts(QM_FILES
if(UPDATE_TRANSLATIONS) UPDATE_TRANSLATIONS ${UPDATE_TRANSLATIONS}
qt5_create_translation(QM_FILES ${lximage-qt_SRCS} ${lximage-qt_UI_H} ${TS_FILES}) SOURCES
else() ${lximage-qt_SRCS}
qt5_add_translation(QM_FILES ${TS_FILES}) ${lximage-qt_UIS}
endif() INSTALL_DIR
"${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/translations"
add_custom_target (lximage-qt_translations DEPENDS ${QM_FILES}) PULL_TRANSLATIONS
install(FILES ${QM_FILES} DESTINATION share/lximage-qt/translations) ${PULL_TRANSLATIONS}
CLEAN_TRANSLATIONS
${CLEAN_TRANSLATIONS}
TRANSLATIONS_REPO
${TRANSLATIONS_REPO}
TRANSLATIONS_REFSPEC
${TRANSLATIONS_REFSPEC}
)
# prevent the generated files from being deleted during make clean # prevent the generated files from being deleted during make clean
set_directory_properties(PROPERTIES CLEAN_NO_CUSTOM true) set_directory_properties(PROPERTIES CLEAN_NO_CUSTOM true)
@ -65,7 +76,7 @@ include(LXQtTranslateDesktop)
file(GLOB desktop_files_in ../data/*.desktop.in) file(GLOB desktop_files_in ../data/*.desktop.in)
lxqt_translate_desktop(desktop_files SOURCES ${desktop_files_in}) lxqt_translate_desktop(desktop_files SOURCES ${desktop_files_in})
install(FILES ${desktop_files} DESTINATION share/applications) install(FILES ${desktop_files} DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications")
add_executable(lximage-qt add_executable(lximage-qt
${lximage-qt_SRCS} ${lximage-qt_SRCS}
@ -75,19 +86,18 @@ add_executable(lximage-qt
) )
add_definitions( add_definitions(
-DLXIMAGE_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/lximage-qt" -DLXIMAGE_DATA_DIR="${CMAKE_INSTALL_FULL_DATAROOTDIR}/lximage-qt"
-DLIBFM_QT_API=Q_DECL_IMPORT # FIXME: This should be done in libfm-qt headers instead :-( -DLXIMAGE_VERSION="${LXIMAGE_VERSION}"
) )
set(QT_LIBRARIES Qt5::Widgets Qt5::Core Qt5::DBus Qt5::PrintSupport Qt5::X11Extras) set(QT_LIBRARIES Qt5::Widgets Qt5::Network Qt5::Core Qt5::DBus Qt5::PrintSupport Qt5::X11Extras Qt5::Svg)
target_link_libraries(lximage-qt target_link_libraries(lximage-qt
fm-qt
${QT_LIBRARIES} ${QT_LIBRARIES}
${GLIB_LIBRARIES}
${EXIF_LIBRARIES} ${EXIF_LIBRARIES}
${LIBFM_QT_LIBRARIES}
${X11_LIBRARIES} ${X11_LIBRARIES}
${XFIXES_LIBRARIES} ${XFIXES_LIBRARIES}
) )
install(TARGETS lximage-qt RUNTIME DESTINATION bin) install(TARGETS lximage-qt RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")

View File

@ -19,6 +19,7 @@
#include "application.h" #include "application.h"
#include <QCommandLineParser>
#include <QDBusConnection> #include <QDBusConnection>
#include <QDBusInterface> #include <QDBusInterface>
#include <QPixmapCache> #include <QPixmapCache>
@ -34,11 +35,17 @@ static const char* ifaceName = "org.lxde.LxImage.Application";
Application::Application(int& argc, char** argv): Application::Application(int& argc, char** argv):
QApplication(argc, argv), QApplication(argc, argv),
windowCount_(0), libFm(),
libFm() { windowCount_(0) {
setApplicationVersion(LXIMAGE_VERSION);
} }
bool Application::init(int argc, char** argv) { bool Application::init(int argc, char** argv) {
Q_UNUSED(argc)
Q_UNUSED(argv)
setAttribute(Qt::AA_UseHighDpiPixmaps, true);
// install the translations built-into Qt itself // install the translations built-into Qt itself
qtTranslator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); qtTranslator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
installTranslator(&qtTranslator); installTranslator(&qtTranslator);
@ -57,10 +64,11 @@ bool Application::init(int argc, char** argv) {
// we successfully registered the service // we successfully registered the service
isPrimaryInstance = true; isPrimaryInstance = true;
setQuitOnLastWindowClosed(false); // do not quit even when there're no windows setQuitOnLastWindowClosed(false); // do not quit even when there're no windows
new ApplicationAdaptor(this); new ApplicationAdaptor(this);
dbus.registerObject("/Application", this); dbus.registerObject("/Application", this);
// connect(this, SIGNAL(aboutToQuit()), SLOT(onAboutToQuit()));
connect(this, &Application::aboutToQuit, this, &Application::onAboutToQuit);
if(settings_.useFallbackIconTheme()) if(settings_.useFallbackIconTheme())
QIcon::setThemeName(settings_.fallbackIconTheme()); QIcon::setThemeName(settings_.fallbackIconTheme());
@ -72,81 +80,39 @@ bool Application::init(int argc, char** argv) {
} }
QPixmapCache::setCacheLimit(1024); // avoid pixmap caching. QPixmapCache::setCacheLimit(1024); // avoid pixmap caching.
if(!parseCommandLineArgs(argc, argv)) return parseCommandLineArgs();
return false;
return true;
} }
bool Application::parseCommandLineArgs(int argc, char** argv) { bool Application::parseCommandLineArgs() {
QCommandLineParser parser;
parser.addHelpOption();
parser.addVersionOption();
struct FakeTr { QCommandLineOption screenshotOption(
FakeTr(int reserved = 20) { QStringList() << "s" << "screenshot",
strings.reserve(reserved); tr("Take a screenshot")
} );
parser.addOption(screenshotOption);
const char* operator()(const char* str) { const QString files = tr("[FILE1, FILE2,...]");
QString translated = QApplication::translate(NULL, str); parser.addPositionalArgument("files", files, files);
strings.push_back(translated.toUtf8());
return strings.back().constData(); parser.process(*this);
}
QVector<QByteArray> strings; const QStringList args = parser.positionalArguments();
}; const bool screenshotTool = parser.isSet(screenshotOption);
QStringList paths;
Q_FOREACH(QString arg, args) {
QFileInfo info(arg);
paths.push_back(info.absoluteFilePath());
}
bool keepRunning = false; bool keepRunning = false;
// It's really a shame that the great Qt library does not come
// with any command line parser.
// After trying some Qt ways, I finally realized that glib is the best.
// Simple, efficient, effective, and does not use signal/slot!
// The only drawback is the translated string returned by tr() is
// a temporary one. We need to store them in a list to keep them alive. :-(
char** file_names = NULL;
gboolean screenshotTool = FALSE;
{ // this block is required to limit the scope of FakeTr object so it don't affect
// other normal QObject::tr() outside the block.
FakeTr tr; // a functor used to override QObject::tr().
// it convert the translated strings to UTF8 and add them to a list to
// keep them alive during the option parsing process.
GOptionEntry option_entries[] = {
{"screenshot", 0, 0, G_OPTION_ARG_NONE, &screenshotTool, tr("Take a screenshot"), NULL},
{G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &file_names, NULL, tr("[FILE1, FILE2,...]")},
{ NULL }
};
GOptionContext* context = g_option_context_new("");
g_option_context_add_main_entries(context, option_entries, NULL);
GError* error = NULL;
if(!g_option_context_parse(context, &argc, &argv, &error)) {
// show error and exit
g_fprintf(stderr, "%s\n\n", error->message);
g_error_free(error);
g_option_context_free(context);
return false;
}
g_option_context_free(context);
}
// handle files to open
QStringList paths;
if(file_names) {
char* cwd = g_get_current_dir();
for(char** filename = file_names; *filename; ++filename) {
// handle relative paths and remove unnecessary . & ..
char* canonicalName = fm_canonicalize_filename(*filename, cwd);
// convert from local encoding to QString (utf16).
QString path = QString::fromLocal8Bit(canonicalName);
g_free(canonicalName);
paths.push_back(path);
}
g_free(cwd);
}
if(isPrimaryInstance) { if(isPrimaryInstance) {
settings_.load(); settings_.load();
keepRunning = true; keepRunning = true;
if(screenshotTool) { if(screenshotTool) {
screenshot(); screenshot();
} }
@ -164,8 +130,6 @@ bool Application::parseCommandLineArgs(int argc, char** argv) {
else else
iface.call("newWindow", paths); iface.call("newWindow", paths);
} }
// cleanup
g_strfreev(file_names);
return keepRunning; return keepRunning;
} }
@ -179,13 +143,25 @@ void Application::newWindow(QStringList files) {
LxImage::MainWindow* window; LxImage::MainWindow* window;
if(files.empty()) { if(files.empty()) {
window = createWindow(); window = createWindow();
window->resize(settings_.windowWidth(), settings_.windowHeight());
if(settings_.windowMaximized())
window->setWindowState(window->windowState() | Qt::WindowMaximized);
window->show(); window->show();
} }
else { else {
Q_FOREACH(QString fileName, files) { Q_FOREACH(QString fileName, files) {
window = createWindow(); window = createWindow();
window->openImageFile(fileName); window->openImageFile(fileName);
window->show();
window->resize(settings_.windowWidth(), settings_.windowHeight());
if(settings_.windowMaximized())
window->setWindowState(window->windowState() | Qt::WindowMaximized);
/* when there's an image, we show the window AFTER resizing
and centering it appropriately at MainWindow::updateUI() */
//window->show();
} }
} }
} }
@ -206,3 +182,7 @@ void Application::editPreferences() {
PreferencesDialog* dlg = new PreferencesDialog(); PreferencesDialog* dlg = new PreferencesDialog();
dlg->show(); dlg->show();
} }
void Application::onAboutToQuit() {
settings_.save();
}

View File

@ -34,18 +34,16 @@ class Application : public QApplication {
public: public:
Application(int& argc, char** argv); Application(int& argc, char** argv);
bool init(int argc, char** argv); bool init(int argc, char** argv);
bool parseCommandLineArgs(int argc, char** argv); bool parseCommandLineArgs();
void newWindow(QStringList files = QStringList()); void newWindow(QStringList files = QStringList());
MainWindow* createWindow(); MainWindow* createWindow();
void addWindow() { // call this when you create a new toplevel window void addWindow() { // call this when you create a new toplevel window
++windowCount_; ++windowCount_;
qDebug("add");
} }
void removeWindow() { // call this when you destroy a toplevel window void removeWindow() { // call this when you destroy a toplevel window
qDebug("remove");
--windowCount_; --windowCount_;
if(0 == windowCount_) if(0 == windowCount_)
quit(); quit();
@ -61,6 +59,9 @@ public Q_SLOTS:
void editPreferences(); void editPreferences();
void screenshot(); void screenshot();
protected Q_SLOTS:
void onAboutToQuit();
private: private:
Fm::LibFmQt libFm; Fm::LibFmQt libFm;
bool isPrimaryInstance; bool isPrimaryInstance;

View File

@ -18,45 +18,31 @@
* *
*/ */
#ifndef LXIMAGE_JOB_H #include "graphicsscene.h"
#define LXIMAGE_JOB_H #include <QMimeData>
#include <QUrl>
#include <gio/gio.h>
namespace LxImage { namespace LxImage {
class Job { GraphicsScene::GraphicsScene(QObject *parent):
public: QGraphicsScene (parent) {
Job();
virtual ~Job();
void cancel() {
g_cancellable_cancel(cancellable_);
}
void start();
GError* error() const {
return error_;
}
bool isCancelled() const {
return bool(g_cancellable_is_cancelled(cancellable_));
}
protected:
virtual bool run() = 0;
virtual void finish() = 0;
protected:
GCancellable* cancellable_;
GError* error_;
private:
static gboolean _jobThread(GIOSchedulerJob* job, GCancellable* cancellable, Job* pThis);
static gboolean _finish(Job* pThis);
static void _freeMe(Job* pThis);
};
} }
#endif // LXIMAGE_JOB_H void GraphicsScene::dragEnterEvent(QGraphicsSceneDragDropEvent *event) {
if(event->mimeData()->hasUrls())
event->acceptProposedAction();
}
void GraphicsScene::dragMoveEvent(QGraphicsSceneDragDropEvent *event) {
if(event->mimeData()->hasUrls())
event->acceptProposedAction();
}
void GraphicsScene::dropEvent(QGraphicsSceneDragDropEvent* event) {
QList<QUrl> urlList = event->mimeData()->urls();
if(!urlList.isEmpty())
Q_EMIT fileDropped(urlList.first().toLocalFile());
event->acceptProposedAction();
}
}

46
src/graphicsscene.h Normal file
View File

@ -0,0 +1,46 @@
/*
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 2013 <copyright holder> <email>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef LXIMAGE_GRAPHICSSCENE_H
#define LXIMAGE_GRAPHICSSCENE_H
#include <QGraphicsScene>
#include <QGraphicsSceneDragDropEvent>
namespace LxImage {
class GraphicsScene : public QGraphicsScene
{
Q_OBJECT
public:
GraphicsScene(QObject *parent = 0);
protected:
virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
virtual void dropEvent(QGraphicsSceneDragDropEvent* event);
Q_SIGNALS:
void fileDropped(const QString file);
};
}
#endif // LXIMAGE_GRAPHICSSCENE_H

View File

@ -24,37 +24,54 @@
#include <QPainter> #include <QPainter>
#include <QTimer> #include <QTimer>
#include <QPolygon> #include <QPolygon>
#include <QDebug>
#include <QStyle> #include <QStyle>
#include <QLabel>
#include <QGraphicsProxyWidget>
#include <QGraphicsSvgItem>
#define CURSOR_HIDE_DELY 3000
namespace LxImage { namespace LxImage {
ImageView::ImageView(QWidget* parent): ImageView::ImageView(QWidget* parent):
QGraphicsView(parent), QGraphicsView(parent),
scene_(new GraphicsScene(this)),
imageItem_(new QGraphicsRectItem()), imageItem_(new QGraphicsRectItem()),
scene_(new QGraphicsScene(this)), gifMovie_(nullptr),
cacheTimer_(nullptr),
cursorTimer_(nullptr),
scaleFactor_(1.0),
autoZoomFit_(false), autoZoomFit_(false),
cacheTimer_(NULL), isSVG(false) {
scaleFactor_(1.0) {
setViewportMargins(0, 0, 0, 0); setViewportMargins(0, 0, 0, 0);
setContentsMargins(0, 0, 0, 0); setContentsMargins(0, 0, 0, 0);
setLineWidth(0); setLineWidth(0);
setScene(scene_); setScene(scene_);
connect(scene_, &GraphicsScene::fileDropped, this, &ImageView::onFileDropped);
imageItem_->hide(); imageItem_->hide();
imageItem_->setPen(QPen(Qt::NoPen)); // remove the border imageItem_->setPen(QPen(Qt::NoPen)); // remove the border
scene_->addItem(imageItem_); scene_->addItem(imageItem_);
} }
ImageView::~ImageView() { ImageView::~ImageView() {
delete imageItem_; scene_->clear(); // deletes all items
if(gifMovie_)
delete gifMovie_;
if(cacheTimer_) { if(cacheTimer_) {
cacheTimer_->stop(); cacheTimer_->stop();
delete cacheTimer_; delete cacheTimer_;
} }
if(cursorTimer_) {
cursorTimer_->stop();
delete cursorTimer_;
}
} }
void ImageView::onFileDropped(const QString file) {
Q_EMIT fileDropped(file);
}
void ImageView::wheelEvent(QWheelEvent* event) { void ImageView::wheelEvent(QWheelEvent* event) {
int delta = event->delta(); int delta = event->delta();
@ -83,6 +100,34 @@ void ImageView::mouseDoubleClickEvent(QMouseEvent* event) {
QAbstractScrollArea::mouseDoubleClickEvent(event); QAbstractScrollArea::mouseDoubleClickEvent(event);
} }
void ImageView::mousePressEvent(QMouseEvent * event) {
QGraphicsView::mousePressEvent(event);
if(cursorTimer_) cursorTimer_->stop();
}
void ImageView::mouseReleaseEvent(QMouseEvent* event) {
QGraphicsView::mouseReleaseEvent(event);
if(cursorTimer_) cursorTimer_->start(CURSOR_HIDE_DELY);
}
void ImageView::mouseMoveEvent(QMouseEvent* event) {
QGraphicsView::mouseMoveEvent(event);
if(cursorTimer_ && (viewport()->cursor().shape() == Qt::BlankCursor
|| viewport()->cursor().shape() == Qt::OpenHandCursor)) {
cursorTimer_->start(CURSOR_HIDE_DELY); // restart timer
viewport()->setCursor(Qt::OpenHandCursor);
}
}
void ImageView::focusInEvent(QFocusEvent* event) {
QGraphicsView::focusInEvent(event);
if(cursorTimer_ && (viewport()->cursor().shape() == Qt::BlankCursor
|| viewport()->cursor().shape() == Qt::OpenHandCursor)) {
cursorTimer_->start(CURSOR_HIDE_DELY); // restart timer
viewport()->setCursor(Qt::OpenHandCursor);
}
}
void ImageView::resizeEvent(QResizeEvent* event) { void ImageView::resizeEvent(QResizeEvent* event) {
QGraphicsView::resizeEvent(event); QGraphicsView::resizeEvent(event);
if(autoZoomFit_) if(autoZoomFit_)
@ -130,7 +175,21 @@ void ImageView::zoomOriginal() {
queueGenerateCache(); queueGenerateCache();
} }
void ImageView::setImage(QImage image) { void ImageView::setImage(QImage image, bool show) {
if(show && (gifMovie_ || isSVG)) { // a gif animation or SVG file was shown before
scene_->clear();
isSVG = false;
if(gifMovie_) { // should be deleted explicitly
delete gifMovie_;
gifMovie_ = nullptr;
}
// recreate the rect item
imageItem_ = new QGraphicsRectItem();
imageItem_->hide();
imageItem_->setPen(QPen(Qt::NoPen));
scene_->addItem(imageItem_);
}
image_ = image; image_ = image;
if(image.isNull()) { if(image.isNull()) {
imageItem_->hide(); imageItem_->hide();
@ -138,9 +197,11 @@ void ImageView::setImage(QImage image) {
scene_->setSceneRect(0, 0, 0, 0); scene_->setSceneRect(0, 0, 0, 0);
} }
else { else {
imageItem_->setRect(0, 0, image_.width(), image_.height()); if(show) {
imageItem_->setBrush(image_); imageItem_->setRect(0, 0, image_.width(), image_.height());
imageItem_->show(); imageItem_->setBrush(image_);
imageItem_->show();
}
scene_->setSceneRect(0, 0, image_.width(), image_.height()); scene_->setSceneRect(0, 0, image_.width(), image_.height());
} }
@ -149,6 +210,66 @@ void ImageView::setImage(QImage image) {
queueGenerateCache(); queueGenerateCache();
} }
void ImageView::setGifAnimation(QString fileName) {
/* the built-in gif reader gives the first frame, which won't
be shown but is used for tracking position and dimensions */
image_ = QImage(fileName);
if(image_.isNull()) {
if(imageItem_) {
imageItem_->hide();
imageItem_->setBrush(QBrush());
}
scene_->setSceneRect(0, 0, 0, 0);
}
else {
scene_->clear();
imageItem_ = nullptr; // it's deleted by clear();
if(gifMovie_) {
delete gifMovie_;
gifMovie_ = nullptr;
}
QPixmap pix(image_.size());
pix.fill(Qt::transparent);
QGraphicsItem *gifItem = new QGraphicsPixmapItem(pix);
QLabel *gifLabel = new QLabel();
gifMovie_ = new QMovie(fileName);
QGraphicsProxyWidget* gifWidget = new QGraphicsProxyWidget(gifItem);
gifLabel->setAttribute(Qt::WA_NoSystemBackground);
gifLabel->setMovie(gifMovie_);
gifWidget->setWidget(gifLabel);
gifMovie_->start();
scene_->addItem(gifItem);
scene_->setSceneRect(gifItem->boundingRect());
}
if(autoZoomFit_)
zoomFit();
queueGenerateCache(); // deletes the cache timer in this case
}
void ImageView::setSVG(QString fileName) {
image_ = QImage(fileName); // for tracking position and dimensions
if(image_.isNull()) {
if(imageItem_) {
imageItem_->hide();
imageItem_->setBrush(QBrush());
}
scene_->setSceneRect(0, 0, 0, 0);
}
else {
scene_->clear();
imageItem_ = nullptr;
isSVG = true;
QGraphicsSvgItem *svgItem = new QGraphicsSvgItem(fileName);
scene_->addItem(svgItem);
scene_->setSceneRect(svgItem->boundingRect());
}
if(autoZoomFit_)
zoomFit();
queueGenerateCache(); // deletes the cache timer in this case
}
void ImageView::setScaleFactor(double factor) { void ImageView::setScaleFactor(double factor) {
if(factor != scaleFactor_) { if(factor != scaleFactor_) {
scaleFactor_ = factor; scaleFactor_ = factor;
@ -160,7 +281,7 @@ void ImageView::setScaleFactor(double factor) {
void ImageView::paintEvent(QPaintEvent* event) { void ImageView::paintEvent(QPaintEvent* event) {
// if the image is scaled and we have a high quality cached image // if the image is scaled and we have a high quality cached image
if(scaleFactor_ != 1.0 && !cachedPixmap_.isNull()) { if(imageItem_ && scaleFactor_ != 1.0 && !cachedPixmap_.isNull()) {
// rectangle of the whole image in viewport coordinate // rectangle of the whole image in viewport coordinate
QRect viewportImageRect = sceneToViewport(imageItem_->rect()); QRect viewportImageRect = sceneToViewport(imageItem_->rect());
// the visible part of the image. // the visible part of the image.
@ -189,11 +310,12 @@ void ImageView::queueGenerateCache() {
cachedPixmap_ = QPixmap(); cachedPixmap_ = QPixmap();
// we don't need to cache the scaled image if its the same as the original image (scale:1.0) // we don't need to cache the scaled image if its the same as the original image (scale:1.0)
if(scaleFactor_ == 1.0) { // no cache for gif animations or SVG images either
if(scaleFactor_ == 1.0 || gifMovie_ || isSVG) {
if(cacheTimer_) { if(cacheTimer_) {
cacheTimer_->stop(); cacheTimer_->stop();
delete cacheTimer_; delete cacheTimer_;
cacheTimer_ = NULL; cacheTimer_ = nullptr;
} }
return; return;
} }
@ -201,16 +323,19 @@ void ImageView::queueGenerateCache() {
if(!cacheTimer_) { if(!cacheTimer_) {
cacheTimer_ = new QTimer(); cacheTimer_ = new QTimer();
cacheTimer_->setSingleShot(true); cacheTimer_->setSingleShot(true);
connect(cacheTimer_, SIGNAL(timeout()), SLOT(generateCache())); connect(cacheTimer_, &QTimer::timeout, this, &ImageView::generateCache);
} }
cacheTimer_->start(200); // restart the timer if(cacheTimer_)
cacheTimer_->start(200); // restart the timer
} }
// really generate the cache // really generate the cache
void ImageView::generateCache() { void ImageView::generateCache() {
// disable the one-shot timer // disable the one-shot timer
cacheTimer_->deleteLater(); cacheTimer_->deleteLater();
cacheTimer_ = NULL; cacheTimer_ = nullptr;
if(!imageItem_ || image_.isNull()) return;
// generate a cache for "the visible part" of the scaled image // generate a cache for "the visible part" of the scaled image
// rectangle of the whole image in viewport coordinate // rectangle of the whole image in viewport coordinate
@ -226,18 +351,18 @@ void ImageView::generateCache() {
const uchar* bits = image_.constBits(); const uchar* bits = image_.constBits();
unsigned int offset = subRect.x() * image_.depth() / 8 + subRect.y() * image_.bytesPerLine(); unsigned int offset = subRect.x() * image_.depth() / 8 + subRect.y() * image_.bytesPerLine();
QImage subImage = QImage(bits + offset, subRect.width(), subRect.height(), image_.bytesPerLine(), image_.format()); QImage subImage = QImage(bits + offset, subRect.width(), subRect.height(), image_.bytesPerLine(), image_.format());
// If the original image has a color table, also use it for the subImage
QVector<QRgb> colorTable = image_.colorTable();
if (!colorTable.empty())
subImage.setColorTable(colorTable);
// QImage scaled = subImage.scaled(subRect.width() * scaleFactor_, subRect.height() * scaleFactor_, Qt::KeepAspectRatio, Qt::SmoothTransformation); // QImage scaled = subImage.scaled(subRect.width() * scaleFactor_, subRect.height() * scaleFactor_, Qt::KeepAspectRatio, Qt::SmoothTransformation);
QImage scaled = subImage.scaled(cachedRect_.width(), cachedRect_.height(), Qt::KeepAspectRatio, Qt::SmoothTransformation); QImage scaled = subImage.scaled(cachedRect_.width(), cachedRect_.height(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
// convert the cached scaled image to pixmap // convert the cached scaled image to pixmap
cachedPixmap_ = QPixmap::fromImage(scaled); cachedPixmap_ = QPixmap::fromImage(scaled);
viewport()->update(); viewport()->update();
/*
qDebug() << "viewportImageRect" << viewportImageRect
<< "cachedRect_" << cachedRect_
<< "cachedSceneRect_" << cachedSceneRect_
<< "subRect" << subRect;
*/
} }
// convert viewport coordinate to the original image (not scaled). // convert viewport coordinate to the original image (not scaled).
@ -254,5 +379,26 @@ QRect ImageView::sceneToViewport(const QRectF& rect) {
return QRect(topLeft, bottomRight); return QRect(topLeft, bottomRight);
} }
void ImageView::blankCursor() {
viewport()->setCursor(Qt::BlankCursor);
}
void ImageView::hideCursor(bool enable) {
if(enable) {
if(cursorTimer_) delete cursorTimer_;
cursorTimer_ = new QTimer(this);
cursorTimer_->setSingleShot(true);
connect(cursorTimer_, &QTimer::timeout, this, &ImageView::blankCursor);
if(viewport()->cursor().shape() == Qt::OpenHandCursor)
cursorTimer_->start(CURSOR_HIDE_DELY);
}
else if (cursorTimer_) {
cursorTimer_->stop();
delete cursorTimer_;
cursorTimer_ = nullptr;
if(viewport()->cursor().shape() == Qt::BlankCursor)
viewport()->setCursor(Qt::OpenHandCursor);
}
}
} // namespace LxImage } // namespace LxImage

View File

@ -21,11 +21,13 @@
#ifndef LXIMAGE_IMAGEVIEW_H #ifndef LXIMAGE_IMAGEVIEW_H
#define LXIMAGE_IMAGEVIEW_H #define LXIMAGE_IMAGEVIEW_H
#include "graphicsscene.h"
#include <QGraphicsView> #include <QGraphicsView>
#include <QGraphicsScene> #include <QGraphicsScene>
#include <QGraphicsRectItem> #include <QGraphicsRectItem>
#include <QImage> #include <QImage>
#include <QPixmap> #include <QPixmap>
#include <QMovie>
#include <QRect> #include <QRect>
class QTimer; class QTimer;
@ -39,7 +41,9 @@ public:
ImageView(QWidget* parent = 0); ImageView(QWidget* parent = 0);
virtual ~ImageView(); virtual ~ImageView();
void setImage(QImage image); void setImage(QImage image, bool show = true);
void setGifAnimation(QString fileName);
void setSVG(QString fileName);
QImage image() { QImage image() {
return image_; return image_;
@ -64,10 +68,20 @@ public:
void setAutoZoomFit(bool value) { void setAutoZoomFit(bool value) {
autoZoomFit_ = value; autoZoomFit_ = value;
} }
// if set to true, hides the cursor after 3s of inactivity
void hideCursor(bool enable);
Q_SIGNALS:
void fileDropped(const QString file);
protected: protected:
virtual void wheelEvent(QWheelEvent* event); virtual void wheelEvent(QWheelEvent* event);
virtual void mouseDoubleClickEvent(QMouseEvent* event); virtual void mouseDoubleClickEvent(QMouseEvent* event);
virtual void mousePressEvent(QMouseEvent* event);
virtual void mouseReleaseEvent(QMouseEvent* event);
virtual void mouseMoveEvent(QMouseEvent* event);
virtual void focusInEvent(QFocusEvent* event);
virtual void resizeEvent(QResizeEvent* event); virtual void resizeEvent(QResizeEvent* event);
virtual void paintEvent(QPaintEvent* event); virtual void paintEvent(QPaintEvent* event);
@ -77,18 +91,23 @@ private:
QRect sceneToViewport(const QRectF& rect); QRect sceneToViewport(const QRectF& rect);
private Q_SLOTS: private Q_SLOTS:
void onFileDropped(const QString file);
void generateCache(); void generateCache();
void blankCursor();
private: private:
QGraphicsScene* scene_; // the topmost container of all graphic items GraphicsScene* scene_; // the topmost container of all graphic items
QGraphicsRectItem* imageItem_; // the rect item used to draw the image QGraphicsRectItem* imageItem_; // the rect item used to draw the image
QImage image_; // image to show QImage image_; // image to show
QMovie *gifMovie_; // gif animation to show (should be deleted explicitly)
QPixmap cachedPixmap_; // caching of current viewport content (high quality scaled image) QPixmap cachedPixmap_; // caching of current viewport content (high quality scaled image)
QRect cachedRect_; // rectangle containing the cached region (in viewport coordinate) QRect cachedRect_; // rectangle containing the cached region (in viewport coordinate)
QRect cachedSceneRect_; // rectangle containing the cached region (in scene/original image coordinate) QRect cachedSceneRect_; // rectangle containing the cached region (in scene/original image coordinate)
QTimer* cacheTimer_; QTimer* cacheTimer_;
QTimer *cursorTimer_; // for hiding cursor in fullscreen mode
double scaleFactor_; double scaleFactor_;
bool autoZoomFit_; bool autoZoomFit_;
bool isSVG; // is the image an SVG file?
}; };
} }

View File

@ -1,64 +0,0 @@
/*
* <one line to give the library's name and an idea of what it does.>
* Copyright (C) 2014 <copyright holder> <email>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
#include "job.h"
namespace LxImage {
Job::Job():
cancellable_(g_cancellable_new()),
error_(NULL) {
}
Job::~Job() {
g_object_unref(cancellable_);
if(error_)
g_error_free(error_);
}
// This is called from the worker thread, not main thread
gboolean Job::_jobThread(GIOSchedulerJob* job, GCancellable* cancellable, Job* pThis) {
bool ret = pThis->run();
// do final step in the main thread
if(!g_cancellable_is_cancelled(pThis->cancellable_))
g_io_scheduler_job_send_to_mainloop(job, GSourceFunc(_finish), pThis, NULL);
return FALSE;
}
void Job::start() {
g_io_scheduler_push_job(GIOSchedulerJobFunc(_jobThread),
this, GDestroyNotify(_freeMe),
G_PRIORITY_DEFAULT, cancellable_);
}
// this function is called from main thread only
gboolean Job::_finish(Job* pThis) {
// only do processing if the job is not cancelled
if(!g_cancellable_is_cancelled(pThis->cancellable_)) {
pThis->finish();
}
return TRUE;
}
void Job::_freeMe(Job* pThis) {
delete pThis;
}
}

View File

@ -21,104 +21,106 @@
#include "loadimagejob.h" #include "loadimagejob.h"
#include "mainwindow.h" #include "mainwindow.h"
#include <QImageReader> #include <QImageReader>
#include <QBuffer> #include <QByteArray>
#include <qvarlengtharray.h> #include <qvarlengtharray.h>
#include <libexif/exif-loader.h> #include <libexif/exif-loader.h>
using namespace LxImage; using namespace LxImage;
LoadImageJob::LoadImageJob(MainWindow* window, FmPath* filePath): LoadImageJob::LoadImageJob(const Fm::FilePath & filePath):
Job(), path_{filePath} {
path_(fm_path_ref(filePath)),
mainWindow_(window) {
} }
LoadImageJob::~LoadImageJob() { LoadImageJob::~LoadImageJob() {
fm_path_unref(path_);
} }
// This is called from the worker thread, not main thread // This is called from the worker thread, not main thread
bool LoadImageJob::run() { void LoadImageJob::exec() {
GFile* gfile = fm_path_to_gfile(path_); GFileInputStream* fileStream = nullptr;
GFileInputStream* fileStream = g_file_read(gfile, cancellable_, &error_); Fm::GErrorPtr error;
g_object_unref(gfile); ErrorAction act = ErrorAction::RETRY;
QByteArray imageBuffer;
while (act == ErrorAction::RETRY && !isCancelled())
{
error.reset();
if (nullptr == (fileStream = g_file_read(path_.gfile().get(), cancellable().get(), &error)))
{
act = emitError(error);
continue;
}
if(fileStream) { // if the file stream is successfually opened // the file stream is successfully opened
QBuffer imageBuffer; imageBuffer.truncate(0);
GInputStream* inputStream = G_INPUT_STREAM(fileStream); GInputStream* inputStream = G_INPUT_STREAM(fileStream);
while(!g_cancellable_is_cancelled(cancellable_)) { while(!error && !isCancelled()) {
char buffer[4096]; char buffer[4096];
gssize readSize = g_input_stream_read(inputStream, error.reset();
gssize readSize = g_input_stream_read(inputStream,
buffer, 4096, buffer, 4096,
cancellable_, &error_); cancellable().get(), &error);
if(readSize == -1 || readSize == 0) // error or EOF if(readSize == -1 || readSize == 0) // error or EOF
break; break;
// append the bytes read to the image buffer // append the bytes read to the image buffer
imageBuffer.buffer().append(buffer, readSize); imageBuffer.append(buffer, readSize);
} }
g_input_stream_close(inputStream, NULL, NULL); g_input_stream_close(inputStream, NULL, NULL);
// FIXME: maybe it's a better idea to implement a GInputStream based QIODevice.
if(!error_ && !g_cancellable_is_cancelled(cancellable_)) { // load the image from buffer if there are no errors
image_ = QImage::fromData(imageBuffer.buffer());
if(!image_.isNull()) { // if the image is loaded correctly if (!error)
// check if this file is a jpeg file break; // everything read or cancel requested
// FIXME: can we use FmFileInfo instead if it's available?
const char* basename = fm_path_get_basename(path_); act = emitError(error);
char* mime_type = g_content_type_guess(basename, NULL, 0, NULL); }
if(mime_type && strcmp(mime_type, "image/jpeg") == 0) { // this is a jpeg file
// use libexif to extract additional info embedded in jpeg files // FIXME: maybe it's a better idea to implement a GInputStream based QIODevice.
ExifLoader *exif_loader = exif_loader_new(); if(!error && !isCancelled()) { // load the image from buffer if there are no errors
// write image data to exif loader image_ = QImage::fromData(imageBuffer);
int ret = exif_loader_write(exif_loader, (unsigned char*)imageBuffer.data().constData(), (unsigned int)imageBuffer.size());
ExifData *exif_data = exif_loader_get_data(exif_loader); if(!image_.isNull()) { // if the image is loaded correctly
exif_loader_unref(exif_loader); // check if this file is a jpeg file
if(exif_data) { // FIXME: can we use FmFileInfo instead if it's available?
/* reference for EXIF orientation tag: const Fm::CStrPtr basename = path_.baseName();
* http://www.impulseadventure.com/photo/exif-orientation.html */ const Fm::CStrPtr mime_type{g_content_type_guess(basename.get(), NULL, 0, NULL)};
ExifEntry* orient_ent = exif_data_get_entry(exif_data, EXIF_TAG_ORIENTATION); if(mime_type && strcmp(mime_type.get(), "image/jpeg") == 0) { // this is a jpeg file
if(orient_ent) { /* orientation flag found in EXIF */ // use libexif to extract additional info embedded in jpeg files
gushort orient; std::unique_ptr<ExifLoader, decltype (&exif_loader_unref)> exif_loader{exif_loader_new(), &exif_loader_unref};
ExifByteOrder bo = exif_data_get_byte_order(exif_data); // write image data to exif loader
/* bo == EXIF_BYTE_ORDER_INTEL ; */ exif_loader_write(exif_loader.get(), reinterpret_cast<unsigned char*>(const_cast<char *>(imageBuffer.constData())), static_cast<unsigned int>(imageBuffer.size()));
orient = exif_get_short (orient_ent->data, bo); std::unique_ptr<ExifData, decltype (&exif_data_unref)> exif_data{exif_loader_get_data(exif_loader.get()), &exif_data_unref};
qreal rotate_degrees = 0.0; exif_loader.reset();
switch(orient) { if (exif_data) {
case 1: /* no rotation */ /* reference for EXIF orientation tag:
break; * http://www.impulseadventure.com/photo/exif-orientation.html */
case 8: ExifEntry* orient_ent = exif_data_get_entry(exif_data.get(), EXIF_TAG_ORIENTATION);
rotate_degrees = 270.0; if(orient_ent) { /* orientation flag found in EXIF */
break; gushort orient;
case 3: ExifByteOrder bo = exif_data_get_byte_order(exif_data.get());
rotate_degrees = 180.0; /* bo == EXIF_BYTE_ORDER_INTEL ; */
break; orient = exif_get_short (orient_ent->data, bo);
case 6: qreal rotate_degrees = 0.0;
rotate_degrees = 90.0; switch(orient) {
break; case 1: /* no rotation */
} break;
// rotate the image according to EXIF orientation tag case 8:
if(rotate_degrees != 0.0) { rotate_degrees = 270.0;
QTransform transform; break;
transform.rotate(rotate_degrees); case 3:
image_ = image_.transformed(transform, Qt::SmoothTransformation); rotate_degrees = 180.0;
} break;
// TODO: handle other EXIF tags as well case 6:
rotate_degrees = 90.0;
break;
} }
exif_data_unref(exif_data); // rotate the image according to EXIF orientation tag
if(rotate_degrees != 0.0) {
QTransform transform;
transform.rotate(rotate_degrees);
image_ = image_.transformed(transform, Qt::SmoothTransformation);
}
// TODO: handle other EXIF tags as well
} }
} }
g_free(mime_type);
} }
} }
} }
return false;
} }
// this function is called from main thread only
void LoadImageJob::finish() {
// only do processing if the job is not cancelled
if(!g_cancellable_is_cancelled(cancellable_)) {
mainWindow_->onImageLoaded(this);
}
}

View File

@ -21,37 +21,31 @@
#ifndef LXIMAGE_LOADIMAGEJOB_H #ifndef LXIMAGE_LOADIMAGEJOB_H
#define LXIMAGE_LOADIMAGEJOB_H #define LXIMAGE_LOADIMAGEJOB_H
#include <gio/gio.h> #include <libfm-qt/core/filepath.h>
#include <libfm/fm.h>
#include <QImage> #include <QImage>
#include "job.h" #include <libfm-qt/core/job.h>
namespace LxImage { namespace LxImage {
class MainWindow; class LoadImageJob : public Fm::Job {
class LoadImageJob : public Job {
public: public:
LoadImageJob(MainWindow* window, FmPath* filePath); LoadImageJob(const Fm::FilePath & filePath);
QImage image() const { QImage image() const {
return image_; return image_;
} }
FmPath* filePath() const { const Fm::FilePath & filePath() const {
return path_; return path_;
} }
private: private:
~LoadImageJob(); // prevent direct deletion ~LoadImageJob(); // prevent direct deletion
virtual bool run(); virtual void exec() override;
virtual void finish();
public: const Fm::FilePath path_;
MainWindow* mainWindow_;
FmPath* path_;
QImage image_; QImage image_;
}; };

View File

@ -19,6 +19,8 @@
#include "mainwindow.h" #include "mainwindow.h"
#include <QDir>
#include <QFileInfo>
#include <QMessageBox> #include <QMessageBox>
#include <QFileDialog> #include <QFileDialog>
#include <QImage> #include <QImage>
@ -28,62 +30,69 @@
#include <QPainter> #include <QPainter>
#include <QPrintDialog> #include <QPrintDialog>
#include <QPrinter> #include <QPrinter>
#include <QDebug>
#include <QWheelEvent> #include <QWheelEvent>
#include <QMouseEvent> #include <QMouseEvent>
#include <QTimer> #include <QTimer>
#include <QShortcut> #include <QShortcut>
#include <QDockWidget> #include <QDockWidget>
#include <QScrollBar> #include <QScrollBar>
#include <QDesktopWidget>
#include <QGraphicsSvgItem>
#include "application.h" #include "application.h"
#include <libfm-qt/path.h> #include <libfm-qt/path.h>
#include <libfm-qt/folderview.h> #include <libfm-qt/folderview.h>
#include <libfm-qt/filepropsdialog.h> #include <libfm-qt/filepropsdialog.h>
#include <libfm-qt/fileoperation.h> #include <libfm-qt/fileoperation.h>
#include <libfm-qt/folderitemdelegate.h>
#include "upload/uploaddialog.h"
using namespace LxImage; using namespace LxImage;
MainWindow::MainWindow(): MainWindow::MainWindow():
QMainWindow(), QMainWindow(),
currentFile_(NULL), contextMenu_(new QMenu(this)),
slideShowTimer_(NULL), slideShowTimer_(nullptr),
// currentFileInfo_(NULL), image_(),
loadJob_(NULL), // currentFileInfo_(nullptr),
saveJob_(NULL), imageModified_(false),
folder_(NULL), folder_(nullptr),
folderPath_(NULL),
folderModel_(new Fm::FolderModel()), folderModel_(new Fm::FolderModel()),
proxyModel_(new Fm::ProxyFolderModel()), proxyModel_(new Fm::ProxyFolderModel()),
modelFilter_(new ModelFilter()), modelFilter_(new ModelFilter()),
imageModified_(false), thumbnailsDock_(nullptr),
contextMenu_(new QMenu(this)), thumbnailsView_(nullptr),
thumbnailsDock_(NULL), loadJob_(nullptr),
thumbnailsView_(NULL), saveJob_(nullptr) {
image_() {
setAttribute(Qt::WA_DeleteOnClose); // FIXME: check if current image is saved before close setAttribute(Qt::WA_DeleteOnClose); // FIXME: check if current image is saved before close
Application* app = static_cast<Application*>(qApp); Application* app = static_cast<Application*>(qApp);
app->addWindow(); app->addWindow();
Settings& settings = app->settings();
ui.setupUi(this); ui.setupUi(this);
connect(ui.actionScreenshot, SIGNAL(triggered(bool)), app, SLOT(screenshot())); connect(ui.actionScreenshot, &QAction::triggered, app, &Application::screenshot);
connect(ui.actionPreferences, SIGNAL(triggered(bool)), app ,SLOT(editPreferences())); connect(ui.actionPreferences, &QAction::triggered, app , &Application::editPreferences);
proxyModel_->addFilter(modelFilter_); proxyModel_->addFilter(modelFilter_);
proxyModel_->sort(Fm::FolderModel::ColumnFileName, Qt::AscendingOrder); proxyModel_->sort(Fm::FolderModel::ColumnFileName, Qt::AscendingOrder);
proxyModel_->setSourceModel(folderModel_); proxyModel_->setSourceModel(folderModel_);
// build context menu // build context menu
ui.view->setContextMenuPolicy(Qt::CustomContextMenu); ui.view->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui.view, SIGNAL(customContextMenuRequested(QPoint)), SLOT(onContextMenu(QPoint))); connect(ui.view, &QWidget::customContextMenuRequested, this, &MainWindow::onContextMenu);
connect(ui.view, &ImageView::fileDropped, this, &MainWindow::onFileDropped);
// install an event filter on the image view // install an event filter on the image view
ui.view->installEventFilter(this); ui.view->installEventFilter(this);
ui.view->setBackgroundBrush(QBrush(app->settings().bgColor())); ui.view->setBackgroundBrush(QBrush(settings.bgColor()));
if(app->settings().showThumbnails()) if(settings.showThumbnails())
setShowThumbnails(true); setShowThumbnails(true);
contextMenu_->addAction(ui.actionPrevious); contextMenu_->addAction(ui.actionPrevious);
contextMenu_->addAction(ui.actionNext); contextMenu_->addAction(ui.actionNext);
contextMenu_->addSeparator(); contextMenu_->addSeparator();
@ -103,11 +112,11 @@ MainWindow::MainWindow():
// create shortcuts // create shortcuts
QShortcut* shortcut = new QShortcut(Qt::Key_Left, this); QShortcut* shortcut = new QShortcut(Qt::Key_Left, this);
connect(shortcut, SIGNAL(activated()), SLOT(on_actionPrevious_triggered())); connect(shortcut, &QShortcut::activated, this, &MainWindow::on_actionPrevious_triggered);
shortcut = new QShortcut(Qt::Key_Right, this); shortcut = new QShortcut(Qt::Key_Right, this);
connect(shortcut, SIGNAL(activated()), SLOT(on_actionNext_triggered())); connect(shortcut, &QShortcut::activated, this, &MainWindow::on_actionNext_triggered);
shortcut = new QShortcut(Qt::Key_Escape, this); shortcut = new QShortcut(Qt::Key_Escape, this);
connect(shortcut, SIGNAL(activated()), SLOT(onExitFullscreen())); connect(shortcut, &QShortcut::activated, this, &MainWindow::onExitFullscreen);
} }
MainWindow::~MainWindow() { MainWindow::~MainWindow() {
@ -122,16 +131,8 @@ MainWindow::~MainWindow() {
loadJob_->cancel(); loadJob_->cancel();
// we don't need to do delete here. It will be done automatically // we don't need to do delete here. It will be done automatically
} }
if(currentFile_)
fm_path_unref(currentFile_);
//if(currentFileInfo_) //if(currentFileInfo_)
// fm_file_info_unref(currentFileInfo_); // fm_file_info_unref(currentFileInfo_);
if(folder_) {
g_signal_handlers_disconnect_by_func(folder_, gpointer(_onFolderLoaded), this);
g_object_unref(folder_);
}
if(folderPath_)
fm_path_unref(folderPath_);
delete folderModel_; delete folderModel_;
delete proxyModel_; delete proxyModel_;
delete modelFilter_; delete modelFilter_;
@ -169,8 +170,7 @@ void MainWindow::on_actionZoomOut_triggered() {
ui.view->zoomOut(); ui.view->zoomOut();
} }
void MainWindow::onFolderLoaded(FmFolder* folder) { void MainWindow::onFolderLoaded() {
qDebug("Finish loading: %d files", proxyModel_->rowCount());
// if currently we're showing a file, get its index in the folder now // if currently we're showing a file, get its index in the folder now
// since the folder is fully loaded. // since the folder is fully loaded.
if(currentFile_ && !currentIndex_.isValid()) { if(currentFile_ && !currentIndex_.isValid()) {
@ -181,19 +181,38 @@ void MainWindow::onFolderLoaded(FmFolder* folder) {
thumbnailsView_->childView()->scrollTo(currentIndex_, QAbstractItemView::EnsureVisible); thumbnailsView_->childView()->scrollTo(currentIndex_, QAbstractItemView::EnsureVisible);
} }
} }
// this is used to open the first image of a folder
else if (!currentFile_)
on_actionFirst_triggered();
} }
void MainWindow::openImageFile(QString fileName) { void MainWindow::openImageFile(QString fileName) {
FmPath* path = fm_path_new_for_str(qPrintable(fileName)); const Fm::FilePath path = Fm::FilePath::fromPathStr(qPrintable(fileName));
if(currentFile_ && fm_path_equal(currentFile_, path)) {
// the same file! do not load it again // the same file! do not load it again
fm_path_unref(path); if(currentFile_ && currentFile_ == path)
return; return;
if (QFileInfo(fileName).isDir()) {
if(path == folderPath_)
return;
QList<QByteArray> formats = QImageReader::supportedImageFormats();
QStringList formatsFilters;
for (const QByteArray& format: formats)
formatsFilters << QString("*.") + format;
QDir dir(fileName);
dir.setNameFilters(formatsFilters);
dir.setFilter(QDir::Files | QDir::NoDotAndDotDot);
if(dir.entryList().isEmpty())
return;
currentFile_ = Fm::FilePath{};
loadFolder(path);
} else {
// load the image file asynchronously
loadImage(path);
loadFolder(path.parent());
} }
// load the image file asynchronously
loadImage(path);
loadFolder(fm_path_get_parent(path));
fm_path_unref(path);
} }
// paste the specified image into the current view, // paste the specified image into the current view,
@ -203,14 +222,12 @@ void MainWindow::pasteImage(QImage newImage) {
// cancel loading of current image // cancel loading of current image
if(loadJob_) { if(loadJob_) {
loadJob_->cancel(); // the job object will be freed automatically later loadJob_->cancel(); // the job object will be freed automatically later
loadJob_ = NULL; loadJob_ = nullptr;
} }
setModified(true); setModified(true);
currentIndex_ = QModelIndex(); // invaludate current index since we don't have a folder model now currentIndex_ = QModelIndex(); // invaludate current index since we don't have a folder model now
if(currentFile_) currentFile_ = Fm::FilePath{};
fm_path_unref(currentFile_);
currentFile_ = NULL;
image_ = newImage; image_ = newImage;
ui.view->setImage(image_); ui.view->setImage(image_);
@ -240,6 +257,12 @@ QString MainWindow::openFileName() {
return fileName; return fileName;
} }
QString MainWindow::openDirectory() {
QString directory = QFileDialog::getExistingDirectory(this,
tr("Open directory"), QString());
return directory;
}
// popup a file dialog and retrieve the selected image file name // popup a file dialog and retrieve the selected image file name
QString MainWindow::saveFileName(QString defaultName) { QString MainWindow::saveFileName(QString defaultName) {
QString filterStr; QString filterStr;
@ -255,7 +278,7 @@ QString MainWindow::saveFileName(QString defaultName) {
break; break;
} }
// FIXME: should we generate better filter strings? one format per item? // FIXME: should we generate better filter strings? one format per item?
QString fileName = QFileDialog::getSaveFileName( QString fileName = QFileDialog::getSaveFileName(
this, tr("Save File"), defaultName, tr("Image files (%1)").arg(filterStr)); this, tr("Save File"), defaultName, tr("Image files (%1)").arg(filterStr));
@ -272,8 +295,21 @@ void MainWindow::on_actionOpenFile_triggered() {
} }
} }
void MainWindow::on_actionOpenDirectory_triggered() {
QString directory = openDirectory();
if(!directory.isEmpty()) {
openImageFile(directory);
}
}
void MainWindow::on_actionNewWindow_triggered() { void MainWindow::on_actionNewWindow_triggered() {
Application* app = static_cast<Application*>(qApp);
MainWindow* window = new MainWindow(); MainWindow* window = new MainWindow();
window->resize(app->settings().windowWidth(), app->settings().windowHeight());
if(app->settings().windowMaximized())
window->setWindowState(window->windowState() | Qt::WindowMaximized);
window->show(); window->show();
} }
@ -292,39 +328,37 @@ void MainWindow::on_actionSave_triggered() {
void MainWindow::on_actionSaveAs_triggered() { void MainWindow::on_actionSaveAs_triggered() {
if(saveJob_) // if we're currently saving another file if(saveJob_) // if we're currently saving another file
return; return;
QString fileName = saveFileName(currentFile_ ? Fm::Path(currentFile_).displayName() : QString()); QString baseName;
if(currentFile_)
baseName = QString::fromUtf8(currentFile_.displayName().get());
QString fileName = saveFileName(baseName);
if(!fileName.isEmpty()) { if(!fileName.isEmpty()) {
FmPath* path = fm_path_new_for_str(qPrintable(fileName)); const Fm::FilePath path = Fm::FilePath::fromPathStr(qPrintable(fileName));
// save the image file asynchronously // save the image file asynchronously
saveImage(path); saveImage(path);
if(!currentFile_) { // if we haven't load any file yet if(!currentFile_) { // if we haven't load any file yet
currentFile_ = path; currentFile_ = path;
loadFolder(fm_path_get_parent(path)); loadFolder(path.parent());
} }
else
fm_path_unref(path);
} }
} }
void MainWindow::on_actionDelete_triggered() { void MainWindow::on_actionDelete_triggered() {
// delete the current file // delete the current file
if(currentFile_) { if(currentFile_)
FmPathList* paths = fm_path_list_new(); Fm::FileOperation::deleteFiles({currentFile_});
fm_path_list_push_tail(paths, currentFile_);
Fm::FileOperation::deleteFiles(paths);
fm_path_list_unref(paths);
}
} }
void MainWindow::on_actionFileProperties_triggered() { void MainWindow::on_actionFileProperties_triggered() {
if(currentIndex_.isValid()) { if(currentIndex_.isValid()) {
FmFileInfo* file = proxyModel_->fileInfoFromIndex(currentIndex_); const auto file = proxyModel_->fileInfoFromIndex(currentIndex_);
// it's better to use an async job to query the file info since it's // it's better to use an async job to query the file info since it's
// possible that loading of the folder is not finished and the file info is // possible that loading of the folder is not finished and the file info is
// not available yet, but it's overkill for a rarely used function. // not available yet, but it's overkill for a rarely used function.
if(file) if(file)
Fm::FilePropsDialog::showForFile(file); Fm::FilePropsDialog::showForFile(std::move(file));
} }
} }
@ -341,12 +375,9 @@ void MainWindow::on_actionNext_triggered() {
index = proxyModel_->index(currentIndex_.row() + 1, 0); index = proxyModel_->index(currentIndex_.row() + 1, 0);
else else
index = proxyModel_->index(0, 0); index = proxyModel_->index(0, 0);
FmFileInfo* info = proxyModel_->fileInfoFromIndex(index); const auto info = proxyModel_->fileInfoFromIndex(index);
if(info) { if(info)
FmPath* path = fm_file_info_get_path(info); loadImage(info->path(), index);
qDebug("try load: %s", fm_path_get_basename(path));
loadImage(path, index);
}
} }
} }
@ -355,91 +386,83 @@ void MainWindow::on_actionPrevious_triggered() {
return; return;
if(currentIndex_.isValid()) { if(currentIndex_.isValid()) {
QModelIndex index; QModelIndex index;
qDebug("current row: %d", currentIndex_.row());
if(currentIndex_.row() > 0) if(currentIndex_.row() > 0)
index = proxyModel_->index(currentIndex_.row() - 1, 0); index = proxyModel_->index(currentIndex_.row() - 1, 0);
else else
index = proxyModel_->index(proxyModel_->rowCount() - 1, 0); index = proxyModel_->index(proxyModel_->rowCount() - 1, 0);
FmFileInfo* info = proxyModel_->fileInfoFromIndex(index); const auto info = proxyModel_->fileInfoFromIndex(index);
if(info) { if(info)
FmPath* path = fm_file_info_get_path(info); loadImage(info->path(), index);
qDebug("try load: %s", fm_path_get_basename(path));
loadImage(path, index);
}
} }
} }
void MainWindow::on_actionFirst_triggered() { void MainWindow::on_actionFirst_triggered() {
QModelIndex index = proxyModel_->index(0, 0); QModelIndex index = proxyModel_->index(0, 0);
if(index.isValid()) { if(index.isValid()) {
FmFileInfo* info = proxyModel_->fileInfoFromIndex(index); const auto info = proxyModel_->fileInfoFromIndex(index);
if(info) { if(info)
FmPath* path = fm_file_info_get_path(info); loadImage(info->path(), index);
qDebug("try load: %s", fm_path_get_basename(path));
loadImage(path, index);
}
} }
} }
void MainWindow::on_actionLast_triggered() { void MainWindow::on_actionLast_triggered() {
QModelIndex index = proxyModel_->index(proxyModel_->rowCount() - 1, 0); QModelIndex index = proxyModel_->index(proxyModel_->rowCount() - 1, 0);
if(index.isValid()) { if(index.isValid()) {
FmFileInfo* info = proxyModel_->fileInfoFromIndex(index); const auto info = proxyModel_->fileInfoFromIndex(index);
if(info) { if(info)
FmPath* path = fm_file_info_get_path(info); loadImage(info->path(), index);
qDebug("try load: %s", fm_path_get_basename(path));
loadImage(path, index);
}
} }
} }
void MainWindow::loadFolder(FmPath* newFolderPath) { void MainWindow::loadFolder(const Fm::FilePath & newFolderPath) {
if(folder_) { // an folder is already loaded if(folder_) { // an folder is already loaded
if(fm_path_equal(newFolderPath, folderPath_)) // same folder, ignore if(newFolderPath == folderPath_) // same folder, ignore
return; return;
// free current folder disconnect(folder_.get(), nullptr, this, nullptr); // disconnect from all signals
g_signal_handlers_disconnect_by_func(folder_, gpointer(_onFolderLoaded), this);
g_object_unref(folder_);
fm_path_unref(folderPath_);
} }
folderPath_ = fm_path_ref(newFolderPath); folderPath_ = newFolderPath;
folder_ = fm_folder_from_path(newFolderPath); folder_ = Fm::Folder::fromPath(folderPath_);
g_signal_connect(folder_, "finish-loading", G_CALLBACK(_onFolderLoaded), this); connect(folder_.get(), &Fm::Folder::finishLoading, this, &MainWindow::onFolderLoaded);
folderModel_->setFolder(folder_); folderModel_->setFolder(folder_);
currentIndex_ = QModelIndex(); // set current index to invalid currentIndex_ = QModelIndex(); // set current index to invalid
} }
// the image is loaded (the method is only called if the loading is not cancelled) // the image is loaded (the method is only called if the loading is not cancelled)
void MainWindow::onImageLoaded(LoadImageJob* job) { void MainWindow::onImageLoaded() {
loadJob_ = NULL; // the job object will be freed later automatically // Note: As the signal finished() is emitted from different thread,
// we can get it even after canceling the job (and setting the loadJob_
// to nullptr). This simple check should be enough.
if (sender() == loadJob_)
{
image_ = loadJob_->image();
image_ = job->image(); loadJob_ = nullptr; // the job object will be freed later automatically
ui.view->setAutoZoomFit(true);
ui.view->setImage(image_);
if(!currentIndex_.isValid()) ui.view->setAutoZoomFit(true);
currentIndex_ = indexFromPath(currentFile_); ui.view->setImage(image_);
updateUI(); if(!currentIndex_.isValid())
currentIndex_ = indexFromPath(currentFile_);
if(job->error()) { updateUI();
// if there are errors
// TODO: show a info bar? /* we resized and moved the window without showing
it in updateUI(), so we need to show it here */
show();
} }
} }
void MainWindow::onImageSaved(SaveImageJob* job) { void MainWindow::onImageSaved() {
if(!job->error()) { if(!saveJob_->failed()) {
setModified(false); setModified(false);
} }
saveJob_ = NULL; saveJob_ = nullptr;
} }
// filter events of other objects, mainly the image view. // filter events of other objects, mainly the image view.
bool MainWindow::eventFilter(QObject* watched, QEvent* event) { bool MainWindow::eventFilter(QObject* watched, QEvent* event) {
// qDebug() << event;
if(watched == ui.view) { // we got an event for the image view if(watched == ui.view) { // we got an event for the image view
switch(event->type()) { switch(event->type()) {
case QEvent::Wheel: { // mouse wheel event case QEvent::Wheel: { // mouse wheel event
@ -482,16 +505,16 @@ bool MainWindow::eventFilter(QObject* watched, QEvent* event) {
return QObject::eventFilter(watched, event); return QObject::eventFilter(watched, event);
} }
QModelIndex MainWindow::indexFromPath(FmPath* filePath) { QModelIndex MainWindow::indexFromPath(const Fm::FilePath & filePath) {
// if the folder is already loaded, figure out our index // if the folder is already loaded, figure out our index
// otherwise, it will be done again in onFolderLoaded() when the folder is fully loaded. // otherwise, it will be done again in onFolderLoaded() when the folder is fully loaded.
if(folder_ && fm_folder_is_loaded(folder_)) { if(folder_ && folder_->isLoaded()) {
QModelIndex index; QModelIndex index;
int count = proxyModel_->rowCount(); int count = proxyModel_->rowCount();
for(int row = 0; row < count; ++row) { for(int row = 0; row < count; ++row) {
index = proxyModel_->index(row, 0); index = proxyModel_->index(row, 0);
FmFileInfo* info = proxyModel_->fileInfoFromIndex(index); const auto info = proxyModel_->fileInfoFromIndex(index);
if(info && fm_path_equal(filePath, fm_file_info_get_path(info))) { if(info && filePath == info->path()) {
return index; return index;
} }
} }
@ -511,39 +534,66 @@ void MainWindow::updateUI() {
QString title; QString title;
if(currentFile_) { if(currentFile_) {
char* dispName = fm_path_display_basename(currentFile_); const Fm::CStrPtr dispName = currentFile_.displayName();
if(loadJob_) { // if loading is in progress if(loadJob_) { // if loading is in progress
title = tr("%1 (Loading...) - Image Viewer") title = tr("[*]%1 (Loading...) - Image Viewer")
.arg(QString::fromUtf8(dispName)); .arg(QString::fromUtf8(dispName.get()));
} }
else { else {
if(image_.isNull()) { if(image_.isNull()) {
title = tr("%1 (Failed to Load) - Image Viewer") title = tr("[*]%1 (Failed to Load) - Image Viewer")
.arg(QString::fromUtf8(dispName)); .arg(QString::fromUtf8(dispName.get()));
} }
else { else {
title = tr("%1 (%2x%3) - Image Viewer") title = tr("[*]%1 (%2x%3) - Image Viewer")
.arg(QString::fromUtf8(dispName)) .arg(QString::fromUtf8(dispName.get()))
.arg(image_.width()) .arg(image_.width())
.arg(image_.height()); .arg(image_.height());
/* Here we try to implement the following behavior as far as possible:
(1) A minimum size of 400x400 is assumed;
(2) The window is scaled to fit the image;
(3) But for too big images, the window is scaled down;
(4) The window is centered on the screen. */
if (!isVisible()) {
/* To have a correct position, we should move the window BEFORE
it's shown but we also need to know the dimensions of its view.
Therefore, we use show() without really showing the window. */
setAttribute(Qt::WA_DontShowOnScreen);
show();
int scrollThickness = style()->pixelMetric(QStyle::PM_ScrollBarExtent);
QSize newSize = size() + image_.size() - ui.view->size() + QSize(scrollThickness, scrollThickness);
QRect ag = QApplication::desktop()->availableGeometry();
// since the window isn't decorated yet, we have to assume a max thickness for its frame
QSize maxFrame = QSize(50, 100);
if (newSize.width() > ag.width() - maxFrame.width() || newSize.height() > ag.height() - maxFrame.height())
newSize.scale (ag.width() - maxFrame.width(), ag.height() - maxFrame.height(), Qt::KeepAspectRatio);
// a minimum size of 400x400 is good
if (newSize.width() < 400) newSize.rwidth() = 400;
if (newSize.height() < 400 ) newSize.rheight() = 400;
move (ag.x() + (ag.width() - newSize.width())/2,
ag.y() + (ag.height() - newSize.height())/2);
resize(newSize);
hide(); // hide it to show it again later, at onImageLoaded()
setAttribute(Qt::WA_DontShowOnScreen, false);
}
} }
} }
g_free(dispName);
// TODO: update status bar, show current index in the folder // TODO: update status bar, show current index in the folder
} }
else { else {
title = tr("Image Viewer"); title = tr("[*]Image Viewer");
} }
setWindowTitle(title); setWindowTitle(title);
setWindowModified(imageModified_);
} }
// Load the specified image file asynchronously in a worker thread. // Load the specified image file asynchronously in a worker thread.
// When the loading is finished, onImageLoaded() will be called. // When the loading is finished, onImageLoaded() will be called.
void MainWindow::loadImage(FmPath* filePath, QModelIndex index) { void MainWindow::loadImage(const Fm::FilePath & filePath, QModelIndex index) {
// cancel loading of current image // cancel loading of current image
if(loadJob_) { if(loadJob_) {
loadJob_->cancel(); // the job object will be freed automatically later loadJob_->cancel(); // the job object will be freed automatically later
loadJob_ = NULL; loadJob_ = nullptr;
} }
if(imageModified_) { if(imageModified_) {
// TODO: ask the user to save the modified image? // TODO: ask the user to save the modified image?
@ -552,46 +602,114 @@ void MainWindow::loadImage(FmPath* filePath, QModelIndex index) {
} }
currentIndex_ = index; currentIndex_ = index;
if(currentFile_) currentFile_ = filePath;
fm_path_unref(currentFile_);
currentFile_ = fm_path_ref(filePath);
// clear current image, but do not update the view now to prevent flickers // clear current image, but do not update the view now to prevent flickers
image_ = QImage(); image_ = QImage();
// start a new gio job to load the specified image const Fm::CStrPtr basename = currentFile_.baseName();
loadJob_ = new LoadImageJob(this, filePath); char* mime_type = g_content_type_guess(basename.get(), NULL, 0, NULL);
loadJob_->start(); QString mimeType;
if (mime_type) {
mimeType = QString(mime_type);
g_free(mime_type);
}
if(mimeType == "image/gif"
|| mimeType == "image/svg+xml" || mimeType == "image/svg+xml-compressed") {
const Fm::CStrPtr file_name = currentFile_.toString();
ui.view->setAutoZoomFit(true); // like in onImageLoaded()
if(mimeType == "image/gif")
ui.view->setGifAnimation(QString{file_name.get()});
else
ui.view->setSVG(QString{file_name.get()});
image_ = ui.view->image();
updateUI();
show();
}
else {
// start a new gio job to load the specified image
loadJob_ = new LoadImageJob(currentFile_);
connect(loadJob_, &Fm::Job::finished, this, &MainWindow::onImageLoaded);
connect(loadJob_, &Fm::Job::error, this
, [] (const Fm::GErrorPtr & err, Fm::Job::ErrorSeverity /*severity*/, Fm::Job::ErrorAction & /*response*/)
{
// TODO: show a info bar?
qWarning().noquote() << "lximage-qt:" << err.message();
}
, Qt::BlockingQueuedConnection);
loadJob_->runAsync();
updateUI(); updateUI();
}
} }
void MainWindow::saveImage(FmPath* filePath) { void MainWindow::saveImage(const Fm::FilePath & filePath) {
if(saveJob_) // do not launch a new job if the current one is still in progress if(saveJob_) // do not launch a new job if the current one is still in progress
return; return;
// start a new gio job to save current image to the specified path // start a new gio job to save current image to the specified path
saveJob_ = new SaveImageJob(this, filePath); saveJob_ = new SaveImageJob(image_, filePath);
saveJob_->start(); connect(saveJob_, &Fm::Job::finished, this, &MainWindow::onImageSaved);
connect(saveJob_, &Fm::Job::error, this
, [] (const Fm::GErrorPtr & err, Fm::Job::ErrorSeverity /*severity*/, Fm::Job::ErrorAction & /*response*/)
{
// TODO: show a info bar?
qWarning().noquote() << "lximage-qt:" << err.message();
}
, Qt::BlockingQueuedConnection);
saveJob_->runAsync();
// FIXME: add a cancel button to the UI? update status bar? // FIXME: add a cancel button to the UI? update status bar?
} }
QGraphicsItem* MainWindow::getGraphicsItem() {
if(!ui.view->items().isEmpty())
return ui.view->items().at(0);
return nullptr;
}
void MainWindow::on_actionRotateClockwise_triggered() { void MainWindow::on_actionRotateClockwise_triggered() {
QGraphicsItem *graphItem = getGraphicsItem();
bool isGifOrSvg (graphItem->isWidget() // we have gif animation
|| dynamic_cast<QGraphicsSvgItem*>(graphItem)); // an SVG image;
if(!image_.isNull()) { if(!image_.isNull()) {
QTransform transform; QTransform transform;
transform.rotate(90.0); transform.rotate(90.0);
image_ = image_.transformed(transform, Qt::SmoothTransformation); image_ = image_.transformed(transform, Qt::SmoothTransformation);
ui.view->setImage(image_); /* when this is GIF or SVG, we need to rotate its corresponding QImage
without showing it to have the right measure for auto-zooming */
ui.view->setImage(image_, isGifOrSvg ? false : true);
setModified(true); setModified(true);
} }
if(isGifOrSvg) {
QTransform transform;
transform.translate(graphItem->sceneBoundingRect().height(), 0);
transform.rotate(90);
// we need to apply transformations in the reverse order
QTransform prevTrans = graphItem->transform();
graphItem->setTransform(transform, false);
graphItem->setTransform(prevTrans, true);
}
} }
void MainWindow::on_actionRotateCounterclockwise_triggered() { void MainWindow::on_actionRotateCounterclockwise_triggered() {
QGraphicsItem *graphItem = getGraphicsItem();
bool isGifOrSvg (graphItem->isWidget()
|| dynamic_cast<QGraphicsSvgItem*>(graphItem));
if(!image_.isNull()) { if(!image_.isNull()) {
QTransform transform; QTransform transform;
transform.rotate(-90.0); transform.rotate(-90.0);
image_ = image_.transformed(transform, Qt::SmoothTransformation); image_ = image_.transformed(transform, Qt::SmoothTransformation);
ui.view->setImage(image_); ui.view->setImage(image_, isGifOrSvg ? false : true);
setModified(true); setModified(true);
} }
if(isGifOrSvg) {
QTransform transform;
transform.translate(0, graphItem->sceneBoundingRect().width());
transform.rotate(-90);
QTransform prevTrans = graphItem->transform();
graphItem->setTransform(transform, false);
graphItem->setTransform(prevTrans, true);
}
} }
void MainWindow::on_actionCopy_triggered() { void MainWindow::on_actionCopy_triggered() {
@ -616,27 +734,52 @@ void MainWindow::on_actionPaste_triggered() {
} }
} }
void MainWindow::on_actionUpload_triggered()
{
if (currentFile_.isValid()) {
UploadDialog(this, currentFile_.localPath().get()).exec();
}
}
void MainWindow::on_actionFlipVertical_triggered() { void MainWindow::on_actionFlipVertical_triggered() {
bool hasQGraphicsItem(false);
if(QGraphicsItem *graphItem = getGraphicsItem()) {
hasQGraphicsItem = true;
QTransform transform;
transform.scale(1, -1);
transform.translate(0, -graphItem->sceneBoundingRect().height());
QTransform prevTrans = graphItem->transform();
graphItem->setTransform(transform, false);
graphItem->setTransform(prevTrans, true);
}
if(!image_.isNull()) { if(!image_.isNull()) {
image_ = image_.mirrored(false, true); image_ = image_.mirrored(false, true);
ui.view->setImage(image_); ui.view->setImage(image_, !hasQGraphicsItem);
setModified(true); setModified(true);
} }
setModified(true);
} }
void MainWindow::on_actionFlipHorizontal_triggered() { void MainWindow::on_actionFlipHorizontal_triggered() {
bool hasQGraphicsItem(false);
if(QGraphicsItem *graphItem = getGraphicsItem()) {
hasQGraphicsItem = true;
QTransform transform;
transform.scale(-1, 1);
transform.translate(-graphItem->sceneBoundingRect().width(), 0);
QTransform prevTrans = graphItem->transform();
graphItem->setTransform(transform, false);
graphItem->setTransform(prevTrans, true);
}
if(!image_.isNull()) { if(!image_.isNull()) {
image_ = image_.mirrored(true, false); image_ = image_.mirrored(true, true);
ui.view->setImage(image_); ui.view->setImage(image_, !hasQGraphicsItem);
setModified(true); setModified(true);
} }
setModified(true);
} }
void MainWindow::setModified(bool modified) { void MainWindow::setModified(bool modified) {
imageModified_ = modified; imageModified_ = modified;
updateUI(); // TODO: update title bar to reflect the state change updateUI();
} }
void MainWindow::applySettings() { void MainWindow::applySettings() {
@ -658,11 +801,9 @@ void MainWindow::on_actionPrint_triggered() {
QRect pageRect = printer.pageRect(); QRect pageRect = printer.pageRect();
int cols = (image_.width() / pageRect.width()) + (image_.width() % pageRect.width() ? 1 : 0); int cols = (image_.width() / pageRect.width()) + (image_.width() % pageRect.width() ? 1 : 0);
int rows = (image_.height() / pageRect.height()) + (image_.height() % pageRect.height() ? 1 : 0); int rows = (image_.height() / pageRect.height()) + (image_.height() % pageRect.height() ? 1 : 0);
// qDebug() << "page:" << printer.pageRect() << "image:" << image_.size() << "cols, rows:" << cols << rows;
for(int row = 0; row < rows; ++row) { for(int row = 0; row < rows; ++row) {
for(int col = 0; col < cols; ++col) { for(int col = 0; col < cols; ++col) {
QRect srcRect(pageRect.width() * col, pageRect.height() * row, pageRect.width(), pageRect.height()); QRect srcRect(pageRect.width() * col, pageRect.height() * row, pageRect.width(), pageRect.height());
// qDebug() << "row:" << row << "col:" << col << "src:" << srcRect << "page:" << printer.pageRect();
painter.drawImage(QPoint(0, 0), image_, srcRect); painter.drawImage(QPoint(0, 0), image_, srcRect);
if(col + 1 == cols && row + 1 == rows) // this is the last page if(col + 1 == cols && row + 1 == rows) // this is the last page
break; break;
@ -686,7 +827,7 @@ void MainWindow::on_actionSlideShow_triggered(bool checked) {
if(!slideShowTimer_) { if(!slideShowTimer_) {
slideShowTimer_ = new QTimer(); slideShowTimer_ = new QTimer();
// switch to the next image when timeout // switch to the next image when timeout
connect(slideShowTimer_, SIGNAL(timeout()), SLOT(on_actionNext_triggered())); connect(slideShowTimer_, &QTimer::timeout, this, &MainWindow::on_actionNext_triggered);
} }
Application* app = static_cast<Application*>(qApp); Application* app = static_cast<Application*>(qApp);
slideShowTimer_->start(app->settings().slideShowInterval() * 1000); slideShowTimer_->start(app->settings().slideShowInterval() * 1000);
@ -696,7 +837,7 @@ void MainWindow::on_actionSlideShow_triggered(bool checked) {
else { else {
if(slideShowTimer_) { if(slideShowTimer_) {
delete slideShowTimer_; delete slideShowTimer_;
slideShowTimer_ = NULL; slideShowTimer_ = nullptr;
ui.actionSlideShow->setIcon(QIcon::fromTheme("media-playback-start")); ui.actionSlideShow->setIcon(QIcon::fromTheme("media-playback-start"));
} }
} }
@ -718,19 +859,29 @@ void MainWindow::setShowThumbnails(bool show) {
listView->installEventFilter(this); listView->installEventFilter(this);
// FIXME: optimize the size of the thumbnail view // FIXME: optimize the size of the thumbnail view
// FIXME if the thumbnail view is docked elsewhere, update the settings. // FIXME if the thumbnail view is docked elsewhere, update the settings.
int scrollHeight = style()->pixelMetric(QStyle::PM_ScrollBarExtent); if(Fm::FolderItemDelegate* delegate = static_cast<Fm::FolderItemDelegate*>(listView->itemDelegateForColumn(Fm::FolderModel::ColumnFileName))) {
thumbnailsView_->setFixedHeight(listView->gridSize().height() + scrollHeight); int scrollHeight = style()->pixelMetric(QStyle::PM_ScrollBarExtent);
thumbnailsView_->setFixedHeight(delegate->itemSize().height() + scrollHeight);
}
thumbnailsView_->setModel(proxyModel_); thumbnailsView_->setModel(proxyModel_);
proxyModel_->setShowThumbnails(true); proxyModel_->setShowThumbnails(true);
connect(thumbnailsView_->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SLOT(onThumbnailSelChanged(QItemSelection,QItemSelection))); if (currentFile_) { // select the loaded image
currentIndex_ = indexFromPath(currentFile_);
listView->setCurrentIndex(currentIndex_);
// wait to center the selection
QCoreApplication::processEvents();
listView->scrollTo(currentIndex_, QAbstractItemView::PositionAtCenter);
}
connect(thumbnailsView_->selectionModel(), &QItemSelectionModel::selectionChanged,
this, &MainWindow::onThumbnailSelChanged);
} }
} }
else { else {
if(thumbnailsDock_) { if(thumbnailsDock_) {
delete thumbnailsView_; delete thumbnailsView_;
thumbnailsView_ = NULL; thumbnailsView_ = nullptr;
delete thumbnailsDock_; delete thumbnailsDock_;
thumbnailsDock_ = NULL; thumbnailsDock_ = nullptr;
} }
proxyModel_->setShowThumbnails(false); proxyModel_->setShowThumbnails(false);
} }
@ -760,6 +911,7 @@ void MainWindow::changeEvent(QEvent* event) {
addAction(action); addAction(action);
} }
addActions(ui.menubar->actions()); addActions(ui.menubar->actions());
ui.view->hideCursor(true);
} }
else { // restore to normal window mode else { // restore to normal window mode
ui.view->setFrameStyle(QFrame::StyledPanel|QFrame::Sunken); ui.view->setFrameStyle(QFrame::StyledPanel|QFrame::Sunken);
@ -774,11 +926,39 @@ void MainWindow::changeEvent(QEvent* event) {
ui.statusBar->show(); ui.statusBar->show();
if(thumbnailsDock_) if(thumbnailsDock_)
thumbnailsDock_->show(); thumbnailsDock_->show();
ui.view->hideCursor(false);
} }
} }
QWidget::changeEvent(event); QWidget::changeEvent(event);
} }
void MainWindow::resizeEvent(QResizeEvent *event) {
QMainWindow::resizeEvent(event);
Settings& settings = static_cast<Application*>(qApp)->settings();
if(settings.rememberWindowSize()) {
settings.setLastWindowMaximized(isMaximized());
if(!isMaximized()) {
settings.setLastWindowWidth(width());
settings.setLastWindowHeight(height());
}
}
}
void MainWindow::closeEvent(QCloseEvent *event)
{
QWidget::closeEvent(event);
Settings& settings = static_cast<Application*>(qApp)->settings();
if(settings.rememberWindowSize()) {
settings.setLastWindowMaximized(isMaximized());
if(!isMaximized()) {
settings.setLastWindowWidth(width());
settings.setLastWindowHeight(height());
}
}
}
void MainWindow::onContextMenu(QPoint pos) { void MainWindow::onContextMenu(QPoint pos) {
contextMenu_->exec(ui.view->mapToGlobal(pos)); contextMenu_->exec(ui.view->mapToGlobal(pos));
} }
@ -788,14 +968,18 @@ void MainWindow::onExitFullscreen() {
showNormal(); showNormal();
} }
void MainWindow::onThumbnailSelChanged(const QItemSelection& selected, const QItemSelection& deselected) { void MainWindow::onThumbnailSelChanged(const QItemSelection& selected, const QItemSelection& /*deselected*/) {
// the selected item of thumbnail view is changed // the selected item of thumbnail view is changed
if(!selected.isEmpty()) { if(!selected.isEmpty()) {
QModelIndex index = selected.first().topLeft(); QModelIndex index = selected.first().topLeft();
if(index.isValid() && index != currentIndex_) { if(index.isValid() && index != currentIndex_) {
FmFileInfo* file = proxyModel_->fileInfoFromIndex(index); const auto file = proxyModel_->fileInfoFromIndex(index);
if(file) if(file)
loadImage(fm_file_info_get_path(file), index); loadImage(file->path(), index);
} }
} }
} }
void MainWindow::onFileDropped(const QString path) {
openImageFile(path);
}

View File

@ -50,19 +50,19 @@ class MainWindow : public QMainWindow {
public: public:
friend class LoadImageJob; friend class LoadImageJob;
friend class SaveImageJob; friend class SaveImageJob;
MainWindow(); MainWindow();
virtual ~MainWindow(); virtual ~MainWindow();
void openImageFile(QString fileName); void openImageFile(QString fileName);
QImage image() const { QImage image() const {
return image_; return image_;
} }
void pasteImage(QImage newImage); void pasteImage(QImage newImage);
FmPath* currentFile() const { const Fm::FilePath & currentFile() const {
return currentFile_; return currentFile_;
} }
@ -70,21 +70,25 @@ public:
void applySettings(); void applySettings();
protected: protected:
void loadImage(FmPath* filePath, QModelIndex index = QModelIndex()); void loadImage(const Fm::FilePath & filePath, QModelIndex index = QModelIndex());
void saveImage(FmPath* filePath); // save current image to a file void saveImage(const Fm::FilePath & filePath); // save current image to a file
void loadFolder(FmPath* newFolderPath); void loadFolder(const Fm::FilePath & newFolderPath);
QString openFileName(); QString openFileName();
QString openDirectory();
QString saveFileName(QString defaultName = QString()); QString saveFileName(QString defaultName = QString());
virtual void changeEvent(QEvent * event); virtual void changeEvent(QEvent * event);
virtual void resizeEvent(QResizeEvent *event);
virtual void closeEvent(QCloseEvent *event);
void onImageLoaded();
void onImageSaved();
void onImageLoaded(LoadImageJob* job);
void onImageSaved(SaveImageJob* job);
virtual bool eventFilter(QObject* watched, QEvent* event); virtual bool eventFilter(QObject* watched, QEvent* event);
private Q_SLOTS: private Q_SLOTS:
void on_actionAbout_triggered(); void on_actionAbout_triggered();
void on_actionOpenFile_triggered(); void on_actionOpenFile_triggered();
void on_actionOpenDirectory_triggered();
void on_actionNewWindow_triggered(); void on_actionNewWindow_triggered();
void on_actionSave_triggered(); void on_actionSave_triggered();
void on_actionSaveAs_triggered(); void on_actionSaveAs_triggered();
@ -99,6 +103,7 @@ private Q_SLOTS:
void on_actionFlipHorizontal_triggered(); void on_actionFlipHorizontal_triggered();
void on_actionCopy_triggered(); void on_actionCopy_triggered();
void on_actionPaste_triggered(); void on_actionPaste_triggered();
void on_actionUpload_triggered();
void on_actionShowThumbnails_triggered(bool checked); void on_actionShowThumbnails_triggered(bool checked);
void on_actionFullScreen_triggered(bool checked); void on_actionFullScreen_triggered(bool checked);
@ -119,16 +124,14 @@ private Q_SLOTS:
void onThumbnailSelChanged(const QItemSelection & selected, const QItemSelection & deselected); void onThumbnailSelChanged(const QItemSelection & selected, const QItemSelection & deselected);
void onFileDropped(const QString path);
private: private:
void onFolderLoaded(FmFolder* folder); void onFolderLoaded();
void updateUI(); void updateUI();
void setModified(bool modified); void setModified(bool modified);
QModelIndex indexFromPath(FmPath* filePath); QModelIndex indexFromPath(const Fm::FilePath & filePath);
QGraphicsItem* getGraphicsItem();
// GObject related signal handers and callbacks
static void _onFolderLoaded(FmFolder* folder, MainWindow* _this) {
_this->onFolderLoaded(folder);
}
private: private:
Ui::MainWindow ui; Ui::MainWindow ui;
@ -136,13 +139,13 @@ private:
QTimer* slideShowTimer_; QTimer* slideShowTimer_;
QImage image_; // the image currently shown QImage image_; // the image currently shown
FmPath* currentFile_; // path to current image file Fm::FilePath currentFile_; // path to current image file
// FmFileInfo* currentFileInfo_; // info of the current file, can be NULL // FmFileInfo* currentFileInfo_; // info of the current file, can be NULL
bool imageModified_; // the current image is modified by rotation, flip, or others and needs to be saved bool imageModified_; // the current image is modified by rotation, flip, or others and needs to be saved
// folder browsing // folder browsing
FmFolder* folder_; std::shared_ptr<Fm::Folder> folder_;
FmPath* folderPath_; Fm::FilePath folderPath_;
Fm::FolderModel* folderModel_; Fm::FolderModel* folderModel_;
Fm::ProxyFolderModel* proxyModel_; Fm::ProxyFolderModel* proxyModel_;
ModelFilter* modelFilter_; ModelFilter* modelFilter_;
@ -156,6 +159,6 @@ private:
SaveImageJob* saveJob_; SaveImageJob* saveJob_;
}; };
}; }
#endif // LXIMAGE_MAINWINDOW_H #endif // LXIMAGE_MAINWINDOW_H

View File

@ -56,6 +56,7 @@
</property> </property>
<addaction name="actionNewWindow"/> <addaction name="actionNewWindow"/>
<addaction name="actionOpenFile"/> <addaction name="actionOpenFile"/>
<addaction name="actionOpenDirectory"/>
<addaction name="actionScreenshot"/> <addaction name="actionScreenshot"/>
<addaction name="actionSave"/> <addaction name="actionSave"/>
<addaction name="actionSaveAs"/> <addaction name="actionSaveAs"/>
@ -107,6 +108,8 @@
<addaction name="actionCopy"/> <addaction name="actionCopy"/>
<addaction name="actionPaste"/> <addaction name="actionPaste"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionUpload"/>
<addaction name="separator"/>
<addaction name="actionPreferences"/> <addaction name="actionPreferences"/>
</widget> </widget>
<addaction name="menu_File"/> <addaction name="menu_File"/>
@ -221,7 +224,7 @@
<string>Zoom &amp;In</string> <string>Zoom &amp;In</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
<string>Ctrl++</string> <string>Ctrl+=</string>
</property> </property>
</action> </action>
<action name="actionZoomOut"> <action name="actionZoomOut">
@ -288,6 +291,9 @@
<property name="text"> <property name="text">
<string>Original Size</string> <string>Original Size</string>
</property> </property>
<property name="shortcut">
<string>Ctrl+0</string>
</property>
</action> </action>
<action name="actionZoomFit"> <action name="actionZoomFit">
<property name="icon"> <property name="icon">
@ -451,6 +457,28 @@
<string>File Properties</string> <string>File Properties</string>
</property> </property>
</action> </action>
<action name="actionOpenDirectory">
<property name="icon">
<iconset theme="document-open"/>
</property>
<property name="text">
<string>Open &amp;Directory</string>
</property>
<property name="shortcut">
<string>Ctrl+D</string>
</property>
</action>
<action name="actionUpload">
<property name="icon">
<iconset theme="upload-media"/>
</property>
<property name="text">
<string>Upload</string>
</property>
<property name="toolTip">
<string>Upload the image</string>
</property>
</action>
</widget> </widget>
<customwidgets> <customwidgets>
<customwidget> <customwidget>

View File

@ -30,10 +30,11 @@ ModelFilter::~ModelFilter() {
} }
bool ModelFilter::filterAcceptsRow(const Fm::ProxyFolderModel* model, FmFileInfo* info) const { bool ModelFilter::filterAcceptsRow(const Fm::ProxyFolderModel* model, const std::shared_ptr<const Fm::FileInfo>& info) const
{
Q_UNUSED(model)
// filter out non-image files and formats that we don't support. // filter out non-image files and formats that we don't support.
if(!fm_file_info_is_image(info)) return info && info->isImage();
return false;
return true;
} }

View File

@ -28,7 +28,7 @@ namespace LxImage {
class ModelFilter: public Fm::ProxyFolderModelFilter { class ModelFilter: public Fm::ProxyFolderModelFilter {
public: public:
ModelFilter(); ModelFilter();
virtual bool filterAcceptsRow(const Fm::ProxyFolderModel* model, FmFileInfo* info) const; virtual bool filterAcceptsRow(const Fm::ProxyFolderModel* model, const std::shared_ptr<const Fm::FileInfo>& info) const override;
virtual ~ModelFilter(); virtual ~ModelFilter();
}; };

View File

@ -7,7 +7,7 @@
<!-- file paths to open in new windows --> <!-- file paths to open in new windows -->
<arg type="as" direction="in"/> <arg type="as" direction="in"/>
</method> </method>
<!-- launch a tool to take a screenshot --> <!-- launch a tool to take a screenshot -->
<method name="screenshot" /> <method name="screenshot" />

View File

@ -33,7 +33,7 @@ PreferencesDialog::PreferencesDialog(QWidget* parent):
Application* app = static_cast<Application*>(qApp); Application* app = static_cast<Application*>(qApp);
Settings& settings = app->settings(); Settings& settings = app->settings();
app->addWindow(); app->addWindow();
initIconThemes(settings); initIconThemes(settings);
ui.bgColor->setColor(settings.bgColor()); ui.bgColor->setColor(settings.bgColor());
ui.fullScreenBgColor->setColor(settings.fullScreenBgColor()); ui.fullScreenBgColor->setColor(settings.fullScreenBgColor());
@ -59,8 +59,8 @@ void PreferencesDialog::accept() {
QIcon::setThemeName(newIconTheme); QIcon::setThemeName(newIconTheme);
// update the UI by emitting a style change event // update the UI by emitting a style change event
Q_FOREACH(QWidget *widget, QApplication::allWidgets()) { Q_FOREACH(QWidget *widget, QApplication::allWidgets()) {
QEvent event(QEvent::StyleChange); QEvent event(QEvent::StyleChange);
QApplication::sendEvent(widget, &event); QApplication::sendEvent(widget, &event);
} }
} }
} }
@ -68,7 +68,7 @@ void PreferencesDialog::accept() {
settings.setBgColor(ui.bgColor->color()); settings.setBgColor(ui.bgColor->color());
settings.setFullScreenBgColor(ui.fullScreenBgColor->color()); settings.setFullScreenBgColor(ui.fullScreenBgColor->color());
settings.setSlideShowInterval(ui.slideShowInterval->value()); settings.setSlideShowInterval(ui.slideShowInterval->value());
settings.save(); settings.save();
QDialog::accept(); QDialog::accept();
app->applySettings(); app->applySettings();
@ -96,8 +96,6 @@ static void findIconThemesInDir(QHash<QString, QString>& iconThemes, QString dir
} }
void PreferencesDialog::initIconThemes(Settings& settings) { void PreferencesDialog::initIconThemes(Settings& settings) {
Application* app = static_cast<Application*>(qApp);
// check if auto-detection is done (for example, from xsettings) // check if auto-detection is done (for example, from xsettings)
if(settings.useFallbackIconTheme()) { // auto-detection failed if(settings.useFallbackIconTheme()) { // auto-detection failed
// load xdg icon themes and select the current one // load xdg icon themes and select the current one
@ -113,7 +111,7 @@ void PreferencesDialog::initIconThemes(Settings& settings) {
iconThemes.remove("hicolor"); // remove hicolor, which is only a fallback iconThemes.remove("hicolor"); // remove hicolor, which is only a fallback
QHash<QString, QString>::const_iterator it; QHash<QString, QString>::const_iterator it;
for(it = iconThemes.begin(); it != iconThemes.end(); ++it) { for(it = iconThemes.constBegin(); it != iconThemes.constEnd(); ++it) {
ui.iconTheme->addItem(it.value(), it.key()); ui.iconTheme->addItem(it.value(), it.key());
} }
ui.iconTheme->model()->sort(0); // sort the list of icon theme names ui.iconTheme->model()->sort(0); // sort the list of icon theme names
@ -124,7 +122,7 @@ void PreferencesDialog::initIconThemes(Settings& settings) {
for(i = 0; i < n; ++i) { for(i = 0; i < n; ++i) {
QVariant itemData = ui.iconTheme->itemData(i); QVariant itemData = ui.iconTheme->itemData(i);
if(itemData == settings.fallbackIconTheme()) { if(itemData == settings.fallbackIconTheme()) {
break; break;
} }
} }
if(i >= n) if(i >= n)

View File

@ -33,7 +33,7 @@ class PreferencesDialog : public QDialog {
public: public:
explicit PreferencesDialog(QWidget* parent = 0); explicit PreferencesDialog(QWidget* parent = 0);
virtual ~PreferencesDialog(); virtual ~PreferencesDialog();
virtual void accept(); virtual void accept();
virtual void done(int r); virtual void done(int r);

View File

@ -73,7 +73,11 @@
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="3" column="1">
<widget class="QSpinBox" name="slideShowInterval"/> <widget class="QSpinBox" name="slideShowInterval">
<property name="minimum">
<number>1</number>
</property>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>

View File

@ -26,47 +26,58 @@
using namespace LxImage; using namespace LxImage;
SaveImageJob::SaveImageJob(MainWindow* window, FmPath* filePath): SaveImageJob::SaveImageJob(const QImage & image, const Fm::FilePath & filePath):
Job(), path_{filePath},
path_(fm_path_ref(filePath)), image_{image},
mainWindow_(window), failed_{true}
image_(window->image()) { {
} }
SaveImageJob::~SaveImageJob() { SaveImageJob::~SaveImageJob() {
fm_path_unref(path_);
} }
// This is called from the worker thread, not main thread // This is called from the worker thread, not main thread
bool SaveImageJob::run() { void SaveImageJob::exec() {
GFile* gfile = fm_path_to_gfile(path_); const Fm::CStrPtr f = path_.baseName();
GFileOutputStream* fileStream = g_file_replace(gfile, NULL, false, G_FILE_CREATE_PRIVATE, cancellable_, &error_); char const * format = f.get();
g_object_unref(gfile); format = strrchr(format, '.');
if(format) // use filename extension as the image format
++format;
if(fileStream) { // if the file stream is successfually opened QBuffer imageBuffer;
const char* format = fm_path_get_basename(path_); image_.save(&imageBuffer, format); // save the image to buffer
format = strrchr(format, '.');
if(format) // use filename extension as the image format
++format;
QBuffer imageBuffer; GFileOutputStream* fileStream = nullptr;
image_.save(&imageBuffer, format); // save the image to buffer Fm::GErrorPtr error;
GOutputStream* outputStream = G_OUTPUT_STREAM(fileStream); ErrorAction act = ErrorAction::RETRY;
g_output_stream_write_all(outputStream, while (act == ErrorAction::RETRY && !isCancelled())
imageBuffer.data().constData(), {
imageBuffer.size(), error.reset();
NULL, if (nullptr == (fileStream = g_file_replace(path_.gfile().get(), NULL, false, G_FILE_CREATE_NONE, cancellable().get(), &error)))
cancellable_, {
&error_); act = emitError(error);
g_output_stream_close(outputStream, NULL, NULL); continue;
} }
return false;
}
// this function is called from main thread only // the file stream is successfually opened
void SaveImageJob::finish() { if (!isCancelled())
// only do processing if the job is not cancelled {
if(!g_cancellable_is_cancelled(cancellable_)) { GOutputStream* outputStream = G_OUTPUT_STREAM(fileStream);
mainWindow_->onImageSaved(this); g_output_stream_write_all(outputStream,
imageBuffer.data().constData(),
imageBuffer.size(),
NULL,
cancellable().get(),
&error);
g_output_stream_close(outputStream, NULL, NULL);
if (!error)
{
// successfully written
failed_ = false;
break; // successfully written
}
act = emitError(error);
}
} }
} }

View File

@ -21,39 +21,39 @@
#ifndef LXIMAGE_SAVEIMAGEJOB_H #ifndef LXIMAGE_SAVEIMAGEJOB_H
#define LXIMAGE_SAVEIMAGEJOB_H #define LXIMAGE_SAVEIMAGEJOB_H
#include <gio/gio.h> #include <libfm-qt/core/job.h>
#include <libfm/fm.h> #include <libfm-qt/core/filepath.h>
#include <QImage> #include <QImage>
#include "job.h"
namespace LxImage { namespace LxImage {
class MainWindow; class SaveImageJob : public Fm::Job {
class SaveImageJob : public Job {
public: public:
SaveImageJob(MainWindow* window, FmPath* filePath); SaveImageJob(const QImage & image, const Fm::FilePath & filePath);
QImage image() const { QImage image() const {
return image_; return image_;
} }
FmPath* filePath() const { const Fm::FilePath & filePath() const {
return path_; return path_;
} }
bool failed() const
{
return failed_;
}
protected: protected:
virtual bool run(); virtual void exec() override;
virtual void finish();
private: private:
~SaveImageJob(); // prevent direct deletion ~SaveImageJob(); // prevent direct deletion
public: const Fm::FilePath path_;
MainWindow* mainWindow_; const QImage image_;
FmPath* path_; bool failed_;
QImage image_;
}; };
} }

View File

@ -19,12 +19,14 @@
#include "screenshotdialog.h" #include "screenshotdialog.h"
#include "screenshotselectarea.h"
#include <QTimer> #include <QTimer>
#include <QPixmap> #include <QPixmap>
#include <QImage> #include <QImage>
#include <QPainter> #include <QPainter>
#include "application.h" #include "application.h"
#include <QDesktopWidget> #include <QDesktopWidget>
#include <QScreen>
#include <QX11Info> #include <QX11Info>
#include <X11/Xlib.h> #include <X11/Xlib.h>
@ -47,7 +49,7 @@ ScreenshotDialog::ScreenshotDialog(QWidget* parent, Qt::WindowFlags f): QDialog(
ScreenshotDialog::~ScreenshotDialog() { ScreenshotDialog::~ScreenshotDialog() {
Application* app = static_cast<Application*>(qApp); Application* app = static_cast<Application*>(qApp);
app->removeWindow(); app->removeWindow();
} }
void ScreenshotDialog::done(int r) { void ScreenshotDialog::done(int r) {
@ -83,7 +85,7 @@ QRect ScreenshotDialog::windowFrame(WId wid) {
int x, y; int x, y;
// translate to root coordinate // translate to root coordinate
XTranslateCoordinates(QX11Info::display(), wid, wa.root, 0, 0, &x, &y, &child); XTranslateCoordinates(QX11Info::display(), wid, wa.root, 0, 0, &x, &y, &child);
qDebug("%d, %d, %d, %d", x, y, wa.width, wa.height); //qDebug("%d, %d, %d, %d", x, y, wa.width, wa.height);
result.setRect(x, y, wa.width, wa.height); result.setRect(x, y, wa.width, wa.height);
// get the frame widths added by the window manager // get the frame widths added by the window manager
@ -140,41 +142,49 @@ void ScreenshotDialog::doScreenshot() {
} }
} }
QPixmap pixmap; QImage image;
pixmap = QPixmap::grabWindow(wid, x, y, width, height); QScreen *screen = QGuiApplication::primaryScreen();
QImage image = pixmap.toImage(); if(screen) {
QPixmap pixmap = screen->grabWindow(wid, x, y, width, height);
image = pixmap.toImage();
if(hasXfixes_ && ui.includeCursor->isChecked()) { if(hasXfixes_ && ui.includeCursor->isChecked()) {
// capture the cursor if needed // capture the cursor if needed
XFixesCursorImage* cursor = XFixesGetCursorImage(QX11Info::display()); XFixesCursorImage* cursor = XFixesGetCursorImage(QX11Info::display());
if(cursor) { if(cursor) {
if(cursor->pixels) { // pixles should be an ARGB array if(cursor->pixels) { // pixles should be an ARGB array
QImage cursorImage; QImage cursorImage;
quint32* buf = NULL; if(sizeof(long) == 4) {
if(sizeof(long) == 4) { // FIXME: will we encounter byte-order problems here?
// FIXME: will we encounter byte-order problems here? cursorImage = QImage((uchar*)cursor->pixels, cursor->width, cursor->height, QImage::Format_ARGB32);
cursorImage = QImage((uchar*)cursor->pixels, cursor->width, cursor->height, QImage::Format_ARGB32); }
else { // XFixes returns long integers which is not 32 bit on 64 bit systems.
long len = cursor->width * cursor->height;
quint32* buf = new quint32[len];
for(long i = 0; i < len; ++i)
buf[i] = (quint32)cursor->pixels[i];
cursorImage = QImage((uchar*)buf, cursor->width, cursor->height, QImage::Format_ARGB32, [](void* b) { delete[] (quint32*)b; }, buf);
}
// paint the cursor on the current image
QPainter painter(&image);
painter.drawImage(cursor->x - cursor->xhot, cursor->y - cursor->yhot, cursorImage);
} }
else { // XFixes returns long integers which is not 32 bit on 64 bit systems. XFree(cursor);
long len = cursor->width * cursor->height;
quint32* buf = new quint32[len];
for(long i = 0; i < len; ++i)
buf[i] = (quint32)cursor->pixels[i];
cursorImage = QImage((uchar*)buf, cursor->width, cursor->height, QImage::Format_ARGB32);
}
// paint the cursor on the current image
QPainter painter(&image);
painter.drawImage(cursor->x - cursor->xhot, cursor->y - cursor->yhot, cursorImage);
if(buf)
delete []buf;
} }
XFree(cursor); }
}
if(ui.screenArea->isChecked() && !image.isNull()) {
ScreenshotSelectArea selectArea(image);
if(QDialog::Accepted == selectArea.exec()) {
image = image.copy(selectArea.selectedArea());
} }
} }
Application* app = static_cast<Application*>(qApp); Application* app = static_cast<Application*>(qApp);
MainWindow* window = app->createWindow(); MainWindow* window = app->createWindow();
window->pasteImage(image); if(!image.isNull())
window->pasteImage(image);
window->show(); window->show();
deleteLater(); // destroy ourself deleteLater(); // destroy ourself

View File

@ -15,8 +15,7 @@
</property> </property>
<property name="windowIcon"> <property name="windowIcon">
<iconset theme="camera-photo"> <iconset theme="camera-photo">
<normaloff/> <normaloff>.</normaloff>.</iconset>
</iconset>
</property> </property>
<layout class="QFormLayout" name="formLayout"> <layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy"> <property name="fieldGrowthPolicy">
@ -52,6 +51,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QRadioButton" name="screenArea">
<property name="text">
<string>Capture an area of the screen</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>

View File

@ -0,0 +1,51 @@
/*
<one line to give the library's name and an idea of what it does.>
Copyright (C) 2013 <copyright holder> <email>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "screenshotselectarea.h"
#include <QMouseEvent>
using namespace LxImage;
ScreenshotSelectArea::ScreenshotSelectArea(const QImage & image, QWidget* parent) : QDialog(parent)
{
scene_ = new QGraphicsScene(this);
scene_->addPixmap(QPixmap::fromImage(image));
view_ = new ScreenshotSelectAreaGraphicsView(scene_, this);
view_->setRenderHints( QPainter::Antialiasing );
view_->setHorizontalScrollBarPolicy ( Qt::ScrollBarAlwaysOff );
view_->setVerticalScrollBarPolicy ( Qt::ScrollBarAlwaysOff );
view_->show();
view_->move(0,0);
view_->resize(image.width(), image.height());
setWindowState(windowState() | Qt::WindowFullScreen);
connect(view_, &ScreenshotSelectAreaGraphicsView::selectedArea, this, &ScreenshotSelectArea::areaSelected);
}
QRect ScreenshotSelectArea::selectedArea()
{
return selectedRect_;
}
void ScreenshotSelectArea::areaSelected(QRect rect)
{
this->selectedRect_ = rect;
accept();
}

View File

@ -0,0 +1,50 @@
/*
<one line to give the library's name and an idea of what it does.>
Copyright (C) 2013 <copyright holder> <email>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef LXIMAGE_SCREENSHOTDIALOG_SELECT_AREA_H
#define LXIMAGE_SCREENSHOTDIALOG_SELECT_AREA_H
#include "screenshotselectareagraphicsview.h"
#include <QDialog>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsRectItem>
namespace LxImage {
class ScreenshotSelectArea : public QDialog {
Q_OBJECT
public:
ScreenshotSelectArea(const QImage & image, QWidget* parent = 0);
QRect selectedArea();
private Q_SLOTS:
void areaSelected(QRect rect);
private:
QGraphicsScene *scene_;
ScreenshotSelectAreaGraphicsView *view_;
QRect selectedRect_;
};
}
#endif // LXIMAGE_SCREENSHOTDIALOG_SELECT_AREA_H

View File

@ -0,0 +1,58 @@
/*
<one line to give the library's name and an idea of what it does.>
Copyright (C) 2013 <copyright holder> <email>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "screenshotselectareagraphicsview.h"
#include <QMouseEvent>
using namespace LxImage;
ScreenshotSelectAreaGraphicsView::ScreenshotSelectAreaGraphicsView(QGraphicsScene* scene, QWidget* parent) : QGraphicsView(scene, parent)
{
p0_ = QPointF(-1.0, -1.0);
selectedAreaRect_ = nullptr;
setCursor(Qt::CrossCursor);
}
void ScreenshotSelectAreaGraphicsView::mousePressEvent(QMouseEvent *event)
{
if(p0_.x() < 0) {
p0_ = QPointF(event->pos());
} else {
if(selectedAreaRect_ == nullptr) {
QColor highlight = palette().color(QPalette::Active,QPalette::Highlight);
QPen pen(highlight, 3, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin);
QColor color(highlight);
color.setAlpha(128);
QBrush brush(color);
selectedAreaRect_ = scene()->addRect(QRectF(), pen, brush);
}
selectedAreaRect_->setRect(QRectF(p0_,QPointF(event->pos())).normalized());
}
}
void ScreenshotSelectAreaGraphicsView::mouseMoveEvent(QMouseEvent *event)
{
mousePressEvent(event);
}
void ScreenshotSelectAreaGraphicsView::mouseReleaseEvent(QMouseEvent *event)
{
Q_EMIT selectedArea(QRectF(p0_,QPointF(event->pos())).normalized().toRect());
}

View File

@ -0,0 +1,52 @@
/*
<one line to give the library's name and an idea of what it does.>
Copyright (C) 2013 <copyright holder> <email>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef LXIMAGE_SCREENSHOTDIALOG_SELECT_AREA_GRAPICS_VIEW_H
#define LXIMAGE_SCREENSHOTDIALOG_SELECT_AREA_GRAPICS_VIEW_H
#include <QDialog>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsRectItem>
namespace LxImage {
class ScreenshotSelectAreaGraphicsView : public QGraphicsView {
Q_OBJECT
public:
ScreenshotSelectAreaGraphicsView(QGraphicsScene* scene, QWidget* parent = 0);
Q_SIGNALS:
void selectedArea(QRect rect);
protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
private:
QPointF p0_;
QGraphicsRectItem *selectedAreaRect_;
};
}
#endif // LXIMAGE_SCREENSHOTDIALOG_SELECT_AREA_H

View File

@ -27,11 +27,16 @@ using namespace LxImage;
Settings::Settings(): Settings::Settings():
useFallbackIconTheme_(QIcon::themeName().isEmpty() || QIcon::themeName() == "hicolor"), useFallbackIconTheme_(QIcon::themeName().isEmpty() || QIcon::themeName() == "hicolor"),
bgColor_(255, 255, 255), bgColor_(255, 255, 255),
fullScreenBgColor_(0, 0, 0),
showThumbnails_(false), showThumbnails_(false),
showSidePane_(false), showSidePane_(false),
fullScreenBgColor_(0, 0, 0), slideShowInterval_(5),
fallbackIconTheme_("oxygen"), fallbackIconTheme_("oxygen"),
slideShowInterval_(5) { fixedWindowWidth_(640),
fixedWindowHeight_(480),
lastWindowWidth_(640),
lastWindowHeight_(480),
lastWindowMaximized_(false) {
} }
Settings::~Settings() { Settings::~Settings() {
@ -44,16 +49,37 @@ bool Settings::load() {
fullScreenBgColor_ = settings.value("fullScreenBgColor", fullScreenBgColor_).value<QColor>(); fullScreenBgColor_ = settings.value("fullScreenBgColor", fullScreenBgColor_).value<QColor>();
// showThumbnails_; // showThumbnails_;
// showSidePane_; // showSidePane_;
int slideShowInterval_ = settings.value("slideShowInterval", slideShowInterval_).toInt(); slideShowInterval_ = settings.value("slideShowInterval", slideShowInterval_).toInt();
settings.beginGroup("Window");
fixedWindowWidth_ = settings.value("FixedWidth", 640).toInt();
fixedWindowHeight_ = settings.value("FixedHeight", 480).toInt();
lastWindowWidth_ = settings.value("LastWindowWidth", 640).toInt();
lastWindowHeight_ = settings.value("LastWindowHeight", 480).toInt();
lastWindowMaximized_ = settings.value("LastWindowMaximized", false).toBool();
rememberWindowSize_ = settings.value("RememberWindowSize", true).toBool();
settings.endGroup();
return true; return true;
} }
bool Settings::save() { bool Settings::save() {
QSettings settings("lximage-qt", "settings"); QSettings settings("lximage-qt", "settings");
settings.setValue("fallbackIconTheme", fallbackIconTheme_); settings.setValue("fallbackIconTheme", fallbackIconTheme_);
settings.setValue("bgColor", bgColor_); settings.setValue("bgColor", bgColor_);
settings.setValue("fullScreenBgColor", fullScreenBgColor_); settings.setValue("fullScreenBgColor", fullScreenBgColor_);
settings.setValue("slideShowInterval", slideShowInterval_); settings.setValue("slideShowInterval", slideShowInterval_);
settings.beginGroup("Window");
settings.setValue("FixedWidth", fixedWindowWidth_);
settings.setValue("FixedHeight", fixedWindowHeight_);
settings.setValue("LastWindowWidth", lastWindowWidth_);
settings.setValue("LastWindowHeight", lastWindowHeight_);
settings.setValue("LastWindowMaximized", lastWindowMaximized_);
settings.setValue("RememberWindowSize", rememberWindowSize_);
settings.endGroup();
return true; return true;
} }

View File

@ -79,6 +79,63 @@ public:
slideShowInterval_ = interval; slideShowInterval_ = interval;
} }
bool rememberWindowSize() const {
return rememberWindowSize_;
}
void setRememberWindowSize(bool rememberWindowSize) {
rememberWindowSize_ = rememberWindowSize;
}
int windowWidth() const {
if(rememberWindowSize_)
return lastWindowWidth_;
else
return fixedWindowWidth_;
}
int windowHeight() const {
if(rememberWindowSize_)
return lastWindowHeight_;
else
return fixedWindowHeight_;
}
bool windowMaximized() const {
if(rememberWindowSize_)
return lastWindowMaximized_;
else
return false;
}
int fixedWindowWidth() const {
return fixedWindowWidth_;
}
void setFixedWindowWidth(int fixedWindowWidth) {
fixedWindowWidth_ = fixedWindowWidth;
}
int fixedWindowHeight() const {
return fixedWindowHeight_;
}
void setFixedWindowHeight(int fixedWindowHeight) {
fixedWindowHeight_ = fixedWindowHeight;
}
void setLastWindowWidth(int lastWindowWidth) {
lastWindowWidth_ = lastWindowWidth;
}
void setLastWindowHeight(int lastWindowHeight) {
lastWindowHeight_ = lastWindowHeight;
}
void setLastWindowMaximized(bool lastWindowMaximized) {
lastWindowMaximized_ = lastWindowMaximized;
}
private: private:
bool useFallbackIconTheme_; bool useFallbackIconTheme_;
QColor bgColor_; QColor bgColor_;
@ -87,6 +144,13 @@ private:
bool showSidePane_; bool showSidePane_;
int slideShowInterval_; int slideShowInterval_;
QString fallbackIconTheme_; QString fallbackIconTheme_;
bool rememberWindowSize_;
int fixedWindowWidth_;
int fixedWindowHeight_;
int lastWindowWidth_;
int lastWindowHeight_;
bool lastWindowMaximized_;
}; };
} }

View File

@ -0,0 +1,4 @@
#Translations
Name[ca]=Captura de pantalla
GenericName[ca]=Captura de pantalla
Comment[ca]=Preneu una captura de pantalla

View File

@ -0,0 +1,3 @@
Name[da]=Skærmbillede
GenericName[da]=Skærmbillede
Comment[da]=Tag et skærmbillede

View File

@ -0,0 +1,4 @@
#Translations
Name[el]=Στιγμιότυπο οθόνης
GenericName[el]=Στιγμιότυπο οθόνης
Comment[el]=Λήψη ενός στιγμιότυπου της οθόνης

View File

@ -0,0 +1,4 @@
#Translations
Name[fr]=Copie d'écran
GenericName[fr]=Copie d'écran
Comment[fr]=Faire une copie d'écran

View File

@ -0,0 +1,6 @@
[Desktop Entry]
Name[hu]=LXQt képernyőfotó
GenericName[hu]=Képrnyőfénykép
Comment[hu]=Képernyőkép készítés
#TRANSLATIONS_DIR=translations

View File

@ -0,0 +1,4 @@
#Translations
Name[it]=Cattura schermata
GenericName[it]=Cattura una schermata
Comment[it]=Catturare una schermata

View File

@ -0,0 +1,4 @@
#Translations
Name[lt]=Ekrano kopija
GenericName[lt]=Ekrano kopija
Comment[lt]=Padaryti ekrano kopiją

View File

@ -0,0 +1,6 @@
[Desktop Entry]
Name[pl]=Zrzut ekranu
GenericName[pl]=Zrzut ekranu
Comment[pl]=Wykonaj zrzut ekranu
#TRANSLATIONS_DIR=translations

View File

@ -0,0 +1,4 @@
#Translations
Name[ru]=Снимок экрана
GenericName[ru]=Снимок экрана
Comment[ru]=Сделать снимок экрана

View File

@ -0,0 +1,4 @@
#Translations
Name[ca]=LXImage
GenericName[ca]=Visualitzador d'imatges
Comment[ca]=El visualitzador d'imatges de LXQt

View File

@ -1,408 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ca">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,3 @@
Name[da]=LXImage
GenericName[da]=Billedfremviser
Comment[da]=LXQt-billedfremviseren

View File

@ -1,5 +1,5 @@
[Desktop Entry] [Desktop Entry]
GenericName[de]=Bildbetrachter GenericName[de]=Bildbetrachter
Comment[de]=Der LXQt Bildbetrachter Comment[de]=Der LXQt-Bildbetrachter
#TRANSLATIONS_DIR=translations #TRANSLATIONS_DIR=translations

View File

@ -1,416 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="de_DE">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation type="unfinished">Erstelle ein Bildschirmfoto</translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation type="unfinished">[Datei1, Datei2,...]</translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation type="unfinished">Über</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation type="unfinished">LXImage - ein einfacher und schneller Bildbetrachter
Copyright (C) 2013
LXDE Project: http://lxde.org/
Autor:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation type="unfinished">Öffne Datei</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation type="unfinished">Bilddateien (%1)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation type="unfinished">Speichere Datei</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation type="unfinished">%1 (Lade...) - Bildbetrachter</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation type="unfinished">%1 (Fehler beim Laden) - Bildbetrachter</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation type="unfinished">%1 (%2x%3) - Bildbetrachter</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation type="unfinished">Bildbetrachter</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished">Miniaturen</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation type="unfinished">Bildbetrachter</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation type="unfinished">&amp;Über</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation type="unfinished">Ö&amp;ffnen</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translatorcomment>Shortcuts werden automatisch übersetzt</translatorcomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation type="unfinished">&amp;Speichern</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation type="unfinished">Speichern &amp;unter</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation type="unfinished">Sch&amp;ließen</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation type="unfinished">Ver&amp;größern</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation type="unfinished">Ver&amp;kleinern</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation type="unfinished">In die &amp;Zwischenablage einfügen</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation type="unfinished">Nächste Datei</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation type="unfinished">Vorige Datei</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation type="unfinished">Originalgröße</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation type="unfinished">Passen&amp;d</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation type="unfinished">Im &amp;Uhrzeigersinn drehen</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation type="unfinished">&amp;Gegen den Uhrzeigersinn drehen</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation type="unfinished">Vo&amp;rgaben</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation type="unfinished">&amp;Drucken</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation type="unfinished">Erste Datei</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation type="unfinished">Letzte Datei</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation type="unfinished">&amp;Neues Fenster</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation type="unfinished">&amp;Horizontal spiegeln</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation type="unfinished">Bildschirmfoto erstellen</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation type="unfinished">&amp;Gesamter Bildschirm</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation type="unfinished">&amp;Vertikal spiegeln</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation type="unfinished">&amp;Aus Zwischenablage einfügen</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation type="unfinished">&amp;Diaschau</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation type="unfinished">&amp;Löschen</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished">Zeige Miniaturen</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translatorcomment>Übersetzung von &apos;file&apos; weggelassen, da redundant.</translatorcomment>
<translation type="unfinished">Eigenschaften</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation type="unfinished">&amp;Datei</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation type="unfinished">&amp;Hilfe</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation type="unfinished">Gehe zu</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation type="unfinished">&amp;Ansicht</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation type="unfinished">&amp;Bearbeiten</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished">Werkzeugleiste</translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation type="unfinished">Vorgaben</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished">Symboldesign:</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished">Normale Hintergrundfarbe:</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished">Vollbild-Hintergrundfarbe:</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished">Diaschau Bildwechsel (Sekunden):</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished">Allgemein</translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation type="unfinished">Bildschirmfoto</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation type="unfinished">Erstelle ein Bildschirmfoto</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation type="unfinished">Bereich</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation type="unfinished">Genzer Bildschirm</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation type="unfinished">Nur aktuelles Fenster</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation type="unfinished">Einschließlich Mauszeiger</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation type="unfinished"> Sekunden</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation type="unfinished">Verzögerung:</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation type="unfinished">Einschließlich Fenstertitel und Rahmen</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,4 @@
#Translations
Name[el]=LXImage
GenericName[el]=Προβολέας εικόνων
Comment[el]=Ο προβολέας εικόνων του LXQt

View File

@ -1,438 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="es">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation>Capturar la pantalla</translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation>[ARCHIVO1, ARCHIVO2, ]</translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation>Acerca de</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation>LXImage: un visor de imágenes sencillo y rápido
Copyright © 2013
Proyecto LXDE: http://lxde.org/
Autores:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation>Abrir un archivo</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation>Imágenes (%1)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation>Guardar el archivo</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation>%1 (cargando) Visor de imágenes</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation>%1 (falló la carga) Visor de imágenes</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation>%1 (%2 × %3) Visor de imágenes</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation>Visor de imágenes</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation>Visor de imágenes</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation>&amp;Acerca de</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation>&amp;Abrir un archivo</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation>Ctrl+O</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation>&amp;Guardar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation>G&amp;uardar como</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation>Ctrl+A</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation>&amp;Cerrar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation>Ctrl+W</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation>&amp;Ampliar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation>Ctrl++</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation>&amp;Reducir</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation>Ctrl+</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation>&amp;Copiar al portapapeles</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation>Archivo siguiente</translation>
</message>
<message>
<source>Right</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation>Archivo anterior</translation>
</message>
<message>
<source>Left</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation>Tamaño original</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation>A&amp;justar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation>&amp;Girar a la derecha</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation>G&amp;irar a la izquierda</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation>P&amp;referencias</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation>&amp;Imprimir</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation>Primer archivo</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation>Inicio</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation>Último archivo</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation>Fin</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation>Ventana &amp;nueva</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation>Ctrl+N</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation>Voltear &amp;horizontalmente</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation>Capturar la pantalla</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation>Pa&amp;ntalla completa</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation>F11</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation>Voltear &amp;verticalmente</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation>&amp;Pegar del portapapeles</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation>Pa&amp;se de diapositivas</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation>&amp;Eliminar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation>Supr</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation>&amp;Archivo</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation>Ay&amp;uda</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation>Ir</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation>&amp;Ver</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation>&amp;Editar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>toolBar</source>
<translation type="vanished">Barra de herramientas</translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation>Preferencias</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>TODO: Add configuration options here</source>
<translation type="vanished">Por hacer: Añadir opciones de configuración aquí</translation>
</message>
<message>
<source>Tab 1</source>
<translation type="vanished">Pestaña 1</translation>
</message>
<message>
<source>Tab 2</source>
<translation type="vanished">Pestaña 2</translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation>Captura de pantalla</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation>Capturar la pantalla</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation>Región</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation>Toda la pantalla</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation>Solo la ventana actual</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation>Incluir el puntero del ratón</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation> segundos</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation>Retardo:</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation>Incluir el marco y el título de la ventana</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,4 @@
#Translation
Name[fr]=LXImage
GenericName[fr]=Visionneuse d'images
Comment[fr]=Visionneuse d'images de LXQt

View File

@ -1,438 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="gl">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation>Obter unha captura de pantalla</translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation>[FICHEIRO1, FICHEIRO2,...]</translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation>Sobre</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation>LXImage - un visor de imaxes rápido e sinxelo
Copyright (C) 2013
LXDE Project: http://lxde.org/
Autores:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation>Abrir ficheiro</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation>Ficheiros de imaxe (%1)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation>Gardar o ficheiro</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation>%1 (Cargando...) - visor de imaxes</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation>%1 (Fallou a carga) - visor de imaxes</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation>%1 (%2x%3) - visor de imaxes</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation>Visor de imaxes</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation>Visor de imaxes</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation>&amp;Sobre</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation>&amp;Abrir ficheiro</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation>Ctrl+O</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation>&amp;Gardar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation>Gardar &amp;como</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation>Ctrl+A</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation>&amp;Pechar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation>Ctrl+W</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation>A&amp;chegar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation>Ctrl++</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation type="unfinished">A&amp;fastar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation>Ctrl+-</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation>&amp;Copiar ao portapapeis</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation>Ficheiro seguinte</translation>
</message>
<message>
<source>Right</source>
<translation type="vanished">Dereita</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation>Ficheiro anterior</translation>
</message>
<message>
<source>Left</source>
<translation type="vanished">Esquerda</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation>Tamaño orixinal</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation>A&amp;xustar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation>Xirar en sentido &amp;horario</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation>Xirar en sentido &amp;antihorario</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation>P&amp;referencias</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation>Im&amp;primir</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation>Primeiro ficheiro</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation>Cartafol persoal</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation>Último ficheiro</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation>Fin</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation>&amp;Nova xanela</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation>Ctrl+N</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation>Inverter na &amp; horizontal</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation>Captura de pantalla</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation>Pantalla c&amp;ompleta</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation>F11</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation>Inverter na &amp;vertical</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation>&amp;Pegar do portapapeis</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation>&amp;Diaporama</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation>&amp;Eliminar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation>Supr</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation>&amp;Ficheiro</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation>&amp;Axuda</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation>Ir a</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation>&amp;Ver</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation>&amp;Editar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>toolBar</source>
<translation type="obsolete">Barra de ferramentas</translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation>Preferencias</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>TODO: Add configuration options here</source>
<translation type="vanished">Por facer: Engadir aquí as opcións de configuración</translation>
</message>
<message>
<source>Tab 1</source>
<translation type="vanished">Lapela 1</translation>
</message>
<message>
<source>Tab 2</source>
<translation type="vanished">Lapela 2</translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation>Captura de pantalla</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation>Obter unha captura de pantalla</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation>Área</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation>Pantalla completa</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation> a xanela actual</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation>Incluír o punteiro do rato</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation> segundos</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation>Demora:</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation>Incluír o marco e o título da xanela</translation>
</message>
</context>
</TS>

View File

@ -1,438 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="hr">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation>Napravi sliku zaslona</translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation>[DATOTEKA1, DATOTEKA2,...]</translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation>O programu</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation>LXImage - jednostavni i brzi preglednik slika
Autorska prava (C) 2013
LXDE Project: http://lxde.org/
Autori:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation>Otvori datoteku</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation>Datoteke slika (%1)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation>Spremi datoteku</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation>%1 (Učitavam...) - Preglednik slika</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation>%1 (neuspjelo učitavanje) - Pregledmik slika</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation>%1 (%2x%3) - Preglednik slika</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation>Preglednik slika</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation>Preglednik slika</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation>&amp;O programu</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation>&amp;Otvori datoteku</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation>Ctrl+O</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation>&amp;Spremi</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation>Spremi &amp;kao</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation>Ctrl+A</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation>&amp;Zatvori</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation>Ctrl+W</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation>Ctrl++</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation>Ctrl+-</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation>Slijedeća datoteka</translation>
</message>
<message>
<source>Right</source>
<translation type="vanished">Desno</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation>Prethodna datoteka</translation>
</message>
<message>
<source>Left</source>
<translation type="vanished">Lijevo</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation>Izvorna veličina</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation>&amp;Rotiraj u smjeru kazaljke na satu</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation>Rotiraj &amp;obrnuto od smjera kazaljke na satu</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation>O&amp;sobitosti</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation>&amp;Ispis</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation>Prva datoteka</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation>Osobna mapa</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation>Zadnja datoteka</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation>Kraj</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation>&amp;Novi prozor</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation>Ctrl+N</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation>Obrni &amp;vodoravno</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation>Uhvati sliku zaslona</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation>C&amp;ijeli zaslon</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation>F11</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation>Obrni &amp;okomito</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation>&amp;Klizni prikaz</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation>&amp;Izbriši</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation>Del</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation>&amp;Datoteka</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation>&amp;Pomoć</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation>Idi</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation>&amp;Pogled</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation>&amp;Uredi</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>toolBar</source>
<translation type="obsolete">alatna traka</translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation>Osobitosti</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>TODO: Add configuration options here</source>
<translation type="vanished">TODO: Dodaj konfiguracijske opcije ovdje</translation>
</message>
<message>
<source>Tab 1</source>
<translation type="vanished">Kartica 1</translation>
</message>
<message>
<source>Tab 2</source>
<translation type="vanished">Kartica 2</translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation>Snimka zaslona</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation>Napravi snimku zaslona</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation>Regija</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation>Cijeli zaslon</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation>Samo trenutni prozor</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation>uključi pokazivač miša</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation> sekundi</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation>Odgoda:</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation>Uključi naslov prozora i okvir</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,6 @@
[Desktop Entry]
Name[hu]=LXQt képnéző
GenericName[hu]=Képmegjelenítő
Comment[hu]=Az LXQt képnézegetője
#TRANSLATIONS_DIR=translations

View File

@ -1,440 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="id">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation>Ambil cuplikan layar</translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation>[BERKAS1, BERKAS2, ...]</translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation>Tentang</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation>LXImage - suatu penampil gambar yang sederhana dan cepat
Hak cipta (C) 2013
Projek LXDE: http://lxde.org/
Penulis:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation>Buka Berkas</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation>Berkas gambar (%1)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation>Simpan Berkas</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation>%1 (Memuat...) - Penampil Gambar</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation>%1 (Gagal Dimuat) - Penampil Gambar</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation>%1 (%2x%3) - Penampil Gambar</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation>Penampil Gambar</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation>Penampil Gambar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation>Tent&amp;ang</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation>&amp;Buka Berkas</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation>Ctrl+O</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation>&amp;Simpan</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation>Simpan Seb&amp;agai</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation>Ctrl+A</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation>&amp;Tutup</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation>Ctrl+W</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation>Per&amp;besar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation>Ctrl++</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation type="unfinished">Per&amp;kecil</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation>Ctrl+-</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation>&amp;Salin ke Papan Klip</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation>Berkas Selanjutnya</translation>
</message>
<message>
<source>Right</source>
<translation type="vanished">Kanan</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation>Berkas Sebelumnya</translation>
</message>
<message>
<source>Left</source>
<translation type="vanished">Kiri</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation>Ukuran Asli</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation>&amp;Pas</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation>Puta&amp;r Searah Jarum Jam</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation>Putar Ber&amp;lawanan Jarum Jam</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation>P&amp;referensi</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation>&amp;Cetak</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation>Berkas Pertama</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translatorcomment>asumsi: nama tombol</translatorcomment>
<translation>Home</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation>Berkas Terakhir</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translatorcomment>asumsi: nama tombol</translatorcomment>
<translation>End</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation>Je&amp;ndela Baru</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation>Ctrl+N</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation>Balikkan Arah &amp;Horisontal</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation>Ambil Cuplikan Layar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation>Layar Pen&amp;uh</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation>F11</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation>Balikkan Arah &amp;Vertikal</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation>Tem&amp;pel dari Papan Klip</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation>Pertunjukan &amp;Salindia</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation>&amp;Hapus</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation>Del</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation>&amp;Berkas</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation>B&amp;antuan</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation>Pergi</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation>&amp;Lihat</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation>&amp;Sunting</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>toolBar</source>
<translation type="obsolete">Bilah Alat</translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation>Preferensi</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>TODO: Add configuration options here</source>
<translation type="vanished">TODO: Tambahkan opsi konfigurasi di sini</translation>
</message>
<message>
<source>Tab 1</source>
<translation type="vanished">Tab 1</translation>
</message>
<message>
<source>Tab 2</source>
<translation type="vanished">Tab 2</translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation>Cuplikan layar</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation>Ambil cuplikan layar</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation>Wilayah</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation>Seluruh layar</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation>Hanya jendela saat ini</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation>Sertakan kursor tetikus</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation> detik</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation>Tundaan:</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation>Sertakan rangka dan judul jendela</translation>
</message>
</context>
</TS>

View File

@ -1,408 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="is">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -1,417 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="it" sourcelanguage="it">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation>Cattura una schermata</translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation>[File1, File2,...]</translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation>A proposito</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translatorcomment>need update...</translatorcomment>
<translation type="unfinished">LXImage - un visualizzatore immagini semplice e veloce
Copyright (C) 2013
LXDE Project: http://lxde.org/
Autor:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation>Apri file</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation>File immagini (%1)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation>Salva file</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation>%1 (Caricando...) - Visualizzatore immagini</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation>%1 (Errore in caricamento) - Visualizzatore immagini</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation>%1 (%2x%3) - Visualizzatore Immagini</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation>Visualizzatore immagini</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation>Miniature</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation>Visualizzatore immagini</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation>A &amp;proposito</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation>&amp;Apri</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translatorcomment>Shortcuts werden automatisch übersetzt</translatorcomment>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation>&amp;Salva</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation>Salva &amp;come</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation>&amp;Chiudi</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation>&amp;Ingrandisci</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation>&amp;Rimpicciolisci</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation>&amp;Copia negli appunti</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation>Prossimo</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation>Precedente</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation>Pagina giù</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation>Pagina </translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation type="unfinished">&amp;Dimensioni originiali</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation>&amp;Adatta alla finestra</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation>Gira a &amp;destra</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation>Gira a &amp;sinistra</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation>&amp;Preferenze</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation>&amp;Stampa</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation>Primo</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation>Ultimo</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation>Fine</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation>&amp;Nuova finestra</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation>Rispecchia &amp;horizzontalmente</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation>Cattura schermata</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation>&amp;Schermo intero</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation>Rispecchia &amp;verticalmente</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation>&amp;Incolla da appunti</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation>&amp;Presentazione</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation>&amp;Cestina</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished">&amp;Mostra barra miniature</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translatorcomment>Übersetzung von &apos;file&apos; weggelassen, da redundant.</translatorcomment>
<translation>Proprietà</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation>&amp;File</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation>&amp;Aiuto</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation>Vai</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation>&amp;Visualizza</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation>&amp;Modifica</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation>Barra degli strumenti</translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation>Preferenze</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation>Tema icone:</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation>Colore sfondo:</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation>Colore sfondo schermo intero:</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation>Ritardo presentazione (secondi):</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation>Generali</translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation>Schermata</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation>Catturta schermata</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation>Regione</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation>Schermo intero</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation>Finestra attuale</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation>Includi cursore</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation> secondi</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation>Ritardo:</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation>Includi cornice finestra</translation>
</message>
</context>
</TS>

View File

@ -1,438 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ja">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation></translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation>[1, 2,...]</translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation>LXImage -
Copyright (C) 2013
LXDE Project: http://lxde.org/
:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation> (%1)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation>%1 (...) - </translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation>%1 () - </translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation>%1 (%2x%3) - </translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation>(&amp;A)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation>(&amp;O)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation>Ctrl+O</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation>(&amp;S)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation>(&amp;A)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation>Ctrl+A</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation>(&amp;C)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation>Ctrl+W</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation>(&amp;I)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation>Ctrl++</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation>(&amp;O)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation>Ctrl+-</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation>(&amp;C)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation></translation>
</message>
<message>
<source>Right</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation></translation>
</message>
<message>
<source>Left</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation>(&amp;F)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation>(&amp;R)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation>(&amp;C)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation>(&amp;R)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation>(&amp;P)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation>Home</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation>End</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation>(&amp;N)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation>Ctrl+N</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation>(&amp;H)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation>(&amp;U)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation>F11</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation>(&amp;V)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation>(&amp;P)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation>(&amp;S)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation>(&amp;D)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation>Del</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation>(&amp;F)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation>(&amp;H)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation>(&amp;V)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation>(&amp;E)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>toolBar</source>
<translation type="vanished"></translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>TODO: Add configuration options here</source>
<translation type="vanished">TODO: Add configuration options here</translation>
</message>
<message>
<source>Tab 1</source>
<translation type="vanished"> 1</translation>
</message>
<message>
<source>Tab 2</source>
<translation type="vanished"> 2</translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation> </translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation>:</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation></translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,4 @@
#Translations
Name[lt]=LXImage
GenericName[lt]=Paveikslų žiūryklė
Comment[lt]=LXQt paveikslų žiūryklė

View File

@ -1,408 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="pa">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,5 @@
[Desktop Entry]
GenericName[pl]=Przeglądarka obrazów
Comment[pl]=Przeglądarka obrazów LXQt
#TRANSLATIONS_DIR=translations

View File

@ -1,438 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="pl">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation>Wykonaj zrzut ekranu</translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation>[PLIK1, PLIK2,...]</translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation>O programie</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation>LXImage - prosta i szybka przeglądarka obrazów
Prawa autorskie (C) 2013
Projekt LXDE: http://lxde.org/
Autorzy:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation>Otwórz plik</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation>Pliki obrazów (%1)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation>Zapisz plik</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation>%1 (Wczytywanie...) - Przeglądarka obrazów</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation>%1 (Błąd wczytywania) - Przeglądarka obrazów</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation>%1 (%2x%3) - Przeglądarka obrazów</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation>Przeglądarka obrazów</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation>Przeglądarka obrazów</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation>&amp;O programie</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation>O&amp;twórz plik</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation>Ctrl+O</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation>&amp;Zapisz</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation>Z&amp;apisz jako</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation>Ctrl+A</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation>&amp;Zamknij</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation>Ctrl+W</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation>Po&amp;większ</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation>Ctrl++</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation type="unfinished">Po&amp;mniejsz</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation>Ctrl+-</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation>&amp;Kopiuj do schowka</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation>Następny plik</translation>
</message>
<message>
<source>Right</source>
<translation type="vanished">W prawo</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation>Poprzedni plik</translation>
</message>
<message>
<source>Left</source>
<translation type="vanished">W lewo</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation>Rozmiar oryginalny</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation>Dopa&amp;sowanie</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation>Obróć &amp;zgodnie z ruchem wskazówek zegara</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation>Ob&amp;róć przeciwnie do ruchu wskazówek zegara</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation>Pre&amp;ferencje</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation>&amp;Drukuj</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation>Pierwszy plik</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation>Początek</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation>Ostatni plik</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation>Koniec</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation>&amp;Nowe okno</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation>Ctrl+N</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation>Od&amp;bij w poziomie</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation>Przechwyć zrzut ekranu</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation>&amp;Pełny ekran</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation>F11</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation>Odbi&amp;j w pionie</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation>&amp;Wklej ze schowka</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation>Pokaz s&amp;lajdów</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation>&amp;Usuń</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation>Usuń</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation>&amp;Plik</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation>Pomo&amp;c</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation>Przejdź</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation>&amp;Widok</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation>&amp;Edycja</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>toolBar</source>
<translation type="obsolete">Pasek narzędzi</translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation>Ustawienia</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>TODO: Add configuration options here</source>
<translation type="vanished">Do zrobienia: Dodać tutaj opcje konfiguracyjne</translation>
</message>
<message>
<source>Tab 1</source>
<translation type="vanished">Karta 1</translation>
</message>
<message>
<source>Tab 2</source>
<translation type="vanished">Karta 2</translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation>Zrzut ekranu</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation>Wykonaj zrzut ekranu</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation>Obszar</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation>Cały ekran</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation>Tylko bieżące okno</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation>Dołącz kursor myszy</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation> sekund</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation>Opóźnienie:</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation>Dołącz tytuł okna i obramowanie</translation>
</message>
</context>
</TS>

View File

@ -1,4 +1,4 @@
#Translations #Translations
Name[pt]=LXImage-Qt Name[pt]=LXImage-Qt
GenericName[pt]=Visualizador de imagens GenericName[pt]=Visualizador de imagens
Comment[pt]=O visualizador de imagens do LxQt Comment[pt]=O visualizador de imagens do LXQt

View File

@ -1,438 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="pt">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation>Obter captura de ecrã</translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation>[Ficheiro1, ficheiro2,...]</translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation>Sobre</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation>LXImage - um visualizador de imagens simples e rápido
Direitos de autor (C) 2013-2015
Projeto LXDE: http://lxde.org/
Autor:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation>Abrir ficheiro</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation>Ficheiros de imagem (%1)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation>Gravar ficheiro</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation>%1 (carregamento...) - Visualizador de imagens</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation>%1 (falha ao carregar) - Visualizador de imagens</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation>%1 (%2x%3) - Visualizador de imagens</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation>Visualizador de imagens</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation>Miniaturas</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation>Visualizador de imagens</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation>&amp;Sobre</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation>A&amp;brir ficheiro</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation>Ctrl+O</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation>&amp;Gravar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation>Gravar &amp;como</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation>Ctrl+A</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation>Fe&amp;char</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation>Ctrl+W</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation>Ampl&amp;iar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation>Ctrl++</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation>Redu&amp;zir</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation>Ctrl+-</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation>&amp;Copiar para a área de transferência</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation>Próximo ficheiro</translation>
</message>
<message>
<source>Right</source>
<translation>Direita</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation>Ficheiro anterior</translation>
</message>
<message>
<source>Left</source>
<translation>Esquerda</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation>PageDown</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation>PageUp</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation>Tamanho original</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation>Aj&amp;ustar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation>&amp;Rodar à direita</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation>Rodar à &amp;esquerda</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation>P&amp;referências</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation>Im&amp;primir</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation>Ctrl+P</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation>Primeiro ficheiro</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation>Home</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation>Último ficheiro</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation>End</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation>&amp;Nova janela</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation>Ctrl+N</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation>Inversão &amp;horizontal</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation>Captura de ecrã</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation>Ecrã co&amp;mpleto</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation>F11</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation>Inversão &amp;vertical</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation>Colar da área de tran&amp;sferência</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation>Apre&amp;sentação</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation>E&amp;liminar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation>Del</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation>Mostrar miniaturas</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation>Propriedades do ficheiro</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation>&amp;Ficheiro</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation>Aj&amp;uda</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation>Ir</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation>&amp;Ver</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation>&amp;Editar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation>Barra de ferramentas</translation>
</message>
<message>
<source>toolBar</source>
<translation type="obsolete">Barra de ferramentas</translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation>Preferências</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation>Tema de ícones:</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation>Cor de fundo normal:</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation>Cor de fundo em ecrã completo:</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation>Intervalo da apresentação (segundos):</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation>Geral</translation>
</message>
<message>
<source>TODO: Add configuration options here</source>
<translation>Tarefas: Adicionar opções de configuração</translation>
</message>
<message>
<source>Tab 1</source>
<translation>Separador 1</translation>
</message>
<message>
<source>Tab 2</source>
<translation>Separador 2</translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation>Captura de ecrã</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation>Obter captura de ecrã</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation>Região</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation>Todo o ecrã</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation>Apenas janela atual</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation>Incluir cursor do rato</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation>segundos</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation>Atraso:</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation>Incluir título e moldura da janela</translation>
</message>
</context>
</TS>

View File

@ -1,439 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="pt_BR">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation>Capturar uma imagem da tela</translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation>[FILE1, FILE2,...]</translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation>Sobre</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation>LXImage - é um simples e rápido visualizador de imagens
Copyright (C) 2013
Projeto LXDE: http://lxde.org/
Autores:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation>Abrir Arquivo</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation>Arquivos de Images (1%)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation>Salvar Arquivo</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation>%1 (Carregando...) - Visualização da Imagem</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation>%1 (Falha ao Carregar) - Visualização da Imagem</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation>%1 (%2x%3) - Visualização da Imagem</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation>Visualizador de Imagens</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation>Visualizador de Imagens</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation>So&amp;bre</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation>Abrir &amp;Arquivo</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation>Ctrl+O</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation>&amp;Salvar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation>Sal&amp;var Como</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation>Ctrl+A</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation>Fe&amp;char</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation>Ctrl+W</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation>Ampl&amp;iar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation>Ctrl++</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation>Redu&amp;zir</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation>Ctrl+-</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation>&amp;Copiar para a Área de Transferência</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation>Próximo Arquivo</translation>
</message>
<message>
<source>Right</source>
<translation type="vanished">Direita</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation>Arquivo Anterior</translation>
</message>
<message>
<source>Left</source>
<translation type="vanished">Esquerda</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation>Tamanho Original</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation>Ajustar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation>&amp;Rotacionar em sentido horário</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation>Rota&amp;cionar em sentido anti-horário</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation>P&amp;referências</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation>Im&amp;primir</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation>Primeiro arquivo</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation>Inicio</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation>Último arquivo</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation>Fim</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation>&amp;Nova Janela</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation>Ctrl+N</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation>Espelhar horizontalmente</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation>Capturar Tela</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation>&amp;Tela Cheia</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation>F11</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation>Espelhar &amp;Verticalmente</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translatorcomment>Has a problem, no similar caracter for shortcut.</translatorcomment>
<translation>Colar da Área de Transferência</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation>Apresentação de Slides</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation>&amp;Excluir</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation>Remover</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation>&amp;Arquivo</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation>&amp;Ajuda</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation>Ir</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation>&amp;Visualizar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation>&amp;Editar</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>toolBar</source>
<translation type="vanished">Barra de Ferramentas</translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation>Preferências</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>TODO: Add configuration options here</source>
<translation type="vanished">FAZER: Adicionar opções de configurações aqui</translation>
</message>
<message>
<source>Tab 1</source>
<translation type="vanished">Aba 1</translation>
</message>
<message>
<source>Tab 2</source>
<translation type="vanished">Aba 2</translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation>Captura de tela</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation>Capturar a tela</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation>Região</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation>Tela Inteira</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation>Somente a janela ativa</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation>Incluir o cursor do mouse</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation> segundos</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation>Atraso:</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation>Incluir título da janela e moldura</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,4 @@
#Translations
Name[ru]=LXImage
GenericName[ru]=Просмотрщик изображений
Comment[ru]=Просмотрщик изображений LXQt

View File

@ -1,408 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ru">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -1,497 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>../data/lxinput.desktop.in.h:1</name>
<message>
<source>Keyboard and Mouse</source>
<translation type="obsolete">Tangentbord och mus</translation>
</message>
</context>
<context>
<name>../data/lxinput.desktop.in.h:2</name>
<message>
<source>Configure keyboard, mouse, and other input devices</source>
<translation type="obsolete">Inställningar för tangentbord, mus och andra inmatningsenheter</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:1</name>
<message>
<source>Input Device Preferences</source>
<translation type="obsolete">Egenskaper för inmatningsenhet</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:10</name>
<message>
<source>Mouse</source>
<translation type="obsolete">Mus</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:11</name>
<message>
<source>Delay before each key starts repeating</source>
<translation type="obsolete">Tid innan varje tangent repeteras</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:12</name>
<message>
<source>Repeat delay:</source>
<translation type="obsolete">Tid innan upprepning:</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:13</name>
<message>
<source>Interval between each key repeat</source>
<translation type="obsolete">Intervall mellan upprening av tangenter</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:14</name>
<message>
<source>Long</source>
<translation type="obsolete">Lång</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:15</name>
<message>
<source>Short</source>
<translation type="obsolete">Kort</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:16</name>
<message>
<source>Repeat interval:</source>
<translation type="obsolete">Tid mellan upprepningar:</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:17</name>
<message>
<source>Type in the following box to test your keyboard settings</source>
<translation type="obsolete">För att pröva dina inställningar kan du skriva i följande ruta</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:18</name>
<message>
<source>&lt;b&gt;Character Repeat&lt;/b&gt;</source>
<translation type="obsolete">&lt;b&gt;Teckenupprepning&lt;/b&gt;</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:19</name>
<message>
<source>Beep when there is an error of keyboard input</source>
<translation type="obsolete">Avge ett pip när ett fel uppstår vid tangentbordsinmatning</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:2</name>
<message>
<source>Sensitivity:</source>
<translation type="obsolete">Känslighet:</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:20</name>
<message>
<source>&lt;b&gt;Keyboard layout&lt;/b&gt;</source>
<translation type="obsolete">&lt;b&gt;Tangentbordsupplägg&lt;/b&gt;</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:21</name>
<message>
<source>Keyboard</source>
<translation type="obsolete">Tangentbord</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:22</name>
<message>
<source>Touch Pad</source>
<translation type="obsolete">Pekplatta</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:3</name>
<message>
<source>High</source>
<translation type="obsolete">Hög</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:4</name>
<message>
<source>Low</source>
<translation type="obsolete">Låg</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:5</name>
<message>
<source>Fast</source>
<translation type="obsolete">Snabb</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:6</name>
<message>
<source>Slow</source>
<translation type="obsolete">Långsam</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:7</name>
<message>
<source>Acceleration:</source>
<translation type="obsolete">Acceleration:</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:8</name>
<message>
<source>&lt;b&gt;Motion&lt;/b&gt;</source>
<translation type="obsolete">&lt;b&gt;Förflyttning&lt;/b&gt;</translation>
</message>
</context>
<context>
<name>../data/lxinput.ui.h:9</name>
<message>
<source>Left handed (Swap left and right mouse buttons)</source>
<translation type="obsolete">Vänsterhänt (byt funktioner för vänster och höger musknapp)</translation>
</message>
</context>
<context>
<name>LxImage::Application</name>
<message>
<source>Take a screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[FILE1, FILE2,...]</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Image files (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Save File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 (Loading...) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 (%2x%3) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<source>Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Open File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ctrl+O</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Save</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ctrl+S</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Save &amp;As</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ctrl+A</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ctrl+W</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Zoom &amp;In</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ctrl++</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Zoom &amp;Out</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ctrl+-</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Copy to Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Next File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Previous File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Original Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Fit</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Rotate Clockwise</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rotate &amp;Counterclockwise</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>P&amp;references</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Print</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>First File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Last File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>End</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;New Window</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ctrl+N</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Flip &amp;Horizontally</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Capture Screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>F&amp;ull Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>F11</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Flip &amp;Vertically</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Paste from Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Slide Show</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Del</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Help</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Go</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;View</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<source>Preferences</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>General</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<source>Screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Take a screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Region</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Whole screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Current window only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Include mouse cursor</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Delay:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Include window title and frame</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -1,408 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -1,438 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="uk">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation>Зробити знімок</translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation>[ФАЙЛ1, ФАЙЛ2,...]</translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation>Про програму</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation>LXImage - простий та швидкий переглядач зображень
Copyright (C) 2013
Проект LXDE: http://lxde.org/
Автори:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation>Відкрити файл</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation>Файли зображень (%1)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation>Зберегти файл</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation>%1 (Завантаження...) - Переглядач зображень</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation>%1 (Невдача завантаження) - Переглядач зображень</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation>%1 (%2x%3) - Переглядач зображень</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation>Переглядач зображень</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation>Переглядач зображень</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation>&amp;Про програму</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation>&amp;Відкрити файл</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation>Ctrl+O</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation>&amp;Зберегти</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation>Зберегти &amp;як</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation>Ctrl+A</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation>&amp;Закрити</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation>Ctrl+W</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation>З&amp;більшити</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation>Ctrl++</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation type="unfinished">&amp;Зменшити</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation>Ctrl+-</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation>&amp;Копіювати до буфера</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation>Наступний файл</translation>
</message>
<message>
<source>Right</source>
<translation type="vanished">Праворуч</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation>Попередній Файл</translation>
</message>
<message>
<source>Left</source>
<translation type="vanished">Ліворуч</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation>Оригінальний розмір</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation>&amp;Підігнати</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation>&amp;Обернути за год. стрілкою</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation>Обернути проти &amp;год. стрілки</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation>На&amp;лаштування</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation>&amp;Друк</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation>Перший файл</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation>Home</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation>Останній файл</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation>End</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation>&amp;Нове вікно</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation>Ctrl+N</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation>Віддзеркалити &amp;горизонтально</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation>Зробити знімок екрана</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation>П&amp;овний екран</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation>F11</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation>Віддзеркалити &amp;вертикально</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation>&amp;Вставити з буфера обміну</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation>&amp;Показ слайдів</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation>В&amp;илучити</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation>Del</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation>&amp;Файл</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation>&amp;Довідка</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation>Перейти</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation>П&amp;ерегляд</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation>&amp;Редагування</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>toolBar</source>
<translation type="obsolete">Панель інструментів</translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation>Налаштування</translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>TODO: Add configuration options here</source>
<translation type="vanished">Далі буде...</translation>
</message>
<message>
<source>Tab 1</source>
<translation type="vanished">Вкладка 1</translation>
</message>
<message>
<source>Tab 2</source>
<translation type="vanished">Вкладка 2</translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation>Знімок екрану</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation>Зробити знімок</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation>Регіон</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation>Екран цілком</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation>Лише поточне вікно</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation>Включаючи вказівник миші</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation> секунд</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation>Затримка:</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation>Включаючи заголовок вікна та кадр</translation>
</message>
</context>
</TS>

View File

@ -1,438 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation></translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation>[1, 2,...]</translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation>LXImage -
(C) 2013
LXDE http://lxde.org/
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation> (%1)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation>%1 (...) - </translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation>%1 () - </translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation>%1 (%2x%3) - </translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation>(&amp;A)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation>(&amp;O)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation>Ctrl+O</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation>(&amp;S)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation>(&amp;A)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation>Ctrl+A</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation>(&amp;C)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation>Ctrl+W</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation>(&amp;I)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation>Ctrl++</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation>(&amp;O)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation>Ctrl+-</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation>(&amp;C)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation></translation>
</message>
<message>
<source>Right</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation></translation>
</message>
<message>
<source>Left</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation>(&amp;F)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation>(&amp;R)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation>(&amp;C)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation>(&amp;R)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation>(&amp;P)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation>(&amp;N)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation>Ctrl+N</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation>(&amp;H)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation>(&amp;U)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation>F11</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation>(&amp;V)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation>(&amp;P)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation>(&amp;S)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation>(&amp;D)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation>(&amp;F)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation>(&amp;H)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation>(&amp;V)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation>(&amp;E)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>toolBar</source>
<translation type="vanished"></translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>TODO: Add configuration options here</source>
<translation type="vanished">TODO: Add configuration options here</translation>
</message>
<message>
<source>Tab 1</source>
<translation type="vanished"> 1</translation>
</message>
<message>
<source>Tab 2</source>
<translation type="vanished"> 2</translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation> </translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation></translation>
</message>
</context>
</TS>

View File

@ -1,426 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_TW">
<context>
<name>LxImage::Application</name>
<message>
<location filename="../application.cpp" line="112"/>
<source>Take a screenshot</source>
<translation></translation>
</message>
<message>
<location filename="../application.cpp" line="113"/>
<source>[FILE1, FILE2,...]</source>
<translation>[12...]</translation>
</message>
</context>
<context>
<name>LxImage::MainWindow</name>
<message>
<location filename="../mainwindow.cpp" line="144"/>
<source>About</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="145"/>
<source>LXImage - a simple and fast image viewer
Copyright (C) 2013
LXDE Project: http://lxde.org/
Authors:
Hong Jen Yee (PCMan) &lt;pcman.tw@gmail.com&gt;</source>
<translation>LXImage - r
(C) 2013
LXDE 專案: http://lxde.org/
Authors:
(PCMan) &lt;pcman.tw@gmail.com&gt;</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="238"/>
<source>Open File</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="239"/>
<location filename="../mainwindow.cpp" line="260"/>
<source>Image files (%1)</source>
<translation> (%1)</translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="260"/>
<source>Save File</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="516"/>
<source>%1 (Loading...) - Image Viewer</source>
<translation>%1 (...) - </translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="521"/>
<source>%1 (Failed to Load) - Image Viewer</source>
<translation>%1 () - </translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="525"/>
<source>%1 (%2x%3) - Image Viewer</source>
<translation>%1 (%2x%3) - </translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="535"/>
<source>Image Viewer</source>
<translation></translation>
</message>
<message>
<location filename="../mainwindow.cpp" line="710"/>
<source>Thumbnails</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="412"/>
<source>Image Viewer</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="413"/>
<source>&amp;About</source>
<translation>(&amp;A)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="414"/>
<source>&amp;Open File</source>
<translation>(&amp;O)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="415"/>
<source>Ctrl+O</source>
<translation>Ctrl+O</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="416"/>
<source>&amp;Save</source>
<translation>(&amp;S)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="417"/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="418"/>
<source>Save &amp;As</source>
<translation>(&amp;A)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="419"/>
<source>Ctrl+A</source>
<translation>Ctrl+A</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="420"/>
<source>&amp;Close</source>
<translation>(&amp;C)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="421"/>
<source>Ctrl+W</source>
<translation>Ctrl+W</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="422"/>
<source>Zoom &amp;In</source>
<translation>(&amp;I)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="423"/>
<source>Ctrl++</source>
<translation>Ctrl++</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="424"/>
<source>Zoom &amp;Out</source>
<translation type="unfinished">(&amp;O)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="425"/>
<source>Ctrl+-</source>
<translation>Ctrl+-</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="426"/>
<source>&amp;Copy to Clipboard</source>
<translation>簿(&amp;C)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="427"/>
<location filename="../../build/src/ui_mainwindow.h" line="429"/>
<source>Next File</source>
<translation></translation>
</message>
<message>
<source>Right</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="432"/>
<location filename="../../build/src/ui_mainwindow.h" line="434"/>
<source>Previous File</source>
<translation></translation>
</message>
<message>
<source>Left</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="431"/>
<source>PgDown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="436"/>
<source>PgUp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="437"/>
<source>Original Size</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="438"/>
<source>&amp;Fit</source>
<translation>(&amp;F)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="439"/>
<source>&amp;Rotate Clockwise</source>
<translation>(&amp;R)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="440"/>
<source>Rotate &amp;Counterclockwise</source>
<translation>(&amp;C)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="441"/>
<source>P&amp;references</source>
<translation>(&amp;R)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="442"/>
<source>&amp;Print</source>
<translation>(&amp;P)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="443"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="444"/>
<source>First File</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="445"/>
<source>Home</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="446"/>
<source>Last File</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="447"/>
<source>End</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="448"/>
<source>&amp;New Window</source>
<translation>(&amp;N)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="449"/>
<source>Ctrl+N</source>
<translation>Ctrl+N</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="450"/>
<source>Flip &amp;Horizontally</source>
<translation>(&amp;H)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="451"/>
<source>Capture Screenshot</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="452"/>
<source>F&amp;ull Screen</source>
<translation>(&amp;U)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="453"/>
<source>F11</source>
<translation>F11</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="454"/>
<source>Flip &amp;Vertically</source>
<translation>(&amp;V)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="455"/>
<source>&amp;Paste from Clipboard</source>
<translation>簿(&amp;P)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="456"/>
<source>&amp;Slide Show</source>
<translation>(&amp;S)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="457"/>
<source>&amp;Delete</source>
<translation>(&amp;D)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="458"/>
<source>Del</source>
<translation>Del</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="459"/>
<source>Show Thumbnails</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="460"/>
<source>File Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="461"/>
<source>&amp;File</source>
<translation>(&amp;F)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="462"/>
<source>&amp;Help</source>
<translation>(&amp;H)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="463"/>
<source>Go</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="464"/>
<source>&amp;View</source>
<translation>(&amp;V)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="465"/>
<source>&amp;Edit</source>
<translation>(&amp;E)</translation>
</message>
<message>
<location filename="../../build/src/ui_mainwindow.h" line="466"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>toolBar</source>
<translation type="obsolete"></translation>
</message>
</context>
<context>
<name>PreferencesDialog</name>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="125"/>
<source>Preferences</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="126"/>
<source>Icon theme:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="127"/>
<source>Normal background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="128"/>
<source>Fullscreen background color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="131"/>
<source>Slide show interval (seconds):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../build/src/ui_preferencesdialog.h" line="132"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ScreenshotDialog</name>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="123"/>
<source>Screenshot</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="124"/>
<source>Take a screenshot</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="125"/>
<source>Region</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="126"/>
<source>Whole screen</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="127"/>
<source>Current window only</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="128"/>
<source>Include mouse cursor</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="129"/>
<source> seconds</source>
<translation></translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="130"/>
<source>Delay:</source>
<translation>:</translation>
</message>
<message>
<location filename="../../build/src/ui_screenshotdialog.h" line="131"/>
<source>Include window title and frame</source>
<translation></translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,56 @@
/*
LxImage - image viewer and screenshot tool for lxqt
Copyright (C) 2017 Nathan Osman <nathan@quickmediasolutions.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <QHttpMultiPart>
#include <QHttpPart>
#include <QNetworkRequest>
#include <QUrl>
#include <QUrlQuery>
#include "imageshackprovider.h"
#include "imageshackupload.h"
using namespace LxImage;
const QString gUploadURL = "https://api.imageshack.com/v2/images";
const QByteArray gAPIKey = "4DINORVXbcbda9ac64b424a0e6b37caed4cf3b8b";
Upload *ImageShackProvider::upload(QIODevice *device)
{
// Construct the URL that will be used for the upload
QUrlQuery query;
query.addQueryItem("api_key", gAPIKey);
QUrl url(gUploadURL);
url.setQuery(query);
// The first (and only) part is the file upload
QHttpPart filePart;
filePart.setBodyDevice(device);
filePart.setHeader(
QNetworkRequest::ContentDispositionHeader,
"form-data; name=\"file\"; filename=\"upload.jpg\""
);
// Create the multipart and append the file part
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType, device);
multiPart->append(filePart);
// Start the request and wrap it in an ImageShackUpload
return new ImageShackUpload(sManager.post(QNetworkRequest(url), multiPart));
}

View File

@ -0,0 +1,43 @@
/*
LxImage - image viewer and screenshot tool for lxqt
Copyright (C) 2017 Nathan Osman <nathan@quickmediasolutions.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef LXIMAGE_IMAGESHACKPROVIDER_H
#define LXIMAGE_IMAGESHACKPROVIDER_H
#include "provider.h"
namespace LxImage {
class Upload;
/**
* @brief Create uploads to ImageShack's API
*/
class ImageShackProvider : public Provider
{
Q_OBJECT
public:
virtual Upload *upload(QIODevice *device);
};
}
#endif // LXIMAGE_IMAGESHACKPROVIDER_H

View File

@ -0,0 +1,55 @@
/*
LxImage - image viewer and screenshot tool for lxqt
Copyright (C) 2017 Nathan Osman <nathan@quickmediasolutions.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include "imageshackupload.h"
using namespace LxImage;
ImageShackUpload::ImageShackUpload(QNetworkReply *reply)
: Upload(reply)
{
}
void ImageShackUpload::processReply(const QByteArray &data)
{
// Obtain the root object from the JSON response
QJsonObject object(QJsonDocument::fromJson(data).object());
// Attempt to retrieve the link
bool success = object.value("success").toBool();
QString link = object.value("result").toObject().value("images").toArray()
.at(0).toObject().value("direct_link").toString();
// Check for success
if (!success || link.isNull()) {
QString errorMessage = object.value("error").toObject()
.value("error_message").toString();
if (errorMessage.isNull()) {
errorMessage = tr("unknown error response");
}
Q_EMIT error(errorMessage);
} else {
Q_EMIT completed("https://" + link);
}
}

View File

@ -0,0 +1,45 @@
/*
LxImage - image viewer and screenshot tool for lxqt
Copyright (C) 2017 Nathan Osman <nathan@quickmediasolutions.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef LXIMAGE_IMAGESHACKUPLOAD_H
#define LXIMAGE_IMAGESHACKUPLOAD_H
#include "upload.h"
namespace LxImage {
/**
* @brief Upload to ImageShack's API
*/
class ImageShackUpload : public Upload
{
Q_OBJECT
public:
explicit ImageShackUpload(QNetworkReply *reply);
protected:
virtual void processReply(const QByteArray &data);
};
}
#endif // LXIMAGE_IMAGESHACKUPLOAD_H

View File

@ -0,0 +1,42 @@
/*
LxImage - image viewer and screenshot tool for lxqt
Copyright (C) 2017 Nathan Osman <nathan@quickmediasolutions.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QUrl>
#include "imgurprovider.h"
#include "imgurupload.h"
using namespace LxImage;
const QUrl gUploadURL("https://api.imgur.com/3/upload.json");
const QByteArray gAuthHeader = "Client-ID 63ff047cd8bcf9e";
const QByteArray gTypeHeader = "application/x-www-form-urlencoded";
Upload *ImgurProvider::upload(QIODevice *device)
{
// Create the request with the correct HTTP headers
QNetworkRequest request(gUploadURL);
request.setHeader(QNetworkRequest::ContentTypeHeader, gTypeHeader);
request.setRawHeader("Authorization", gAuthHeader);
// Start the request and wrap it in an ImgurUpload
return new ImgurUpload(sManager.post(request, device));
}

View File

@ -0,0 +1,41 @@
/*
LxImage - image viewer and screenshot tool for lxqt
Copyright (C) 2017 Nathan Osman <nathan@quickmediasolutions.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef LXIMAGE_IMGURPROVIDER_H
#define LXIMAGE_IMGURPROVIDER_H
#include "provider.h"
namespace LxImage {
/**
* @brief Create uploads to Imgur's API
*/
class ImgurProvider : public Provider
{
Q_OBJECT
public:
virtual Upload *upload(QIODevice *device);
};
}
#endif // LXIMAGE_IMGURPROVIDER_H

View File

@ -0,0 +1,52 @@
/*
LxImage - image viewer and screenshot tool for lxqt
Copyright (C) 2017 Nathan Osman <nathan@quickmediasolutions.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <QJsonDocument>
#include <QJsonObject>
#include "imgurupload.h"
using namespace LxImage;
ImgurUpload::ImgurUpload(QNetworkReply *reply)
: Upload(reply)
{
}
void ImgurUpload::processReply(const QByteArray &data)
{
// Obtain the root object from the JSON response
QJsonObject object(QJsonDocument::fromJson(data).object());
// Attempt to retrieve the value for "success" and "data->link"
bool success = object.value("success").toBool();
QJsonObject dataObject = object.value("data").toObject();
QString dataLink = dataObject.value("link").toString();
QString dataError = dataObject.value("error").toString();
// Ensure that "success" is true & link is valid, otherwise throw an error
if (!success || dataLink.isNull()) {
if (dataError.isNull()) {
dataError = tr("unknown error response");
}
Q_EMIT error(dataError);
} else {
Q_EMIT completed(dataLink);
}
}

43
src/upload/imgurupload.h Normal file
View File

@ -0,0 +1,43 @@
/*
LxImage - image viewer and screenshot tool for lxqt
Copyright (C) 2017 Nathan Osman <nathan@quickmediasolutions.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef LXIMAGE_IMGURUPLOAD_H
#define LXIMAGE_IMGURUPLOAD_H
#include "upload.h"
namespace LxImage {
/**
* @brief Process uploads to Imgur's API
*/
class ImgurUpload : public Upload
{
Q_OBJECT
public:
explicit ImgurUpload(QNetworkReply *reply);
virtual void processReply(const QByteArray &data);
};
}
#endif // LXIMAGE_IMGURUPLOAD_H

24
src/upload/provider.cpp Normal file
View File

@ -0,0 +1,24 @@
/*
LxImage - image viewer and screenshot tool for lxqt
Copyright (C) 2017 Nathan Osman <nathan@quickmediasolutions.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "provider.h"
using namespace LxImage;
QNetworkAccessManager Provider::sManager;

54
src/upload/provider.h Normal file
View File

@ -0,0 +1,54 @@
/*
LxImage - image viewer and screenshot tool for lxqt
Copyright (C) 2017 Nathan Osman <nathan@quickmediasolutions.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef LXIMAGE_PROVIDER_H
#define LXIMAGE_PROVIDER_H
#include <QIODevice>
#include <QNetworkAccessManager>
#include <QObject>
namespace LxImage {
class Upload;
/**
* @brief Base class for providers
*/
class Provider : public QObject
{
Q_OBJECT
public:
/**
* @brief Upload the provided data
* @param device reader for uploaded data from
* @return newly created upload
*/
virtual Upload *upload(QIODevice *device) = 0;
protected:
static QNetworkAccessManager sManager;
};
}
#endif // LXIMAGE_PROVIDER_H

57
src/upload/upload.cpp Normal file
View File

@ -0,0 +1,57 @@
/*
LxImage - image viewer and screenshot tool for lxqt
Copyright (C) 2017 Nathan Osman <nathan@quickmediasolutions.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "upload.h"
using namespace LxImage;
Upload::Upload(QNetworkReply *reply)
: mReply(reply)
{
// Reparent the reply to this object
mReply->setParent(this);
// Emit progress() when upload progress changes
connect(mReply, &QNetworkReply::uploadProgress, [this](qint64 bytesSent, qint64 bytesTotal) {
Q_EMIT progress(static_cast<int>(
static_cast<double>(bytesSent) / static_cast<double>(bytesTotal) * 100.0
));
});
// Emit error() when a socket error occurs
connect(mReply, static_cast<void(QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error), [this](QNetworkReply::NetworkError) {
Q_EMIT error(mReply->errorString());
});
// Process the request when it finishes
connect(mReply, &QNetworkReply::finished, [this]() {
if (mReply->error() == QNetworkReply::NoError) {
processReply(mReply->readAll());
}
});
// Emit finished() when completed() or error() is emitted
connect(this, &Upload::completed, this, &Upload::finished);
connect(this, &Upload::error, this, &Upload::finished);
}
void Upload::abort()
{
mReply->abort();
}

96
src/upload/upload.h Normal file
View File

@ -0,0 +1,96 @@
/*
LxImage - image viewer and screenshot tool for lxqt
Copyright (C) 2017 Nathan Osman <nathan@quickmediasolutions.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef LXIMAGE_UPLOAD_H
#define LXIMAGE_UPLOAD_H
#include <QNetworkReply>
#include <QObject>
namespace LxImage {
/**
* @brief Base class for uploads
*/
class Upload : public QObject
{
Q_OBJECT
public:
/**
* @brief Create an upload
* @param reply network reply
*
* The upload will assume ownership of the network reply and connect to its
* signals, emitting uploadError() when something goes wrong.
*/
explicit Upload(QNetworkReply *reply);
/**
* @brief Abort the upload
*/
void abort();
Q_SIGNALS:
/**
* @brief Indicate that upload progress has changed
* @param value new progress value
*/
void progress(int value);
/**
* @brief Indicate that the upload completed
* @param url new URL of the upload
*/
void completed(const QString &url);
/**
* @brief Indicate that an error occurred
* @param message description of the error
*/
void error(const QString &message);
/**
* @brief Indicate that the upload finished
*
* This signal is emitted after either completed() or error().
*/
void finished();
protected:
/**
* @brief Process the data from the reply
* @param data content from the reply
*
* This method should parse the data and either emit the completed() or
* error() signal.
*/
virtual void processReply(const QByteArray &data) = 0;
private:
QNetworkReply *mReply;
};
}
#endif // LXIMAGE_UPLOAD_H

141
src/upload/uploaddialog.cpp Normal file
View File

@ -0,0 +1,141 @@
/*
LxImage - image viewer and screenshot tool for lxqt
Copyright (C) 2017 Nathan Osman <nathan@quickmediasolutions.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <QComboBox>
#include <QLineEdit>
#include <QMessageBox>
#include <QProgressBar>
#include <QPushButton>
#include <QVariant>
#include "imageshackprovider.h"
#include "imgurprovider.h"
#include "provider.h"
#include "upload.h"
#include "uploaddialog.h"
using namespace LxImage;
ImgurProvider gImgurProvider;
ImageShackProvider gImageShackProvider;
UploadDialog::UploadDialog(QWidget *parent, const QString &filename)
: QDialog(parent),
mState(SelectProvider),
mFile(filename),
mUpload(nullptr)
{
ui.setupUi(this);
// Populate the list of providers
ui.providerComboBox->addItem(tr("Imgur"), QVariant::fromValue(&gImgurProvider));
ui.providerComboBox->addItem(tr("ImageShack"), QVariant::fromValue(&gImageShackProvider));
updateUi();
}
void UploadDialog::on_actionButton_clicked()
{
switch (mState) {
case SelectProvider:
start();
break;
case UploadInProgress:
mUpload->abort();
break;
case Completed:
accept();
break;
}
}
void UploadDialog::start()
{
// Attempt to open the file
if (!mFile.open(QIODevice::ReadOnly)) {
showError(mFile.errorString());
return;
}
// Retrieve the selected provider
Provider *provider = ui.providerComboBox->itemData(
ui.providerComboBox->currentIndex()
).value<Provider*>();
// Create the upload
mUpload = provider->upload(&mFile);
// Update the progress bar as the upload progresses
connect(mUpload, &Upload::progress, ui.progressBar, &QProgressBar::setValue);
// If the request completes, show the link to the user
connect(mUpload, &Upload::completed, [this](const QString &url) {
ui.linkLineEdit->setText(url);
mState = Completed;
updateUi();
});
// If the request fails, show an error
connect(mUpload, &Upload::error, [this](const QString &message) {
showError(message);
});
// Destroy the upload when it completes
connect(mUpload, &Upload::finished, [this]() {
mFile.close();
mUpload->deleteLater();
mUpload = nullptr;
});
mState = UploadInProgress;
updateUi();
}
void UploadDialog::updateUi()
{
// Show the appropriate control given the current state
ui.providerComboBox->setVisible(mState == SelectProvider);
ui.progressBar->setVisible(mState == UploadInProgress);
ui.linkLineEdit->setVisible(mState == Completed);
// Reset the progress bar to zero
ui.progressBar->setValue(0);
// Set the correct button text
switch (mState) {
case SelectProvider:
ui.actionButton->setText(tr("Start"));
break;
case UploadInProgress:
ui.actionButton->setText(tr("Stop"));
break;
case Completed:
ui.actionButton->setText(tr("Close"));
break;
}
}
void UploadDialog::showError(const QString &message)
{
QMessageBox::critical(this, tr("Error"), message);
mState = SelectProvider;
updateUi();
}

73
src/upload/uploaddialog.h Normal file
View File

@ -0,0 +1,73 @@
/*
LxImage - image viewer and screenshot tool for lxqt
Copyright (C) 2017 Nathan Osman <nathan@quickmediasolutions.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef LXIMAGE_UPLOADDIALOG_H
#define LXIMAGE_UPLOADDIALOG_H
#include <QDialog>
#include <QFile>
#include "ui_uploaddialog.h"
namespace LxImage {
class Upload;
/**
* @brief Dialog for uploading an image
*/
class UploadDialog : public QDialog
{
Q_OBJECT
public:
/**
* @brief Create a dialog for uploading the specified file
* @param parent widget parent
* @param filename absolute path to file
*/
UploadDialog(QWidget *parent, const QString &filename);
private Q_SLOTS:
void on_actionButton_clicked();
private:
void start();
void updateUi();
void showError(const QString &message);
Ui::UploadDialog ui;
enum {
SelectProvider,
UploadInProgress,
Completed,
} mState;
QFile mFile;
Upload *mUpload;
};
}
#endif // LXIMAGE_UPLOADDIALOG_H

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>UploadDialog</class>
<widget class="QDialog" name="UploadDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>300</width>
<height>100</height>
</rect>
</property>
<property name="windowTitle">
<string>Upload</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QComboBox" name="providerComboBox"/>
</item>
<item>
<widget class="QProgressBar" name="progressBar">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLineEdit" name="linkLineEdit">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="actionButton">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>