Adding upstream version 0.6.0.
Signed-off-by: Andrew Lee (李健秋) <ajqlee@debian.org>
22
AUTHORS
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
Project maintainer: Petr Vanek <petr@scribus.info>
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
|
||||||
|
Alexander Sokolov <sokoloff.a@gmail.com>
|
||||||
|
Alf Gaida <agaida@siduction.org>
|
||||||
|
Christian Surlykke <christian@surlykke.dk>
|
||||||
|
Daniel O'Neill <doneill@cammy.riverroadcable.com>
|
||||||
|
Erik Ridderby <erik@ridderby.se>
|
||||||
|
Felix Schnizlein <felix@fix3d.net>
|
||||||
|
Francisco Ballina <zballinita@gmail.com>
|
||||||
|
Ilya87 <yast4ik@gmail.com>
|
||||||
|
Jerome Leclanche <jerome@leclan.ch>
|
||||||
|
Johannes Jordan <ypnos@lanrules.de>
|
||||||
|
Ludger Krämer <dbluelle@blau-weissoedingen.de>
|
||||||
|
Maxim Bourmitrov <maxim.bourmistrov@unixconn.com>
|
||||||
|
Mikhail Ivchenko <ematirov@gmail.com>
|
||||||
|
Sweet Tea Dorminy <sweettea@mit.edu>
|
||||||
|
Vladimir Kuznetsov <vovanec@gmail.com>
|
||||||
|
Matteo Pasotti <matteo@mageia.it>
|
||||||
|
@kulti <kultihell@gmail.com>
|
||||||
|
@pisculichi <pisculichi@openmailbox.org>
|
238
CMakeLists.txt
Normal file
@ -0,0 +1,238 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
|
||||||
|
project(qterminal)
|
||||||
|
|
||||||
|
option(USE_SYSTEM_QXT "Use system Qxt Library for global shortcuts" ON)
|
||||||
|
option(USE_QT5 "Build using Qt5. Default OFF." OFF)
|
||||||
|
|
||||||
|
set(STR_VERSION "0.6.0")
|
||||||
|
|
||||||
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
|
||||||
|
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
|
||||||
|
|
||||||
|
if(USE_QT5 AND USE_SYSTEM_QXT)
|
||||||
|
message(FATAL_ERROR "Unable to use system qxt with qt5 now")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(USE_QT5)
|
||||||
|
find_package(Qt5Widgets REQUIRED)
|
||||||
|
find_package(Qt5LinguistTools REQUIRED)
|
||||||
|
find_package(QTermWidget5 REQUIRED)
|
||||||
|
message(STATUS "Qt5 version: ${Qt5Core_VERSION_STRING}")
|
||||||
|
else()
|
||||||
|
find_package(QTermWidget4 REQUIRED)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(${QTERMWIDGET_USE_FILE})
|
||||||
|
|
||||||
|
if(USE_SYSTEM_QXT)
|
||||||
|
message(STATUS "Using system Qxt...")
|
||||||
|
find_package(Qxt REQUIRED COMPONENTS QxtCore QxtGui)
|
||||||
|
if(NOT QXT_FOUND)
|
||||||
|
message(FATAL_ERROR "System Qxt not found. Install Qxt devel package or use -DUSE_SYSTEM_QXT=0 to build with internal copy of this library")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(QXT_INCLUDE_DIRS "${QXT_INCLUDE_PATH}/QxtCore" "${QXT_INCLUDE_PATH}/QxtGui")
|
||||||
|
else()
|
||||||
|
message(STATUS "Using bundled Qxt...")
|
||||||
|
set(QXT_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src/third-party")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
find_library(CARBON_LIBRARY Carbon REQUIRED)
|
||||||
|
message(STATUS "CARBON_LIBRARY: ${CARBON_LIBRARY}")
|
||||||
|
elseif(UNIX)
|
||||||
|
find_package(X11 REQUIRED)
|
||||||
|
message(STATUS "X11_X11_LIB: ${X11_X11_LIB}")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
add_definitions(-DSTR_VERSION=\"${STR_VERSION}\")
|
||||||
|
|
||||||
|
|
||||||
|
set(EXE_NAME qterminal)
|
||||||
|
|
||||||
|
set(QTERM_SRC
|
||||||
|
src/main.cpp
|
||||||
|
src/mainwindow.cpp
|
||||||
|
src/tabwidget.cpp
|
||||||
|
src/termwidget.cpp
|
||||||
|
src/termwidgetholder.cpp
|
||||||
|
src/properties.cpp
|
||||||
|
src/propertiesdialog.cpp
|
||||||
|
src/bookmarkswidget.cpp
|
||||||
|
src/fontdialog.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
set(QTERM_MOC_SRC
|
||||||
|
src/mainwindow.h
|
||||||
|
src/tabwidget.h
|
||||||
|
src/termwidget.h
|
||||||
|
src/termwidgetholder.h
|
||||||
|
src/propertiesdialog.h
|
||||||
|
src/bookmarkswidget.h
|
||||||
|
src/fontdialog.h
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT QXT_FOUND)
|
||||||
|
set(QTERM_SRC ${QTERM_SRC} src/third-party/qxtglobalshortcut.cpp)
|
||||||
|
set(QTERM_MOC_SRC ${QTERM_MOC_SRC} src/third-party/qxtglobalshortcut.h)
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
set(QTERM_SRC ${QTERM_SRC} src/third-party/qxtglobalshortcut_win.cpp)
|
||||||
|
elseif(APPLE)
|
||||||
|
set(QTERM_SRC ${QTERM_SRC} src/third-party/qxtglobalshortcut_mac.cpp)
|
||||||
|
else()
|
||||||
|
set(QTERM_SRC ${QTERM_SRC} src/third-party/qxtglobalshortcut_x11.cpp)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(QTERM_UI_SRC
|
||||||
|
src/forms/qterminal.ui
|
||||||
|
src/forms/propertiesdialog.ui
|
||||||
|
src/forms/bookmarkswidget.ui
|
||||||
|
src/forms/fontdialog.ui
|
||||||
|
)
|
||||||
|
|
||||||
|
set(QTERM_RCC_SRC
|
||||||
|
src/icons.qrc
|
||||||
|
)
|
||||||
|
|
||||||
|
set(QTERM_TS
|
||||||
|
src/translations/qterminal_cs.ts
|
||||||
|
src/translations/qterminal_de.ts
|
||||||
|
src/translations/qterminal_es.ts
|
||||||
|
src/translations/qterminal_et.ts
|
||||||
|
src/translations/qterminal_it.ts
|
||||||
|
src/translations/qterminal_ru.ts
|
||||||
|
)
|
||||||
|
|
||||||
|
if(USE_QT5)
|
||||||
|
qt5_wrap_ui( QTERM_UI ${QTERM_UI_SRC} )
|
||||||
|
qt5_wrap_cpp( QTERM_MOC ${QTERM_MOC_SRC} )
|
||||||
|
qt5_add_resources( QTERM_RCC ${QTERM_RCC_SRC} )
|
||||||
|
qt5_add_translation( QTERM_QM ${QTERM_TS} )
|
||||||
|
# bundled qt5 version of libqxt requires private headers (as for 2014-05-27)
|
||||||
|
include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS})
|
||||||
|
else()
|
||||||
|
qt4_wrap_ui(QTERM_UI ${QTERM_UI_SRC})
|
||||||
|
qt4_wrap_cpp(QTERM_MOC ${QTERM_MOC_SRC})
|
||||||
|
qt4_add_resources(QTERM_RCC ${QTERM_RCC_SRC})
|
||||||
|
qt4_add_translation(QTERM_QM ${QTERM_TS})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include_directories (
|
||||||
|
"${CMAKE_SOURCE_DIR}"
|
||||||
|
"${CMAKE_SOURCE_DIR}/src"
|
||||||
|
"${CMAKE_BINARY_DIR}"
|
||||||
|
${QTERMWIDGET_INCLUDE_DIRS}
|
||||||
|
${QXT_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
if(X11_FOUND)
|
||||||
|
include_directories("${X11_INCLUDE_DIR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
# TODO/FIXME: apple bundle
|
||||||
|
set(GUI_TYPE "")
|
||||||
|
set(APPLE_BUNDLE_SOURCES "")
|
||||||
|
if(APPLEBUNDLE)
|
||||||
|
add_definitions(-DAPPLE_BUNDLE)
|
||||||
|
set(GUI_TYPE MACOSX_BUNDLE)
|
||||||
|
|
||||||
|
# create Info.plist file
|
||||||
|
set(MACOSX_BUNDLE_ICON_FILE qterminal.icns)
|
||||||
|
set(MACOSX_BUNDLE_INFO_STRING "QTerminal ${STR_VERSION}")
|
||||||
|
set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.qterminal")
|
||||||
|
set(MACOSX_BUNDLE_LONG_VERSION_STRING "${STR_VERSION}")
|
||||||
|
set(MACOSX_BUNDLE_BUNDLE_NAME "${EXE_NAME}")
|
||||||
|
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${STR_VERSION}")
|
||||||
|
set(MACOSX_BUNDLE_BUNDLE_VERSION "${STR_VERSION}")
|
||||||
|
set(MACOSX_BUNDLE_COPYRIGHT "(c) Petr Vanek <petr@yarpen.cz>")
|
||||||
|
|
||||||
|
set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/macosx/qterminal.icns"
|
||||||
|
PROPERTIES MACOSX_PACKAGE_LOCATION Resources
|
||||||
|
)
|
||||||
|
# use icon for app bundle to be visible in finder
|
||||||
|
set(APPLE_BUNDLE_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/macosx/qterminal.icns")
|
||||||
|
else()
|
||||||
|
set(TRANSLATIONS_DIR "${CMAKE_INSTALL_PREFIX}/share/qterminal/translations")
|
||||||
|
add_definitions(-DTRANSLATIONS_DIR=\"${TRANSLATIONS_DIR}\")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(${EXE_NAME} ${GUI_TYPE}
|
||||||
|
${QTERM_SRC}
|
||||||
|
${QTERM_UI}
|
||||||
|
${QTERM_MOC}
|
||||||
|
${QTERM_RCC}
|
||||||
|
${APPLE_BUNDLE_SOURCES}
|
||||||
|
${QTERM_QM}
|
||||||
|
)
|
||||||
|
target_link_libraries(${EXE_NAME}
|
||||||
|
${QTERMWIDGET_QT_LIBRARIES}
|
||||||
|
${QTERMWIDGET_LIBRARIES}
|
||||||
|
util
|
||||||
|
)
|
||||||
|
if(QXT_FOUND)
|
||||||
|
target_link_libraries(${EXE_NAME} ${QXT_CORE_LIB} ${QXT_GUI_LIB})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
target_link_libraries(${EXE_NAME} ${CARBON_LIBRARY})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(X11_FOUND)
|
||||||
|
target_link_libraries(${EXE_NAME} ${X11_X11_LIB})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
install(FILES qterminal.desktop DESTINATION share/applications)
|
||||||
|
install(FILES qterminal_drop.desktop DESTINATION share/applications)
|
||||||
|
|
||||||
|
|
||||||
|
if(NOT APPLEBUNDLE)
|
||||||
|
install(TARGETS ${EXE_NAME} RUNTIME DESTINATION bin)
|
||||||
|
install(FILES ${QTERM_QM} DESTINATION ${TRANSLATIONS_DIR})
|
||||||
|
install(FILES src/icons/qterminal.png DESTINATION share/pixmaps)
|
||||||
|
else()
|
||||||
|
message(STATUS "APPLEBUNDLE")
|
||||||
|
|
||||||
|
install(CODE "message(STATUS \"Cleaning previously installed bundle (rm -r)\")")
|
||||||
|
install(CODE "execute_process(COMMAND rm -r ${CMAKE_INSTALL_PREFIX}/${EXE_NAME}.app)")
|
||||||
|
|
||||||
|
install(TARGETS ${EXE_NAME} DESTINATION "${CMAKE_INSTALL_PREFIX}")
|
||||||
|
|
||||||
|
# helper stuff to create real apple bundle.
|
||||||
|
# Black magic is summoned here...
|
||||||
|
if(APPLEBUNDLE_STANDALONE)
|
||||||
|
message(STATUS "APPLEBUNDLE_STANDALONE")
|
||||||
|
configure_file("${CMAKE_SOURCE_DIR}/bundle.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/bundle.cmake" @ONLY)
|
||||||
|
install(SCRIPT "${CMAKE_SOURCE_DIR}/bundle.cmake")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# bundle required keytabs from the qtermwidget package as well
|
||||||
|
install(CODE "message(STATUS \"Bundling (cp) keytab files from ${QTERMWIDGET_SHARE}/qtermwidget/\")")
|
||||||
|
install(CODE "execute_process(COMMAND cp -r ${QTERMWIDGET_SHARE}/qtermwidget/ ${CMAKE_INSTALL_PREFIX}/${EXE_NAME}.app/Contents/Resources)")
|
||||||
|
|
||||||
|
install(FILES ${QTERM_QM} DESTINATION ${CMAKE_INSTALL_PREFIX}/${EXE_NAME}.app/Contents/translations)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
# make lupdate
|
||||||
|
# it generates new translation files
|
||||||
|
add_custom_target(lupdate
|
||||||
|
${QT_QMAKE_EXECUTABLE} -project -o "${CMAKE_CURRENT_BINARY_DIR}/qterminal.pro"
|
||||||
|
COMMAND ${QT_LUPDATE_EXECUTABLE} "${CMAKE_CURRENT_BINARY_DIR}/qterminal.pro"
|
||||||
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||||
|
)
|
||||||
|
|
||||||
|
# make dist custom target
|
||||||
|
set(CPACK_PACKAGE_NAME "qterminal")
|
||||||
|
set(CPACK_PACKAGE_VERSION ${STR_VERSION})
|
||||||
|
set(CPACK_SOURCE_GENERATOR "TGZ;TBZ2")
|
||||||
|
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
|
||||||
|
set(CPACK_IGNORE_FILES "/CVS/;/\\\\.svn/;/\\\\.git/;\\\\.swp$;\\\\.#;/#;\\\\.tar.gz$;/CMakeFiles/;CMakeCache.txt;\\\\.qm$;/build/;\\\\.diff$;.DS_Store'")
|
||||||
|
set(CPACK_SOURCE_IGNORE_FILES ${CPACK_IGNORE_FILES})
|
||||||
|
include(CPack)
|
||||||
|
# simulate autotools' "make dist"
|
||||||
|
add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
|
23
CONTRIBUTING.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Bug reports
|
||||||
|
|
||||||
|
Please file bugs on the qterminal github tracker:
|
||||||
|
https://github.com/qterminal/qterminal/
|
||||||
|
|
||||||
|
Please file qtermwidget-related bugs on the qtermwidget github tracker:
|
||||||
|
https://github.com/qterminal/qtermwidget/
|
||||||
|
|
||||||
|
|
||||||
|
# Code contributions
|
||||||
|
|
||||||
|
For all code contributions, please open a pull request on Github:
|
||||||
|
https://github.com/qterminal/qterminal/
|
||||||
|
|
||||||
|
Make sure your code is clean, devoid of debug statements and respects the style
|
||||||
|
of the rest of the file (including line length and indentation).
|
||||||
|
|
||||||
|
Do not pollute the git history with unnecessary commits! Make sure each of your
|
||||||
|
commits compiles to ensure ease of bisection and have clear separation of one
|
||||||
|
feature or bugfix per commit.
|
||||||
|
|
||||||
|
Please also make sure you set your `git.name` and `git.email` options properly:
|
||||||
|
https://help.github.com/articles/setting-your-email-in-git/
|
339
COPYING
Normal file
@ -0,0 +1,339 @@
|
|||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License.
|
16
INSTALL
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
Requirements:
|
||||||
|
Qt4 or Qt5
|
||||||
|
cmake
|
||||||
|
qtermwidget (https://github.com/qterminal/qtermwidget)
|
||||||
|
|
||||||
|
Build:
|
||||||
|
A shadow build (out of source) is strongly recommended
|
||||||
|
http://www.cmake.org/Wiki/CMake_FAQ#Out-of-source_build_trees
|
||||||
|
|
||||||
|
1) mkdir -p build && cd build
|
||||||
|
2a) cmake path/to/source -DUSE_QT5=true # Qt 5
|
||||||
|
2b) cmake path/to/source # Qt 4 only
|
||||||
|
3) make
|
||||||
|
4) optional: make install
|
||||||
|
|
||||||
|
Read cmake docs to fine tune the build process (CMAKE_INSTALL_PREFIX, etc...)
|
8
README
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
qterminal
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
See the INSTALL file for details
|
||||||
|
|
||||||
|
## Translations
|
||||||
|
- Edit src/CMakeLists.txt to add a new ts file.
|
||||||
|
- make lupdate updates ts files to be translated (lrelease is called automatically in make)
|
62
cmake/modules/FindQxt.cmake
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# QXT_FOUND
|
||||||
|
# QXT_INCLUDE_PATH
|
||||||
|
# QXT_CORE_LIB
|
||||||
|
# QXT_GUI_LIB
|
||||||
|
|
||||||
|
IF (WIN32)
|
||||||
|
FIND_PATH( QXT_INCLUDE_PATH QxtCore
|
||||||
|
$ENV{PROGRAMFILES}/QxtCore
|
||||||
|
PATHS/include/
|
||||||
|
DOC "The directory where QxtCore resides")
|
||||||
|
FIND_LIBRARY( QXT_CORE_LIB
|
||||||
|
NAMES QxtCore
|
||||||
|
PATHS/lib
|
||||||
|
$ENV{PROGRAMFILES}/lib
|
||||||
|
DOC "The Qxt core library")
|
||||||
|
FIND_LIBRARY( QXT_GUI_LIB
|
||||||
|
NAMES QxtGui
|
||||||
|
PATHS/lib
|
||||||
|
$ENV{PROGRAMFILES}/lib
|
||||||
|
DOC "The Qxt gui library")
|
||||||
|
ELSE (WIN32)
|
||||||
|
FIND_PATH( QXT_INCLUDE_PATH QxtCore
|
||||||
|
/usr/include
|
||||||
|
/usr/include/qxt
|
||||||
|
/usr/local/include
|
||||||
|
/sw/include
|
||||||
|
/opt/local/include
|
||||||
|
DOC "The directory where QxtCore resides")
|
||||||
|
FIND_LIBRARY( QXT_CORE_LIB
|
||||||
|
NAMES QxtCore
|
||||||
|
PATHS
|
||||||
|
/usr/lib64
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib64
|
||||||
|
/usr/local/lib
|
||||||
|
/sw/lib
|
||||||
|
/opt/local/lib
|
||||||
|
DOC "The Qxt core library")
|
||||||
|
FIND_LIBRARY( QXT_GUI_LIB
|
||||||
|
NAMES QxtGui
|
||||||
|
PATHS
|
||||||
|
/usr/lib64
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib64
|
||||||
|
/usr/local/lib
|
||||||
|
/sw/lib
|
||||||
|
/opt/local/lib
|
||||||
|
DOC "The Qxt gui library")
|
||||||
|
ENDIF (WIN32)
|
||||||
|
|
||||||
|
message(STATUS "Qxt includes: ${QXT_INCLUDE_PATH}")
|
||||||
|
message(STATUS "Qxt libs: ${QXT_CORE_LIB} ${QXT_GUI_LIB}")
|
||||||
|
IF (QXT_INCLUDE_PATH)
|
||||||
|
SET( QXT_FOUND 1 CACHE STRING "Set to 1 if QXT is found, 0 otherwise")
|
||||||
|
ELSE (QXT_INCLUDE_PATH)
|
||||||
|
SET( QXT_FOUND 0 CACHE STRING "Set to 1 if QXT is found, 0 otherwise")
|
||||||
|
ENDIF (QXT_INCLUDE_PATH)
|
||||||
|
|
||||||
|
SET( QXT_LIBS ${QXT_CORE_LIB} ${QXT_GUI_LIB} )
|
||||||
|
|
||||||
|
MARK_AS_ADVANCED( QXT_FOUND )
|
||||||
|
|
52
qterminal.desktop
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Name=QTerminal
|
||||||
|
Type=Application
|
||||||
|
GenericName=Terminal emulator
|
||||||
|
|
||||||
|
Comment=Terminal emulator
|
||||||
|
Comment[ru_RU]=Эмулятор терминала
|
||||||
|
Comment[fr]=Terminal
|
||||||
|
|
||||||
|
Icon=utilities-terminal
|
||||||
|
Exec=qterminal
|
||||||
|
Terminal=false
|
||||||
|
Categories=Qt;System;TerminalEmulator;
|
||||||
|
Actions=Dropdown;
|
||||||
|
|
||||||
|
[Desktop Action Dropdown]
|
||||||
|
Name=Drop-down terminal
|
||||||
|
Icon=qterminal
|
||||||
|
Exec=qterminal --drop
|
||||||
|
|
||||||
|
Name[en_GB]=Drop-down Terminal
|
||||||
|
Name[bg]=Падащ терминал
|
||||||
|
Name[ca]=Terminal desplegable
|
||||||
|
Name[ca@valencia]=Terminal desplegable
|
||||||
|
Name[cs]=Vysouvací terminál
|
||||||
|
Name[da]=Terminal der ruller ned
|
||||||
|
Name[de]=Aufklapp-Terminal
|
||||||
|
Name[es]=Terminal de menú desplegable
|
||||||
|
Name[et]=Lahtikeriv terminal
|
||||||
|
Name[fr]=Terminal déroulant
|
||||||
|
Name[hr]=Spuštajući terminal
|
||||||
|
Name[hu]=Legördülő terminál
|
||||||
|
Name[it]=Terminale a discesa
|
||||||
|
Name[ja]=ドロップダウン式ターミナル
|
||||||
|
Name[km]=ស្ថានីយទម្លាក់ចុះ
|
||||||
|
Name[ko]=위에서 내려오는 터미널
|
||||||
|
Name[nb]=Nedtrekksterminal
|
||||||
|
Name[nds]=Utklapp-Konsool
|
||||||
|
Name[nl]=Uitvouwbare terminalemulator
|
||||||
|
Name[pa]=ਲਟਕਦਾ ਟਰਮੀਨਲ
|
||||||
|
Name[pt]=Terminal Deslizante
|
||||||
|
Name[pt_BR]=Terminal suspenso
|
||||||
|
Name[ro]=Terminal derulant
|
||||||
|
Name[ru]=Выпадающий терминал
|
||||||
|
Name[sk]=Rozbaľovací terminál
|
||||||
|
Name[sv]=Rullgardinsterminal
|
||||||
|
Name[th]=เทอร์มินัลแบบหย่อนลง
|
||||||
|
Name[tr]=Yukarıdan Açılan Uçbirim
|
||||||
|
Name[uk]=Спадний термінал
|
||||||
|
Name[x-test]=xxDrop-down Terminalxx
|
||||||
|
Name[zh_CN]=拉幕式终端
|
||||||
|
Name[zh_TW]=下拉式終端機
|
32
qterminal.pro
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
TARGET = qterminal
|
||||||
|
TEMPLATE = app
|
||||||
|
# qt5 only. Please use cmake - it's an official build tool for this software
|
||||||
|
QT += widgets
|
||||||
|
|
||||||
|
CONFIG += link_pkgconfig
|
||||||
|
PKGCONFIG += qtermwidget5
|
||||||
|
|
||||||
|
DEFINES += STR_VERSION=\\\"0.5.0\\\"
|
||||||
|
|
||||||
|
SOURCES += $$files(src/*.cpp)
|
||||||
|
HEADERS += $$files(src/*.h)
|
||||||
|
|
||||||
|
INCLUDEPATH += src
|
||||||
|
|
||||||
|
RESOURCES += src/icons.qrc
|
||||||
|
FORMS += $$files(src/forms/*.ui)
|
||||||
|
|
||||||
|
unix {
|
||||||
|
isEmpty(PREFIX) {
|
||||||
|
PREFIX = /usr/local
|
||||||
|
}
|
||||||
|
BINDIR = $$PREFIX/bin
|
||||||
|
|
||||||
|
INSTALLS += target shortcut
|
||||||
|
target.path = $$BINDIR
|
||||||
|
|
||||||
|
DATADIR = $$PREFIX/share
|
||||||
|
shortcut.path = $$DATADIR/applications
|
||||||
|
shortcut.files = qterminal.desktop
|
||||||
|
}
|
||||||
|
|
49
qterminal_drop.desktop
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Exec=qterminal --drop
|
||||||
|
Terminal=false
|
||||||
|
Categories=Qt;System;TerminalEmulator;
|
||||||
|
Icon=qterminal
|
||||||
|
|
||||||
|
Name=QTerminal drop down
|
||||||
|
GenericName=Drop-down Terminal
|
||||||
|
|
||||||
|
GenericName[bg]=Падащ терминал
|
||||||
|
GenericName[ca]=Terminal desplegable
|
||||||
|
GenericName[ca@valencia]=Terminal desplegable
|
||||||
|
GenericName[cs]=Vysouvací terminál
|
||||||
|
GenericName[da]=Terminal der ruller ned
|
||||||
|
GenericName[de]=Aufklapp-Terminal
|
||||||
|
GenericName[en_GB]=Drop-down Terminal
|
||||||
|
GenericName[es]=Terminal de menú desplegable
|
||||||
|
GenericName[et]=Lahtikeriv terminal
|
||||||
|
GenericName[fr]=Terminal déroulant
|
||||||
|
GenericName[hr]=Spuštajući terminal
|
||||||
|
GenericName[hu]=Legördülő terminál
|
||||||
|
GenericName[it]=Terminale a discesa
|
||||||
|
GenericName[ja]=ドロップダウン式ターミナル
|
||||||
|
GenericName[km]=ស្ថានីយទម្លាក់ចុះ
|
||||||
|
GenericName[ko]=위에서 내려오는 터미널
|
||||||
|
GenericName[nb]=Nedtrekksterminal
|
||||||
|
GenericName[nds]=Utklapp-Konsool
|
||||||
|
GenericName[nl]=Uitvouwbare terminalemulator
|
||||||
|
GenericName[pa]=ਲਟਕਦਾ ਟਰਮੀਨਲ
|
||||||
|
GenericName[pt]=Terminal Deslizante
|
||||||
|
GenericName[pt_BR]=Terminal suspenso
|
||||||
|
GenericName[ro]=Terminal derulant
|
||||||
|
|
||||||
|
GenericName[ru]=Выпадающий терминал
|
||||||
|
Comment[ru]=Вападающий эмулятор терминала.
|
||||||
|
|
||||||
|
GenericName[sk]=Rozbaľovací terminál
|
||||||
|
GenericName[sv]=Rullgardinsterminal
|
||||||
|
GenericName[th]=เทอร์มินัลแบบหย่อนลง
|
||||||
|
GenericName[tr]=Yukarıdan Açılan Uçbirim
|
||||||
|
GenericName[uk]=Спадний термінал
|
||||||
|
GenericName[x-test]=xxDrop-down Terminalxx
|
||||||
|
GenericName[zh_CN]=拉幕式终端
|
||||||
|
GenericName[zh_TW]=下拉式終端機
|
||||||
|
|
||||||
|
Comment=A drop-down terminal emulator.
|
||||||
|
|
||||||
|
|
419
src/bookmarkswidget.cpp
Normal file
@ -0,0 +1,419 @@
|
|||||||
|
#if QT_VERSION < 0x050000
|
||||||
|
#include <QDesktopServices>
|
||||||
|
#else
|
||||||
|
#include <QStandardPaths>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
#include "bookmarkswidget.h"
|
||||||
|
#include "properties.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
|
||||||
|
class AbstractBookmarkItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum ItemType {
|
||||||
|
Root = 0,
|
||||||
|
Group = 1,
|
||||||
|
Command = 2
|
||||||
|
};
|
||||||
|
|
||||||
|
AbstractBookmarkItem(AbstractBookmarkItem* parent = 0)
|
||||||
|
{
|
||||||
|
m_parent = parent;
|
||||||
|
}
|
||||||
|
~AbstractBookmarkItem()
|
||||||
|
{
|
||||||
|
qDeleteAll(m_children);
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemType type() { return m_type; }
|
||||||
|
QString value() { return m_value; }
|
||||||
|
QString display() { return m_display; }
|
||||||
|
|
||||||
|
void addChild(AbstractBookmarkItem* item) { m_children << item; }
|
||||||
|
int childCount() { return m_children.count(); }
|
||||||
|
QList<AbstractBookmarkItem*> children() { return m_children; }
|
||||||
|
AbstractBookmarkItem *child(int number) { return m_children.value(number); }
|
||||||
|
AbstractBookmarkItem *parent() { return m_parent; }
|
||||||
|
|
||||||
|
int childNumber() const
|
||||||
|
{
|
||||||
|
if (m_parent)
|
||||||
|
return m_parent->children().indexOf(const_cast<AbstractBookmarkItem*>(this));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ItemType m_type;
|
||||||
|
AbstractBookmarkItem *m_parent;
|
||||||
|
QList<AbstractBookmarkItem*> m_children;
|
||||||
|
QString m_value;
|
||||||
|
QString m_display;
|
||||||
|
};
|
||||||
|
|
||||||
|
class BookmarkRootItem : public AbstractBookmarkItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BookmarkRootItem()
|
||||||
|
: AbstractBookmarkItem()
|
||||||
|
{
|
||||||
|
m_type = AbstractBookmarkItem::Root;
|
||||||
|
m_value = m_display = "root";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class BookmarkCommandItem : public AbstractBookmarkItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BookmarkCommandItem(const QString &name, const QString &command, AbstractBookmarkItem *parent)
|
||||||
|
: AbstractBookmarkItem(parent)
|
||||||
|
{
|
||||||
|
m_type = AbstractBookmarkItem::Command;
|
||||||
|
m_value = command;
|
||||||
|
m_display = name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class BookmarkGroupItem : public AbstractBookmarkItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BookmarkGroupItem(const QString &name, AbstractBookmarkItem *parent)
|
||||||
|
: AbstractBookmarkItem(parent)
|
||||||
|
{
|
||||||
|
m_type = AbstractBookmarkItem::Group;
|
||||||
|
m_display = name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class BookmarkLocalGroupItem : public BookmarkGroupItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BookmarkLocalGroupItem(AbstractBookmarkItem *parent)
|
||||||
|
: BookmarkGroupItem(QObject::tr("Local Bookmarks"), parent)
|
||||||
|
{
|
||||||
|
#if QT_VERSION < 0x050000
|
||||||
|
QList<QDesktopServices::StandardLocation> locations;
|
||||||
|
locations << QDesktopServices::DesktopLocation
|
||||||
|
<< QDesktopServices::DocumentsLocation
|
||||||
|
<< QDesktopServices::TempLocation
|
||||||
|
<< QDesktopServices::HomeLocation
|
||||||
|
<< QDesktopServices::MusicLocation
|
||||||
|
<< QDesktopServices::PicturesLocation;
|
||||||
|
|
||||||
|
QString path;
|
||||||
|
QString name;
|
||||||
|
QString cmd;
|
||||||
|
QDir d;
|
||||||
|
|
||||||
|
// standard $HOME subdirs
|
||||||
|
foreach (QDesktopServices::StandardLocation i, locations)
|
||||||
|
{
|
||||||
|
path = QDesktopServices::storageLocation(i);
|
||||||
|
if (!d.exists(path))
|
||||||
|
{
|
||||||
|
//qDebug() << "Dir:" << path << "does not exist. Skipping.";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// it works in Qt5, not in Qt4
|
||||||
|
// name = QDesktopServices::displayName(i);
|
||||||
|
name = path;
|
||||||
|
|
||||||
|
path.replace(" ", "\\ ");
|
||||||
|
cmd = "cd " + path;
|
||||||
|
|
||||||
|
addChild(new BookmarkCommandItem(name, cmd, this));
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
QList<QStandardPaths::StandardLocation> locations;
|
||||||
|
locations << QStandardPaths::DesktopLocation
|
||||||
|
<< QStandardPaths::DocumentsLocation
|
||||||
|
<< QStandardPaths::TempLocation
|
||||||
|
<< QStandardPaths::HomeLocation
|
||||||
|
<< QStandardPaths::MusicLocation
|
||||||
|
<< QStandardPaths::PicturesLocation;
|
||||||
|
|
||||||
|
QString path;
|
||||||
|
QString name;
|
||||||
|
QString cmd;
|
||||||
|
QDir d;
|
||||||
|
|
||||||
|
// standard $HOME subdirs
|
||||||
|
foreach (QStandardPaths::StandardLocation i, locations)
|
||||||
|
{
|
||||||
|
path = QStandardPaths::writableLocation(i);
|
||||||
|
if (!d.exists(path))
|
||||||
|
{
|
||||||
|
//qDebug() << "Dir:" << path << "does not exist. Skipping.";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
name = QStandardPaths::displayName(i);
|
||||||
|
|
||||||
|
path.replace(" ", "\\ ");
|
||||||
|
cmd = "cd " + path;
|
||||||
|
|
||||||
|
addChild(new BookmarkCommandItem(name, cmd, this));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// system env - include dirs in the tree
|
||||||
|
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
||||||
|
foreach (QString i, env.keys())
|
||||||
|
{
|
||||||
|
path = env.value(i);
|
||||||
|
if (!d.exists(path) || !QFileInfo(path).isDir())
|
||||||
|
{
|
||||||
|
//qDebug() << "Env Dir:" << path << "does not exist. Skipping.";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
path.replace(" ", "\\ ");
|
||||||
|
cmd = "cd " + path;
|
||||||
|
addChild(new BookmarkCommandItem(i, cmd, this));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class BookmarkFileGroupItem : public BookmarkGroupItem
|
||||||
|
{
|
||||||
|
// hierarchy handling
|
||||||
|
// m_pos to group map. Example: group1.group2=item
|
||||||
|
QHash<QString,AbstractBookmarkItem*> m_map;
|
||||||
|
// current position level. Example "group1", "group2"
|
||||||
|
QStringList m_pos;
|
||||||
|
|
||||||
|
public:
|
||||||
|
BookmarkFileGroupItem(AbstractBookmarkItem *parent, const QString &fname)
|
||||||
|
: BookmarkGroupItem(QObject::tr("Synchronized Bookmarks"), parent)
|
||||||
|
{
|
||||||
|
QFile f(fname);
|
||||||
|
if (!f.open(QIODevice::ReadOnly))
|
||||||
|
{
|
||||||
|
qDebug() << "Canot open file" << fname;
|
||||||
|
// TODO/FIXME: message box
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QXmlStreamReader xml;
|
||||||
|
xml.setDevice(&f);
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
xml.readNext();
|
||||||
|
|
||||||
|
switch (xml.tokenType())
|
||||||
|
{
|
||||||
|
case QXmlStreamReader::StartElement:
|
||||||
|
{
|
||||||
|
AbstractBookmarkItem *parent = m_map.contains(xmlPos()) ? m_map[xmlPos()] : this;
|
||||||
|
QString tag = xml.name().toString();
|
||||||
|
if (tag == "group")
|
||||||
|
{
|
||||||
|
QString name = xml.attributes().value("name").toString();
|
||||||
|
m_pos.append(name);
|
||||||
|
|
||||||
|
BookmarkGroupItem *i = new BookmarkGroupItem(name, parent);
|
||||||
|
parent->addChild(i);
|
||||||
|
|
||||||
|
m_map[xmlPos()] = i;
|
||||||
|
}
|
||||||
|
else if (tag == "command")
|
||||||
|
{
|
||||||
|
QString name = xml.attributes().value("name").toString();
|
||||||
|
QString cmd = xml.attributes().value("value").toString();
|
||||||
|
|
||||||
|
BookmarkCommandItem *i = new BookmarkCommandItem(name, cmd, parent);
|
||||||
|
parent->addChild(i);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case QXmlStreamReader::EndElement:
|
||||||
|
{
|
||||||
|
QString tag = xml.name().toString();
|
||||||
|
if (tag == "group")
|
||||||
|
{
|
||||||
|
m_pos.removeLast();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case QXmlStreamReader::Invalid:
|
||||||
|
qDebug() << "XML error: " << xml.errorString().data()
|
||||||
|
<< xml.lineNumber() << xml.columnNumber();
|
||||||
|
m_map.clear();
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
case QXmlStreamReader::EndDocument:
|
||||||
|
m_map.clear();
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
} // switch
|
||||||
|
} // while
|
||||||
|
} // constructor
|
||||||
|
|
||||||
|
QString xmlPos()
|
||||||
|
{
|
||||||
|
return m_pos.join(".");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
BookmarksModel::BookmarksModel(QObject *parent)
|
||||||
|
: QAbstractItemModel(parent),
|
||||||
|
m_root(0)
|
||||||
|
{
|
||||||
|
setup();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookmarksModel::setup()
|
||||||
|
{
|
||||||
|
if (m_root)
|
||||||
|
delete m_root;
|
||||||
|
m_root = new BookmarkRootItem();
|
||||||
|
m_root->addChild(new BookmarkLocalGroupItem(m_root));
|
||||||
|
m_root->addChild(new BookmarkFileGroupItem(m_root, Properties::Instance()->bookmarksFile));
|
||||||
|
beginResetModel();
|
||||||
|
endResetModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
BookmarksModel::~BookmarksModel()
|
||||||
|
{
|
||||||
|
if (m_root)
|
||||||
|
delete m_root;
|
||||||
|
}
|
||||||
|
|
||||||
|
int BookmarksModel::columnCount(const QModelIndex & /* parent */) const
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant BookmarksModel::data(const QModelIndex &index, int role) const
|
||||||
|
{
|
||||||
|
if (!index.isValid())
|
||||||
|
return QVariant();
|
||||||
|
|
||||||
|
switch (role)
|
||||||
|
{
|
||||||
|
case Qt::DisplayRole:
|
||||||
|
case Qt::EditRole:
|
||||||
|
return index.column() == 0 ? getItem(index)->display() : getItem(index)->value();
|
||||||
|
case Qt::FontRole:
|
||||||
|
{
|
||||||
|
QFont f;
|
||||||
|
if (static_cast<AbstractBookmarkItem*>(index.internalPointer())->type() == AbstractBookmarkItem::Group)
|
||||||
|
{
|
||||||
|
f.setBold(true);
|
||||||
|
}
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AbstractBookmarkItem *BookmarksModel::getItem(const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
if (index.isValid())
|
||||||
|
{
|
||||||
|
AbstractBookmarkItem *item = static_cast<AbstractBookmarkItem*>(index.internalPointer());
|
||||||
|
if (item)
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
return m_root;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant BookmarksModel::headerData(int section, Qt::Orientation orientation,
|
||||||
|
int role) const
|
||||||
|
{
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
QModelIndex BookmarksModel::index(int row, int column, const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
if (parent.isValid() && parent.column() != 0)
|
||||||
|
return QModelIndex();
|
||||||
|
|
||||||
|
AbstractBookmarkItem *parentItem = getItem(parent);
|
||||||
|
|
||||||
|
AbstractBookmarkItem *childItem = parentItem->child(row);
|
||||||
|
if (childItem)
|
||||||
|
return createIndex(row, column, childItem);
|
||||||
|
else
|
||||||
|
return QModelIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QModelIndex BookmarksModel::parent(const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
if (!index.isValid())
|
||||||
|
return QModelIndex();
|
||||||
|
|
||||||
|
AbstractBookmarkItem *childItem = getItem(index);
|
||||||
|
AbstractBookmarkItem *parentItem = childItem->parent();
|
||||||
|
|
||||||
|
if (parentItem == m_root)
|
||||||
|
return QModelIndex();
|
||||||
|
|
||||||
|
return createIndex(parentItem->childNumber(), 0, parentItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
int BookmarksModel::rowCount(const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
AbstractBookmarkItem *parentItem = getItem(parent);
|
||||||
|
return parentItem->childCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
bool BookmarksModel::setData(const QModelIndex &index, const QVariant &value,
|
||||||
|
int role)
|
||||||
|
{
|
||||||
|
if (role != Qt::EditRole)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
AbstractBookmarkItem *item = getItem(index);
|
||||||
|
bool result = item->setData(index.column(), value);
|
||||||
|
|
||||||
|
if (result)
|
||||||
|
emit dataChanged(index, index);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
BookmarksWidget::BookmarksWidget(QWidget *parent)
|
||||||
|
: QWidget(parent)
|
||||||
|
{
|
||||||
|
setupUi(this);
|
||||||
|
|
||||||
|
m_model = new BookmarksModel(this);
|
||||||
|
treeView->setModel(m_model);
|
||||||
|
treeView->header()->hide();
|
||||||
|
|
||||||
|
connect(treeView, SIGNAL(doubleClicked(QModelIndex)),
|
||||||
|
this, SLOT(handleCommand(QModelIndex)));
|
||||||
|
}
|
||||||
|
|
||||||
|
BookmarksWidget::~BookmarksWidget()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookmarksWidget::setup()
|
||||||
|
{
|
||||||
|
m_model->setup();
|
||||||
|
|
||||||
|
treeView->expandAll();
|
||||||
|
treeView->resizeColumnToContents(0);
|
||||||
|
treeView->resizeColumnToContents(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BookmarksWidget::handleCommand(const QModelIndex& index)
|
||||||
|
{
|
||||||
|
AbstractBookmarkItem *item = static_cast<AbstractBookmarkItem*>(index.internalPointer());
|
||||||
|
if (!item && item->type() != AbstractBookmarkItem::Command)
|
||||||
|
return;
|
||||||
|
|
||||||
|
emit callCommand(item->value() + "\n"); // TODO/FIXME: decide how to handle EOL
|
||||||
|
}
|
58
src/bookmarkswidget.h
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#ifndef BOOKMARKSWIDGET_H
|
||||||
|
#define BOOKMARKSWIDGET_H
|
||||||
|
|
||||||
|
#include "ui_bookmarkswidget.h"
|
||||||
|
|
||||||
|
class AbstractBookmarkItem;
|
||||||
|
class BookmarksModel;
|
||||||
|
|
||||||
|
|
||||||
|
class BookmarksWidget : public QWidget, Ui::BookmarksWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
BookmarksWidget(QWidget *parent=NULL);
|
||||||
|
~BookmarksWidget();
|
||||||
|
|
||||||
|
void setup();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void callCommand(const QString &cmd);
|
||||||
|
|
||||||
|
private:
|
||||||
|
BookmarksModel *m_model;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void handleCommand(const QModelIndex& index);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class BookmarksModel : public QAbstractItemModel
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
BookmarksModel(QObject *parent = 0);
|
||||||
|
~BookmarksModel();
|
||||||
|
|
||||||
|
void setup();
|
||||||
|
|
||||||
|
QVariant data(const QModelIndex &index, int role) const;
|
||||||
|
QVariant headerData(int section, Qt::Orientation orientation,
|
||||||
|
int role = Qt::DisplayRole) const;
|
||||||
|
|
||||||
|
QModelIndex index(int row, int column,
|
||||||
|
const QModelIndex &parent = QModelIndex()) const;
|
||||||
|
QModelIndex parent(const QModelIndex &index) const;
|
||||||
|
|
||||||
|
int rowCount(const QModelIndex &parent = QModelIndex()) const;
|
||||||
|
int columnCount(const QModelIndex &parent = QModelIndex()) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
AbstractBookmarkItem *getItem(const QModelIndex &index) const;
|
||||||
|
AbstractBookmarkItem *m_root;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
110
src/config.h
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2006 by Vladimir Kuznetsov *
|
||||||
|
* vovanec@gmail.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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#define ADD_TAB "Add Tab"
|
||||||
|
#define RENAME_TAB "Rename Tab"
|
||||||
|
#define CLOSE_TAB "Close Tab"
|
||||||
|
#define NEW_WINDOW "New Window"
|
||||||
|
|
||||||
|
#define QUIT "Quit"
|
||||||
|
#define PREFERENCES "Preferences..."
|
||||||
|
|
||||||
|
#define TAB_NEXT "Next Tab"
|
||||||
|
#define TAB_PREV "Previous Tab"
|
||||||
|
|
||||||
|
#define CLEAR_TERMINAL "Clear Active Terminal"
|
||||||
|
|
||||||
|
#define SPLIT_HORIZONTAL "Split Terminal Horizontally"
|
||||||
|
#define SPLIT_VERTICAL "Split Terminal Vertically"
|
||||||
|
|
||||||
|
#define SUB_COLLAPSE "Collapse Subterminal"
|
||||||
|
#define SUB_NEXT "Next Subterminal"
|
||||||
|
#define SUB_PREV "Previous Subterminal"
|
||||||
|
|
||||||
|
#define MOVE_LEFT "Move Tab Left"
|
||||||
|
#define MOVE_RIGHT "Move Tab Right"
|
||||||
|
|
||||||
|
#define COPY_SELECTION "Copy Selection"
|
||||||
|
#define PASTE_CLIPBOARD "Paste Clipboard"
|
||||||
|
#define PASTE_SELECTION "Paste Selection"
|
||||||
|
|
||||||
|
#define ZOOM_IN "Zoom in"
|
||||||
|
#define ZOOM_OUT "Zoom out"
|
||||||
|
#define ZOOM_RESET "Zoom reset"
|
||||||
|
|
||||||
|
#define FIND "Find"
|
||||||
|
|
||||||
|
#define TOGGLE_MENU "Toggle Menu"
|
||||||
|
#define TOGGLE_BOOKMARKS "Toggle Bookmarks"
|
||||||
|
|
||||||
|
/* Some defaults for QTerminal application */
|
||||||
|
|
||||||
|
#define DEFAULT_WIDTH 800
|
||||||
|
#define DEFAULT_HEIGHT 600
|
||||||
|
#define DEFAULT_FONT "Monospace"
|
||||||
|
|
||||||
|
// ACTIONS
|
||||||
|
#define CLEAR_TERMINAL_SHORTCUT "Ctrl+Shift+X"
|
||||||
|
#define TAB_PREV_SHORTCUT "Shift+Left"
|
||||||
|
#define TAB_NEXT_SHORTCUT "Shift+Right"
|
||||||
|
#define SUB_PREV_SHORTCUT "Shift+Down"
|
||||||
|
#define SUB_NEXT_SHORTCUT "Shift+Up"
|
||||||
|
|
||||||
|
#ifdef Q_WS_MAC
|
||||||
|
// It's tricky - Ctrl is "command" key on mac's keyboards
|
||||||
|
#define COPY_SELECTION_SHORTCUT "Ctrl+C"
|
||||||
|
#define PASTE_CLIPBOARD_SHORTCUT "Ctrl+V"
|
||||||
|
#define FIND_SHORTCUT "Ctrl+F"
|
||||||
|
#define NEW_WINDOW_SHORTCUT "Ctrl+N"
|
||||||
|
#define ADD_TAB_SHORTCUT "Ctrl+T"
|
||||||
|
#define CLOSE_TAB_SHORTCUT "Ctrl+W"
|
||||||
|
#define TOGGLE_MENU_SHORTCUT "Ctrl+M"
|
||||||
|
#define TOGGLE_BOOKMARKS_SHORTCUT "Ctrl+B"
|
||||||
|
#else
|
||||||
|
#define COPY_SELECTION_SHORTCUT "Ctrl+Shift+C"
|
||||||
|
#define PASTE_CLIPBOARD_SHORTCUT "Ctrl+Shift+V"
|
||||||
|
#define PASTE_SELECTION_SHORTCUT "Shift+Ins"
|
||||||
|
#define FIND_SHORTCUT "Ctrl+Shift+F"
|
||||||
|
#define NEW_WINDOW_SHORTCUT "Ctrl+Shift+N"
|
||||||
|
#define ADD_TAB_SHORTCUT "Ctrl+Shift+T"
|
||||||
|
#define CLOSE_TAB_SHORTCUT "Ctrl+Shift+W"
|
||||||
|
#define TOGGLE_MENU_SHORTCUT "Ctrl+Shift+M"
|
||||||
|
#define TOGGLE_BOOKMARKS_SHORTCUT "Ctrl+Shift+B"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ZOOM_IN_SHORTCUT "Ctrl++"
|
||||||
|
#define ZOOM_OUT_SHORTCUT "Ctrl+-"
|
||||||
|
#define ZOOM_RESET_SHORTCUT "Ctrl+0"
|
||||||
|
|
||||||
|
#define MOVE_LEFT_SHORTCUT "Shift+Alt+Left"
|
||||||
|
#define MOVE_RIGHT_SHORTCUT "Shift+Alt+Right"
|
||||||
|
|
||||||
|
#define RENAME_SESSION_SHORTCUT "Shift+Alt+S"
|
||||||
|
|
||||||
|
// XON/XOFF features:
|
||||||
|
|
||||||
|
#define FLOW_CONTROL_ENABLED false
|
||||||
|
#define FLOW_CONTROL_WARNING_ENABLED false
|
||||||
|
|
||||||
|
#endif
|
39
src/fontdialog.cpp
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
|
||||||
|
#include "fontdialog.h"
|
||||||
|
|
||||||
|
FontDialog::FontDialog(const QFont &f)
|
||||||
|
: QDialog(0)
|
||||||
|
{
|
||||||
|
setupUi(this);
|
||||||
|
|
||||||
|
fontComboBox->setFontFilters(QFontComboBox::MonospacedFonts
|
||||||
|
| QFontComboBox::NonScalableFonts
|
||||||
|
| QFontComboBox::ScalableFonts);
|
||||||
|
|
||||||
|
fontComboBox->setCurrentFont(f);
|
||||||
|
fontComboBox->setEditable(false);
|
||||||
|
|
||||||
|
sizeSpinBox->setValue(f.pointSize());
|
||||||
|
|
||||||
|
setFontSample();
|
||||||
|
|
||||||
|
connect(fontComboBox, SIGNAL(currentFontChanged(QFont)),
|
||||||
|
this, SLOT(setFontSample()));
|
||||||
|
connect(sizeSpinBox, SIGNAL(valueChanged(int)),
|
||||||
|
this, SLOT(setFontSample()));
|
||||||
|
}
|
||||||
|
|
||||||
|
QFont FontDialog::getFont()
|
||||||
|
{
|
||||||
|
QFont f = fontComboBox->currentFont();
|
||||||
|
f.setPointSize(sizeSpinBox->value());
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FontDialog::setFontSample()
|
||||||
|
{
|
||||||
|
QFont f = getFont();
|
||||||
|
previewLabel->setFont(f);
|
||||||
|
QString sample("%1 %2 pt");
|
||||||
|
previewLabel->setText(sample.arg(f.family()).arg(f.pointSize()));
|
||||||
|
}
|
21
src/fontdialog.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#ifndef FONT_DIALOG
|
||||||
|
#define FONT_DIALOG
|
||||||
|
|
||||||
|
#include "ui_fontdialog.h"
|
||||||
|
#include "properties.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class FontDialog : public QDialog, public Ui::FontDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
FontDialog(const QFont &f);
|
||||||
|
QFont getFont();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void setFontSample();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
50
src/forms/bookmarkswidget.ui
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>BookmarksWidget</class>
|
||||||
|
<widget class="QWidget" name="BookmarksWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>323</width>
|
||||||
|
<height>450</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="spacing">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Filter:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLineEdit" name="filterEdit"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" colspan="2">
|
||||||
|
<widget class="QTreeView" name="treeView">
|
||||||
|
<property name="alternatingRowColors">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
114
src/forms/fontdialog.ui
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>FontDialog</class>
|
||||||
|
<widget class="QDialog" name="FontDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>296</width>
|
||||||
|
<height>187</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Select Terminal Font</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Font:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QFontComboBox" name="fontComboBox"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Size:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QSpinBox" name="sizeSpinBox">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QGroupBox" name="groupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Preview</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="previewLabel"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Select Terminal Font</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>FontDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>FontDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
630
src/forms/propertiesdialog.ui
Normal file
@ -0,0 +1,630 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>PropertiesDialog</class>
|
||||||
|
<widget class="QDialog" name="PropertiesDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>463</width>
|
||||||
|
<height>386</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>QTerminal Properties</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
|
<item row="1" column="0" colspan="2">
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QListWidget" name="listWidget">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Terminal Font</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Look and Feel</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>History</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Emulation</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Shortcuts</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>DropDown</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Bookmarks</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QStackedWidget" name="stackedWidget">
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="fontPage">
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QGroupBox" name="groupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Font</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0" colspan="2">
|
||||||
|
<widget class="QLabel" name="fontSampleLabel">
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>117</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QPushButton" name="changeFontButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Set Font...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>3</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_9">
|
||||||
|
<property name="text">
|
||||||
|
<string>Note: only fixed width font are allowed to be used in terminal</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="lokkAndFeelPage">
|
||||||
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
|
<item row="3" column="2">
|
||||||
|
<widget class="QComboBox" name="tabsPos_comboBox"/>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0" colspan="2">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Action after paste clipboard</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" colspan="2">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>Color Scheme:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<widget class="QComboBox" name="styleComboBox"/>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="2">
|
||||||
|
<widget class="QComboBox" name="motionAfterPasting_comboBox"/>
|
||||||
|
</item>
|
||||||
|
<item row="13" column="0">
|
||||||
|
<spacer name="verticalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0" colspan="2">
|
||||||
|
<widget class="QLabel" name="label_8">
|
||||||
|
<property name="text">
|
||||||
|
<string>Tabs Position:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>GUI Style:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="11" column="2">
|
||||||
|
<widget class="QSpinBox" name="termOpacityBox">
|
||||||
|
<property name="suffix">
|
||||||
|
<string> %</string>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>99</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="11" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Terminal Transparency:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="10" column="2">
|
||||||
|
<widget class="QSpinBox" name="appOpacityBox">
|
||||||
|
<property name="suffix">
|
||||||
|
<string> %</string>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>100</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>100</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0" colspan="2">
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="text">
|
||||||
|
<string>Scrollbar Position:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="10" column="0" colspan="2">
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Application Transparency:</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>appOpacityBox</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QComboBox" name="colorSchemaCombo"/>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="0" colspan="3">
|
||||||
|
<widget class="QCheckBox" name="highlightCurrentCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Highlight Current Terminal With Border</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="0" colspan="3">
|
||||||
|
<widget class="QCheckBox" name="askOnExitCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>Ask for Window Closing Confirmation</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QComboBox" name="scrollBarPos_comboBox"/>
|
||||||
|
</item>
|
||||||
|
<item row="9" column="0" colspan="3">
|
||||||
|
<widget class="QCheckBox" name="useCwdCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>Open New Sub-Terminals in Current Working Dir</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0" colspan="3">
|
||||||
|
<widget class="QCheckBox" name="showMenuCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>Show Main Menu</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0" colspan="3">
|
||||||
|
<widget class="QCheckBox" name="alwaysShowTabsCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>Always Show Tabs</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="historyPage">
|
||||||
|
<layout class="QGridLayout" name="gridLayout_5">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
|
<property name="title">
|
||||||
|
<string>History</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_8">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QRadioButton" name="historyLimited">
|
||||||
|
<property name="text">
|
||||||
|
<string>Limited to: </string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QSpinBox" name="historyLimitedTo">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>100</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>1000000</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>1000</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QRadioButton" name="historyUnlimited">
|
||||||
|
<property name="text">
|
||||||
|
<string>Unlimited</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<spacer name="verticalSpacer_4">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>150</width>
|
||||||
|
<height>139</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="emulationPage">
|
||||||
|
<layout class="QGridLayout" name="gridLayout_7">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QGroupBox" name="groupBox_4">
|
||||||
|
<property name="title">
|
||||||
|
<string>Emulation Type</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_6">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QComboBox" name="emulationComboBox"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Select emulation behaviour. It does not mean that for example "linux" has to be used only on Linux OS. Feel free to use it on Mac too etc.<p>Default is the failback type with minimal feature set.</string>
|
||||||
|
</property>
|
||||||
|
<property name="textFormat">
|
||||||
|
<enum>Qt::RichText</enum>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<spacer name="verticalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>57</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="shortcutsPage">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QTableWidget" name="shortcutsWidget">
|
||||||
|
<property name="alternatingRowColors">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="verticalScrollMode">
|
||||||
|
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="horizontalScrollMode">
|
||||||
|
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sortingEnabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<attribute name="horizontalHeaderDefaultSectionSize">
|
||||||
|
<number>105</number>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="verticalHeaderVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Shortcut</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Key</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="page">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="dropShowOnStartCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>Show on start</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="groupBox_3">
|
||||||
|
<property name="title">
|
||||||
|
<string>Size</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="dropHeightLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Height %:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QSpinBox" name="dropHeightSpinBox"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="dropWidthLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Width %:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QSpinBox" name="dropWidthSpinBox"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QFormLayout" name="formLayout_2">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="dropShortCutLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Shortcut:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLineEdit" name="dropShortCutEdit"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_5">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>78</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="page_2">
|
||||||
|
<layout class="QGridLayout" name="gridLayout_9">
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QGroupBox" name="groupBox_5">
|
||||||
|
<property name="title">
|
||||||
|
<string>Edit File Content</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_10">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QPlainTextEdit" name="bookmarkPlainEdit">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Bera Sans Mono [bitstream]</family>
|
||||||
|
<pointsize>11</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="lineWrapMode">
|
||||||
|
<enum>QPlainTextEdit::NoWrap</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QCheckBox" name="useBookmarksCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>Use Bookmarks</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_10">
|
||||||
|
<property name="text">
|
||||||
|
<string>Bookmark FIle:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="bookmarksLineEdit"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="bookmarksButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Find...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_11">
|
||||||
|
<property name="text">
|
||||||
|
<string>You can specify your own bookmarks file location. It allows easy bookmark sharing with tools like OwnCloud or Dropbox.</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>PropertiesDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>224</x>
|
||||||
|
<y>227</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>248</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>PropertiesDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>292</x>
|
||||||
|
<y>233</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>248</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>listWidget</sender>
|
||||||
|
<signal>currentRowChanged(int)</signal>
|
||||||
|
<receiver>stackedWidget</receiver>
|
||||||
|
<slot>setCurrentIndex(int)</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>96</x>
|
||||||
|
<y>70</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>147</x>
|
||||||
|
<y>24</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
141
src/forms/qterminal.ui
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>mainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="mainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>600</width>
|
||||||
|
<height>420</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>MainWindow</string>
|
||||||
|
</property>
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget">
|
||||||
|
<layout class="QGridLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="TabWidget" name="consoleTabulator">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>320</width>
|
||||||
|
<height>200</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="tabPosition">
|
||||||
|
<enum>QTabWidget::South</enum>
|
||||||
|
</property>
|
||||||
|
<property name="tabShape">
|
||||||
|
<enum>QTabWidget::Rounded</enum>
|
||||||
|
</property>
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>-1</number>
|
||||||
|
</property>
|
||||||
|
<property name="elideMode">
|
||||||
|
<enum>Qt::ElideNone</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenuBar" name="m_menuBar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>600</width>
|
||||||
|
<height>19</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<widget class="QMenu" name="menu_File">
|
||||||
|
<property name="title">
|
||||||
|
<string>File</string>
|
||||||
|
</property>
|
||||||
|
<property name="Title" stdset="0">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenu" name="menu_Actions">
|
||||||
|
<property name="title">
|
||||||
|
<string>Actions</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenu" name="menu_Help">
|
||||||
|
<property name="title">
|
||||||
|
<string>Help</string>
|
||||||
|
</property>
|
||||||
|
<addaction name="actAbout"/>
|
||||||
|
<addaction name="actAboutQt"/>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenu" name="menu_Window">
|
||||||
|
<property name="title">
|
||||||
|
<string>View</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenu" name="menu_Edit">
|
||||||
|
<property name="title">
|
||||||
|
<string>Edit</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<addaction name="menu_File"/>
|
||||||
|
<addaction name="menu_Actions"/>
|
||||||
|
<addaction name="menu_Edit"/>
|
||||||
|
<addaction name="menu_Window"/>
|
||||||
|
<addaction name="menu_Help"/>
|
||||||
|
</widget>
|
||||||
|
<action name="actAbout">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset theme="help-about"/>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>About...</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actAboutQt">
|
||||||
|
<property name="text">
|
||||||
|
<string>About Qt...</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actProperties">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Preferences...</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actQuit">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset theme="application-exit"/>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Quit</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>TabWidget</class>
|
||||||
|
<extends>QTabWidget</extends>
|
||||||
|
<header>tabwidget.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources>
|
||||||
|
<include location="../icons.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
16
src/icons.qrc
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<RCC>
|
||||||
|
<qresource prefix="/icons/QTerminal">
|
||||||
|
<file alias="index.theme">icons/index.theme</file>
|
||||||
|
<file alias="64x64/utilities-terminal">icons/qterminal.png</file>
|
||||||
|
<file alias="32x32/list-add.png">icons/list-add.png</file>
|
||||||
|
<file alias="32x32/list-remove.png">icons/list-remove.png</file>
|
||||||
|
<file alias="32x32/edit-copy.png">icons/edit-copy.png</file>
|
||||||
|
<file alias="32x32/edit-paste.png">icons/edit-paste.png</file>
|
||||||
|
<file alias="32x32/document-close.png">icons/document-close.png</file>
|
||||||
|
<file alias="32x32/application-exit.png">icons/application-exit.png</file>
|
||||||
|
<file alias="16x16/object-locked.png">icons/locked.png</file>
|
||||||
|
<file alias="16x16/object-unlocked.png">icons/notlocked.png</file>
|
||||||
|
<file alias="22x22/zoom-in.png">icons/zoom-in.png</file>
|
||||||
|
<file alias="22x22/zoom-out.png">icons/zoom-out.png</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
BIN
src/icons/application-exit.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
src/icons/document-close.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
src/icons/edit-copy.png
Normal file
After Width: | Height: | Size: 860 B |
BIN
src/icons/edit-paste.png
Normal file
After Width: | Height: | Size: 937 B |
31
src/icons/index.theme
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
[Icon Theme]
|
||||||
|
Name=QTerminal
|
||||||
|
Comment=Default Icons used in QTerminal
|
||||||
|
Inherits=default
|
||||||
|
Directories=16x16,22x22,24x24,32x32,scalable
|
||||||
|
|
||||||
|
[16x16]
|
||||||
|
Size=16
|
||||||
|
Type=Fixed
|
||||||
|
|
||||||
|
[22x22]
|
||||||
|
Size=22
|
||||||
|
Type=Fixed
|
||||||
|
|
||||||
|
[24x24]
|
||||||
|
Size=24
|
||||||
|
Type=Fixed
|
||||||
|
|
||||||
|
[32x32]
|
||||||
|
Size=32
|
||||||
|
Type=Fixed
|
||||||
|
|
||||||
|
[64x64]
|
||||||
|
Size=64
|
||||||
|
Type=Fixed
|
||||||
|
|
||||||
|
[scalable]
|
||||||
|
Size=48
|
||||||
|
Type=Scalable
|
||||||
|
MinSize=32
|
||||||
|
MaxSize=256
|
BIN
src/icons/list-add.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
src/icons/list-remove.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
src/icons/locked.png
Normal file
After Width: | Height: | Size: 561 B |
BIN
src/icons/notlocked.png
Normal file
After Width: | Height: | Size: 541 B |
BIN
src/icons/qterminal.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
src/icons/zoom-in.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
src/icons/zoom-out.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
60
src/macosx/bundle.cmake.in
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
#
|
||||||
|
# This is evil! I don't know why it works this way.
|
||||||
|
# But it works.
|
||||||
|
#
|
||||||
|
# First - collect all Qt and App plugins. Then call that bloody
|
||||||
|
# cmake FIXUP_BUNDLE macro which copis all files into MacOS directory.
|
||||||
|
# So it's moved back to plugins tree where its expected by a) Qt b) application
|
||||||
|
#
|
||||||
|
# I hate it.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Dunno what id this var for...
|
||||||
|
SET(DIRS @QT_LIBRARY_DIRS@;@QT_PLUGINS_DIR@;@CMAKE_INSTALL_PREFIX@/Contents/plugins/)
|
||||||
|
|
||||||
|
# qt_menu.nib is mandatory for mac
|
||||||
|
if (@QT_USE_FRAMEWORKS@)
|
||||||
|
file(COPY @QT_LIBRARY_DIR@/QtGui.framework/Resources/qt_menu.nib
|
||||||
|
DESTINATION @CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app/Contents/Resources)
|
||||||
|
else ()
|
||||||
|
file(COPY @QT_LIBRARY_DIR@/Resources/qt_menu.nib
|
||||||
|
DESTINATION @CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app/Contents/Resources)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
# the qt.conf is mandatory too
|
||||||
|
file(WRITE @CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app/Contents/Resources/qt.conf "[Paths]
|
||||||
|
Plugins = plugins")
|
||||||
|
|
||||||
|
# copy all (required) Qt plugs into bundle
|
||||||
|
message(STATUS "Searching for Qt plugs in: @QT_PLUGINS_DIR@/*@CMAKE_SHARED_LIBRARY_SUFFIX@")
|
||||||
|
file(COPY @QT_PLUGINS_DIR@/
|
||||||
|
DESTINATION @CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app/Contents/plugins/
|
||||||
|
REGEX "(designer|script|debug|sql|odbc|phonon|svg|mng|tiff|gif|bearer|accessible|)" EXCLUDE)
|
||||||
|
#REGEX "(.*)" EXCLUDE)
|
||||||
|
|
||||||
|
# try to FIXUP_BUNDLE - to change otool -L paths
|
||||||
|
# currently it creates lots of false warnings when plugins are compiled as dylibs
|
||||||
|
# warning: cannot resolve item 'libfoobar.dylib'
|
||||||
|
# etc. Ignore it.
|
||||||
|
message(STATUS "Searching for plugs in bundle: @CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app/Contents/plugins/*@CMAKE_SHARED_LIBRARY_SUFFIX@")
|
||||||
|
file(GLOB_RECURSE inplugs
|
||||||
|
@CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app/Contents/plugins/*@CMAKE_SHARED_LIBRARY_SUFFIX@)
|
||||||
|
|
||||||
|
#message(STATUS "Dylibs: ${inplugs}")
|
||||||
|
#message(STATUS "DIR: ${DIRS}")
|
||||||
|
|
||||||
|
include(BundleUtilities)
|
||||||
|
fixup_bundle(@CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app "${inplugs}" @CMAKE_INSTALL_PREFIX@/Contents/plugins/)#${DIRS} )
|
||||||
|
|
||||||
|
# FIXUP_BUNDLE copies it into MacOS dir. But we need it in plugins *tree*,
|
||||||
|
# not a flat dir.
|
||||||
|
foreach (item IN LISTS inplugs)
|
||||||
|
#message(STATUS "IN: ${item}")
|
||||||
|
get_filename_component(fname ${item} NAME)
|
||||||
|
message(STATUS "Moving ${fname} back to plugins tree: ${item}")
|
||||||
|
#message(STATUS " ${fname}")
|
||||||
|
#message(STATUS " src: @CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app/Contents/MacOS/${fname}")
|
||||||
|
#message(STATUS " tgt: ${item}")
|
||||||
|
execute_process(COMMAND mv @CMAKE_INSTALL_PREFIX@/@EXE_NAME@.app/Contents/MacOS/${fname} ${item})
|
||||||
|
endforeach()
|
||||||
|
|
BIN
src/macosx/qterminal.icns
Normal file
154
src/main.cpp
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2006 by Vladimir Kuznetsov *
|
||||||
|
* vovanec@gmail.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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QtGlobal>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <getopt.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
#define out
|
||||||
|
|
||||||
|
const char* const short_options = "vhw:e:dp:";
|
||||||
|
|
||||||
|
const struct option long_options[] = {
|
||||||
|
{"version", 0, NULL, 'v'},
|
||||||
|
{"help", 0, NULL, 'h'},
|
||||||
|
{"workdir", 1, NULL, 'w'},
|
||||||
|
{"execute", 1, NULL, 'e'},
|
||||||
|
{"drop", 0, NULL, 'd'},
|
||||||
|
{"profile", 1, NULL, 'p'},
|
||||||
|
{NULL, 0, NULL, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
void print_usage_and_exit(int code)
|
||||||
|
{
|
||||||
|
printf("QTerminal %s\n", STR_VERSION);
|
||||||
|
puts("Usage: qterminal [OPTION]...\n");
|
||||||
|
puts(" -d, --drop Start in \"dropdown mode\" (like Yakuake or Tilda)");
|
||||||
|
puts(" -e, --execute <command> Execute command instead of shell");
|
||||||
|
puts(" -h, --help Print this help");
|
||||||
|
puts(" -p, --profile Load qterminal with specific options");
|
||||||
|
puts(" -v, --version Prints application version and exits");
|
||||||
|
puts(" -w, --workdir <dir> Start session with specified work directory");
|
||||||
|
puts("\nHomepage: <https://github.com/qterminal>");
|
||||||
|
puts("Report bugs to <https://github.com/qterminal/qterminal>");
|
||||||
|
exit(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_version_and_exit(int code=0)
|
||||||
|
{
|
||||||
|
printf("%s\n", STR_VERSION);
|
||||||
|
exit(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
void parse_args(int argc, char* argv[], QString& workdir, QString & shell_command, out bool& dropMode)
|
||||||
|
{
|
||||||
|
int next_option;
|
||||||
|
dropMode = false;
|
||||||
|
do{
|
||||||
|
next_option = getopt_long(argc, argv, short_options, long_options, NULL);
|
||||||
|
switch(next_option)
|
||||||
|
{
|
||||||
|
case 'h':
|
||||||
|
print_usage_and_exit(0);
|
||||||
|
case 'w':
|
||||||
|
workdir = QString(optarg);
|
||||||
|
break;
|
||||||
|
case 'e':
|
||||||
|
shell_command = QString(optarg);
|
||||||
|
// #15 "Raw" -e params
|
||||||
|
// Passing "raw" params (like konsole -e mcedit /tmp/tmp.txt") is more preferable - then I can call QString("qterminal -e ") + cmd_line in other programs
|
||||||
|
while (optind < argc)
|
||||||
|
{
|
||||||
|
//printf("arg: %d - %s\n", optind, argv[optind]);
|
||||||
|
shell_command += ' ' + QString(argv[optind++]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'd':
|
||||||
|
dropMode = true;
|
||||||
|
break;
|
||||||
|
case 'p':
|
||||||
|
Properties::Instance(QString(optarg));
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
print_usage_and_exit(1);
|
||||||
|
case 'v':
|
||||||
|
print_version_and_exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while(next_option != -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
setenv("TERM", "xterm", 1); // TODO/FIXME: why?
|
||||||
|
|
||||||
|
QApplication::setApplicationName("qterminal");
|
||||||
|
QApplication::setApplicationVersion(STR_VERSION);
|
||||||
|
QApplication::setOrganizationDomain("qterminal.org");
|
||||||
|
// Warning: do not change settings format. It can screw bookmarks later.
|
||||||
|
QSettings::setDefaultFormat(QSettings::IniFormat);
|
||||||
|
|
||||||
|
QApplication app(argc, argv);
|
||||||
|
QString workdir, shell_command;
|
||||||
|
bool dropMode;
|
||||||
|
parse_args(argc, argv, workdir, shell_command, dropMode);
|
||||||
|
|
||||||
|
if (workdir.isEmpty())
|
||||||
|
workdir = QDir::currentPath();
|
||||||
|
|
||||||
|
// icons
|
||||||
|
/* setup our custom icon theme if there is no system theme (OS X, Windows) */
|
||||||
|
if (QIcon::themeName().isEmpty())
|
||||||
|
QIcon::setThemeName("QTerminal");
|
||||||
|
|
||||||
|
// translations
|
||||||
|
QString fname = QString("qterminal_%1.qm").arg(QLocale::system().name().left(2));
|
||||||
|
QTranslator translator;
|
||||||
|
#ifdef TRANSLATIONS_DIR
|
||||||
|
qDebug() << "TRANSLATIONS_DIR: Loading translation file" << fname << "from dir" << TRANSLATIONS_DIR;
|
||||||
|
qDebug() << "load success:" << translator.load(fname, TRANSLATIONS_DIR, "_");
|
||||||
|
#endif
|
||||||
|
#ifdef APPLE_BUNDLE
|
||||||
|
qDebug() << "APPLE_BUNDLE: Loading translator file" << fname << "from dir" << QApplication::applicationDirPath()+"../translations";
|
||||||
|
qDebug() << "load success:" << translator.load(fname, QApplication::applicationDirPath()+"../translations", "_");
|
||||||
|
#endif
|
||||||
|
app.installTranslator(&translator);
|
||||||
|
|
||||||
|
MainWindow *window;
|
||||||
|
if (dropMode)
|
||||||
|
{
|
||||||
|
QWidget *hiddenPreviewParent = new QWidget(0, Qt::Tool);
|
||||||
|
window = new MainWindow(workdir, shell_command, dropMode, hiddenPreviewParent);
|
||||||
|
if (Properties::Instance()->dropShowOnStart)
|
||||||
|
window->show();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
window = new MainWindow(workdir, shell_command, dropMode);
|
||||||
|
window->show();
|
||||||
|
}
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
621
src/mainwindow.cpp
Normal file
@ -0,0 +1,621 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2006 by Vladimir Kuznetsov *
|
||||||
|
* vovanec@gmail.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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include <QDockWidget>
|
||||||
|
#include <QDesktopWidget>
|
||||||
|
#include <QToolButton>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include "tabwidget.h"
|
||||||
|
#include "termwidgetholder.h"
|
||||||
|
#include "config.h"
|
||||||
|
#include "properties.h"
|
||||||
|
#include "propertiesdialog.h"
|
||||||
|
#include "bookmarkswidget.h"
|
||||||
|
|
||||||
|
|
||||||
|
// TODO/FXIME: probably remove. QSS makes it unusable on mac...
|
||||||
|
#define QSS_DROP "MainWindow {border: 1px solid rgba(0, 0, 0, 50%);}\n"
|
||||||
|
|
||||||
|
MainWindow::MainWindow(const QString& work_dir,
|
||||||
|
const QString& command,
|
||||||
|
bool dropMode,
|
||||||
|
QWidget * parent,
|
||||||
|
Qt::WindowFlags f)
|
||||||
|
: QMainWindow(parent,f),
|
||||||
|
m_initShell(command),
|
||||||
|
m_initWorkDir(work_dir),
|
||||||
|
m_dropLockButton(0),
|
||||||
|
m_dropMode(dropMode)
|
||||||
|
{
|
||||||
|
setupUi(this);
|
||||||
|
Properties::Instance()->loadSettings();
|
||||||
|
migrate_settings();
|
||||||
|
|
||||||
|
m_bookmarksDock = new QDockWidget(tr("Bookmarks"), this);
|
||||||
|
BookmarksWidget *bookmarksWidget = new BookmarksWidget(m_bookmarksDock);
|
||||||
|
m_bookmarksDock->setWidget(bookmarksWidget);
|
||||||
|
addDockWidget(Qt::LeftDockWidgetArea, m_bookmarksDock);
|
||||||
|
connect(bookmarksWidget, SIGNAL(callCommand(QString)),
|
||||||
|
this, SLOT(bookmarksWidget_callCommand(QString)));
|
||||||
|
|
||||||
|
connect(m_bookmarksDock, SIGNAL(visibilityChanged(bool)),
|
||||||
|
this, SLOT(bookmarksDock_visibilityChanged(bool)));
|
||||||
|
|
||||||
|
connect(actAbout, SIGNAL(triggered()), SLOT(actAbout_triggered()));
|
||||||
|
connect(actAboutQt, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
|
||||||
|
connect(&m_dropShortcut, SIGNAL(activated()), SLOT(showHide()));
|
||||||
|
|
||||||
|
setContentsMargins(0, 0, 0, 0);
|
||||||
|
if (m_dropMode) {
|
||||||
|
this->enableDropMode();
|
||||||
|
setStyleSheet(QSS_DROP);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
restoreGeometry(Properties::Instance()->mainWindowGeometry);
|
||||||
|
restoreState(Properties::Instance()->mainWindowState);
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(consoleTabulator, SIGNAL(closeTabNotification()), SLOT(close()));
|
||||||
|
consoleTabulator->setWorkDirectory(work_dir);
|
||||||
|
consoleTabulator->setTabPosition((QTabWidget::TabPosition)Properties::Instance()->tabsPos);
|
||||||
|
//consoleTabulator->setShellProgram(command);
|
||||||
|
consoleTabulator->addNewTab(command);
|
||||||
|
|
||||||
|
setWindowTitle("QTerminal");
|
||||||
|
setWindowIcon(QIcon::fromTheme("utilities-terminal"));
|
||||||
|
|
||||||
|
setup_FileMenu_Actions();
|
||||||
|
setup_ActionsMenu_Actions();
|
||||||
|
setup_ViewMenu_Actions();
|
||||||
|
|
||||||
|
// Add global rename Session shortcut
|
||||||
|
renameSession = new QAction(tr("Rename Session"), this);
|
||||||
|
renameSession->setShortcut(QKeySequence(tr(RENAME_SESSION_SHORTCUT)));
|
||||||
|
connect(renameSession, SIGNAL(triggered()), consoleTabulator, SLOT(renameSession()));
|
||||||
|
}
|
||||||
|
|
||||||
|
MainWindow::~MainWindow()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::migrate_settings()
|
||||||
|
{
|
||||||
|
// Deal with rearrangements of settings.
|
||||||
|
// If this method becomes unbearably huge we should look at the config-update
|
||||||
|
// system used by kde and razor.
|
||||||
|
QSettings settings;
|
||||||
|
QString last_version = settings.value("version", "0.0.0").toString();
|
||||||
|
// Handle configchanges in 0.4.0 (renaming 'Paste Selection' -> 'Paste Clipboard')
|
||||||
|
if (last_version < "0.4.0")
|
||||||
|
{
|
||||||
|
qDebug() << "Migrating settings from" << last_version << "to 0.4.0";
|
||||||
|
settings.beginGroup("Shortcuts");
|
||||||
|
QString tmp = settings.value("Paste Selection", PASTE_CLIPBOARD_SHORTCUT).toString();
|
||||||
|
settings.setValue(PASTE_CLIPBOARD, tmp);
|
||||||
|
settings.remove("Paste Selection");
|
||||||
|
settings.endGroup();
|
||||||
|
|
||||||
|
settings.setValue("version", "0.4.0");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MainWindow::enableDropMode()
|
||||||
|
{
|
||||||
|
setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint);
|
||||||
|
|
||||||
|
m_dropLockButton = new QToolButton(this);
|
||||||
|
consoleTabulator->setCornerWidget(m_dropLockButton, Qt::BottomRightCorner);
|
||||||
|
m_dropLockButton->setCheckable(true);
|
||||||
|
m_dropLockButton->connect(m_dropLockButton, SIGNAL(clicked(bool)), this, SLOT(setKeepOpen(bool)));
|
||||||
|
setKeepOpen(Properties::Instance()->dropKeepOpen);
|
||||||
|
m_dropLockButton->setAutoRaise(true);
|
||||||
|
|
||||||
|
|
||||||
|
setDropShortcut(Properties::Instance()->dropShortCut);
|
||||||
|
realign();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::setDropShortcut(QKeySequence dropShortCut)
|
||||||
|
{
|
||||||
|
if (!m_dropMode)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (m_dropShortcut.shortcut() != dropShortCut)
|
||||||
|
{
|
||||||
|
m_dropShortcut.setShortcut(dropShortCut);
|
||||||
|
qWarning() << tr("Press \"%1\" to see the terminal.").arg(dropShortCut.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::setup_ActionsMenu_Actions()
|
||||||
|
{
|
||||||
|
QSettings settings;
|
||||||
|
settings.beginGroup("Shortcuts");
|
||||||
|
|
||||||
|
QKeySequence seq;
|
||||||
|
|
||||||
|
Properties::Instance()->actions[CLEAR_TERMINAL] = new QAction(QIcon::fromTheme("edit-clear"), tr("Clear Current Tab"), this);
|
||||||
|
seq = QKeySequence::fromString(settings.value(CLEAR_TERMINAL, CLEAR_TERMINAL_SHORTCUT).toString());
|
||||||
|
Properties::Instance()->actions[CLEAR_TERMINAL]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[CLEAR_TERMINAL], SIGNAL(triggered()), consoleTabulator, SLOT(clearActiveTerminal()));
|
||||||
|
menu_Actions->addAction(Properties::Instance()->actions[CLEAR_TERMINAL]);
|
||||||
|
|
||||||
|
menu_Actions->addSeparator();
|
||||||
|
|
||||||
|
Properties::Instance()->actions[TAB_NEXT] = new QAction(QIcon::fromTheme("go-next"), tr("Next Tab"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(TAB_NEXT, TAB_NEXT_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[TAB_NEXT]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[TAB_NEXT], SIGNAL(triggered()), consoleTabulator, SLOT(switchToRight()));
|
||||||
|
menu_Actions->addAction(Properties::Instance()->actions[TAB_NEXT]);
|
||||||
|
|
||||||
|
Properties::Instance()->actions[TAB_PREV] = new QAction(QIcon::fromTheme("go-previous"), tr("Previous Tab"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(TAB_PREV, TAB_PREV_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[TAB_PREV]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[TAB_PREV], SIGNAL(triggered()), consoleTabulator, SLOT(switchToLeft()));
|
||||||
|
menu_Actions->addAction(Properties::Instance()->actions[TAB_PREV]);
|
||||||
|
|
||||||
|
Properties::Instance()->actions[MOVE_LEFT] = new QAction(tr("Move Tab Left"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(MOVE_LEFT, MOVE_LEFT_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[MOVE_LEFT]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[MOVE_LEFT], SIGNAL(triggered()), consoleTabulator, SLOT(moveLeft()));
|
||||||
|
menu_Actions->addAction(Properties::Instance()->actions[MOVE_LEFT]);
|
||||||
|
|
||||||
|
Properties::Instance()->actions[MOVE_RIGHT] = new QAction(tr("Move Tab Right"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(MOVE_RIGHT, MOVE_RIGHT_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[MOVE_RIGHT]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[MOVE_RIGHT], SIGNAL(triggered()), consoleTabulator, SLOT(moveRight()));
|
||||||
|
menu_Actions->addAction(Properties::Instance()->actions[MOVE_RIGHT]);
|
||||||
|
|
||||||
|
menu_Actions->addSeparator();
|
||||||
|
|
||||||
|
Properties::Instance()->actions[SPLIT_HORIZONTAL] = new QAction(tr("Split Terminal Horizontally"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(SPLIT_HORIZONTAL).toString() );
|
||||||
|
Properties::Instance()->actions[SPLIT_HORIZONTAL]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[SPLIT_HORIZONTAL], SIGNAL(triggered()), consoleTabulator, SLOT(splitHorizontally()));
|
||||||
|
menu_Actions->addAction(Properties::Instance()->actions[SPLIT_HORIZONTAL]);
|
||||||
|
|
||||||
|
Properties::Instance()->actions[SPLIT_VERTICAL] = new QAction(tr("Split Terminal Vertically"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(SPLIT_VERTICAL).toString() );
|
||||||
|
Properties::Instance()->actions[SPLIT_VERTICAL]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[SPLIT_VERTICAL], SIGNAL(triggered()), consoleTabulator, SLOT(splitVertically()));
|
||||||
|
menu_Actions->addAction(Properties::Instance()->actions[SPLIT_VERTICAL]);
|
||||||
|
|
||||||
|
Properties::Instance()->actions[SUB_COLLAPSE] = new QAction(tr("Collapse Subterminal"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(SUB_COLLAPSE).toString() );
|
||||||
|
Properties::Instance()->actions[SUB_COLLAPSE]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[SUB_COLLAPSE], SIGNAL(triggered()), consoleTabulator, SLOT(splitCollapse()));
|
||||||
|
menu_Actions->addAction(Properties::Instance()->actions[SUB_COLLAPSE]);
|
||||||
|
|
||||||
|
Properties::Instance()->actions[SUB_NEXT] = new QAction(QIcon::fromTheme("go-up"), tr("Next Subterminal"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(SUB_NEXT, SUB_NEXT_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[SUB_NEXT]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[SUB_NEXT], SIGNAL(triggered()), consoleTabulator, SLOT(switchNextSubterminal()));
|
||||||
|
menu_Actions->addAction(Properties::Instance()->actions[SUB_NEXT]);
|
||||||
|
|
||||||
|
Properties::Instance()->actions[SUB_PREV] = new QAction(QIcon::fromTheme("go-down"), tr("Previous Subterminal"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(SUB_PREV, SUB_PREV_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[SUB_PREV]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[SUB_PREV], SIGNAL(triggered()), consoleTabulator, SLOT(switchPrevSubterminal()));
|
||||||
|
menu_Actions->addAction(Properties::Instance()->actions[SUB_PREV]);
|
||||||
|
|
||||||
|
menu_Actions->addSeparator();
|
||||||
|
|
||||||
|
// Copy and Paste are only added to the table for the sake of bindings at the moment; there is no Edit menu, only a context menu.
|
||||||
|
Properties::Instance()->actions[COPY_SELECTION] = new QAction(QIcon::fromTheme("edit-copy"), tr("Copy Selection"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(COPY_SELECTION, COPY_SELECTION_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[COPY_SELECTION]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[COPY_SELECTION], SIGNAL(triggered()), consoleTabulator, SLOT(copySelection()));
|
||||||
|
menu_Edit->addAction(Properties::Instance()->actions[COPY_SELECTION]);
|
||||||
|
|
||||||
|
Properties::Instance()->actions[PASTE_CLIPBOARD] = new QAction(QIcon::fromTheme("edit-paste"), tr("Paste Clipboard"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(PASTE_CLIPBOARD, PASTE_CLIPBOARD_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[PASTE_CLIPBOARD]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[PASTE_CLIPBOARD], SIGNAL(triggered()), consoleTabulator, SLOT(pasteClipboard()));
|
||||||
|
menu_Edit->addAction(Properties::Instance()->actions[PASTE_CLIPBOARD]);
|
||||||
|
|
||||||
|
Properties::Instance()->actions[PASTE_SELECTION] = new QAction(QIcon::fromTheme("edit-paste"), tr("Paste Selection"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(PASTE_SELECTION, PASTE_SELECTION_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[PASTE_SELECTION]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[PASTE_SELECTION], SIGNAL(triggered()), consoleTabulator, SLOT(pasteSelection()));
|
||||||
|
menu_Edit->addAction(Properties::Instance()->actions[PASTE_SELECTION]);
|
||||||
|
|
||||||
|
Properties::Instance()->actions[ZOOM_IN] = new QAction(QIcon::fromTheme("zoom-in"), tr("Zoom in"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(ZOOM_IN, ZOOM_IN_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[ZOOM_IN]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[ZOOM_IN], SIGNAL(triggered()), consoleTabulator, SLOT(zoomIn()));
|
||||||
|
menu_Edit->addAction(Properties::Instance()->actions[ZOOM_IN]);
|
||||||
|
|
||||||
|
Properties::Instance()->actions[ZOOM_OUT] = new QAction(QIcon::fromTheme("zoom-out"), tr("Zoom out"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(ZOOM_OUT, ZOOM_OUT_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[ZOOM_OUT]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[ZOOM_OUT], SIGNAL(triggered()), consoleTabulator, SLOT(zoomOut()));
|
||||||
|
menu_Edit->addAction(Properties::Instance()->actions[ZOOM_OUT]);
|
||||||
|
|
||||||
|
Properties::Instance()->actions[ZOOM_RESET] = new QAction(QIcon::fromTheme("zoom-original"), tr("Zoom reset"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(ZOOM_RESET, ZOOM_RESET_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[ZOOM_RESET]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[ZOOM_RESET], SIGNAL(triggered()), consoleTabulator, SLOT(zoomReset()));
|
||||||
|
menu_Edit->addAction(Properties::Instance()->actions[ZOOM_RESET]);
|
||||||
|
|
||||||
|
menu_Actions->addSeparator();
|
||||||
|
|
||||||
|
Properties::Instance()->actions[FIND] = new QAction(QIcon::fromTheme("edit-find"), tr("Find..."), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(FIND, FIND_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[FIND]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[FIND], SIGNAL(triggered()), this, SLOT(find()));
|
||||||
|
menu_Actions->addAction(Properties::Instance()->actions[FIND]);
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
act = new QAction(this);
|
||||||
|
act->setSeparator(true);
|
||||||
|
|
||||||
|
// TODO/FIXME: unimplemented for now
|
||||||
|
act = new QAction(tr("Save Session"), this);
|
||||||
|
// do not use sequences for this task - it collides with eg. mc shorcuts
|
||||||
|
// and mainly - it's not used too often
|
||||||
|
//act->setShortcut(QKeySequence::Save);
|
||||||
|
connect(act, SIGNAL(triggered()), consoleTabulator, SLOT(saveSession()));
|
||||||
|
|
||||||
|
act = new QAction(tr("Load Session"), this);
|
||||||
|
// do not use sequences for this task - it collides with eg. mc shorcuts
|
||||||
|
// and mainly - it's not used too often
|
||||||
|
//act->setShortcut(QKeySequence::Open);
|
||||||
|
connect(act, SIGNAL(triggered()), consoleTabulator, SLOT(loadSession()));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Properties::Instance()->actions[TOGGLE_MENU] = new QAction(tr("Toggle Menu"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(TOGGLE_MENU, TOGGLE_MENU_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[TOGGLE_MENU]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[TOGGLE_MENU], SIGNAL(triggered()), this, SLOT(toggleMenu()));
|
||||||
|
// tis is correct - add action to main window - not to menu to keep toggle working
|
||||||
|
|
||||||
|
settings.endGroup();
|
||||||
|
|
||||||
|
// apply props
|
||||||
|
propertiesChanged();
|
||||||
|
}
|
||||||
|
void MainWindow::setup_FileMenu_Actions()
|
||||||
|
{
|
||||||
|
QSettings settings;
|
||||||
|
settings.beginGroup("Shortcuts");
|
||||||
|
|
||||||
|
QKeySequence seq;
|
||||||
|
|
||||||
|
Properties::Instance()->actions[ADD_TAB] = new QAction(QIcon::fromTheme("list-add"), tr("New Tab"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(ADD_TAB, ADD_TAB_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[ADD_TAB]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[ADD_TAB], SIGNAL(triggered()), consoleTabulator, SLOT(addNewTab()));
|
||||||
|
menu_File->addAction(Properties::Instance()->actions[ADD_TAB]);
|
||||||
|
|
||||||
|
Properties::Instance()->actions[CLOSE_TAB] = new QAction(QIcon::fromTheme("list-remove"), tr("Close Tab"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(CLOSE_TAB, CLOSE_TAB_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[CLOSE_TAB]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[CLOSE_TAB], SIGNAL(triggered()), consoleTabulator, SLOT(removeCurrentTab()));
|
||||||
|
menu_File->addAction(Properties::Instance()->actions[CLOSE_TAB]);
|
||||||
|
|
||||||
|
Properties::Instance()->actions[NEW_WINDOW] = new QAction(QIcon::fromTheme("window-new"), tr("New Window"), this);
|
||||||
|
seq = QKeySequence::fromString( settings.value(NEW_WINDOW, NEW_WINDOW_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[NEW_WINDOW]->setShortcut(seq);
|
||||||
|
connect(Properties::Instance()->actions[NEW_WINDOW], SIGNAL(triggered()), this, SLOT(newTerminalWindow()));
|
||||||
|
menu_File->addAction(Properties::Instance()->actions[NEW_WINDOW]);
|
||||||
|
|
||||||
|
menu_File->addSeparator();
|
||||||
|
|
||||||
|
Properties::Instance()->actions[PREFERENCES] = actProperties;
|
||||||
|
connect(actProperties, SIGNAL(triggered()), SLOT(actProperties_triggered()));
|
||||||
|
menu_File->addAction(Properties::Instance()->actions[PREFERENCES]);
|
||||||
|
|
||||||
|
menu_File->addSeparator();
|
||||||
|
|
||||||
|
Properties::Instance()->actions[QUIT] = actQuit;
|
||||||
|
connect(actQuit, SIGNAL(triggered()), SLOT(close()));
|
||||||
|
menu_File->addAction(Properties::Instance()->actions[QUIT]);
|
||||||
|
|
||||||
|
settings.endGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::setup_ViewMenu_Actions()
|
||||||
|
{
|
||||||
|
toggleBorder = new QAction(tr("Hide Window Borders"), this);
|
||||||
|
//toggleBorder->setObjectName("toggle_Borderless");
|
||||||
|
toggleBorder->setCheckable(true);
|
||||||
|
// TODO/FIXME: it's broken somehow. When I call toggleBorderless() here the non-responsive window appear
|
||||||
|
// toggleBorder->setChecked(Properties::Instance()->borderless);
|
||||||
|
// if (Properties::Instance()->borderless)
|
||||||
|
// toggleBorderless();
|
||||||
|
connect(toggleBorder, SIGNAL(triggered()), this, SLOT(toggleBorderless()));
|
||||||
|
menu_Window->addAction(toggleBorder);
|
||||||
|
toggleBorder->setVisible(!m_dropMode);
|
||||||
|
|
||||||
|
toggleTabbar = new QAction(tr("Show Tab Bar"), this);
|
||||||
|
//toggleTabbar->setObjectName("toggle_TabBar");
|
||||||
|
toggleTabbar->setCheckable(true);
|
||||||
|
toggleTabbar->setChecked(!Properties::Instance()->tabBarless);
|
||||||
|
toggleTabBar();
|
||||||
|
connect(toggleTabbar, SIGNAL(triggered()), this, SLOT(toggleTabBar()));
|
||||||
|
menu_Window->addAction(toggleTabbar);
|
||||||
|
|
||||||
|
QSettings settings;
|
||||||
|
settings.beginGroup("Shortcuts");
|
||||||
|
Properties::Instance()->actions[TOGGLE_BOOKMARKS] = m_bookmarksDock->toggleViewAction();
|
||||||
|
QKeySequence seq = QKeySequence::fromString( settings.value(TOGGLE_BOOKMARKS, TOGGLE_BOOKMARKS_SHORTCUT).toString() );
|
||||||
|
Properties::Instance()->actions[TOGGLE_BOOKMARKS]->setShortcut(seq);
|
||||||
|
menu_Window->addAction(Properties::Instance()->actions[TOGGLE_BOOKMARKS]);
|
||||||
|
settings.endGroup();
|
||||||
|
|
||||||
|
menu_Window->addSeparator();
|
||||||
|
|
||||||
|
/* tabs position */
|
||||||
|
tabPosition = new QActionGroup(this);
|
||||||
|
QAction *tabBottom = new QAction(tr("Bottom"), this);
|
||||||
|
QAction *tabTop = new QAction(tr("Top"), this);
|
||||||
|
QAction *tabRight = new QAction(tr("Right"), this);
|
||||||
|
QAction *tabLeft = new QAction(tr("Left"), this);
|
||||||
|
tabPosition->addAction(tabTop);
|
||||||
|
tabPosition->addAction(tabBottom);
|
||||||
|
tabPosition->addAction(tabLeft);
|
||||||
|
tabPosition->addAction(tabRight);
|
||||||
|
|
||||||
|
for(int i = 0; i < tabPosition->actions().size(); ++i)
|
||||||
|
tabPosition->actions().at(i)->setCheckable(true);
|
||||||
|
|
||||||
|
if( tabPosition->actions().count() > Properties::Instance()->tabsPos )
|
||||||
|
tabPosition->actions().at(Properties::Instance()->tabsPos)->setChecked(true);
|
||||||
|
|
||||||
|
connect(tabPosition, SIGNAL(triggered(QAction *)),
|
||||||
|
consoleTabulator, SLOT(changeTabPosition(QAction *)) );
|
||||||
|
|
||||||
|
tabPosMenu = new QMenu(tr("Tabs Layout"), menu_Window);
|
||||||
|
tabPosMenu->setObjectName("tabPosMenu");
|
||||||
|
|
||||||
|
for(int i=0; i < tabPosition->actions().size(); ++i) {
|
||||||
|
tabPosMenu->addAction(tabPosition->actions().at(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(menu_Window, SIGNAL(hovered(QAction *)),
|
||||||
|
this, SLOT(updateActionGroup(QAction *)));
|
||||||
|
menu_Window->addMenu(tabPosMenu);
|
||||||
|
/* */
|
||||||
|
|
||||||
|
/* Scrollbar */
|
||||||
|
scrollBarPosition = new QActionGroup(this);
|
||||||
|
QAction *scrollNone = new QAction(tr("None"), this);
|
||||||
|
QAction *scrollRight = new QAction(tr("Right"), this);
|
||||||
|
QAction *scrollLeft = new QAction(tr("Left"), this);
|
||||||
|
|
||||||
|
/* order of insertion is dep. on QTermWidget::ScrollBarPosition enum */
|
||||||
|
scrollBarPosition->addAction(scrollNone);
|
||||||
|
scrollBarPosition->addAction(scrollLeft);
|
||||||
|
scrollBarPosition->addAction(scrollRight);
|
||||||
|
|
||||||
|
for(int i = 0; i < scrollBarPosition->actions().size(); ++i)
|
||||||
|
scrollBarPosition->actions().at(i)->setCheckable(true);
|
||||||
|
|
||||||
|
if( Properties::Instance()->scrollBarPos < scrollBarPosition->actions().size() )
|
||||||
|
scrollBarPosition->actions().at(Properties::Instance()->scrollBarPos)->setChecked(true);
|
||||||
|
|
||||||
|
connect(scrollBarPosition, SIGNAL(triggered(QAction *)),
|
||||||
|
consoleTabulator, SLOT(changeScrollPosition(QAction *)) );
|
||||||
|
|
||||||
|
scrollPosMenu = new QMenu(tr("Scrollbar Layout"), menu_Window);
|
||||||
|
scrollPosMenu->setObjectName("scrollPosMenu");
|
||||||
|
|
||||||
|
for(int i=0; i < scrollBarPosition->actions().size(); ++i) {
|
||||||
|
scrollPosMenu->addAction(scrollBarPosition->actions().at(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
menu_Window->addMenu(scrollPosMenu);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_consoleTabulator_currentChanged(int)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::toggleTabBar()
|
||||||
|
{
|
||||||
|
Properties::Instance()->tabBarless = !toggleTabbar->isChecked();
|
||||||
|
consoleTabulator->showHideTabBar();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::toggleBorderless()
|
||||||
|
{
|
||||||
|
setWindowFlags(windowFlags() ^ Qt::FramelessWindowHint);
|
||||||
|
show();
|
||||||
|
setWindowState(Qt::WindowActive); /* don't loose focus on the window */
|
||||||
|
Properties::Instance()->borderless = toggleBorder->isChecked();
|
||||||
|
realign();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::toggleMenu()
|
||||||
|
{
|
||||||
|
m_menuBar->setVisible(!m_menuBar->isVisible());
|
||||||
|
Properties::Instance()->menuVisible = m_menuBar->isVisible();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::closeEvent(QCloseEvent *ev)
|
||||||
|
{
|
||||||
|
if (!Properties::Instance()->askOnExit
|
||||||
|
|| !consoleTabulator->count())
|
||||||
|
{
|
||||||
|
// #80 - do not save state and geometry in drop mode
|
||||||
|
if (!m_dropMode)
|
||||||
|
{
|
||||||
|
Properties::Instance()->mainWindowGeometry = saveGeometry();
|
||||||
|
Properties::Instance()->mainWindowState = saveState();
|
||||||
|
}
|
||||||
|
Properties::Instance()->saveSettings();
|
||||||
|
ev->accept();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ask user for cancel only when there is at least one terminal active in this window
|
||||||
|
QDialog * dia = new QDialog(this);
|
||||||
|
dia->setObjectName("exitDialog");
|
||||||
|
dia->setWindowTitle(tr("Exit QTerminal"));
|
||||||
|
|
||||||
|
QCheckBox * dontAskCheck = new QCheckBox(tr("Do not ask again"), dia);
|
||||||
|
QDialogButtonBox * buttonBox = new QDialogButtonBox(QDialogButtonBox::Yes | QDialogButtonBox::No, Qt::Horizontal, dia);
|
||||||
|
|
||||||
|
connect(buttonBox, SIGNAL(accepted()), dia, SLOT(accept()));
|
||||||
|
connect(buttonBox, SIGNAL(rejected()), dia, SLOT(reject()));
|
||||||
|
|
||||||
|
QVBoxLayout * lay = new QVBoxLayout();
|
||||||
|
lay->addWidget(new QLabel(tr("Are you sure you want to exit?")));
|
||||||
|
lay->addWidget(dontAskCheck);
|
||||||
|
lay->addWidget(buttonBox);
|
||||||
|
dia->setLayout(lay);
|
||||||
|
|
||||||
|
if (dia->exec() == QDialog::Accepted) {
|
||||||
|
Properties::Instance()->mainWindowGeometry = saveGeometry();
|
||||||
|
Properties::Instance()->mainWindowState = saveState();
|
||||||
|
Properties::Instance()->askOnExit = !dontAskCheck->isChecked();
|
||||||
|
Properties::Instance()->saveSettings();
|
||||||
|
ev->accept();
|
||||||
|
} else {
|
||||||
|
ev->ignore();
|
||||||
|
}
|
||||||
|
|
||||||
|
dia->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::actAbout_triggered()
|
||||||
|
{
|
||||||
|
QMessageBox::about(this, QString("QTerminal ") + STR_VERSION, tr("A lightweight multiplatform terminal emulator"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::actProperties_triggered()
|
||||||
|
{
|
||||||
|
PropertiesDialog *p = new PropertiesDialog(this);
|
||||||
|
connect(p, SIGNAL(propertiesChanged()), this, SLOT(propertiesChanged()));
|
||||||
|
p->exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::propertiesChanged()
|
||||||
|
{
|
||||||
|
QApplication::setStyle(Properties::Instance()->guiStyle);
|
||||||
|
setWindowOpacity(Properties::Instance()->appOpacity/100.0);
|
||||||
|
consoleTabulator->setTabPosition((QTabWidget::TabPosition)Properties::Instance()->tabsPos);
|
||||||
|
consoleTabulator->propertiesChanged();
|
||||||
|
setDropShortcut(Properties::Instance()->dropShortCut);
|
||||||
|
|
||||||
|
m_menuBar->setVisible(Properties::Instance()->menuVisible);
|
||||||
|
|
||||||
|
m_bookmarksDock->setVisible(Properties::Instance()->useBookmarks
|
||||||
|
&& Properties::Instance()->bookmarksVisible);
|
||||||
|
m_bookmarksDock->toggleViewAction()->setVisible(Properties::Instance()->useBookmarks);
|
||||||
|
|
||||||
|
if (Properties::Instance()->useBookmarks)
|
||||||
|
{
|
||||||
|
qobject_cast<BookmarksWidget*>(m_bookmarksDock->widget())->setup();
|
||||||
|
}
|
||||||
|
|
||||||
|
Properties::Instance()->saveSettings();
|
||||||
|
realign();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::realign()
|
||||||
|
{
|
||||||
|
if (m_dropMode)
|
||||||
|
{
|
||||||
|
QRect desktop = QApplication::desktop()->availableGeometry(this);
|
||||||
|
QRect geometry = QRect(0, 0,
|
||||||
|
desktop.width() * Properties::Instance()->dropWidht / 100,
|
||||||
|
desktop.height() * Properties::Instance()->dropHeight / 100
|
||||||
|
);
|
||||||
|
geometry.moveCenter(desktop.center());
|
||||||
|
// do not use 0 here - we need to calculate with potential panel on top
|
||||||
|
geometry.setTop(desktop.top());
|
||||||
|
|
||||||
|
setGeometry(geometry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::updateActionGroup(QAction *a)
|
||||||
|
{
|
||||||
|
if (a->parent()->objectName() == tabPosMenu->objectName()) {
|
||||||
|
tabPosition->actions().at(Properties::Instance()->tabsPos)->setChecked(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::showHide()
|
||||||
|
{
|
||||||
|
if (isVisible())
|
||||||
|
hide();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
realign();
|
||||||
|
show();
|
||||||
|
activateWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::setKeepOpen(bool value)
|
||||||
|
{
|
||||||
|
Properties::Instance()->dropKeepOpen = value;
|
||||||
|
if (!m_dropLockButton)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (value)
|
||||||
|
m_dropLockButton->setIcon(QIcon::fromTheme("object-locked"));
|
||||||
|
else
|
||||||
|
m_dropLockButton->setIcon(QIcon::fromTheme("object-unlocked"));
|
||||||
|
|
||||||
|
m_dropLockButton->setChecked(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::find()
|
||||||
|
{
|
||||||
|
// A bit ugly perhaps with 4 levels of indirection...
|
||||||
|
consoleTabulator->terminalHolder()->currentTerminal()->impl()->toggleShowSearchBar();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool MainWindow::event(QEvent *event)
|
||||||
|
{
|
||||||
|
if (event->type() == QEvent::WindowDeactivate)
|
||||||
|
{
|
||||||
|
if (m_dropMode &&
|
||||||
|
!Properties::Instance()->dropKeepOpen &&
|
||||||
|
qApp->activeWindow() == 0
|
||||||
|
)
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
return QMainWindow::event(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::newTerminalWindow()
|
||||||
|
{
|
||||||
|
MainWindow *w = new MainWindow(m_initWorkDir, m_initShell, false);
|
||||||
|
w->show();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::bookmarksWidget_callCommand(const QString& cmd)
|
||||||
|
{
|
||||||
|
consoleTabulator->terminalHolder()->currentTerminal()->impl()->sendText(cmd);
|
||||||
|
consoleTabulator->terminalHolder()->currentTerminal()->setFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::bookmarksDock_visibilityChanged(bool visible)
|
||||||
|
{
|
||||||
|
Properties::Instance()->bookmarksVisible = visible;
|
||||||
|
}
|
91
src/mainwindow.h
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2006 by Vladimir Kuznetsov *
|
||||||
|
* vovanec@gmail.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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef MAINWINDOW_H
|
||||||
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
|
#include "ui_qterminal.h"
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
#include "qxtglobalshortcut.h"
|
||||||
|
|
||||||
|
class QToolButton;
|
||||||
|
|
||||||
|
class MainWindow : public QMainWindow , private Ui::mainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
MainWindow(const QString& work_dir, const QString& command,
|
||||||
|
bool dropMode,
|
||||||
|
QWidget * parent = 0, Qt::WindowFlags f = 0);
|
||||||
|
~MainWindow();
|
||||||
|
|
||||||
|
bool dropMode() { return m_dropMode; }
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
void on_consoleTabulator_currentChanged(int);
|
||||||
|
void propertiesChanged();
|
||||||
|
void actAbout_triggered();
|
||||||
|
void actProperties_triggered();
|
||||||
|
void updateActionGroup(QAction *);
|
||||||
|
|
||||||
|
void toggleBorderless();
|
||||||
|
void toggleTabBar();
|
||||||
|
void toggleMenu();
|
||||||
|
|
||||||
|
void showHide();
|
||||||
|
void setKeepOpen(bool value);
|
||||||
|
void find();
|
||||||
|
|
||||||
|
void newTerminalWindow();
|
||||||
|
void bookmarksWidget_callCommand(const QString&);
|
||||||
|
void bookmarksDock_visibilityChanged(bool visible);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool event(QEvent* event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QActionGroup *tabPosition, *scrollBarPosition;
|
||||||
|
QMenu *tabPosMenu, *scrollPosMenu;
|
||||||
|
|
||||||
|
QAction *toggleBorder, *toggleTabbar, *renameSession;
|
||||||
|
|
||||||
|
QString m_initWorkDir;
|
||||||
|
QString m_initShell;
|
||||||
|
|
||||||
|
QDockWidget *m_bookmarksDock;
|
||||||
|
|
||||||
|
void migrate_settings();
|
||||||
|
|
||||||
|
void setup_FileMenu_Actions();
|
||||||
|
void setup_ActionsMenu_Actions();
|
||||||
|
void setup_ViewMenu_Actions();
|
||||||
|
|
||||||
|
void closeEvent(QCloseEvent*);
|
||||||
|
|
||||||
|
void enableDropMode();
|
||||||
|
QToolButton *m_dropLockButton;
|
||||||
|
bool m_dropMode;
|
||||||
|
QxtGlobalShortcut m_dropShortcut;
|
||||||
|
void realign();
|
||||||
|
void setDropShortcut(QKeySequence dropShortCut);
|
||||||
|
};
|
||||||
|
#endif //MAINWINDOW_H
|
186
src/properties.cpp
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
#include <qtermwidget.h>
|
||||||
|
|
||||||
|
#include "properties.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
|
||||||
|
Properties * Properties::m_instance = 0;
|
||||||
|
|
||||||
|
|
||||||
|
Properties * Properties::Instance(const QString& filename)
|
||||||
|
{
|
||||||
|
if (!m_instance)
|
||||||
|
m_instance = new Properties(filename);
|
||||||
|
return m_instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
Properties::Properties(const QString& filename) : filename(filename)
|
||||||
|
{
|
||||||
|
if (filename.isEmpty()) {
|
||||||
|
QSettings settings;
|
||||||
|
this->filename = settings.fileName();
|
||||||
|
}
|
||||||
|
qDebug("Properties constructor called");
|
||||||
|
}
|
||||||
|
|
||||||
|
Properties::~Properties()
|
||||||
|
{
|
||||||
|
qDebug("Properties destructor called");
|
||||||
|
saveSettings();
|
||||||
|
delete m_instance;
|
||||||
|
m_instance = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QFont Properties::defaultFont()
|
||||||
|
{
|
||||||
|
QFont default_font = QApplication::font();
|
||||||
|
default_font.setFamily(DEFAULT_FONT);
|
||||||
|
default_font.setPointSize(12);
|
||||||
|
default_font.setStyleHint(QFont::TypeWriter);
|
||||||
|
return default_font;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Properties::loadSettings()
|
||||||
|
{
|
||||||
|
QSettings settings(filename, QSettings::IniFormat);
|
||||||
|
|
||||||
|
guiStyle = settings.value("guiStyle", QString()).toString();
|
||||||
|
if (!guiStyle.isNull())
|
||||||
|
QApplication::setStyle(guiStyle);
|
||||||
|
|
||||||
|
colorScheme = settings.value("colorScheme", "Linux").toString();
|
||||||
|
|
||||||
|
highlightCurrentTerminal = settings.value("highlightCurrentTerminal", true).toBool();
|
||||||
|
|
||||||
|
font = qvariant_cast<QFont>(settings.value("font", defaultFont()));
|
||||||
|
|
||||||
|
settings.beginGroup("Shortcuts");
|
||||||
|
QStringList keys = settings.childKeys();
|
||||||
|
foreach( QString key, keys )
|
||||||
|
{
|
||||||
|
QKeySequence sequence = QKeySequence( settings.value( key ).toString() );
|
||||||
|
if( Properties::Instance()->actions.contains( key ) )
|
||||||
|
Properties::Instance()->actions[ key ]->setShortcut( sequence );
|
||||||
|
}
|
||||||
|
settings.endGroup();
|
||||||
|
|
||||||
|
mainWindowGeometry = settings.value("MainWindow/geometry").toByteArray();
|
||||||
|
mainWindowState = settings.value("MainWindow/state").toByteArray();
|
||||||
|
|
||||||
|
|
||||||
|
historyLimited = settings.value("HistoryLimited", true).toBool();
|
||||||
|
historyLimitedTo = settings.value("HistoryLimitedTo", 1000).toUInt();
|
||||||
|
|
||||||
|
emulation = settings.value("emulation", "default").toString();
|
||||||
|
|
||||||
|
// sessions
|
||||||
|
int size = settings.beginReadArray("Sessions");
|
||||||
|
for (int i = 0; i < size; ++i)
|
||||||
|
{
|
||||||
|
settings.setArrayIndex(i);
|
||||||
|
QString name(settings.value("name").toString());
|
||||||
|
if (name.isEmpty())
|
||||||
|
continue;
|
||||||
|
sessions[name] = settings.value("state").toByteArray();
|
||||||
|
}
|
||||||
|
settings.endArray();
|
||||||
|
|
||||||
|
appOpacity = settings.value("MainWindow/appOpacity", 100).toInt();
|
||||||
|
termOpacity = settings.value("termOpacity", 100).toInt();
|
||||||
|
|
||||||
|
/* default to Right. see qtermwidget.h */
|
||||||
|
scrollBarPos = settings.value("ScrollbarPosition", 2).toInt();
|
||||||
|
/* default to North. I'd prefer South but North is standard (they say) */
|
||||||
|
tabsPos = settings.value("TabsPosition", 0).toInt();
|
||||||
|
alwaysShowTabs = settings.value("AlwaysShowTabs", true).toBool();
|
||||||
|
m_motionAfterPaste = settings.value("MotionAfterPaste", 0).toInt();
|
||||||
|
|
||||||
|
/* toggles */
|
||||||
|
borderless = settings.value("Borderless", false).toBool();
|
||||||
|
tabBarless = settings.value("TabBarless", false).toBool();
|
||||||
|
menuVisible = settings.value("MenuVisible", true).toBool();
|
||||||
|
askOnExit = settings.value("AskOnExit", true).toBool();
|
||||||
|
useCWD = settings.value("UseCWD", false).toBool();
|
||||||
|
|
||||||
|
// bookmarks
|
||||||
|
useBookmarks = settings.value("UseBookmarks", false).toBool();
|
||||||
|
bookmarksVisible = settings.value("BookmarksVisible", true).toBool();
|
||||||
|
bookmarksFile = settings.value("BookmarksFile", QFileInfo(settings.fileName()).canonicalPath()+"/qterminal_bookmarks.xml").toString();
|
||||||
|
|
||||||
|
settings.beginGroup("DropMode");
|
||||||
|
dropShortCut = QKeySequence(settings.value("ShortCut", "F12").toString());
|
||||||
|
dropKeepOpen = settings.value("KeepOpen", false).toBool();
|
||||||
|
dropShowOnStart = settings.value("ShowOnStart", true).toBool();
|
||||||
|
dropWidht = settings.value("Width", 70).toInt();
|
||||||
|
dropHeight = settings.value("Height", 45).toInt();
|
||||||
|
settings.endGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Properties::saveSettings()
|
||||||
|
{
|
||||||
|
QSettings settings(filename, QSettings::IniFormat);
|
||||||
|
|
||||||
|
settings.setValue("guiStyle", guiStyle);
|
||||||
|
settings.setValue("colorScheme", colorScheme);
|
||||||
|
settings.setValue("highlightCurrentTerminal", highlightCurrentTerminal);
|
||||||
|
settings.setValue("font", font);
|
||||||
|
|
||||||
|
settings.beginGroup("Shortcuts");
|
||||||
|
QMapIterator< QString, QAction * > it(actions);
|
||||||
|
while( it.hasNext() )
|
||||||
|
{
|
||||||
|
it.next();
|
||||||
|
QKeySequence shortcut = it.value()->shortcut();
|
||||||
|
settings.setValue( it.key(), shortcut.toString() );
|
||||||
|
}
|
||||||
|
settings.endGroup();
|
||||||
|
|
||||||
|
settings.setValue("MainWindow/geometry", mainWindowGeometry);
|
||||||
|
settings.setValue("MainWindow/state", mainWindowState);
|
||||||
|
|
||||||
|
settings.setValue("HistoryLimited", historyLimited);
|
||||||
|
settings.setValue("HistoryLimitedTo", historyLimitedTo);
|
||||||
|
|
||||||
|
settings.setValue("emulation", emulation);
|
||||||
|
|
||||||
|
// sessions
|
||||||
|
settings.beginWriteArray("Sessions");
|
||||||
|
int i = 0;
|
||||||
|
Sessions::iterator sit = sessions.begin();
|
||||||
|
while (sit != sessions.end())
|
||||||
|
{
|
||||||
|
settings.setArrayIndex(i);
|
||||||
|
settings.setValue("name", sit.key());
|
||||||
|
settings.setValue("state", sit.value());
|
||||||
|
++sit;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
settings.endArray();
|
||||||
|
|
||||||
|
settings.setValue("MainWindow/appOpacity", appOpacity);
|
||||||
|
settings.setValue("termOpacity", termOpacity);
|
||||||
|
settings.setValue("ScrollbarPosition", scrollBarPos);
|
||||||
|
settings.setValue("TabsPosition", tabsPos);
|
||||||
|
settings.setValue("AlwaysShowTabs", alwaysShowTabs);
|
||||||
|
settings.setValue("MotionAfterPaste", m_motionAfterPaste);
|
||||||
|
settings.setValue("Borderless", borderless);
|
||||||
|
settings.setValue("TabBarless", tabBarless);
|
||||||
|
settings.setValue("MenuVisible", menuVisible);
|
||||||
|
settings.setValue("AskOnExit", askOnExit);
|
||||||
|
settings.setValue("UseCWD", useCWD);
|
||||||
|
|
||||||
|
// bookmarks
|
||||||
|
settings.setValue("UseBookmarks", useBookmarks);
|
||||||
|
settings.setValue("BookmarksVisible", bookmarksVisible);
|
||||||
|
settings.setValue("BookmarksFile", bookmarksFile);
|
||||||
|
|
||||||
|
settings.beginGroup("DropMode");
|
||||||
|
settings.setValue("ShortCut", dropShortCut.toString());
|
||||||
|
settings.setValue("KeepOpen", dropKeepOpen);
|
||||||
|
settings.setValue("ShowOnStart", dropShowOnStart);
|
||||||
|
settings.setValue("Width", dropWidht);
|
||||||
|
settings.setValue("Height", dropHeight);
|
||||||
|
settings.endGroup();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
84
src/properties.h
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#ifndef PROPERTIES_H
|
||||||
|
#define PROPERTIES_H
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QtCore>
|
||||||
|
#include <QFont>
|
||||||
|
#include <QAction>
|
||||||
|
|
||||||
|
typedef QString Session;
|
||||||
|
|
||||||
|
typedef QMap<QString,Session> Sessions;
|
||||||
|
|
||||||
|
typedef QMap<QString,QString> ShortcutMap;
|
||||||
|
|
||||||
|
|
||||||
|
class Properties
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static Properties *Instance(const QString& filename = QString(""));
|
||||||
|
|
||||||
|
QFont defaultFont();
|
||||||
|
void saveSettings();
|
||||||
|
|
||||||
|
QByteArray mainWindowGeometry;
|
||||||
|
QByteArray mainWindowState;
|
||||||
|
//ShortcutMap shortcuts;
|
||||||
|
QString shell;
|
||||||
|
QFont font;
|
||||||
|
QString colorScheme;
|
||||||
|
QString guiStyle;
|
||||||
|
bool highlightCurrentTerminal;
|
||||||
|
|
||||||
|
bool historyLimited;
|
||||||
|
unsigned historyLimitedTo;
|
||||||
|
|
||||||
|
QString emulation;
|
||||||
|
|
||||||
|
Sessions sessions;
|
||||||
|
|
||||||
|
int appOpacity;
|
||||||
|
int termOpacity;
|
||||||
|
|
||||||
|
int scrollBarPos;
|
||||||
|
int tabsPos;
|
||||||
|
bool alwaysShowTabs;
|
||||||
|
int m_motionAfterPaste;
|
||||||
|
|
||||||
|
bool borderless;
|
||||||
|
bool tabBarless;
|
||||||
|
bool menuVisible;
|
||||||
|
|
||||||
|
bool askOnExit;
|
||||||
|
|
||||||
|
bool useCWD;
|
||||||
|
|
||||||
|
bool useBookmarks;
|
||||||
|
bool bookmarksVisible;
|
||||||
|
QString bookmarksFile;
|
||||||
|
|
||||||
|
QKeySequence dropShortCut;
|
||||||
|
bool dropKeepOpen;
|
||||||
|
bool dropShowOnStart;
|
||||||
|
int dropWidht;
|
||||||
|
int dropHeight;
|
||||||
|
|
||||||
|
QMap< QString, QAction * > actions;
|
||||||
|
|
||||||
|
void loadSettings();
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
// Singleton handling
|
||||||
|
static Properties *m_instance;
|
||||||
|
QString filename;
|
||||||
|
|
||||||
|
explicit Properties(const QString& filename);
|
||||||
|
Properties(const Properties &) {};
|
||||||
|
~Properties();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
331
src/propertiesdialog.cpp
Normal file
@ -0,0 +1,331 @@
|
|||||||
|
#include <qtermwidget.h>
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QStyleFactory>
|
||||||
|
#include <QFileDialog>
|
||||||
|
|
||||||
|
#include "propertiesdialog.h"
|
||||||
|
#include "properties.h"
|
||||||
|
#include "fontdialog.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
|
||||||
|
PropertiesDialog::PropertiesDialog(QWidget *parent)
|
||||||
|
: QDialog(parent)
|
||||||
|
{
|
||||||
|
setupUi(this);
|
||||||
|
|
||||||
|
connect(buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked()),
|
||||||
|
this, SLOT(apply()));
|
||||||
|
connect(changeFontButton, SIGNAL(clicked()),
|
||||||
|
this, SLOT(changeFontButton_clicked()));
|
||||||
|
|
||||||
|
QStringList emulations = QTermWidget::availableKeyBindings();
|
||||||
|
QStringList colorSchemes = QTermWidget::availableColorSchemes();
|
||||||
|
|
||||||
|
listWidget->setCurrentRow(0);
|
||||||
|
|
||||||
|
colorSchemaCombo->addItems(colorSchemes);
|
||||||
|
int csix = colorSchemaCombo->findText(Properties::Instance()->colorScheme);
|
||||||
|
if (csix != -1)
|
||||||
|
colorSchemaCombo->setCurrentIndex(csix);
|
||||||
|
|
||||||
|
emulationComboBox->addItems(emulations);
|
||||||
|
int eix = emulationComboBox->findText(Properties::Instance()->emulation);
|
||||||
|
emulationComboBox->setCurrentIndex(eix != -1 ? eix : 0 );
|
||||||
|
|
||||||
|
/* shortcuts */
|
||||||
|
setupShortcuts();
|
||||||
|
|
||||||
|
/* scrollbar position */
|
||||||
|
QStringList scrollBarPosList;
|
||||||
|
scrollBarPosList << "No scrollbar" << "Left" << "Right";
|
||||||
|
scrollBarPos_comboBox->addItems(scrollBarPosList);
|
||||||
|
scrollBarPos_comboBox->setCurrentIndex(Properties::Instance()->scrollBarPos);
|
||||||
|
|
||||||
|
/* tabs position */
|
||||||
|
QStringList tabsPosList;
|
||||||
|
tabsPosList << "Top" << "Bottom" << "Left" << "Right";
|
||||||
|
tabsPos_comboBox->addItems(tabsPosList);
|
||||||
|
tabsPos_comboBox->setCurrentIndex(Properties::Instance()->tabsPos);
|
||||||
|
|
||||||
|
alwaysShowTabsCheckBox->setChecked(Properties::Instance()->alwaysShowTabs);
|
||||||
|
|
||||||
|
// show main menu bar
|
||||||
|
showMenuCheckBox->setChecked(Properties::Instance()->menuVisible);
|
||||||
|
|
||||||
|
/* actions by motion after paste */
|
||||||
|
|
||||||
|
QStringList motionAfter;
|
||||||
|
motionAfter << "No move" << "Move start" << "Move end";
|
||||||
|
motionAfterPasting_comboBox->addItems(motionAfter);
|
||||||
|
motionAfterPasting_comboBox->setCurrentIndex(Properties::Instance()->m_motionAfterPaste);
|
||||||
|
|
||||||
|
// Setting windows style actions
|
||||||
|
styleComboBox->addItem(tr("System Default"));
|
||||||
|
styleComboBox->addItems(QStyleFactory::keys());
|
||||||
|
|
||||||
|
int ix = styleComboBox->findText(Properties::Instance()->guiStyle);
|
||||||
|
if (ix != -1)
|
||||||
|
styleComboBox->setCurrentIndex(ix);
|
||||||
|
|
||||||
|
setFontSample(Properties::Instance()->font);
|
||||||
|
|
||||||
|
appOpacityBox->setValue(Properties::Instance()->appOpacity);
|
||||||
|
//connect(appOpacityBox, SIGNAL(valueChanged(int)), this, SLOT(apply()));
|
||||||
|
|
||||||
|
termOpacityBox->setValue(Properties::Instance()->termOpacity);
|
||||||
|
//connect(termOpacityBox, SIGNAL(valueChanged(int)), this, SLOT(apply()));
|
||||||
|
|
||||||
|
highlightCurrentCheckBox->setChecked(Properties::Instance()->highlightCurrentTerminal);
|
||||||
|
|
||||||
|
askOnExitCheckBox->setChecked(Properties::Instance()->askOnExit);
|
||||||
|
|
||||||
|
useCwdCheckBox->setChecked(Properties::Instance()->useCWD);
|
||||||
|
|
||||||
|
historyLimited->setChecked(Properties::Instance()->historyLimited);
|
||||||
|
historyUnlimited->setChecked(!Properties::Instance()->historyLimited);
|
||||||
|
historyLimitedTo->setValue(Properties::Instance()->historyLimitedTo);
|
||||||
|
|
||||||
|
dropShowOnStartCheckBox->setChecked(Properties::Instance()->dropShowOnStart);
|
||||||
|
dropHeightSpinBox->setValue(Properties::Instance()->dropHeight);
|
||||||
|
dropWidthSpinBox->setValue(Properties::Instance()->dropWidht);
|
||||||
|
dropShortCutEdit->setText(Properties::Instance()->dropShortCut.toString());
|
||||||
|
|
||||||
|
useBookmarksCheckBox->setChecked(Properties::Instance()->useBookmarks);
|
||||||
|
bookmarksLineEdit->setText(Properties::Instance()->bookmarksFile);
|
||||||
|
openBookmarksFile(Properties::Instance()->bookmarksFile);
|
||||||
|
connect(bookmarksButton, SIGNAL(clicked()),
|
||||||
|
this, SLOT(bookmarksButton_clicked()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PropertiesDialog::~PropertiesDialog()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropertiesDialog::accept()
|
||||||
|
{
|
||||||
|
apply();
|
||||||
|
QDialog::accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropertiesDialog::apply()
|
||||||
|
{
|
||||||
|
Properties::Instance()->colorScheme = colorSchemaCombo->currentText();
|
||||||
|
Properties::Instance()->font = fontSampleLabel->font();//fontComboBox->currentFont();
|
||||||
|
Properties::Instance()->guiStyle = (styleComboBox->currentText() == tr("System Default")) ?
|
||||||
|
QString() : styleComboBox->currentText();
|
||||||
|
|
||||||
|
Properties::Instance()->emulation = emulationComboBox->currentText();
|
||||||
|
|
||||||
|
/* do not allow to go above 99 or we lose transparency option */
|
||||||
|
(appOpacityBox->value() >= 100) ?
|
||||||
|
Properties::Instance()->appOpacity = 99
|
||||||
|
:
|
||||||
|
Properties::Instance()->appOpacity = appOpacityBox->value();
|
||||||
|
|
||||||
|
Properties::Instance()->termOpacity = termOpacityBox->value();
|
||||||
|
Properties::Instance()->highlightCurrentTerminal = highlightCurrentCheckBox->isChecked();
|
||||||
|
|
||||||
|
Properties::Instance()->askOnExit = askOnExitCheckBox->isChecked();
|
||||||
|
|
||||||
|
Properties::Instance()->useCWD = useCwdCheckBox->isChecked();
|
||||||
|
|
||||||
|
Properties::Instance()->scrollBarPos = scrollBarPos_comboBox->currentIndex();
|
||||||
|
Properties::Instance()->tabsPos = tabsPos_comboBox->currentIndex();
|
||||||
|
Properties::Instance()->alwaysShowTabs = alwaysShowTabsCheckBox->isChecked();
|
||||||
|
Properties::Instance()->menuVisible = showMenuCheckBox->isChecked();
|
||||||
|
Properties::Instance()->m_motionAfterPaste = motionAfterPasting_comboBox->currentIndex();
|
||||||
|
|
||||||
|
Properties::Instance()->historyLimited = historyLimited->isChecked();
|
||||||
|
Properties::Instance()->historyLimitedTo = historyLimitedTo->value();
|
||||||
|
|
||||||
|
saveShortcuts();
|
||||||
|
|
||||||
|
Properties::Instance()->saveSettings();
|
||||||
|
|
||||||
|
Properties::Instance()->dropShowOnStart = dropShowOnStartCheckBox->isChecked();
|
||||||
|
Properties::Instance()->dropHeight = dropHeightSpinBox->value();
|
||||||
|
Properties::Instance()->dropWidht = dropWidthSpinBox->value();
|
||||||
|
Properties::Instance()->dropShortCut = QKeySequence(dropShortCutEdit->text());
|
||||||
|
|
||||||
|
Properties::Instance()->useBookmarks = useBookmarksCheckBox->isChecked();
|
||||||
|
Properties::Instance()->bookmarksFile = bookmarksLineEdit->text();
|
||||||
|
saveBookmarksFile(Properties::Instance()->bookmarksFile);
|
||||||
|
|
||||||
|
emit propertiesChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropertiesDialog::setFontSample(const QFont & f)
|
||||||
|
{
|
||||||
|
fontSampleLabel->setFont(f);
|
||||||
|
QString sample("%1 %2 pt");
|
||||||
|
fontSampleLabel->setText(sample.arg(f.family()).arg(f.pointSize()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropertiesDialog::changeFontButton_clicked()
|
||||||
|
{
|
||||||
|
FontDialog dia(fontSampleLabel->font());
|
||||||
|
if (!dia.exec())
|
||||||
|
return;
|
||||||
|
QFont f = dia.getFont();
|
||||||
|
if (QFontInfo(f).fixedPitch())
|
||||||
|
setFontSample(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropertiesDialog::saveShortcuts()
|
||||||
|
{
|
||||||
|
QList< QString > shortcutKeys = Properties::Instance()->actions.keys();
|
||||||
|
int shortcutCount = shortcutKeys.count();
|
||||||
|
|
||||||
|
shortcutsWidget->setRowCount( shortcutCount );
|
||||||
|
|
||||||
|
for( int x=0; x < shortcutCount; x++ )
|
||||||
|
{
|
||||||
|
QString keyValue = shortcutKeys.at(x);
|
||||||
|
QAction *keyAction = Properties::Instance()->actions[keyValue];
|
||||||
|
|
||||||
|
QTableWidgetItem *item = shortcutsWidget->item(x, 1);
|
||||||
|
QKeySequence sequence = QKeySequence(item->text());
|
||||||
|
QString sequenceString = sequence.toString();
|
||||||
|
|
||||||
|
keyAction->setShortcut(sequenceString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropertiesDialog::setupShortcuts()
|
||||||
|
{
|
||||||
|
QList< QString > shortcutKeys = Properties::Instance()->actions.keys();
|
||||||
|
int shortcutCount = shortcutKeys.count();
|
||||||
|
|
||||||
|
shortcutsWidget->setRowCount( shortcutCount );
|
||||||
|
|
||||||
|
for( int x=0; x < shortcutCount; x++ )
|
||||||
|
{
|
||||||
|
QString keyValue = shortcutKeys.at(x);
|
||||||
|
QAction *keyAction = Properties::Instance()->actions[keyValue];
|
||||||
|
|
||||||
|
QTableWidgetItem *itemName = new QTableWidgetItem( tr(keyValue.toStdString().c_str()) );
|
||||||
|
QTableWidgetItem *itemShortcut = new QTableWidgetItem( keyAction->shortcut().toString() );
|
||||||
|
|
||||||
|
itemName->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled );
|
||||||
|
|
||||||
|
shortcutsWidget->setItem(x, 0, itemName);
|
||||||
|
shortcutsWidget->setItem(x, 1, itemShortcut);
|
||||||
|
}
|
||||||
|
|
||||||
|
shortcutsWidget->resizeColumnsToContents();
|
||||||
|
/*
|
||||||
|
connect(shortcutsWidget, SIGNAL(currentChanged(int, int)),
|
||||||
|
this, SLOT(recordAction(int, int)));
|
||||||
|
connect(shortcutsWidget, SIGNAL(valueChanged(int, int)),
|
||||||
|
this, SLOT(validateAction(int, int)));
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropertiesDialog::recordAction(int row, int column)
|
||||||
|
{
|
||||||
|
oldAccelText = shortcutsWidget->item(row, column)->text();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropertiesDialog::validateAction(int row, int column)
|
||||||
|
{
|
||||||
|
QTableWidgetItem *item = shortcutsWidget->item(row, column);
|
||||||
|
QString accelText = QKeySequence(item->text()).toString();
|
||||||
|
|
||||||
|
if (accelText.isEmpty() && !item->text().isEmpty())
|
||||||
|
item->setText(oldAccelText);
|
||||||
|
else
|
||||||
|
item->setText(accelText);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropertiesDialog::bookmarksButton_clicked()
|
||||||
|
{
|
||||||
|
QFileDialog dia(this, tr("Open or create bookmarks file"));
|
||||||
|
dia.setConfirmOverwrite(false);
|
||||||
|
dia.setFileMode(QFileDialog::AnyFile);
|
||||||
|
if (!dia.exec())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QString fname = dia.selectedFiles().count() ? dia.selectedFiles().at(0) : QString();
|
||||||
|
if (fname.isNull())
|
||||||
|
return;
|
||||||
|
|
||||||
|
bookmarksLineEdit->setText(fname);
|
||||||
|
openBookmarksFile(bookmarksLineEdit->text());
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropertiesDialog::openBookmarksFile(const QString &fname)
|
||||||
|
{
|
||||||
|
QFile f(fname);
|
||||||
|
QString content;
|
||||||
|
if (!f.open(QFile::ReadOnly))
|
||||||
|
content = "<qterminal>\n <group name\"group1\">\n <command name=\"cmd1\" value=\"cd $HOME\"/>\n </group>\n</qterminal>";
|
||||||
|
else
|
||||||
|
content = f.readAll();
|
||||||
|
|
||||||
|
bookmarkPlainEdit->setPlainText(content);
|
||||||
|
bookmarkPlainEdit->document()->setModified(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropertiesDialog::saveBookmarksFile(const QString &fname)
|
||||||
|
{
|
||||||
|
if (!bookmarkPlainEdit->document()->isModified())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QFile f(fname);
|
||||||
|
if (!f.open(QFile::WriteOnly|QFile::Truncate))
|
||||||
|
qDebug() << "Cannot write to file" << f.fileName();
|
||||||
|
else
|
||||||
|
f.write(bookmarkPlainEdit->toPlainText().toUtf8());
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
void PropertiesDialog::setupShortcuts()
|
||||||
|
{
|
||||||
|
QList< QString > shortcutKeys = Properties::Instance()->shortcuts.keys();
|
||||||
|
int shortcutCount = shortcutKeys.count();
|
||||||
|
|
||||||
|
shortcutsWidget->setRowCount( shortcutCount );
|
||||||
|
|
||||||
|
for( int x=0; x < shortcutCount; x++ )
|
||||||
|
{
|
||||||
|
QString keyValue = shortcutKeys.at(x);
|
||||||
|
|
||||||
|
QLabel *lblShortcut = new QLabel( keyValue, this );
|
||||||
|
QPushButton *btnLaunch = new QPushButton( Properties::Instance()->shortcuts.value( keyValue ), this );
|
||||||
|
|
||||||
|
btnLaunch->setObjectName(keyValue);
|
||||||
|
connect( btnLaunch, SIGNAL(clicked()), this, SLOT(shortcutPrompt()) );
|
||||||
|
|
||||||
|
shortcutsWidget->setCellWidget( x, 0, lblShortcut );
|
||||||
|
shortcutsWidget->setCellWidget( x, 1, btnLaunch );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropertiesDialog::shortcutPrompt()
|
||||||
|
{
|
||||||
|
QObject *objectSender = sender();
|
||||||
|
|
||||||
|
if( !objectSender )
|
||||||
|
return;
|
||||||
|
|
||||||
|
QString name = objectSender->objectName();
|
||||||
|
qDebug() << "shortcutPrompt(" << name << ")";
|
||||||
|
|
||||||
|
DialogShortcut *dlgShortcut = new DialogShortcut(this);
|
||||||
|
dlgShortcut->setTitle( tr("Select a key sequence for %1").arg(name) );
|
||||||
|
|
||||||
|
QString sequenceString = Properties::Instance()->shortcuts[name];
|
||||||
|
dlgShortcut->setKey(sequenceString);
|
||||||
|
|
||||||
|
int result = dlgShortcut->exec();
|
||||||
|
if( result == QDialog::Accepted )
|
||||||
|
{
|
||||||
|
sequenceString = dlgShortcut->getKey();
|
||||||
|
Properties::Instance()->shortcuts[name] = sequenceString;
|
||||||
|
Properties::Instance()->saveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
40
src/propertiesdialog.h
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#ifndef PROPERTIESDIALOG_H
|
||||||
|
#define PROPERTIESDIALOG_H
|
||||||
|
|
||||||
|
#include "ui_propertiesdialog.h"
|
||||||
|
|
||||||
|
class PropertiesDialog : public QDialog, Ui::PropertiesDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
QString oldAccelText; // Placeholder when editing shortcut
|
||||||
|
|
||||||
|
public:
|
||||||
|
PropertiesDialog(QWidget *parent=NULL);
|
||||||
|
~PropertiesDialog();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void propertiesChanged();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void setFontSample(const QFont & f);
|
||||||
|
void openBookmarksFile(const QString &fname);
|
||||||
|
void saveBookmarksFile(const QString &fname);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void apply();
|
||||||
|
void accept();
|
||||||
|
|
||||||
|
void changeFontButton_clicked();
|
||||||
|
void bookmarksButton_clicked();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void setupShortcuts();
|
||||||
|
void saveShortcuts();
|
||||||
|
void recordAction(int row, int column);
|
||||||
|
void validateAction(int row, int column);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
386
src/tabwidget.cpp
Normal file
@ -0,0 +1,386 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2006 by Vladimir Kuznetsov *
|
||||||
|
* vovanec@gmail.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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include <QTabBar>
|
||||||
|
#include <QInputDialog>
|
||||||
|
#include <QMouseEvent>
|
||||||
|
#include <QMenu>
|
||||||
|
|
||||||
|
#include "termwidgetholder.h"
|
||||||
|
#include "tabwidget.h"
|
||||||
|
#include "config.h"
|
||||||
|
#include "properties.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define TAB_INDEX_PROPERTY "tab_index"
|
||||||
|
|
||||||
|
|
||||||
|
TabWidget::TabWidget(QWidget* parent) : QTabWidget(parent), tabNumerator(0)
|
||||||
|
{
|
||||||
|
setFocusPolicy(Qt::NoFocus);
|
||||||
|
|
||||||
|
/* On Mac OS X this will look similar to
|
||||||
|
* the tabs in Safari or Leopard's Terminal.app .
|
||||||
|
* I love this!
|
||||||
|
*/
|
||||||
|
setDocumentMode(true);
|
||||||
|
|
||||||
|
tabBar()->setUsesScrollButtons(true);
|
||||||
|
|
||||||
|
setTabsClosable(true);
|
||||||
|
setMovable(true);
|
||||||
|
setUsesScrollButtons(true);
|
||||||
|
|
||||||
|
tabBar()->installEventFilter(this);
|
||||||
|
|
||||||
|
connect(this, SIGNAL(tabCloseRequested(int)), this, SLOT(removeTab(int)));
|
||||||
|
}
|
||||||
|
|
||||||
|
TermWidgetHolder * TabWidget::terminalHolder()
|
||||||
|
{
|
||||||
|
return reinterpret_cast<TermWidgetHolder*>(widget(currentIndex()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::setWorkDirectory(const QString& dir)
|
||||||
|
{
|
||||||
|
this->work_dir = dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TabWidget::addNewTab(const QString & shell_program)
|
||||||
|
{
|
||||||
|
tabNumerator++;
|
||||||
|
QString label = QString(tr("Shell No. %1")).arg(tabNumerator);
|
||||||
|
|
||||||
|
TermWidgetHolder *ch = terminalHolder();
|
||||||
|
QString cwd(work_dir);
|
||||||
|
if (Properties::Instance()->useCWD && ch)
|
||||||
|
{
|
||||||
|
cwd = ch->currentTerminal()->impl()->workingDirectory();
|
||||||
|
if (cwd.isEmpty())
|
||||||
|
cwd = work_dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
TermWidgetHolder *console = new TermWidgetHolder(cwd, shell_program, this);
|
||||||
|
connect(console, SIGNAL(finished()), SLOT(removeFinished()));
|
||||||
|
//connect(console, SIGNAL(lastTerminalClosed()), this, SLOT(removeCurrentTab()));
|
||||||
|
connect(console, SIGNAL(lastTerminalClosed()), this, SLOT(removeFinished()));
|
||||||
|
connect(console, SIGNAL(renameSession()), this, SLOT(renameSession()));
|
||||||
|
|
||||||
|
int index = addTab(console, label);
|
||||||
|
recountIndexes();
|
||||||
|
setCurrentIndex(index);
|
||||||
|
console->setInitialFocus();
|
||||||
|
|
||||||
|
showHideTabBar();
|
||||||
|
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::switchNextSubterminal()
|
||||||
|
{
|
||||||
|
terminalHolder()->switchNextSubterminal();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::switchPrevSubterminal()
|
||||||
|
{
|
||||||
|
terminalHolder()->switchPrevSubterminal();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::splitHorizontally()
|
||||||
|
{
|
||||||
|
terminalHolder()->splitHorizontal(terminalHolder()->currentTerminal());
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::splitVertically()
|
||||||
|
{
|
||||||
|
terminalHolder()->splitVertical(terminalHolder()->currentTerminal());
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::splitCollapse()
|
||||||
|
{
|
||||||
|
terminalHolder()->splitCollapse(terminalHolder()->currentTerminal());
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::copySelection()
|
||||||
|
{
|
||||||
|
terminalHolder()->currentTerminal()->impl()->copyClipboard();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::pasteClipboard()
|
||||||
|
{
|
||||||
|
terminalHolder()->currentTerminal()->impl()->pasteClipboard();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::pasteSelection()
|
||||||
|
{
|
||||||
|
terminalHolder()->currentTerminal()->impl()->pasteSelection();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::zoomIn()
|
||||||
|
{
|
||||||
|
terminalHolder()->currentTerminal()->impl()->zoomIn();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::zoomOut()
|
||||||
|
{
|
||||||
|
terminalHolder()->currentTerminal()->impl()->zoomOut();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::zoomReset()
|
||||||
|
{
|
||||||
|
terminalHolder()->currentTerminal()->impl()->zoomReset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::recountIndexes()
|
||||||
|
{
|
||||||
|
for(int i = 0; i < count(); i++)
|
||||||
|
widget(i)->setProperty(TAB_INDEX_PROPERTY, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::renameSession()
|
||||||
|
{
|
||||||
|
bool ok = false;
|
||||||
|
QString text = QInputDialog::getText(this, tr("Tab name"),
|
||||||
|
tr("New tab name:"), QLineEdit::Normal,
|
||||||
|
QString(), &ok);
|
||||||
|
if(ok && !text.isEmpty())
|
||||||
|
{
|
||||||
|
setTabText(currentIndex(), text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::renameTabsAfterRemove()
|
||||||
|
{
|
||||||
|
// it breaks custom names - it replaces original/custom title with shell no #
|
||||||
|
#if 0
|
||||||
|
for(int i = 0; i < count(); i++) {
|
||||||
|
setTabText(i, QString(tr("Shell No. %1")).arg(i+1));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::contextMenuEvent ( QContextMenuEvent * event )
|
||||||
|
{
|
||||||
|
QMenu menu(this);
|
||||||
|
|
||||||
|
menu.addAction(QIcon::fromTheme("document-close"), tr("Close session"),
|
||||||
|
this, SLOT(removeCurrentTab()));
|
||||||
|
menu.addAction(tr("Rename session"), this, SLOT(renameSession()), tr(RENAME_SESSION_SHORTCUT));
|
||||||
|
|
||||||
|
menu.exec(event->globalPos());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TabWidget::eventFilter(QObject *obj, QEvent *event)
|
||||||
|
{
|
||||||
|
if (event->type() == QEvent::MouseButtonDblClick)
|
||||||
|
{
|
||||||
|
QMouseEvent *e = reinterpret_cast<QMouseEvent*>(event);
|
||||||
|
// if user doubleclicks on tab button - rename it. If user
|
||||||
|
// clicks on free space - open new tab
|
||||||
|
if (tabBar()->tabAt(e->pos()) == -1)
|
||||||
|
addNewTab();
|
||||||
|
else
|
||||||
|
renameSession();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return QTabWidget::eventFilter(obj, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::removeFinished()
|
||||||
|
{
|
||||||
|
QObject* term = sender();
|
||||||
|
QVariant prop = term->property(TAB_INDEX_PROPERTY);
|
||||||
|
if(prop.isValid() && prop.canConvert(QVariant::Int))
|
||||||
|
{
|
||||||
|
int index = prop.toInt();
|
||||||
|
removeTab(index);
|
||||||
|
// if (count() == 0)
|
||||||
|
// emit closeTabNotification();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::removeTab(int index)
|
||||||
|
{
|
||||||
|
setUpdatesEnabled(false);
|
||||||
|
|
||||||
|
QWidget * w = widget(index);
|
||||||
|
QTabWidget::removeTab(index);
|
||||||
|
w->deleteLater();
|
||||||
|
|
||||||
|
recountIndexes();
|
||||||
|
int current = currentIndex();
|
||||||
|
if (current >= 0 )
|
||||||
|
{
|
||||||
|
qobject_cast<TermWidgetHolder*>(widget(current))->setInitialFocus();
|
||||||
|
}
|
||||||
|
// do not decrease it as renaming is disabled in renameTabsAfterRemove
|
||||||
|
// tabNumerator--;
|
||||||
|
setUpdatesEnabled(true);
|
||||||
|
|
||||||
|
if (count() == 0)
|
||||||
|
emit closeTabNotification();
|
||||||
|
|
||||||
|
renameTabsAfterRemove();
|
||||||
|
showHideTabBar();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::removeCurrentTab()
|
||||||
|
{
|
||||||
|
// question disabled due user requests. Yes I agree it was anoying.
|
||||||
|
// if (QMessageBox::question(this,
|
||||||
|
// tr("Close current session"),
|
||||||
|
// tr("Are you sure you want to close current sesstion?"),
|
||||||
|
// QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)
|
||||||
|
// {
|
||||||
|
if (count() > 1) {
|
||||||
|
removeTab(currentIndex());
|
||||||
|
} else {
|
||||||
|
emit closeTabNotification();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int TabWidget::switchToRight()
|
||||||
|
{
|
||||||
|
int next_pos = currentIndex() + 1;
|
||||||
|
if (next_pos < count())
|
||||||
|
setCurrentIndex(next_pos);
|
||||||
|
else
|
||||||
|
setCurrentIndex(0);
|
||||||
|
return currentIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
int TabWidget::switchToLeft()
|
||||||
|
{
|
||||||
|
int previous_pos = currentIndex() - 1;
|
||||||
|
if (previous_pos < 0)
|
||||||
|
setCurrentIndex(count() - 1);
|
||||||
|
else
|
||||||
|
setCurrentIndex(previous_pos);
|
||||||
|
return currentIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TabWidget::move(Direction dir)
|
||||||
|
{
|
||||||
|
if(count() > 1)
|
||||||
|
{
|
||||||
|
int index = currentIndex();
|
||||||
|
QWidget* child = widget(index);
|
||||||
|
QString label = tabText(index);
|
||||||
|
QString toolTip = tabToolTip(index);
|
||||||
|
QIcon icon = tabIcon(index);
|
||||||
|
|
||||||
|
int newIndex = 0;
|
||||||
|
if(dir == Left)
|
||||||
|
if(index == 0)
|
||||||
|
newIndex = count() -1;
|
||||||
|
else
|
||||||
|
newIndex = index - 1;
|
||||||
|
else
|
||||||
|
if(index == count() - 1)
|
||||||
|
newIndex = 0;
|
||||||
|
else
|
||||||
|
newIndex = index + 1;
|
||||||
|
|
||||||
|
setUpdatesEnabled(false);
|
||||||
|
QTabWidget::removeTab(index);
|
||||||
|
newIndex = insertTab(newIndex, child, label);
|
||||||
|
setTabToolTip(newIndex, toolTip);
|
||||||
|
setTabIcon(newIndex, icon);
|
||||||
|
setUpdatesEnabled(true);
|
||||||
|
setCurrentIndex(newIndex);
|
||||||
|
child->setFocus();
|
||||||
|
recountIndexes();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::moveLeft()
|
||||||
|
{
|
||||||
|
move(Left);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::moveRight()
|
||||||
|
{
|
||||||
|
move(Right);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::changeScrollPosition(QAction *triggered)
|
||||||
|
{
|
||||||
|
QActionGroup *scrollPosition = static_cast<QActionGroup *>(sender());
|
||||||
|
if(!scrollPosition)
|
||||||
|
qFatal("scrollPosition is NULL");
|
||||||
|
|
||||||
|
|
||||||
|
Properties::Instance()->scrollBarPos =
|
||||||
|
scrollPosition->actions().indexOf(triggered);
|
||||||
|
|
||||||
|
Properties::Instance()->saveSettings();
|
||||||
|
propertiesChanged();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::changeTabPosition(QAction *triggered)
|
||||||
|
{
|
||||||
|
QActionGroup *tabPosition = static_cast<QActionGroup *>(sender());
|
||||||
|
if(!tabPosition)
|
||||||
|
qFatal("tabPosition is NULL");
|
||||||
|
|
||||||
|
Properties *prop = Properties::Instance();
|
||||||
|
/* order is dictated from mainwindow.cpp */
|
||||||
|
QTabWidget::TabPosition position = (QTabWidget::TabPosition)tabPosition->actions().indexOf(triggered);
|
||||||
|
setTabPosition(position);
|
||||||
|
prop->tabsPos = position;
|
||||||
|
prop->saveSettings();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::propertiesChanged()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < count(); ++i)
|
||||||
|
{
|
||||||
|
TermWidgetHolder *console = static_cast<TermWidgetHolder*>(widget(i));
|
||||||
|
console->propertiesChanged();
|
||||||
|
}
|
||||||
|
showHideTabBar();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::clearActiveTerminal()
|
||||||
|
{
|
||||||
|
reinterpret_cast<TermWidgetHolder*>(widget(currentIndex()))->clearActiveTerminal();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::saveSession()
|
||||||
|
{
|
||||||
|
int ix = currentIndex();
|
||||||
|
reinterpret_cast<TermWidgetHolder*>(widget(ix))->saveSession(tabText(ix));
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::loadSession()
|
||||||
|
{
|
||||||
|
reinterpret_cast<TermWidgetHolder*>(widget(currentIndex()))->loadSession();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabWidget::showHideTabBar()
|
||||||
|
{
|
||||||
|
if (Properties::Instance()->tabBarless)
|
||||||
|
tabBar()->setVisible(false);
|
||||||
|
else
|
||||||
|
tabBar()->setVisible(Properties::Instance()->alwaysShowTabs || count() > 1);
|
||||||
|
}
|
100
src/tabwidget.h
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2006 by Vladimir Kuznetsov *
|
||||||
|
* vovanec@gmail.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., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef TAB_WIDGET
|
||||||
|
#define TAB_WIDGET
|
||||||
|
|
||||||
|
#include <QTabWidget>
|
||||||
|
#include <QMap>
|
||||||
|
|
||||||
|
#include "properties.h"
|
||||||
|
|
||||||
|
class TermWidgetHolder;
|
||||||
|
class QAction;
|
||||||
|
class QActionGroup;
|
||||||
|
|
||||||
|
|
||||||
|
class TabWidget : public QTabWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
TabWidget(QWidget* parent = 0);
|
||||||
|
|
||||||
|
TermWidgetHolder * terminalHolder();
|
||||||
|
|
||||||
|
void showHideTabBar();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
int addNewTab(const QString& shell_program = QString());
|
||||||
|
void removeTab(int);
|
||||||
|
void removeCurrentTab();
|
||||||
|
int switchToRight();
|
||||||
|
int switchToLeft();
|
||||||
|
void removeFinished();
|
||||||
|
void moveLeft();
|
||||||
|
void moveRight();
|
||||||
|
void renameSession();
|
||||||
|
void setWorkDirectory(const QString&);
|
||||||
|
|
||||||
|
void switchNextSubterminal();
|
||||||
|
void switchPrevSubterminal();
|
||||||
|
void splitHorizontally();
|
||||||
|
void splitVertically();
|
||||||
|
void splitCollapse();
|
||||||
|
|
||||||
|
void copySelection();
|
||||||
|
void pasteClipboard();
|
||||||
|
void pasteSelection();
|
||||||
|
void zoomIn();
|
||||||
|
void zoomOut();
|
||||||
|
void zoomReset();
|
||||||
|
|
||||||
|
void changeTabPosition(QAction *);
|
||||||
|
void changeScrollPosition(QAction *);
|
||||||
|
void propertiesChanged();
|
||||||
|
|
||||||
|
void clearActiveTerminal();
|
||||||
|
|
||||||
|
void saveSession();
|
||||||
|
void loadSession();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void closeTabNotification();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
enum Direction{Left = 1, Right};
|
||||||
|
void contextMenuEvent(QContextMenuEvent * event);
|
||||||
|
void recountIndexes();
|
||||||
|
void move(Direction);
|
||||||
|
/*! Event filter for TabWidget's QTabBar. It's installed on tabBar()
|
||||||
|
in the constructor.
|
||||||
|
It's purpose is to handle doubleclicks on QTabBar for session
|
||||||
|
renaming or new tab opening
|
||||||
|
*/
|
||||||
|
bool eventFilter(QObject *obj, QEvent *event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int tabNumerator;
|
||||||
|
QString work_dir;
|
||||||
|
/* re-order naming of the tabs then removeCurrentTab() */
|
||||||
|
void renameTabsAfterRemove();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
192
src/termwidget.cpp
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
#include <QMenu>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QDesktopServices>
|
||||||
|
|
||||||
|
#include "termwidget.h"
|
||||||
|
#include "config.h"
|
||||||
|
#include "properties.h"
|
||||||
|
|
||||||
|
static int TermWidgetCount = 0;
|
||||||
|
|
||||||
|
|
||||||
|
TermWidgetImpl::TermWidgetImpl(const QString & wdir, const QString & shell, QWidget * parent)
|
||||||
|
: QTermWidget(0, parent)
|
||||||
|
{
|
||||||
|
TermWidgetCount++;
|
||||||
|
QString name("TermWidget_%1");
|
||||||
|
setObjectName(name.arg(TermWidgetCount));
|
||||||
|
|
||||||
|
setFlowControlEnabled(FLOW_CONTROL_ENABLED);
|
||||||
|
setFlowControlWarningEnabled(FLOW_CONTROL_WARNING_ENABLED);
|
||||||
|
|
||||||
|
propertiesChanged();
|
||||||
|
|
||||||
|
setHistorySize(5000);
|
||||||
|
|
||||||
|
if (!wdir.isNull())
|
||||||
|
setWorkingDirectory(wdir);
|
||||||
|
|
||||||
|
if (shell.isNull())
|
||||||
|
{
|
||||||
|
if (!Properties::Instance()->shell.isNull())
|
||||||
|
setShellProgram(Properties::Instance()->shell);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug() << "Settings custom shell program:" << shell;
|
||||||
|
QStringList parts = shell.split(QRegExp("\\s+"), QString::SkipEmptyParts);
|
||||||
|
qDebug() << parts;
|
||||||
|
setShellProgram(parts.at(0));
|
||||||
|
parts.removeAt(0);
|
||||||
|
if (parts.count())
|
||||||
|
setArgs(parts);
|
||||||
|
}
|
||||||
|
|
||||||
|
setMotionAfterPasting(Properties::Instance()->m_motionAfterPaste);
|
||||||
|
|
||||||
|
setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
|
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)),
|
||||||
|
this, SLOT(customContextMenuCall(const QPoint &)));
|
||||||
|
|
||||||
|
connect(this, SIGNAL(urlActivated(QUrl)), this, SLOT(activateUrl(const QUrl&)));
|
||||||
|
|
||||||
|
startShellProgram();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetImpl::propertiesChanged()
|
||||||
|
{
|
||||||
|
setColorScheme(Properties::Instance()->colorScheme);
|
||||||
|
setTerminalFont(Properties::Instance()->font);
|
||||||
|
setMotionAfterPasting(Properties::Instance()->m_motionAfterPaste);
|
||||||
|
|
||||||
|
if (Properties::Instance()->historyLimited)
|
||||||
|
{
|
||||||
|
setHistorySize(Properties::Instance()->historyLimitedTo);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Unlimited history
|
||||||
|
setHistorySize(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug() << "TermWidgetImpl::propertiesChanged" << this << "emulation:" << Properties::Instance()->emulation;
|
||||||
|
setKeyBindings(Properties::Instance()->emulation);
|
||||||
|
setTerminalOpacity(Properties::Instance()->termOpacity/100.0);
|
||||||
|
|
||||||
|
/* be consequent with qtermwidget.h here */
|
||||||
|
switch(Properties::Instance()->scrollBarPos) {
|
||||||
|
case 0:
|
||||||
|
setScrollBarPosition(QTermWidget::NoScrollBar);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
setScrollBarPosition(QTermWidget::ScrollBarLeft);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
default:
|
||||||
|
setScrollBarPosition(QTermWidget::ScrollBarRight);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetImpl::customContextMenuCall(const QPoint & pos)
|
||||||
|
{
|
||||||
|
QMenu menu;
|
||||||
|
menu.addAction(Properties::Instance()->actions[COPY_SELECTION]);
|
||||||
|
menu.addAction(Properties::Instance()->actions[PASTE_CLIPBOARD]);
|
||||||
|
menu.addAction(Properties::Instance()->actions[PASTE_SELECTION]);
|
||||||
|
menu.addAction(Properties::Instance()->actions[ZOOM_IN]);
|
||||||
|
menu.addAction(Properties::Instance()->actions[ZOOM_OUT]);
|
||||||
|
menu.addAction(Properties::Instance()->actions[ZOOM_RESET]);
|
||||||
|
menu.addSeparator();
|
||||||
|
menu.addAction(Properties::Instance()->actions[CLEAR_TERMINAL]);
|
||||||
|
menu.addAction(Properties::Instance()->actions[SPLIT_HORIZONTAL]);
|
||||||
|
menu.addAction(Properties::Instance()->actions[SPLIT_VERTICAL]);
|
||||||
|
#warning TODO/FIXME: disable the action when there is only one terminal
|
||||||
|
menu.addAction(Properties::Instance()->actions[SUB_COLLAPSE]);
|
||||||
|
menu.exec(mapToGlobal(pos));
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetImpl::zoomIn()
|
||||||
|
{
|
||||||
|
emit QTermWidget::zoomIn();
|
||||||
|
// note: do not save zoom here due the #74 Zoom reset option resets font back to Monospace
|
||||||
|
// Properties::Instance()->font = getTerminalFont();
|
||||||
|
// Properties::Instance()->saveSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetImpl::zoomOut()
|
||||||
|
{
|
||||||
|
emit QTermWidget::zoomOut();
|
||||||
|
// note: do not save zoom here due the #74 Zoom reset option resets font back to Monospace
|
||||||
|
// Properties::Instance()->font = getTerminalFont();
|
||||||
|
// Properties::Instance()->saveSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetImpl::zoomReset()
|
||||||
|
{
|
||||||
|
// note: do not save zoom here due the #74 Zoom reset option resets font back to Monospace
|
||||||
|
// Properties::Instance()->font = Properties::Instance()->font;
|
||||||
|
setTerminalFont(Properties::Instance()->font);
|
||||||
|
// Properties::Instance()->saveSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetImpl::activateUrl(const QUrl & url) {
|
||||||
|
if (QApplication::keyboardModifiers() & Qt::ControlModifier) {
|
||||||
|
QDesktopServices::openUrl(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TermWidget::TermWidget(const QString & wdir, const QString & shell, QWidget * parent)
|
||||||
|
: QWidget(parent)
|
||||||
|
{
|
||||||
|
m_border = palette().color(QPalette::Window);
|
||||||
|
m_term = new TermWidgetImpl(wdir, shell, this);
|
||||||
|
setFocusProxy(m_term);
|
||||||
|
|
||||||
|
m_layout = new QVBoxLayout;
|
||||||
|
setLayout(m_layout);
|
||||||
|
|
||||||
|
m_layout->addWidget(m_term);
|
||||||
|
|
||||||
|
propertiesChanged();
|
||||||
|
|
||||||
|
connect(m_term, SIGNAL(finished()), this, SIGNAL(finished()));
|
||||||
|
connect(m_term, SIGNAL(termGetFocus()), this, SLOT(term_termGetFocus()));
|
||||||
|
connect(m_term, SIGNAL(termLostFocus()), this, SLOT(term_termLostFocus()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidget::propertiesChanged()
|
||||||
|
{
|
||||||
|
if (Properties::Instance()->highlightCurrentTerminal)
|
||||||
|
m_layout->setContentsMargins(2, 2, 2, 2);
|
||||||
|
else
|
||||||
|
m_layout->setContentsMargins(0, 0, 0, 0);
|
||||||
|
|
||||||
|
m_term->propertiesChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidget::term_termGetFocus()
|
||||||
|
{
|
||||||
|
m_border = palette().color(QPalette::Highlight);
|
||||||
|
emit termGetFocus(this);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidget::term_termLostFocus()
|
||||||
|
{
|
||||||
|
m_border = palette().color(QPalette::Window);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidget::paintEvent (QPaintEvent *)
|
||||||
|
{
|
||||||
|
QPainter p(this);
|
||||||
|
QPen pen(m_border);
|
||||||
|
pen.setWidth(30);
|
||||||
|
pen.setBrush(m_border);
|
||||||
|
p.setPen(pen);
|
||||||
|
p.drawRect(0, 0, width()-1, height()-1);
|
||||||
|
}
|
71
src/termwidget.h
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#ifndef TERMWIDGET_H
|
||||||
|
#define TERMWIDGET_H
|
||||||
|
|
||||||
|
#include <qtermwidget.h>
|
||||||
|
|
||||||
|
#include <QAction>
|
||||||
|
|
||||||
|
|
||||||
|
class TermWidgetImpl : public QTermWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
// QMap< QString, QAction * > actionMap;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
TermWidgetImpl(const QString & wdir, const QString & shell=QString(), QWidget * parent=0);
|
||||||
|
void propertiesChanged();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void renameSession();
|
||||||
|
void removeCurrentSession();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void zoomIn();
|
||||||
|
void zoomOut();
|
||||||
|
void zoomReset();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void customContextMenuCall(const QPoint & pos);
|
||||||
|
void activateUrl(const QUrl& url);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class TermWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
TermWidgetImpl * m_term;
|
||||||
|
QVBoxLayout * m_layout;
|
||||||
|
QColor m_border;
|
||||||
|
|
||||||
|
public:
|
||||||
|
TermWidget(const QString & wdir, const QString & shell=QString(), QWidget * parent=0);
|
||||||
|
|
||||||
|
void propertiesChanged();
|
||||||
|
QStringList availableKeyBindings() { return m_term->availableKeyBindings(); }
|
||||||
|
|
||||||
|
TermWidgetImpl * impl() { return m_term; }
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void finished();
|
||||||
|
void renameSession();
|
||||||
|
void removeCurrentSession();
|
||||||
|
void splitHorizontal(TermWidget * self);
|
||||||
|
void splitVertical(TermWidget * self);
|
||||||
|
void splitCollapse(TermWidget * self);
|
||||||
|
void termGetFocus(TermWidget * self);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void paintEvent (QPaintEvent * event);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void term_termGetFocus();
|
||||||
|
void term_termLostFocus();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
290
src/termwidgetholder.cpp
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
#include <QGridLayout>
|
||||||
|
#include <QSplitter>
|
||||||
|
#include <QInputDialog>
|
||||||
|
|
||||||
|
#include "termwidgetholder.h"
|
||||||
|
#include "termwidget.h"
|
||||||
|
#include "properties.h"
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
|
||||||
|
TermWidgetHolder::TermWidgetHolder(const QString & wdir, const QString & shell, QWidget * parent)
|
||||||
|
: QWidget(parent),
|
||||||
|
m_wdir(wdir),
|
||||||
|
m_shell(shell),
|
||||||
|
m_currentTerm(0)
|
||||||
|
{
|
||||||
|
setFocusPolicy(Qt::NoFocus);
|
||||||
|
QGridLayout * lay = new QGridLayout(this);
|
||||||
|
lay->setSpacing(0);
|
||||||
|
lay->setContentsMargins(0, 0, 0, 0);
|
||||||
|
|
||||||
|
QSplitter *s = new QSplitter(this);
|
||||||
|
s->setFocusPolicy(Qt::NoFocus);
|
||||||
|
TermWidget *w = newTerm();
|
||||||
|
s->addWidget(w);
|
||||||
|
lay->addWidget(s);
|
||||||
|
|
||||||
|
setLayout(lay);
|
||||||
|
}
|
||||||
|
|
||||||
|
TermWidgetHolder::~TermWidgetHolder()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetHolder::setInitialFocus()
|
||||||
|
{
|
||||||
|
QList<TermWidget*> list = findChildren<TermWidget*>();
|
||||||
|
TermWidget * w = list.count() == 0 ? 0 : list.at(0);
|
||||||
|
if (w)
|
||||||
|
w->setFocus(Qt::OtherFocusReason);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetHolder::loadSession()
|
||||||
|
{
|
||||||
|
bool ok;
|
||||||
|
QString name = QInputDialog::getItem(this, tr("Load Session"),
|
||||||
|
tr("List of saved sessions:"),
|
||||||
|
Properties::Instance()->sessions.keys(),
|
||||||
|
0, false, &ok);
|
||||||
|
if (!ok || name.isEmpty())
|
||||||
|
return;
|
||||||
|
#if 0
|
||||||
|
foreach (QWidget * w, findChildren<QWidget*>())
|
||||||
|
{
|
||||||
|
if (w)
|
||||||
|
{
|
||||||
|
delete w;
|
||||||
|
w = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug() << "load" << name << QString(Properties::Instance()->sessions[name]);
|
||||||
|
QStringList splitters = QString(Properties::Instance()->sessions[name]).split("|", QString::SkipEmptyParts);
|
||||||
|
foreach (QString splitter, splitters)
|
||||||
|
{
|
||||||
|
QStringList components = splitter.split(",");
|
||||||
|
qDebug() << "comp" << components;
|
||||||
|
// orientation
|
||||||
|
Qt::Orientation orientation;
|
||||||
|
if (components.size() > 0)
|
||||||
|
orientation = components.takeAt(0).toInt();
|
||||||
|
// sizes
|
||||||
|
QList<int> sizes;
|
||||||
|
QList<TermWidget*> widgets;
|
||||||
|
foreach (QString s, components)
|
||||||
|
{
|
||||||
|
sizes << s.toInt();
|
||||||
|
widgets << newTerm();
|
||||||
|
}
|
||||||
|
// new terms
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetHolder::saveSession(const QString & name)
|
||||||
|
{
|
||||||
|
Session dump;
|
||||||
|
QString num("%1");
|
||||||
|
foreach(QSplitter *w, findChildren<QSplitter*>())
|
||||||
|
{
|
||||||
|
dump += '|' + num.arg(w->orientation());
|
||||||
|
foreach (int i, w->sizes())
|
||||||
|
dump += ',' + num.arg(i);
|
||||||
|
}
|
||||||
|
Properties::Instance()->sessions[name] = dump;
|
||||||
|
qDebug() << "dump" << dump;
|
||||||
|
}
|
||||||
|
|
||||||
|
TermWidget* TermWidgetHolder::currentTerminal()
|
||||||
|
{
|
||||||
|
qDebug() << m_currentTerm << "current terminal";
|
||||||
|
return m_currentTerm;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetHolder::setWDir(const QString & wdir)
|
||||||
|
{
|
||||||
|
m_wdir = wdir;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetHolder::switchNextSubterminal()
|
||||||
|
{
|
||||||
|
// TODO/FIXME: merge switchPrevSubterminal with switchNextSubterminal
|
||||||
|
QList<TermWidget*> l = findChildren<TermWidget*>();
|
||||||
|
int ix = -1;
|
||||||
|
foreach (TermWidget * w, l)
|
||||||
|
{
|
||||||
|
++ix;
|
||||||
|
// qDebug() << ix << w << w->impl() << w->impl()->hasFocus() << QApplication::focusWidget();
|
||||||
|
// qDebug() << "parent: " << w->parent();
|
||||||
|
if (w->impl()->hasFocus())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ix < l.count()-1)
|
||||||
|
{
|
||||||
|
l.at(ix+1)->impl()->setFocus(Qt::OtherFocusReason);
|
||||||
|
}
|
||||||
|
else if (ix == l.count()-1)
|
||||||
|
{
|
||||||
|
l.at(0)->impl()->setFocus(Qt::OtherFocusReason);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetHolder::switchPrevSubterminal()
|
||||||
|
{
|
||||||
|
// TODO/FIXME: merge switchPrevSubterminal with switchNextSubterminal
|
||||||
|
QList<TermWidget*> l = findChildren<TermWidget*>();
|
||||||
|
int ix = -1;
|
||||||
|
foreach (TermWidget * w, l)
|
||||||
|
{
|
||||||
|
++ix;
|
||||||
|
// qDebug() << ix << w << w->impl() << w->impl()->hasFocus() << QApplication::focusWidget();
|
||||||
|
// qDebug() << "parent: " << w->parent();
|
||||||
|
if (w->impl()->hasFocus())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//qDebug() << ix << l.at(ix)->impl() << QApplication::focusWidget() << l;
|
||||||
|
|
||||||
|
if (ix > 0)
|
||||||
|
{
|
||||||
|
l.at(ix-1)->impl()->setFocus(Qt::OtherFocusReason);
|
||||||
|
}
|
||||||
|
else if (ix == 0)
|
||||||
|
{
|
||||||
|
l.at(l.count()-1)->impl()->setFocus(Qt::OtherFocusReason);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetHolder::clearActiveTerminal()
|
||||||
|
{
|
||||||
|
currentTerminal()->impl()->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetHolder::propertiesChanged()
|
||||||
|
{
|
||||||
|
foreach(TermWidget *w, findChildren<TermWidget*>())
|
||||||
|
w->propertiesChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetHolder::splitHorizontal(TermWidget * term)
|
||||||
|
{
|
||||||
|
split(term, Qt::Vertical);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetHolder::splitVertical(TermWidget * term)
|
||||||
|
{
|
||||||
|
split(term, Qt::Horizontal);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetHolder::splitCollapse(TermWidget * term)
|
||||||
|
{
|
||||||
|
QSplitter * parent = qobject_cast<QSplitter*>(term->parent());
|
||||||
|
assert(parent);
|
||||||
|
term->setParent(0);
|
||||||
|
delete term;
|
||||||
|
|
||||||
|
int cnt = parent->findChildren<TermWidget*>().count();
|
||||||
|
if (cnt == 0)
|
||||||
|
{
|
||||||
|
parent->setParent(0);
|
||||||
|
delete parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<TermWidget*> tlist = findChildren<TermWidget *>();
|
||||||
|
int localCnt = tlist.count();
|
||||||
|
|
||||||
|
if (localCnt > 0)
|
||||||
|
{
|
||||||
|
tlist.at(0)->setFocus(Qt::OtherFocusReason);
|
||||||
|
update();
|
||||||
|
if (parent)
|
||||||
|
parent->update();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
emit finished();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetHolder::split(TermWidget *term, Qt::Orientation orientation)
|
||||||
|
{
|
||||||
|
QSplitter *parent = qobject_cast<QSplitter *>(term->parent());
|
||||||
|
assert(parent);
|
||||||
|
|
||||||
|
int ix = parent->indexOf(term);
|
||||||
|
QList<int> parentSizes = parent->sizes();
|
||||||
|
|
||||||
|
QList<int> sizes;
|
||||||
|
sizes << 1 << 1;
|
||||||
|
|
||||||
|
QSplitter *s = new QSplitter(orientation, this);
|
||||||
|
s->setFocusPolicy(Qt::NoFocus);
|
||||||
|
s->insertWidget(0, term);
|
||||||
|
|
||||||
|
// wdir settings
|
||||||
|
QString wd(m_wdir);
|
||||||
|
if (Properties::Instance()->useCWD)
|
||||||
|
{
|
||||||
|
wd = term->impl()->workingDirectory();
|
||||||
|
if (wd.isEmpty())
|
||||||
|
wd = m_wdir;
|
||||||
|
}
|
||||||
|
|
||||||
|
TermWidget * w = newTerm(wd);
|
||||||
|
s->insertWidget(1, w);
|
||||||
|
s->setSizes(sizes);
|
||||||
|
|
||||||
|
parent->insertWidget(ix, s);
|
||||||
|
parent->setSizes(parentSizes);
|
||||||
|
|
||||||
|
w->setFocus(Qt::OtherFocusReason);
|
||||||
|
}
|
||||||
|
|
||||||
|
TermWidget *TermWidgetHolder::newTerm(const QString & wdir, const QString & shell)
|
||||||
|
{
|
||||||
|
QString wd(wdir);
|
||||||
|
if (wd.isEmpty())
|
||||||
|
wd = m_wdir;
|
||||||
|
|
||||||
|
QString sh(shell);
|
||||||
|
if (shell.isEmpty())
|
||||||
|
sh = m_shell;
|
||||||
|
|
||||||
|
TermWidget *w = new TermWidget(wd, sh, this);
|
||||||
|
// proxy signals
|
||||||
|
connect(w, SIGNAL(renameSession()), this, SIGNAL(renameSession()));
|
||||||
|
connect(w, SIGNAL(removeCurrentSession()), this, SIGNAL(lastTerminalClosed()));
|
||||||
|
connect(w, SIGNAL(finished()), this, SLOT(handle_finished()));
|
||||||
|
// consume signals
|
||||||
|
|
||||||
|
connect(w, SIGNAL(splitHorizontal(TermWidget *)),
|
||||||
|
this, SLOT(splitHorizontal(TermWidget *)));
|
||||||
|
connect(w, SIGNAL(splitVertical(TermWidget *)),
|
||||||
|
this, SLOT(splitVertical(TermWidget *)));
|
||||||
|
connect(w, SIGNAL(splitCollapse(TermWidget *)),
|
||||||
|
this, SLOT(splitCollapse(TermWidget *)));
|
||||||
|
connect(w, SIGNAL(termGetFocus(TermWidget *)),
|
||||||
|
this, SLOT(setCurrentTerminal(TermWidget *)));
|
||||||
|
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetHolder::setCurrentTerminal(TermWidget* term)
|
||||||
|
{
|
||||||
|
qDebug() << "set current term:" << term;
|
||||||
|
m_currentTerm = term;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TermWidgetHolder::handle_finished()
|
||||||
|
{
|
||||||
|
TermWidget * w = qobject_cast<TermWidget*>(sender());
|
||||||
|
if (!w)
|
||||||
|
{
|
||||||
|
qDebug() << "TermWidgetHolder::handle_finished: Unknown object to handle" << w;
|
||||||
|
assert(0);
|
||||||
|
}
|
||||||
|
splitCollapse(w);
|
||||||
|
}
|
64
src/termwidgetholder.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
#ifndef TERMWIDGETHOLDER_H
|
||||||
|
#define TERMWIDGETHOLDER_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include "termwidget.h"
|
||||||
|
class QSplitter;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief TermWidget group/session manager.
|
||||||
|
|
||||||
|
This widget (one per TabWidget tab) is a "proxy" widget beetween TabWidget and
|
||||||
|
unspecified count of TermWidgets. Basically it should look like a single TermWidget
|
||||||
|
for TabWidget - with its signals and slots.
|
||||||
|
|
||||||
|
Splitting and collapsing of TermWidgets is done here.
|
||||||
|
*/
|
||||||
|
class TermWidgetHolder : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
TermWidgetHolder(const QString & wdir, const QString & shell=QString(), QWidget * parent=0);
|
||||||
|
~TermWidgetHolder();
|
||||||
|
|
||||||
|
void propertiesChanged();
|
||||||
|
void setInitialFocus();
|
||||||
|
|
||||||
|
void loadSession();
|
||||||
|
void saveSession(const QString & name);
|
||||||
|
void zoomIn(uint step);
|
||||||
|
void zoomOut(uint step);
|
||||||
|
|
||||||
|
TermWidget* currentTerminal();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void splitHorizontal(TermWidget * term);
|
||||||
|
void splitVertical(TermWidget * term);
|
||||||
|
void splitCollapse(TermWidget * term);
|
||||||
|
void setWDir(const QString & wdir);
|
||||||
|
void switchNextSubterminal();
|
||||||
|
void switchPrevSubterminal();
|
||||||
|
void clearActiveTerminal();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void finished();
|
||||||
|
void lastTerminalClosed();
|
||||||
|
void renameSession();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString m_wdir;
|
||||||
|
QString m_shell;
|
||||||
|
TermWidget * m_currentTerm;
|
||||||
|
|
||||||
|
void split(TermWidget * term, Qt::Orientation orientation);
|
||||||
|
TermWidget * newTerm(const QString & wdir=QString(), const QString & shell=QString());
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void setCurrentTerminal(TermWidget* term);
|
||||||
|
void handle_finished();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
233
src/third-party/qxtglobal.h
vendored
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
** Copyright (c) 2006 - 2011, the LibQxt project.
|
||||||
|
** See the Qxt AUTHORS file for a list of authors and copyright holders.
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in the
|
||||||
|
** documentation and/or other materials provided with the distribution.
|
||||||
|
** * Neither the name of the LibQxt project nor the
|
||||||
|
** names of its contributors may be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
** DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||||
|
** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**
|
||||||
|
** <http://libqxt.org> <foundation@libqxt.org>
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef QXTGLOBAL_H
|
||||||
|
#define QXTGLOBAL_H
|
||||||
|
|
||||||
|
#include <QtGlobal>
|
||||||
|
|
||||||
|
#define QXT_VERSION 0x000700
|
||||||
|
#define QXT_VERSION_STR "0.7.0"
|
||||||
|
|
||||||
|
//--------------------------global macros------------------------------
|
||||||
|
|
||||||
|
#ifndef QXT_NO_MACROS
|
||||||
|
|
||||||
|
#ifndef _countof
|
||||||
|
#define _countof(x) (sizeof(x)/sizeof(*x))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // QXT_NO_MACROS
|
||||||
|
|
||||||
|
//--------------------------export macros------------------------------
|
||||||
|
|
||||||
|
#define QXT_DLLEXPORT DO_NOT_USE_THIS_ANYMORE
|
||||||
|
|
||||||
|
#if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN)
|
||||||
|
# if defined(BUILD_QXT_CORE)
|
||||||
|
# define QXT_CORE_EXPORT Q_DECL_EXPORT
|
||||||
|
# else
|
||||||
|
# define QXT_CORE_EXPORT Q_DECL_IMPORT
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define QXT_CORE_EXPORT
|
||||||
|
#endif // BUILD_QXT_CORE
|
||||||
|
|
||||||
|
#if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN)
|
||||||
|
# if defined(BUILD_QXT_GUI)
|
||||||
|
# define QXT_GUI_EXPORT Q_DECL_EXPORT
|
||||||
|
# else
|
||||||
|
# define QXT_GUI_EXPORT Q_DECL_IMPORT
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define QXT_GUI_EXPORT
|
||||||
|
#endif // BUILD_QXT_GUI
|
||||||
|
|
||||||
|
#if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN)
|
||||||
|
# if defined(BUILD_QXT_NETWORK)
|
||||||
|
# define QXT_NETWORK_EXPORT Q_DECL_EXPORT
|
||||||
|
# else
|
||||||
|
# define QXT_NETWORK_EXPORT Q_DECL_IMPORT
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define QXT_NETWORK_EXPORT
|
||||||
|
#endif // BUILD_QXT_NETWORK
|
||||||
|
|
||||||
|
#if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN)
|
||||||
|
# if defined(BUILD_QXT_SQL)
|
||||||
|
# define QXT_SQL_EXPORT Q_DECL_EXPORT
|
||||||
|
# else
|
||||||
|
# define QXT_SQL_EXPORT Q_DECL_IMPORT
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define QXT_SQL_EXPORT
|
||||||
|
#endif // BUILD_QXT_SQL
|
||||||
|
|
||||||
|
#if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN)
|
||||||
|
# if defined(BUILD_QXT_WEB)
|
||||||
|
# define QXT_WEB_EXPORT Q_DECL_EXPORT
|
||||||
|
# else
|
||||||
|
# define QXT_WEB_EXPORT Q_DECL_IMPORT
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define QXT_WEB_EXPORT
|
||||||
|
#endif // BUILD_QXT_WEB
|
||||||
|
|
||||||
|
#if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN)
|
||||||
|
# if defined(BUILD_QXT_BERKELEY)
|
||||||
|
# define QXT_BERKELEY_EXPORT Q_DECL_EXPORT
|
||||||
|
# else
|
||||||
|
# define QXT_BERKELEY_EXPORT Q_DECL_IMPORT
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define QXT_BERKELEY_EXPORT
|
||||||
|
#endif // BUILD_QXT_BERKELEY
|
||||||
|
|
||||||
|
#if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN)
|
||||||
|
# if defined(BUILD_QXT_ZEROCONF)
|
||||||
|
# define QXT_ZEROCONF_EXPORT Q_DECL_EXPORT
|
||||||
|
# else
|
||||||
|
# define QXT_ZEROCONF_EXPORT Q_DECL_IMPORT
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define QXT_ZEROCONF_EXPORT
|
||||||
|
#endif // QXT_ZEROCONF_EXPORT
|
||||||
|
|
||||||
|
#if defined(BUILD_QXT_CORE) || defined(BUILD_QXT_GUI) || defined(BUILD_QXT_SQL) || defined(BUILD_QXT_NETWORK) || defined(BUILD_QXT_WEB) || defined(BUILD_QXT_BERKELEY) || defined(BUILD_QXT_ZEROCONF)
|
||||||
|
# define BUILD_QXT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
QXT_CORE_EXPORT const char* qxtVersion();
|
||||||
|
|
||||||
|
#ifndef QT_BEGIN_NAMESPACE
|
||||||
|
#define QT_BEGIN_NAMESPACE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef QT_END_NAMESPACE
|
||||||
|
#define QT_END_NAMESPACE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef QT_FORWARD_DECLARE_CLASS
|
||||||
|
#define QT_FORWARD_DECLARE_CLASS(Class) class Class;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
** This file is derived from code bearing the following notice:
|
||||||
|
** The sole author of this file, Adam Higerd, has explicitly disclaimed all
|
||||||
|
** copyright interest and protection for the content within. This file has
|
||||||
|
** been placed in the public domain according to United States copyright
|
||||||
|
** statute and case law. In jurisdictions where this public domain dedication
|
||||||
|
** is not legally recognized, anyone who receives a copy of this file is
|
||||||
|
** permitted to use, modify, duplicate, and redistribute this file, in whole
|
||||||
|
** or in part, with no restrictions or conditions. In these jurisdictions,
|
||||||
|
** this file shall be copyright (C) 2006-2008 by Adam Higerd.
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#define QXT_DECLARE_PRIVATE(PUB) friend class PUB##Private; QxtPrivateInterface<PUB, PUB##Private> qxt_d;
|
||||||
|
#define QXT_DECLARE_PUBLIC(PUB) friend class PUB;
|
||||||
|
#define QXT_INIT_PRIVATE(PUB) qxt_d.setPublic(this);
|
||||||
|
#define QXT_D(PUB) PUB##Private& d = qxt_d()
|
||||||
|
#define QXT_P(PUB) PUB& p = qxt_p()
|
||||||
|
|
||||||
|
template <typename PUB>
|
||||||
|
class QxtPrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~QxtPrivate()
|
||||||
|
{}
|
||||||
|
inline void QXT_setPublic(PUB* pub)
|
||||||
|
{
|
||||||
|
qxt_p_ptr = pub;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
inline PUB& qxt_p()
|
||||||
|
{
|
||||||
|
return *qxt_p_ptr;
|
||||||
|
}
|
||||||
|
inline const PUB& qxt_p() const
|
||||||
|
{
|
||||||
|
return *qxt_p_ptr;
|
||||||
|
}
|
||||||
|
inline PUB* qxt_ptr()
|
||||||
|
{
|
||||||
|
return qxt_p_ptr;
|
||||||
|
}
|
||||||
|
inline const PUB* qxt_ptr() const
|
||||||
|
{
|
||||||
|
return qxt_p_ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
PUB* qxt_p_ptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename PUB, typename PVT>
|
||||||
|
class QxtPrivateInterface
|
||||||
|
{
|
||||||
|
friend class QxtPrivate<PUB>;
|
||||||
|
public:
|
||||||
|
QxtPrivateInterface()
|
||||||
|
{
|
||||||
|
pvt = new PVT;
|
||||||
|
}
|
||||||
|
~QxtPrivateInterface()
|
||||||
|
{
|
||||||
|
delete pvt;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void setPublic(PUB* pub)
|
||||||
|
{
|
||||||
|
pvt->QXT_setPublic(pub);
|
||||||
|
}
|
||||||
|
inline PVT& operator()()
|
||||||
|
{
|
||||||
|
return *static_cast<PVT*>(pvt);
|
||||||
|
}
|
||||||
|
inline const PVT& operator()() const
|
||||||
|
{
|
||||||
|
return *static_cast<PVT*>(pvt);
|
||||||
|
}
|
||||||
|
inline PVT * operator->()
|
||||||
|
{
|
||||||
|
return static_cast<PVT*>(pvt);
|
||||||
|
}
|
||||||
|
inline const PVT * operator->() const
|
||||||
|
{
|
||||||
|
return static_cast<PVT*>(pvt);
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
QxtPrivateInterface(const QxtPrivateInterface&) { }
|
||||||
|
QxtPrivateInterface& operator=(const QxtPrivateInterface&) { }
|
||||||
|
QxtPrivate<PUB>* pvt;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // QXT_GLOBAL
|
223
src/third-party/qxtglobalshortcut.cpp
vendored
Normal file
@ -0,0 +1,223 @@
|
|||||||
|
#include "qxtglobalshortcut.h"
|
||||||
|
/****************************************************************************
|
||||||
|
** Copyright (c) 2006 - 2011, the LibQxt project.
|
||||||
|
** See the Qxt AUTHORS file for a list of authors and copyright holders.
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in the
|
||||||
|
** documentation and/or other materials provided with the distribution.
|
||||||
|
** * Neither the name of the LibQxt project nor the
|
||||||
|
** names of its contributors may be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
** DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||||
|
** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**
|
||||||
|
** <http://libqxt.org> <foundation@libqxt.org>
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#include "qxtglobalshortcut_p.h"
|
||||||
|
#include <QAbstractEventDispatcher>
|
||||||
|
#include <QtDebug>
|
||||||
|
|
||||||
|
#ifndef Q_OS_MAC
|
||||||
|
int QxtGlobalShortcutPrivate::ref = 0;
|
||||||
|
# if QT_VERSION < QT_VERSION_CHECK(5,0,0)
|
||||||
|
QAbstractEventDispatcher::EventFilter QxtGlobalShortcutPrivate::prevEventFilter = 0;
|
||||||
|
# endif
|
||||||
|
#endif // Q_OS_MAC
|
||||||
|
QHash<QPair<quint32, quint32>, QxtGlobalShortcut*> QxtGlobalShortcutPrivate::shortcuts;
|
||||||
|
|
||||||
|
QxtGlobalShortcutPrivate::QxtGlobalShortcutPrivate() : enabled(true), key(Qt::Key(0)), mods(Qt::NoModifier)
|
||||||
|
{
|
||||||
|
#ifndef Q_OS_MAC
|
||||||
|
if (ref == 0) {
|
||||||
|
# if QT_VERSION < QT_VERSION_CHECK(5,0,0)
|
||||||
|
prevEventFilter = QAbstractEventDispatcher::instance()->setEventFilter(eventFilter);
|
||||||
|
# else
|
||||||
|
QAbstractEventDispatcher::instance()->installNativeEventFilter(this);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
++ref;
|
||||||
|
#endif // Q_OS_MAC
|
||||||
|
}
|
||||||
|
|
||||||
|
QxtGlobalShortcutPrivate::~QxtGlobalShortcutPrivate()
|
||||||
|
{
|
||||||
|
#ifndef Q_OS_MAC
|
||||||
|
--ref;
|
||||||
|
if (ref == 0) {
|
||||||
|
QAbstractEventDispatcher *ed = QAbstractEventDispatcher::instance();
|
||||||
|
if (ed != 0) {
|
||||||
|
# if QT_VERSION < QT_VERSION_CHECK(5,0,0)
|
||||||
|
ed->setEventFilter(prevEventFilter);
|
||||||
|
# else
|
||||||
|
ed->removeNativeEventFilter(this);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // Q_OS_MAC
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QxtGlobalShortcutPrivate::setShortcut(const QKeySequence& shortcut)
|
||||||
|
{
|
||||||
|
Qt::KeyboardModifiers allMods = Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier;
|
||||||
|
key = shortcut.isEmpty() ? Qt::Key(0) : Qt::Key((shortcut[0] ^ allMods) & shortcut[0]);
|
||||||
|
mods = shortcut.isEmpty() ? Qt::KeyboardModifiers(0) : Qt::KeyboardModifiers(shortcut[0] & allMods);
|
||||||
|
const quint32 nativeKey = nativeKeycode(key);
|
||||||
|
const quint32 nativeMods = nativeModifiers(mods);
|
||||||
|
const bool res = registerShortcut(nativeKey, nativeMods);
|
||||||
|
if (res)
|
||||||
|
shortcuts.insert(qMakePair(nativeKey, nativeMods), &qxt_p());
|
||||||
|
else
|
||||||
|
qWarning() << "QxtGlobalShortcut failed to register:" << QKeySequence(key + mods).toString();
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QxtGlobalShortcutPrivate::unsetShortcut()
|
||||||
|
{
|
||||||
|
bool res = false;
|
||||||
|
const quint32 nativeKey = nativeKeycode(key);
|
||||||
|
const quint32 nativeMods = nativeModifiers(mods);
|
||||||
|
if (shortcuts.value(qMakePair(nativeKey, nativeMods)) == &qxt_p())
|
||||||
|
res = unregisterShortcut(nativeKey, nativeMods);
|
||||||
|
if (res)
|
||||||
|
shortcuts.remove(qMakePair(nativeKey, nativeMods));
|
||||||
|
else
|
||||||
|
qWarning() << "QxtGlobalShortcut failed to unregister:" << QKeySequence(key + mods).toString();
|
||||||
|
key = Qt::Key(0);
|
||||||
|
mods = Qt::KeyboardModifiers(0);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QxtGlobalShortcutPrivate::activateShortcut(quint32 nativeKey, quint32 nativeMods)
|
||||||
|
{
|
||||||
|
QxtGlobalShortcut* shortcut = shortcuts.value(qMakePair(nativeKey, nativeMods));
|
||||||
|
if (shortcut && shortcut->isEnabled())
|
||||||
|
emit shortcut->activated();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\class QxtGlobalShortcut
|
||||||
|
\inmodule QxtWidgets
|
||||||
|
\brief The QxtGlobalShortcut class provides a global shortcut aka "hotkey".
|
||||||
|
|
||||||
|
A global shortcut triggers even if the application is not active. This
|
||||||
|
makes it easy to implement applications that react to certain shortcuts
|
||||||
|
still if some other application is active or if the application is for
|
||||||
|
example minimized to the system tray.
|
||||||
|
|
||||||
|
Example usage:
|
||||||
|
\code
|
||||||
|
QxtGlobalShortcut* shortcut = new QxtGlobalShortcut(window);
|
||||||
|
connect(shortcut, SIGNAL(activated()), window, SLOT(toggleVisibility()));
|
||||||
|
shortcut->setShortcut(QKeySequence("Ctrl+Shift+F12"));
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\bold {Note:} Since Qxt 0.6 QxtGlobalShortcut no more requires QxtApplication.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn QxtGlobalShortcut::activated()
|
||||||
|
|
||||||
|
This signal is emitted when the user types the shortcut's key sequence.
|
||||||
|
|
||||||
|
\sa shortcut
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Constructs a new QxtGlobalShortcut with \a parent.
|
||||||
|
*/
|
||||||
|
QxtGlobalShortcut::QxtGlobalShortcut(QObject* parent)
|
||||||
|
: QObject(parent)
|
||||||
|
{
|
||||||
|
QXT_INIT_PRIVATE(QxtGlobalShortcut);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Constructs a new QxtGlobalShortcut with \a shortcut and \a parent.
|
||||||
|
*/
|
||||||
|
QxtGlobalShortcut::QxtGlobalShortcut(const QKeySequence& shortcut, QObject* parent)
|
||||||
|
: QObject(parent)
|
||||||
|
{
|
||||||
|
QXT_INIT_PRIVATE(QxtGlobalShortcut);
|
||||||
|
setShortcut(shortcut);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Destructs the QxtGlobalShortcut.
|
||||||
|
*/
|
||||||
|
QxtGlobalShortcut::~QxtGlobalShortcut()
|
||||||
|
{
|
||||||
|
if (qxt_d().key != 0)
|
||||||
|
qxt_d().unsetShortcut();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\property QxtGlobalShortcut::shortcut
|
||||||
|
\brief the shortcut key sequence
|
||||||
|
|
||||||
|
\bold {Note:} Notice that corresponding key press and release events are not
|
||||||
|
delivered for registered global shortcuts even if they are disabled.
|
||||||
|
Also, comma separated key sequences are not supported.
|
||||||
|
Only the first part is used:
|
||||||
|
|
||||||
|
\code
|
||||||
|
qxtShortcut->setShortcut(QKeySequence("Ctrl+Alt+A,Ctrl+Alt+B"));
|
||||||
|
Q_ASSERT(qxtShortcut->shortcut() == QKeySequence("Ctrl+Alt+A"));
|
||||||
|
\endcode
|
||||||
|
*/
|
||||||
|
QKeySequence QxtGlobalShortcut::shortcut() const
|
||||||
|
{
|
||||||
|
return QKeySequence(qxt_d().key | qxt_d().mods);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QxtGlobalShortcut::setShortcut(const QKeySequence& shortcut)
|
||||||
|
{
|
||||||
|
if (qxt_d().key != 0)
|
||||||
|
qxt_d().unsetShortcut();
|
||||||
|
return qxt_d().setShortcut(shortcut);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\property QxtGlobalShortcut::enabled
|
||||||
|
\brief whether the shortcut is enabled
|
||||||
|
|
||||||
|
A disabled shortcut does not get activated.
|
||||||
|
|
||||||
|
The default value is \c true.
|
||||||
|
|
||||||
|
\sa setDisabled()
|
||||||
|
*/
|
||||||
|
bool QxtGlobalShortcut::isEnabled() const
|
||||||
|
{
|
||||||
|
return qxt_d().enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QxtGlobalShortcut::setEnabled(bool enabled)
|
||||||
|
{
|
||||||
|
qxt_d().enabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Sets the shortcut \a disabled.
|
||||||
|
|
||||||
|
\sa enabled
|
||||||
|
*/
|
||||||
|
void QxtGlobalShortcut::setDisabled(bool disabled)
|
||||||
|
{
|
||||||
|
qxt_d().enabled = !disabled;
|
||||||
|
}
|
64
src/third-party/qxtglobalshortcut.h
vendored
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
#ifndef QXTGLOBALSHORTCUT_H
|
||||||
|
/****************************************************************************
|
||||||
|
** Copyright (c) 2006 - 2011, the LibQxt project.
|
||||||
|
** See the Qxt AUTHORS file for a list of authors and copyright holders.
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in the
|
||||||
|
** documentation and/or other materials provided with the distribution.
|
||||||
|
** * Neither the name of the LibQxt project nor the
|
||||||
|
** names of its contributors may be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
** DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||||
|
** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**
|
||||||
|
** <http://libqxt.org> <foundation@libqxt.org>
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#define QXTGLOBALSHORTCUT_H
|
||||||
|
|
||||||
|
#include "qxtglobal.h"
|
||||||
|
#include <QObject>
|
||||||
|
#include <QKeySequence>
|
||||||
|
class QxtGlobalShortcutPrivate;
|
||||||
|
|
||||||
|
class QXT_GUI_EXPORT QxtGlobalShortcut : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
QXT_DECLARE_PRIVATE(QxtGlobalShortcut)
|
||||||
|
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
|
||||||
|
Q_PROPERTY(QKeySequence shortcut READ shortcut WRITE setShortcut)
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit QxtGlobalShortcut(QObject* parent = 0);
|
||||||
|
explicit QxtGlobalShortcut(const QKeySequence& shortcut, QObject* parent = 0);
|
||||||
|
virtual ~QxtGlobalShortcut();
|
||||||
|
|
||||||
|
QKeySequence shortcut() const;
|
||||||
|
bool setShortcut(const QKeySequence& shortcut);
|
||||||
|
|
||||||
|
bool isEnabled() const;
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
void setEnabled(bool enabled = true);
|
||||||
|
void setDisabled(bool disabled = true);
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void activated();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // QXTGLOBALSHORTCUT_H
|
258
src/third-party/qxtglobalshortcut_mac.cpp
vendored
Normal file
@ -0,0 +1,258 @@
|
|||||||
|
#include <Carbon/Carbon.h>
|
||||||
|
/****************************************************************************
|
||||||
|
** Copyright (c) 2006 - 2011, the LibQxt project.
|
||||||
|
** See the Qxt AUTHORS file for a list of authors and copyright holders.
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in the
|
||||||
|
** documentation and/or other materials provided with the distribution.
|
||||||
|
** * Neither the name of the LibQxt project nor the
|
||||||
|
** names of its contributors may be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
** DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||||
|
** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**
|
||||||
|
** <http://libqxt.org> <foundation@libqxt.org>
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#include "qxtglobalshortcut_p.h"
|
||||||
|
#include <QMap>
|
||||||
|
#include <QHash>
|
||||||
|
#include <QtDebug>
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
typedef QPair<uint, uint> Identifier;
|
||||||
|
static QMap<quint32, EventHotKeyRef> keyRefs;
|
||||||
|
static QHash<Identifier, quint32> keyIDs;
|
||||||
|
static quint32 hotKeySerial = 0;
|
||||||
|
static bool qxt_mac_handler_installed = false;
|
||||||
|
|
||||||
|
OSStatus qxt_mac_handle_hot_key(EventHandlerCallRef nextHandler, EventRef event, void* data)
|
||||||
|
{
|
||||||
|
Q_UNUSED(nextHandler);
|
||||||
|
Q_UNUSED(data);
|
||||||
|
if (GetEventClass(event) == kEventClassKeyboard && GetEventKind(event) == kEventHotKeyPressed)
|
||||||
|
{
|
||||||
|
EventHotKeyID keyID;
|
||||||
|
GetEventParameter(event, kEventParamDirectObject, typeEventHotKeyID, NULL, sizeof(keyID), NULL, &keyID);
|
||||||
|
Identifier id = keyIDs.key(keyID.id);
|
||||||
|
QxtGlobalShortcutPrivate::activateShortcut(id.second, id.first);
|
||||||
|
}
|
||||||
|
return noErr;
|
||||||
|
}
|
||||||
|
|
||||||
|
quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers)
|
||||||
|
{
|
||||||
|
quint32 native = 0;
|
||||||
|
if (modifiers & Qt::ShiftModifier)
|
||||||
|
native |= shiftKey;
|
||||||
|
if (modifiers & Qt::ControlModifier)
|
||||||
|
native |= cmdKey;
|
||||||
|
if (modifiers & Qt::AltModifier)
|
||||||
|
native |= optionKey;
|
||||||
|
if (modifiers & Qt::MetaModifier)
|
||||||
|
native |= controlKey;
|
||||||
|
if (modifiers & Qt::KeypadModifier)
|
||||||
|
native |= kEventKeyModifierNumLockMask;
|
||||||
|
return native;
|
||||||
|
}
|
||||||
|
|
||||||
|
quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key)
|
||||||
|
{
|
||||||
|
UTF16Char ch;
|
||||||
|
// Constants found in NSEvent.h from AppKit.framework
|
||||||
|
switch (key)
|
||||||
|
{
|
||||||
|
case Qt::Key_Return:
|
||||||
|
return kVK_Return;
|
||||||
|
case Qt::Key_Enter:
|
||||||
|
return kVK_ANSI_KeypadEnter;
|
||||||
|
case Qt::Key_Tab:
|
||||||
|
return kVK_Tab;
|
||||||
|
case Qt::Key_Space:
|
||||||
|
return kVK_Space;
|
||||||
|
case Qt::Key_Backspace:
|
||||||
|
return kVK_Delete;
|
||||||
|
case Qt::Key_Control:
|
||||||
|
return kVK_Command;
|
||||||
|
case Qt::Key_Shift:
|
||||||
|
return kVK_Shift;
|
||||||
|
case Qt::Key_CapsLock:
|
||||||
|
return kVK_CapsLock;
|
||||||
|
case Qt::Key_Option:
|
||||||
|
return kVK_Option;
|
||||||
|
case Qt::Key_Meta:
|
||||||
|
return kVK_Control;
|
||||||
|
case Qt::Key_F17:
|
||||||
|
return kVK_F17;
|
||||||
|
case Qt::Key_VolumeUp:
|
||||||
|
return kVK_VolumeUp;
|
||||||
|
case Qt::Key_VolumeDown:
|
||||||
|
return kVK_VolumeDown;
|
||||||
|
case Qt::Key_F18:
|
||||||
|
return kVK_F18;
|
||||||
|
case Qt::Key_F19:
|
||||||
|
return kVK_F19;
|
||||||
|
case Qt::Key_F20:
|
||||||
|
return kVK_F20;
|
||||||
|
case Qt::Key_F5:
|
||||||
|
return kVK_F5;
|
||||||
|
case Qt::Key_F6:
|
||||||
|
return kVK_F6;
|
||||||
|
case Qt::Key_F7:
|
||||||
|
return kVK_F7;
|
||||||
|
case Qt::Key_F3:
|
||||||
|
return kVK_F3;
|
||||||
|
case Qt::Key_F8:
|
||||||
|
return kVK_F8;
|
||||||
|
case Qt::Key_F9:
|
||||||
|
return kVK_F9;
|
||||||
|
case Qt::Key_F11:
|
||||||
|
return kVK_F11;
|
||||||
|
case Qt::Key_F13:
|
||||||
|
return kVK_F13;
|
||||||
|
case Qt::Key_F16:
|
||||||
|
return kVK_F16;
|
||||||
|
case Qt::Key_F14:
|
||||||
|
return kVK_F14;
|
||||||
|
case Qt::Key_F10:
|
||||||
|
return kVK_F10;
|
||||||
|
case Qt::Key_F12:
|
||||||
|
return kVK_F12;
|
||||||
|
case Qt::Key_F15:
|
||||||
|
return kVK_F15;
|
||||||
|
case Qt::Key_Help:
|
||||||
|
return kVK_Help;
|
||||||
|
case Qt::Key_Home:
|
||||||
|
return kVK_Home;
|
||||||
|
case Qt::Key_PageUp:
|
||||||
|
return kVK_PageUp;
|
||||||
|
case Qt::Key_Delete:
|
||||||
|
return kVK_ForwardDelete;
|
||||||
|
case Qt::Key_F4:
|
||||||
|
return kVK_F4;
|
||||||
|
case Qt::Key_End:
|
||||||
|
return kVK_End;
|
||||||
|
case Qt::Key_F2:
|
||||||
|
return kVK_F2;
|
||||||
|
case Qt::Key_PageDown:
|
||||||
|
return kVK_PageDown;
|
||||||
|
case Qt::Key_F1:
|
||||||
|
return kVK_F1;
|
||||||
|
case Qt::Key_Left:
|
||||||
|
return kVK_LeftArrow;
|
||||||
|
case Qt::Key_Right:
|
||||||
|
return kVK_RightArrow;
|
||||||
|
case Qt::Key_Down:
|
||||||
|
return kVK_DownArrow;
|
||||||
|
case Qt::Key_Up:
|
||||||
|
return kVK_UpArrow;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key == Qt::Key_Escape) ch = 27;
|
||||||
|
else if (key == Qt::Key_Return) ch = 13;
|
||||||
|
else if (key == Qt::Key_Enter) ch = 3;
|
||||||
|
else if (key == Qt::Key_Tab) ch = 9;
|
||||||
|
else ch = key;
|
||||||
|
|
||||||
|
CFDataRef currentLayoutData;
|
||||||
|
TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource();
|
||||||
|
|
||||||
|
if (currentKeyboard == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
currentLayoutData = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData);
|
||||||
|
CFRelease(currentKeyboard);
|
||||||
|
if (currentLayoutData == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
UCKeyboardLayout* header = (UCKeyboardLayout*)CFDataGetBytePtr(currentLayoutData);
|
||||||
|
UCKeyboardTypeHeader* table = header->keyboardTypeList;
|
||||||
|
|
||||||
|
uint8_t *data = (uint8_t*)header;
|
||||||
|
// God, would a little documentation for this shit kill you...
|
||||||
|
for (quint32 i=0; i < header->keyboardTypeCount; i++)
|
||||||
|
{
|
||||||
|
UCKeyStateRecordsIndex* stateRec = 0;
|
||||||
|
if (table[i].keyStateRecordsIndexOffset != 0)
|
||||||
|
{
|
||||||
|
stateRec = reinterpret_cast<UCKeyStateRecordsIndex*>(data + table[i].keyStateRecordsIndexOffset);
|
||||||
|
if (stateRec->keyStateRecordsIndexFormat != kUCKeyStateRecordsIndexFormat) stateRec = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
UCKeyToCharTableIndex* charTable = reinterpret_cast<UCKeyToCharTableIndex*>(data + table[i].keyToCharTableIndexOffset);
|
||||||
|
if (charTable->keyToCharTableIndexFormat != kUCKeyToCharTableIndexFormat) continue;
|
||||||
|
|
||||||
|
for (quint32 j=0; j < charTable->keyToCharTableCount; j++)
|
||||||
|
{
|
||||||
|
UCKeyOutput* keyToChar = reinterpret_cast<UCKeyOutput*>(data + charTable->keyToCharTableOffsets[j]);
|
||||||
|
for (quint32 k=0; k < charTable->keyToCharTableSize; k++)
|
||||||
|
{
|
||||||
|
if (keyToChar[k] & kUCKeyOutputTestForIndexMask)
|
||||||
|
{
|
||||||
|
long idx = keyToChar[k] & kUCKeyOutputGetIndexMask;
|
||||||
|
if (stateRec && idx < stateRec->keyStateRecordCount)
|
||||||
|
{
|
||||||
|
UCKeyStateRecord* rec = reinterpret_cast<UCKeyStateRecord*>(data + stateRec->keyStateRecordOffsets[idx]);
|
||||||
|
if (rec->stateZeroCharData == ch) return k;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!(keyToChar[k] & kUCKeyOutputSequenceIndexMask) && keyToChar[k] < 0xFFFE)
|
||||||
|
{
|
||||||
|
if (keyToChar[k] == ch) return k;
|
||||||
|
}
|
||||||
|
} // for k
|
||||||
|
} // for j
|
||||||
|
} // for i
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, quint32 nativeMods)
|
||||||
|
{
|
||||||
|
if (!qxt_mac_handler_installed)
|
||||||
|
{
|
||||||
|
EventTypeSpec t;
|
||||||
|
t.eventClass = kEventClassKeyboard;
|
||||||
|
t.eventKind = kEventHotKeyPressed;
|
||||||
|
InstallApplicationEventHandler(&qxt_mac_handle_hot_key, 1, &t, NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
EventHotKeyID keyID;
|
||||||
|
keyID.signature = 'cute';
|
||||||
|
keyID.id = ++hotKeySerial;
|
||||||
|
|
||||||
|
EventHotKeyRef ref = 0;
|
||||||
|
bool rv = !RegisterEventHotKey(nativeKey, nativeMods, keyID, GetApplicationEventTarget(), 0, &ref);
|
||||||
|
if (rv)
|
||||||
|
{
|
||||||
|
keyIDs.insert(Identifier(nativeMods, nativeKey), keyID.id);
|
||||||
|
keyRefs.insert(keyID.id, ref);
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QxtGlobalShortcutPrivate::unregisterShortcut(quint32 nativeKey, quint32 nativeMods)
|
||||||
|
{
|
||||||
|
Identifier id(nativeMods, nativeKey);
|
||||||
|
if (!keyIDs.contains(id)) return false;
|
||||||
|
|
||||||
|
EventHotKeyRef ref = keyRefs.take(keyIDs[id]);
|
||||||
|
keyIDs.remove(id);
|
||||||
|
return !UnregisterEventHotKey(ref);
|
||||||
|
}
|
84
src/third-party/qxtglobalshortcut_p.h
vendored
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#ifndef QXTGLOBALSHORTCUT_P_H
|
||||||
|
/****************************************************************************
|
||||||
|
** Copyright (c) 2006 - 2011, the LibQxt project.
|
||||||
|
** See the Qxt AUTHORS file for a list of authors and copyright holders.
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in the
|
||||||
|
** documentation and/or other materials provided with the distribution.
|
||||||
|
** * Neither the name of the LibQxt project nor the
|
||||||
|
** names of its contributors may be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
** DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||||
|
** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**
|
||||||
|
** <http://libqxt.org> <foundation@libqxt.org>
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#define QXTGLOBALSHORTCUT_P_H
|
||||||
|
|
||||||
|
#include "qxtglobalshortcut.h"
|
||||||
|
#include <QAbstractEventDispatcher>
|
||||||
|
#include <QKeySequence>
|
||||||
|
#include <QHash>
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
|
||||||
|
#include <QAbstractNativeEventFilter>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
class QxtGlobalShortcutPrivate : public QxtPrivate<QxtGlobalShortcut>
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0) && !defined(Q_OS_MAC)
|
||||||
|
,public QAbstractNativeEventFilter
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
QXT_DECLARE_PUBLIC(QxtGlobalShortcut)
|
||||||
|
QxtGlobalShortcutPrivate();
|
||||||
|
~QxtGlobalShortcutPrivate();
|
||||||
|
|
||||||
|
bool enabled;
|
||||||
|
Qt::Key key;
|
||||||
|
Qt::KeyboardModifiers mods;
|
||||||
|
|
||||||
|
bool setShortcut(const QKeySequence& shortcut);
|
||||||
|
bool unsetShortcut();
|
||||||
|
|
||||||
|
static bool error;
|
||||||
|
#ifndef Q_OS_MAC
|
||||||
|
static int ref;
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
|
||||||
|
static QAbstractEventDispatcher::EventFilter prevEventFilter;
|
||||||
|
static bool eventFilter(void* message);
|
||||||
|
#else
|
||||||
|
virtual bool nativeEventFilter(const QByteArray & eventType, void * message, long * result);
|
||||||
|
#endif // QT_VERSION < QT_VERSION_CHECK(5,0,0)
|
||||||
|
#endif // Q_OS_MAC
|
||||||
|
|
||||||
|
static void activateShortcut(quint32 nativeKey, quint32 nativeMods);
|
||||||
|
|
||||||
|
private:
|
||||||
|
static quint32 nativeKeycode(Qt::Key keycode);
|
||||||
|
static quint32 nativeModifiers(Qt::KeyboardModifiers modifiers);
|
||||||
|
|
||||||
|
static bool registerShortcut(quint32 nativeKey, quint32 nativeMods);
|
||||||
|
static bool unregisterShortcut(quint32 nativeKey, quint32 nativeMods);
|
||||||
|
|
||||||
|
static QHash<QPair<quint32, quint32>, QxtGlobalShortcut*> shortcuts;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // QXTGLOBALSHORTCUT_P_H
|
252
src/third-party/qxtglobalshortcut_win.cpp
vendored
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
#include "qxtglobalshortcut_p.h"
|
||||||
|
/****************************************************************************
|
||||||
|
** Copyright (c) 2006 - 2011, the LibQxt project.
|
||||||
|
** See the Qxt AUTHORS file for a list of authors and copyright holders.
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in the
|
||||||
|
** documentation and/or other materials provided with the distribution.
|
||||||
|
** * Neither the name of the LibQxt project nor the
|
||||||
|
** names of its contributors may be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
** DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||||
|
** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**
|
||||||
|
** <http://libqxt.org> <foundation@libqxt.org>
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#include <qt_windows.h>
|
||||||
|
|
||||||
|
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
|
||||||
|
bool QxtGlobalShortcutPrivate::eventFilter(void* message)
|
||||||
|
{
|
||||||
|
#else
|
||||||
|
bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray & eventType,
|
||||||
|
void * message, long * result)
|
||||||
|
{
|
||||||
|
Q_UNUSED(eventType);
|
||||||
|
Q_UNUSED(result);
|
||||||
|
#endif
|
||||||
|
MSG* msg = static_cast<MSG*>(message);
|
||||||
|
if (msg->message == WM_HOTKEY)
|
||||||
|
{
|
||||||
|
const quint32 keycode = HIWORD(msg->lParam);
|
||||||
|
const quint32 modifiers = LOWORD(msg->lParam);
|
||||||
|
activateShortcut(keycode, modifiers);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
|
||||||
|
return prevEventFilter ? prevEventFilter(message) : false;
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers)
|
||||||
|
{
|
||||||
|
// MOD_ALT, MOD_CONTROL, (MOD_KEYUP), MOD_SHIFT, MOD_WIN
|
||||||
|
quint32 native = 0;
|
||||||
|
if (modifiers & Qt::ShiftModifier)
|
||||||
|
native |= MOD_SHIFT;
|
||||||
|
if (modifiers & Qt::ControlModifier)
|
||||||
|
native |= MOD_CONTROL;
|
||||||
|
if (modifiers & Qt::AltModifier)
|
||||||
|
native |= MOD_ALT;
|
||||||
|
if (modifiers & Qt::MetaModifier)
|
||||||
|
native |= MOD_WIN;
|
||||||
|
// TODO: resolve these?
|
||||||
|
//if (modifiers & Qt::KeypadModifier)
|
||||||
|
//if (modifiers & Qt::GroupSwitchModifier)
|
||||||
|
return native;
|
||||||
|
}
|
||||||
|
|
||||||
|
quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key)
|
||||||
|
{
|
||||||
|
switch (key)
|
||||||
|
{
|
||||||
|
case Qt::Key_Escape:
|
||||||
|
return VK_ESCAPE;
|
||||||
|
case Qt::Key_Tab:
|
||||||
|
case Qt::Key_Backtab:
|
||||||
|
return VK_TAB;
|
||||||
|
case Qt::Key_Backspace:
|
||||||
|
return VK_BACK;
|
||||||
|
case Qt::Key_Return:
|
||||||
|
case Qt::Key_Enter:
|
||||||
|
return VK_RETURN;
|
||||||
|
case Qt::Key_Insert:
|
||||||
|
return VK_INSERT;
|
||||||
|
case Qt::Key_Delete:
|
||||||
|
return VK_DELETE;
|
||||||
|
case Qt::Key_Pause:
|
||||||
|
return VK_PAUSE;
|
||||||
|
case Qt::Key_Print:
|
||||||
|
return VK_PRINT;
|
||||||
|
case Qt::Key_Clear:
|
||||||
|
return VK_CLEAR;
|
||||||
|
case Qt::Key_Home:
|
||||||
|
return VK_HOME;
|
||||||
|
case Qt::Key_End:
|
||||||
|
return VK_END;
|
||||||
|
case Qt::Key_Left:
|
||||||
|
return VK_LEFT;
|
||||||
|
case Qt::Key_Up:
|
||||||
|
return VK_UP;
|
||||||
|
case Qt::Key_Right:
|
||||||
|
return VK_RIGHT;
|
||||||
|
case Qt::Key_Down:
|
||||||
|
return VK_DOWN;
|
||||||
|
case Qt::Key_PageUp:
|
||||||
|
return VK_PRIOR;
|
||||||
|
case Qt::Key_PageDown:
|
||||||
|
return VK_NEXT;
|
||||||
|
case Qt::Key_F1:
|
||||||
|
return VK_F1;
|
||||||
|
case Qt::Key_F2:
|
||||||
|
return VK_F2;
|
||||||
|
case Qt::Key_F3:
|
||||||
|
return VK_F3;
|
||||||
|
case Qt::Key_F4:
|
||||||
|
return VK_F4;
|
||||||
|
case Qt::Key_F5:
|
||||||
|
return VK_F5;
|
||||||
|
case Qt::Key_F6:
|
||||||
|
return VK_F6;
|
||||||
|
case Qt::Key_F7:
|
||||||
|
return VK_F7;
|
||||||
|
case Qt::Key_F8:
|
||||||
|
return VK_F8;
|
||||||
|
case Qt::Key_F9:
|
||||||
|
return VK_F9;
|
||||||
|
case Qt::Key_F10:
|
||||||
|
return VK_F10;
|
||||||
|
case Qt::Key_F11:
|
||||||
|
return VK_F11;
|
||||||
|
case Qt::Key_F12:
|
||||||
|
return VK_F12;
|
||||||
|
case Qt::Key_F13:
|
||||||
|
return VK_F13;
|
||||||
|
case Qt::Key_F14:
|
||||||
|
return VK_F14;
|
||||||
|
case Qt::Key_F15:
|
||||||
|
return VK_F15;
|
||||||
|
case Qt::Key_F16:
|
||||||
|
return VK_F16;
|
||||||
|
case Qt::Key_F17:
|
||||||
|
return VK_F17;
|
||||||
|
case Qt::Key_F18:
|
||||||
|
return VK_F18;
|
||||||
|
case Qt::Key_F19:
|
||||||
|
return VK_F19;
|
||||||
|
case Qt::Key_F20:
|
||||||
|
return VK_F20;
|
||||||
|
case Qt::Key_F21:
|
||||||
|
return VK_F21;
|
||||||
|
case Qt::Key_F22:
|
||||||
|
return VK_F22;
|
||||||
|
case Qt::Key_F23:
|
||||||
|
return VK_F23;
|
||||||
|
case Qt::Key_F24:
|
||||||
|
return VK_F24;
|
||||||
|
case Qt::Key_Space:
|
||||||
|
return VK_SPACE;
|
||||||
|
case Qt::Key_Asterisk:
|
||||||
|
return VK_MULTIPLY;
|
||||||
|
case Qt::Key_Plus:
|
||||||
|
return VK_ADD;
|
||||||
|
case Qt::Key_Comma:
|
||||||
|
return VK_SEPARATOR;
|
||||||
|
case Qt::Key_Minus:
|
||||||
|
return VK_SUBTRACT;
|
||||||
|
case Qt::Key_Slash:
|
||||||
|
return VK_DIVIDE;
|
||||||
|
case Qt::Key_MediaNext:
|
||||||
|
return VK_MEDIA_NEXT_TRACK;
|
||||||
|
case Qt::Key_MediaPrevious:
|
||||||
|
return VK_MEDIA_PREV_TRACK;
|
||||||
|
case Qt::Key_MediaPlay:
|
||||||
|
return VK_MEDIA_PLAY_PAUSE;
|
||||||
|
case Qt::Key_MediaStop:
|
||||||
|
return VK_MEDIA_STOP;
|
||||||
|
// couldn't find those in VK_*
|
||||||
|
//case Qt::Key_MediaLast:
|
||||||
|
//case Qt::Key_MediaRecord:
|
||||||
|
case Qt::Key_VolumeDown:
|
||||||
|
return VK_VOLUME_DOWN;
|
||||||
|
case Qt::Key_VolumeUp:
|
||||||
|
return VK_VOLUME_UP;
|
||||||
|
case Qt::Key_VolumeMute:
|
||||||
|
return VK_VOLUME_MUTE;
|
||||||
|
|
||||||
|
// numbers
|
||||||
|
case Qt::Key_0:
|
||||||
|
case Qt::Key_1:
|
||||||
|
case Qt::Key_2:
|
||||||
|
case Qt::Key_3:
|
||||||
|
case Qt::Key_4:
|
||||||
|
case Qt::Key_5:
|
||||||
|
case Qt::Key_6:
|
||||||
|
case Qt::Key_7:
|
||||||
|
case Qt::Key_8:
|
||||||
|
case Qt::Key_9:
|
||||||
|
return key;
|
||||||
|
|
||||||
|
// letters
|
||||||
|
case Qt::Key_A:
|
||||||
|
case Qt::Key_B:
|
||||||
|
case Qt::Key_C:
|
||||||
|
case Qt::Key_D:
|
||||||
|
case Qt::Key_E:
|
||||||
|
case Qt::Key_F:
|
||||||
|
case Qt::Key_G:
|
||||||
|
case Qt::Key_H:
|
||||||
|
case Qt::Key_I:
|
||||||
|
case Qt::Key_J:
|
||||||
|
case Qt::Key_K:
|
||||||
|
case Qt::Key_L:
|
||||||
|
case Qt::Key_M:
|
||||||
|
case Qt::Key_N:
|
||||||
|
case Qt::Key_O:
|
||||||
|
case Qt::Key_P:
|
||||||
|
case Qt::Key_Q:
|
||||||
|
case Qt::Key_R:
|
||||||
|
case Qt::Key_S:
|
||||||
|
case Qt::Key_T:
|
||||||
|
case Qt::Key_U:
|
||||||
|
case Qt::Key_V:
|
||||||
|
case Qt::Key_W:
|
||||||
|
case Qt::Key_X:
|
||||||
|
case Qt::Key_Y:
|
||||||
|
case Qt::Key_Z:
|
||||||
|
return key;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, quint32 nativeMods)
|
||||||
|
{
|
||||||
|
return RegisterHotKey(0, nativeMods ^ nativeKey, nativeMods, nativeKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QxtGlobalShortcutPrivate::unregisterShortcut(quint32 nativeKey, quint32 nativeMods)
|
||||||
|
{
|
||||||
|
return UnregisterHotKey(0, nativeMods ^ nativeKey);
|
||||||
|
}
|
243
src/third-party/qxtglobalshortcut_x11.cpp
vendored
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
#include "qxtglobalshortcut_p.h"
|
||||||
|
/****************************************************************************
|
||||||
|
** Copyright (c) 2006 - 2011, the LibQxt project.
|
||||||
|
** See the Qxt AUTHORS file for a list of authors and copyright holders.
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in the
|
||||||
|
** documentation and/or other materials provided with the distribution.
|
||||||
|
** * Neither the name of the LibQxt project nor the
|
||||||
|
** names of its contributors may be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
** DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||||
|
** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**
|
||||||
|
** <http://libqxt.org> <foundation@libqxt.org>
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#include <QVector>
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
|
||||||
|
# include <QX11Info>
|
||||||
|
#else
|
||||||
|
# include <QApplication>
|
||||||
|
# include <qpa/qplatformnativeinterface.h>
|
||||||
|
# include <xcb/xcb.h>
|
||||||
|
#endif
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
const QVector<quint32> maskModifiers = QVector<quint32>()
|
||||||
|
<< 0 << Mod2Mask << LockMask << (Mod2Mask | LockMask);
|
||||||
|
|
||||||
|
typedef int (*X11ErrorHandler)(Display *display, XErrorEvent *event);
|
||||||
|
|
||||||
|
class QxtX11ErrorHandler {
|
||||||
|
public:
|
||||||
|
static bool error;
|
||||||
|
|
||||||
|
static int qxtX11ErrorHandler(Display *display, XErrorEvent *event)
|
||||||
|
{
|
||||||
|
Q_UNUSED(display);
|
||||||
|
switch (event->error_code)
|
||||||
|
{
|
||||||
|
case BadAccess:
|
||||||
|
case BadValue:
|
||||||
|
case BadWindow:
|
||||||
|
if (event->request_code == 33 /* X_GrabKey */ ||
|
||||||
|
event->request_code == 34 /* X_UngrabKey */)
|
||||||
|
{
|
||||||
|
error = true;
|
||||||
|
//TODO:
|
||||||
|
//char errstr[256];
|
||||||
|
//XGetErrorText(dpy, err->error_code, errstr, 256);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QxtX11ErrorHandler()
|
||||||
|
{
|
||||||
|
error = false;
|
||||||
|
m_previousErrorHandler = XSetErrorHandler(qxtX11ErrorHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
~QxtX11ErrorHandler()
|
||||||
|
{
|
||||||
|
XSetErrorHandler(m_previousErrorHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
X11ErrorHandler m_previousErrorHandler;
|
||||||
|
};
|
||||||
|
|
||||||
|
bool QxtX11ErrorHandler::error = false;
|
||||||
|
|
||||||
|
class QxtX11Data {
|
||||||
|
public:
|
||||||
|
QxtX11Data()
|
||||||
|
{
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
|
||||||
|
m_display = QX11Info::display();
|
||||||
|
#else
|
||||||
|
QPlatformNativeInterface *native = qApp->platformNativeInterface();
|
||||||
|
void *display = native->nativeResourceForScreen(QByteArray("display"),
|
||||||
|
QGuiApplication::primaryScreen());
|
||||||
|
m_display = reinterpret_cast<Display *>(display);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isValid()
|
||||||
|
{
|
||||||
|
return m_display != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Display *display()
|
||||||
|
{
|
||||||
|
Q_ASSERT(isValid());
|
||||||
|
return m_display;
|
||||||
|
}
|
||||||
|
|
||||||
|
Window rootWindow()
|
||||||
|
{
|
||||||
|
return DefaultRootWindow(display());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool grabKey(quint32 keycode, quint32 modifiers, Window window)
|
||||||
|
{
|
||||||
|
QxtX11ErrorHandler errorHandler;
|
||||||
|
|
||||||
|
for (int i = 0; !errorHandler.error && i < maskModifiers.size(); ++i) {
|
||||||
|
XGrabKey(display(), keycode, modifiers | maskModifiers[i], window, True,
|
||||||
|
GrabModeAsync, GrabModeAsync);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errorHandler.error) {
|
||||||
|
ungrabKey(keycode, modifiers, window);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ungrabKey(quint32 keycode, quint32 modifiers, Window window)
|
||||||
|
{
|
||||||
|
QxtX11ErrorHandler errorHandler;
|
||||||
|
|
||||||
|
foreach (quint32 maskMods, maskModifiers) {
|
||||||
|
XUngrabKey(display(), keycode, modifiers | maskMods, window);
|
||||||
|
}
|
||||||
|
|
||||||
|
return !errorHandler.error;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Display *m_display;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
|
||||||
|
bool QxtGlobalShortcutPrivate::eventFilter(void *message)
|
||||||
|
{
|
||||||
|
XEvent *event = static_cast<XEvent *>(message);
|
||||||
|
if (event->type == KeyPress)
|
||||||
|
{
|
||||||
|
XKeyEvent *key = reinterpret_cast<XKeyEvent *>(event);
|
||||||
|
unsigned int keycode = key->keycode;
|
||||||
|
unsigned int keystate = key->state;
|
||||||
|
#else
|
||||||
|
bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray & eventType,
|
||||||
|
void *message, long *result)
|
||||||
|
{
|
||||||
|
Q_UNUSED(result);
|
||||||
|
|
||||||
|
xcb_key_press_event_t *kev = 0;
|
||||||
|
if (eventType == "xcb_generic_event_t") {
|
||||||
|
xcb_generic_event_t *ev = static_cast<xcb_generic_event_t *>(message);
|
||||||
|
if ((ev->response_type & 127) == XCB_KEY_PRESS)
|
||||||
|
kev = static_cast<xcb_key_press_event_t *>(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (kev != 0) {
|
||||||
|
unsigned int keycode = kev->detail;
|
||||||
|
unsigned int keystate = 0;
|
||||||
|
if(kev->state & XCB_MOD_MASK_1)
|
||||||
|
keystate |= Mod1Mask;
|
||||||
|
if(kev->state & XCB_MOD_MASK_CONTROL)
|
||||||
|
keystate |= ControlMask;
|
||||||
|
if(kev->state & XCB_MOD_MASK_4)
|
||||||
|
keystate |= Mod4Mask;
|
||||||
|
if(kev->state & XCB_MOD_MASK_SHIFT)
|
||||||
|
keystate |= ShiftMask;
|
||||||
|
#endif
|
||||||
|
activateShortcut(keycode,
|
||||||
|
// Mod1Mask == Alt, Mod4Mask == Meta
|
||||||
|
keystate & (ShiftMask | ControlMask | Mod1Mask | Mod4Mask));
|
||||||
|
}
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
|
||||||
|
return prevEventFilter ? prevEventFilter(message) : false;
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers)
|
||||||
|
{
|
||||||
|
// ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, and Mod5Mask
|
||||||
|
quint32 native = 0;
|
||||||
|
if (modifiers & Qt::ShiftModifier)
|
||||||
|
native |= ShiftMask;
|
||||||
|
if (modifiers & Qt::ControlModifier)
|
||||||
|
native |= ControlMask;
|
||||||
|
if (modifiers & Qt::AltModifier)
|
||||||
|
native |= Mod1Mask;
|
||||||
|
if (modifiers & Qt::MetaModifier)
|
||||||
|
native |= Mod4Mask;
|
||||||
|
|
||||||
|
// TODO: resolve these?
|
||||||
|
//if (modifiers & Qt::MetaModifier)
|
||||||
|
//if (modifiers & Qt::KeypadModifier)
|
||||||
|
//if (modifiers & Qt::GroupSwitchModifier)
|
||||||
|
return native;
|
||||||
|
}
|
||||||
|
|
||||||
|
quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key)
|
||||||
|
{
|
||||||
|
QxtX11Data x11;
|
||||||
|
if (!x11.isValid())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
KeySym keysym = XStringToKeysym(QKeySequence(key).toString().toLatin1().data());
|
||||||
|
if (keysym == NoSymbol)
|
||||||
|
keysym = static_cast<ushort>(key);
|
||||||
|
|
||||||
|
return XKeysymToKeycode(x11.display(), keysym);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, quint32 nativeMods)
|
||||||
|
{
|
||||||
|
QxtX11Data x11;
|
||||||
|
return x11.isValid() && x11.grabKey(nativeKey, nativeMods, x11.rootWindow());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QxtGlobalShortcutPrivate::unregisterShortcut(quint32 nativeKey, quint32 nativeMods)
|
||||||
|
{
|
||||||
|
QxtX11Data x11;
|
||||||
|
return x11.isValid() && x11.ungrabKey(nativeKey, nativeMods, x11.rootWindow());
|
||||||
|
}
|
567
src/translations/qterminal_cs.ts
Normal file
@ -0,0 +1,567 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1" language="cs_CZ">
|
||||||
|
<context>
|
||||||
|
<name>BookmarksWidget</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/bookmarkswidget.ui" line="32"/>
|
||||||
|
<source>Filter:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>FontDialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="14"/>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="73"/>
|
||||||
|
<source>Select Terminal Font</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="32"/>
|
||||||
|
<source>Font:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="42"/>
|
||||||
|
<source>Size:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="59"/>
|
||||||
|
<source>Preview</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>MainWindow</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="310"/>
|
||||||
|
<source>Close Tab</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
|
<source>Split Terminal Horizontally</source>
|
||||||
|
<translation type="unfinished">Rozdělit Terminál Horizontálně</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="197"/>
|
||||||
|
<source>Split Terminal Vertically</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="203"/>
|
||||||
|
<source>Collapse Subterminal</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="209"/>
|
||||||
|
<source>Next Subterminal</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="215"/>
|
||||||
|
<source>Previous Subterminal</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="165"/>
|
||||||
|
<source>Next Tab</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="53"/>
|
||||||
|
<source>Bookmarks</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="91"/>
|
||||||
|
<source>Rename Session</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="146"/>
|
||||||
|
<source>Press "%1" to see the terminal.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="157"/>
|
||||||
|
<source>Clear Current Tab</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="171"/>
|
||||||
|
<source>Previous Tab</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="177"/>
|
||||||
|
<source>Move Tab Left</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="183"/>
|
||||||
|
<source>Move Tab Right</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="224"/>
|
||||||
|
<source>Copy Selection</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="230"/>
|
||||||
|
<source>Paste Clipboard</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="236"/>
|
||||||
|
<source>Paste Selection</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="242"/>
|
||||||
|
<source>Zoom in</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="248"/>
|
||||||
|
<source>Zoom out</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="254"/>
|
||||||
|
<source>Zoom reset</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="262"/>
|
||||||
|
<source>Find...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="273"/>
|
||||||
|
<source>Save Session</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="279"/>
|
||||||
|
<source>Load Session</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="286"/>
|
||||||
|
<source>Toggle Menu</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="304"/>
|
||||||
|
<source>New Tab</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="316"/>
|
||||||
|
<source>New Window</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="339"/>
|
||||||
|
<source>Hide Window Borders</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="350"/>
|
||||||
|
<source>Show Tab Bar</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="370"/>
|
||||||
|
<source>Bottom</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="371"/>
|
||||||
|
<source>Top</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="372"/>
|
||||||
|
<location filename="../mainwindow.cpp" line="403"/>
|
||||||
|
<source>Right</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="373"/>
|
||||||
|
<location filename="../mainwindow.cpp" line="404"/>
|
||||||
|
<source>Left</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="388"/>
|
||||||
|
<source>Tabs Layout</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="402"/>
|
||||||
|
<source>None</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="420"/>
|
||||||
|
<source>Scrollbar Layout</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="474"/>
|
||||||
|
<source>Exit QTerminal</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="476"/>
|
||||||
|
<source>Do not ask again</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="483"/>
|
||||||
|
<source>Are you sure you want to exit?</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="503"/>
|
||||||
|
<source>A lightweight multiplatform terminal emulator</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>PropertiesDialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="14"/>
|
||||||
|
<source>QTerminal Properties</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="49"/>
|
||||||
|
<source>Terminal Font</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="54"/>
|
||||||
|
<source>Look and Feel</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="59"/>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="314"/>
|
||||||
|
<source>History</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="64"/>
|
||||||
|
<source>Emulation</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="69"/>
|
||||||
|
<source>Shortcuts</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="74"/>
|
||||||
|
<source>DropDown</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="79"/>
|
||||||
|
<source>Bookmarks</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="97"/>
|
||||||
|
<source>Font</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="129"/>
|
||||||
|
<source>&Set Font...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="152"/>
|
||||||
|
<source>Note: only fixed width font are allowed to be used in terminal</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="169"/>
|
||||||
|
<source>Action after paste clipboard</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="176"/>
|
||||||
|
<source>Color Scheme:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="209"/>
|
||||||
|
<source>GUI Style:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="252"/>
|
||||||
|
<source>Scrollbar Position:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="445"/>
|
||||||
|
<source>Show on start</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="452"/>
|
||||||
|
<source>Size</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="460"/>
|
||||||
|
<source>Height %:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="470"/>
|
||||||
|
<source>Width %:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="487"/>
|
||||||
|
<source>Shortcut:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="516"/>
|
||||||
|
<source>Edit File Content</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="538"/>
|
||||||
|
<source>Use Bookmarks</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="547"/>
|
||||||
|
<source>Bookmark FIle:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="557"/>
|
||||||
|
<source>Find...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="566"/>
|
||||||
|
<source>You can specify your own bookmarks file location. It allows easy bookmark sharing with tools like OwnCloud or Dropbox.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="202"/>
|
||||||
|
<source>Tabs Position:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="259"/>
|
||||||
|
<source>&Application Transparency:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="216"/>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="236"/>
|
||||||
|
<source> %</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="229"/>
|
||||||
|
<source>Terminal Transparency:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="272"/>
|
||||||
|
<source>&Highlight Current Terminal With Border</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="279"/>
|
||||||
|
<source>Ask for Window Closing Confirmation</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="289"/>
|
||||||
|
<source>Open New Sub-Terminals in Current Working Dir</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="296"/>
|
||||||
|
<source>Show Main Menu</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="303"/>
|
||||||
|
<source>Always Show Tabs</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="320"/>
|
||||||
|
<source>Limited to: </source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="340"/>
|
||||||
|
<source>Unlimited</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="367"/>
|
||||||
|
<source>Emulation Type</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="376"/>
|
||||||
|
<source>Select emulation behaviour. It does not mean that for example "linux" has to be used only on Linux OS. Feel free to use it on Mac too etc.<p>Default is the failback type with minimal feature set.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="428"/>
|
||||||
|
<source>Shortcut</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="433"/>
|
||||||
|
<source>Key</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="65"/>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="117"/>
|
||||||
|
<source>System Default</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="245"/>
|
||||||
|
<source>Open or create bookmarks file</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>QObject</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../bookmarkswidget.cpp" line="97"/>
|
||||||
|
<source>Local Bookmarks</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../bookmarkswidget.cpp" line="190"/>
|
||||||
|
<source>Synchronized Bookmarks</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TabWidget</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="69"/>
|
||||||
|
<location filename="../tabwidget.cpp" line="174"/>
|
||||||
|
<source>Shell No. %1</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="160"/>
|
||||||
|
<source>Tab name</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="161"/>
|
||||||
|
<source>New tab name:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="183"/>
|
||||||
|
<source>Close session</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="185"/>
|
||||||
|
<source>Rename session</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TermWidgetHolder</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../termwidgetholder.cpp" line="46"/>
|
||||||
|
<source>Load Session</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../termwidgetholder.cpp" line="47"/>
|
||||||
|
<source>List of saved sessions:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TermWidgetImpl</name>
|
||||||
|
<message>
|
||||||
|
<source>Split Terminal Horizontally</source>
|
||||||
|
<translation type="obsolete">Rozdělit Terminál Horizontálně</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>mainWindow</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="14"/>
|
||||||
|
<source>MainWindow</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="68"/>
|
||||||
|
<source>File</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="76"/>
|
||||||
|
<source>Actions</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="81"/>
|
||||||
|
<source>Help</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="88"/>
|
||||||
|
<source>View</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="93"/>
|
||||||
|
<source>Edit</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="125"/>
|
||||||
|
<source>&Quit</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="107"/>
|
||||||
|
<source>About...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="112"/>
|
||||||
|
<source>About Qt...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="117"/>
|
||||||
|
<source>&Preferences...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
603
src/translations/qterminal_de.ts
Normal file
@ -0,0 +1,603 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1" language="de_DE">
|
||||||
|
<context>
|
||||||
|
<name>BookmarksWidget</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/bookmarkswidget.ui" line="32"/>
|
||||||
|
<source>Filter:</source>
|
||||||
|
<translation>Filter:</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>FontDialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="14"/>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="73"/>
|
||||||
|
<source>Select Terminal Font</source>
|
||||||
|
<translation>Terminal-Schriftart wählen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="32"/>
|
||||||
|
<source>Font:</source>
|
||||||
|
<translation>Schriftart:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="42"/>
|
||||||
|
<source>Size:</source>
|
||||||
|
<translation>Größe:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="59"/>
|
||||||
|
<source>Preview</source>
|
||||||
|
<translation>Vorschau</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>MainWindow</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="310"/>
|
||||||
|
<source>Close Tab</source>
|
||||||
|
<translation>Tab schließen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
|
<source>Split Terminal Horizontally</source>
|
||||||
|
<translation>Terminal horizontal teilen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="197"/>
|
||||||
|
<source>Split Terminal Vertically</source>
|
||||||
|
<translation>Terminal vertikal teilen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="203"/>
|
||||||
|
<source>Collapse Subterminal</source>
|
||||||
|
<translation>Unterterminal schließen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="209"/>
|
||||||
|
<source>Next Subterminal</source>
|
||||||
|
<translation>Nächster Unterterminal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="215"/>
|
||||||
|
<source>Previous Subterminal</source>
|
||||||
|
<translation>Voriger Unterterminal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="165"/>
|
||||||
|
<source>Next Tab</source>
|
||||||
|
<translation>Nächster Tab</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="171"/>
|
||||||
|
<source>Previous Tab</source>
|
||||||
|
<translation>Voriger Tab</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="177"/>
|
||||||
|
<source>Move Tab Left</source>
|
||||||
|
<translation>Tab nach links verschieben</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="183"/>
|
||||||
|
<source>Move Tab Right</source>
|
||||||
|
<translation>Tab nach rechts verschieben</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="224"/>
|
||||||
|
<source>Copy Selection</source>
|
||||||
|
<translation>Textauswahl kopieren</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="236"/>
|
||||||
|
<source>Paste Selection</source>
|
||||||
|
<translation>Textauswahl einfügen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="273"/>
|
||||||
|
<source>Save Session</source>
|
||||||
|
<translation>Sitzung speichern</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="279"/>
|
||||||
|
<source>Load Session</source>
|
||||||
|
<translation>Sitzung laden</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="370"/>
|
||||||
|
<source>Bottom</source>
|
||||||
|
<translation>Unten</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="371"/>
|
||||||
|
<source>Top</source>
|
||||||
|
<translation>Oben</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="372"/>
|
||||||
|
<location filename="../mainwindow.cpp" line="403"/>
|
||||||
|
<source>Right</source>
|
||||||
|
<translation>Rechts</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="373"/>
|
||||||
|
<location filename="../mainwindow.cpp" line="404"/>
|
||||||
|
<source>Left</source>
|
||||||
|
<translation>Links</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="388"/>
|
||||||
|
<source>Tabs Layout</source>
|
||||||
|
<translation>Anzeige Tableiste</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="402"/>
|
||||||
|
<source>None</source>
|
||||||
|
<translation>Keine</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="420"/>
|
||||||
|
<source>Scrollbar Layout</source>
|
||||||
|
<translation>Anzeige Bildlaufleiste</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="474"/>
|
||||||
|
<source>Exit QTerminal</source>
|
||||||
|
<translation>QTerminal beenden</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="476"/>
|
||||||
|
<source>Do not ask again</source>
|
||||||
|
<translation>Nicht erneut nachfragen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="483"/>
|
||||||
|
<source>Are you sure you want to exit?</source>
|
||||||
|
<translation>Sind Sie sicher, dass Sie QTerminal beenden wollen?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="503"/>
|
||||||
|
<source>A lightweight multiplatform terminal emulator</source>
|
||||||
|
<translation>Ein schlanker plattformunabhängiger Terminalemulator</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="53"/>
|
||||||
|
<source>Bookmarks</source>
|
||||||
|
<translation>Lesezeichen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="91"/>
|
||||||
|
<source>Rename Session</source>
|
||||||
|
<translation>Sitzung umbenennen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="146"/>
|
||||||
|
<source>Press "%1" to see the terminal.</source>
|
||||||
|
<translation>Tippen Sie "%1", um den Terminal zu sehen.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="157"/>
|
||||||
|
<source>Clear Current Tab</source>
|
||||||
|
<translation>Aktuellen Tab leeren</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="230"/>
|
||||||
|
<source>Paste Clipboard</source>
|
||||||
|
<translation>Zwischenablage einfügen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="242"/>
|
||||||
|
<source>Zoom in</source>
|
||||||
|
<translation>Vergrößern</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="248"/>
|
||||||
|
<source>Zoom out</source>
|
||||||
|
<translation>Verkleinern</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="254"/>
|
||||||
|
<source>Zoom reset</source>
|
||||||
|
<translation>Zurücksetzen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="262"/>
|
||||||
|
<source>Find...</source>
|
||||||
|
<translation>Suchen...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="286"/>
|
||||||
|
<source>Toggle Menu</source>
|
||||||
|
<translation>Menü ein-/ausblenden</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="304"/>
|
||||||
|
<source>New Tab</source>
|
||||||
|
<translation>Neuer Tab</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="316"/>
|
||||||
|
<source>New Window</source>
|
||||||
|
<translation>Neues Fenster</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="339"/>
|
||||||
|
<source>Hide Window Borders</source>
|
||||||
|
<translation>Fensterrahmen ausblenden</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="350"/>
|
||||||
|
<source>Show Tab Bar</source>
|
||||||
|
<translation>Tabzeile anzeigen</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>PropertiesDialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="14"/>
|
||||||
|
<source>QTerminal Properties</source>
|
||||||
|
<translation>QTerminal-Einstellungen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="49"/>
|
||||||
|
<source>Terminal Font</source>
|
||||||
|
<translation>Terminalschrift</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="54"/>
|
||||||
|
<source>Look and Feel</source>
|
||||||
|
<translation>Aussehen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="59"/>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="314"/>
|
||||||
|
<source>History</source>
|
||||||
|
<translation>Historie</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="64"/>
|
||||||
|
<source>Emulation</source>
|
||||||
|
<translation>Emulation</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="69"/>
|
||||||
|
<source>Shortcuts</source>
|
||||||
|
<translation>Tastenkürzel</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="97"/>
|
||||||
|
<source>Font</source>
|
||||||
|
<translation>Schriftart</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="129"/>
|
||||||
|
<source>&Set Font...</source>
|
||||||
|
<translation>&Schriftart wählen...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="176"/>
|
||||||
|
<source>Color Scheme:</source>
|
||||||
|
<translation>Farbschema:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="209"/>
|
||||||
|
<source>GUI Style:</source>
|
||||||
|
<translation>GUI-Stil:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="252"/>
|
||||||
|
<source>Scrollbar Position:</source>
|
||||||
|
<translation>Position der Bildlaufleiste:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="202"/>
|
||||||
|
<source>Tabs Position:</source>
|
||||||
|
<translation>Position der Tabs:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="259"/>
|
||||||
|
<source>&Application Transparency:</source>
|
||||||
|
<translation>&Transparenz der Anwendung:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="216"/>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="236"/>
|
||||||
|
<source> %</source>
|
||||||
|
<translation>%</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="229"/>
|
||||||
|
<source>Terminal Transparency:</source>
|
||||||
|
<translation>Transparenz des Terminals:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="320"/>
|
||||||
|
<source>Limited to: </source>
|
||||||
|
<translation>Eingeschränkt auf:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="340"/>
|
||||||
|
<source>Unlimited</source>
|
||||||
|
<translation>keine Einschränkung</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="367"/>
|
||||||
|
<source>Emulation Type</source>
|
||||||
|
<translation>Emulationsart</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="376"/>
|
||||||
|
<source>Select emulation behaviour. It does not mean that for example "linux" has to be used only on Linux OS. Feel free to use it on Mac too etc.<p>Default is the failback type with minimal feature set.</source>
|
||||||
|
<translation>Verhalten des Emulators wählen. Hinweis: Emulationsarten können auch unter anderen Systemen genutzt werden (z.B. "linux" unter OS X).<p>Die Standardemulation ist "default" mit minimalem Funktionsumfang.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="428"/>
|
||||||
|
<source>Shortcut</source>
|
||||||
|
<translation>Tastenkürzel</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="433"/>
|
||||||
|
<source>Key</source>
|
||||||
|
<translation>Taste</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="74"/>
|
||||||
|
<source>DropDown</source>
|
||||||
|
<translation>Aufklappen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="79"/>
|
||||||
|
<source>Bookmarks</source>
|
||||||
|
<translation>Lesezeichen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="152"/>
|
||||||
|
<source>Note: only fixed width font are allowed to be used in terminal</source>
|
||||||
|
<translation>Anmerkung: nur Festbreit-Schriften können im Terminal verwendet werden.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="169"/>
|
||||||
|
<source>Action after paste clipboard</source>
|
||||||
|
<translation>Aktion nach Einfügen aus der Zwischenablage</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="272"/>
|
||||||
|
<source>&Highlight Current Terminal With Border</source>
|
||||||
|
<translation>Aktuellen Terminal einrahmen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="279"/>
|
||||||
|
<source>Ask for Window Closing Confirmation</source>
|
||||||
|
<translation>Beim Schließen eines Fensters nachfragen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="289"/>
|
||||||
|
<source>Open New Sub-Terminals in Current Working Dir</source>
|
||||||
|
<translation>Neuen Unterterminal im aktuellen Verzeichnis öffnen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="296"/>
|
||||||
|
<source>Show Main Menu</source>
|
||||||
|
<translation>Hauptmenü anzeigen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="303"/>
|
||||||
|
<source>Always Show Tabs</source>
|
||||||
|
<translation>Tabs immer anzeigen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="445"/>
|
||||||
|
<source>Show on start</source>
|
||||||
|
<translation>Beim Start anzeigen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="452"/>
|
||||||
|
<source>Size</source>
|
||||||
|
<translation>Größe</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="460"/>
|
||||||
|
<source>Height %:</source>
|
||||||
|
<translation>Höhe in %:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="470"/>
|
||||||
|
<source>Width %:</source>
|
||||||
|
<translation>Breite in %:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="487"/>
|
||||||
|
<source>Shortcut:</source>
|
||||||
|
<translation>Tastenkürzel:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="516"/>
|
||||||
|
<source>Edit File Content</source>
|
||||||
|
<translation>Datei bearbeiten</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="538"/>
|
||||||
|
<source>Use Bookmarks</source>
|
||||||
|
<translation>Lesezeichen verwenden</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="547"/>
|
||||||
|
<source>Bookmark FIle:</source>
|
||||||
|
<translation>Lesezeichendatei:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="557"/>
|
||||||
|
<source>Find...</source>
|
||||||
|
<translation>Suchen...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="566"/>
|
||||||
|
<source>You can specify your own bookmarks file location. It allows easy bookmark sharing with tools like OwnCloud or Dropbox.</source>
|
||||||
|
<translation>Sie können eine Datei für eigene Lesezeichen angeben. Das erlaubt einfachen Austausch mit Werkzeugen wie OwnCloud oder DropBox.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="65"/>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="117"/>
|
||||||
|
<source>System Default</source>
|
||||||
|
<translation>Systemstandard</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="245"/>
|
||||||
|
<source>Open or create bookmarks file</source>
|
||||||
|
<translation>Lesezeichendatei öffnen</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>QObject</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../bookmarkswidget.cpp" line="97"/>
|
||||||
|
<source>Local Bookmarks</source>
|
||||||
|
<translation>Lokale Lesezeichen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../bookmarkswidget.cpp" line="190"/>
|
||||||
|
<source>Synchronized Bookmarks</source>
|
||||||
|
<translation>Synchronisierte Lesezeichen</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TabWidget</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="69"/>
|
||||||
|
<location filename="../tabwidget.cpp" line="174"/>
|
||||||
|
<source>Shell No. %1</source>
|
||||||
|
<translation>Shell Nr. %1</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="160"/>
|
||||||
|
<source>Tab name</source>
|
||||||
|
<translation>Tabbezeichnung</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="161"/>
|
||||||
|
<source>New tab name:</source>
|
||||||
|
<translation>Neue Tabbezeichnung:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="183"/>
|
||||||
|
<source>Close session</source>
|
||||||
|
<translation>Sitzung schließen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="185"/>
|
||||||
|
<source>Rename session</source>
|
||||||
|
<translation>Sitzung umbenennen</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TermWidgetHolder</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../termwidgetholder.cpp" line="46"/>
|
||||||
|
<source>Load Session</source>
|
||||||
|
<translation>Sitzung laden</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../termwidgetholder.cpp" line="47"/>
|
||||||
|
<source>List of saved sessions:</source>
|
||||||
|
<translation>Liste der gespeicherten Sitzungen:</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TermWidgetImpl</name>
|
||||||
|
<message>
|
||||||
|
<source>Copy Selection</source>
|
||||||
|
<translation type="obsolete">Textauswahl kopieren</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Paste Clipboard</source>
|
||||||
|
<translation type="obsolete">Zwischenablage einfügen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Paste Selection</source>
|
||||||
|
<translation type="obsolete">Textauswahl einfügen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Zoom in</source>
|
||||||
|
<translation type="obsolete">Vergrößern</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Zoom out</source>
|
||||||
|
<translation type="obsolete">Verkleinern</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Zoom reset</source>
|
||||||
|
<translation type="obsolete">Zurücksetzen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Clear Active Terminal</source>
|
||||||
|
<translation type="obsolete">Aktiven Terminal leeren</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Split Terminal Horizontally</source>
|
||||||
|
<translation type="obsolete">Terminal horizontal teilen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Split Terminal Vertically</source>
|
||||||
|
<translation type="obsolete">Terminal vertikal teilen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Collapse Subterminal</source>
|
||||||
|
<translation type="obsolete">Unterterminal schließen</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>mainWindow</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="76"/>
|
||||||
|
<source>Actions</source>
|
||||||
|
<translation>Aktionen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="81"/>
|
||||||
|
<source>Help</source>
|
||||||
|
<translation>Hilfe</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="93"/>
|
||||||
|
<source>Edit</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="107"/>
|
||||||
|
<source>About...</source>
|
||||||
|
<translation>Über...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="112"/>
|
||||||
|
<source>About Qt...</source>
|
||||||
|
<translation>Über Qt...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="117"/>
|
||||||
|
<source>&Preferences...</source>
|
||||||
|
<translation>&Einstellungen...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="14"/>
|
||||||
|
<source>MainWindow</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="68"/>
|
||||||
|
<source>File</source>
|
||||||
|
<translation>Datei</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="88"/>
|
||||||
|
<source>View</source>
|
||||||
|
<translation>Ansicht</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="125"/>
|
||||||
|
<source>&Quit</source>
|
||||||
|
<translation>Beenden</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
627
src/translations/qterminal_es.ts
Normal file
@ -0,0 +1,627 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1" language="es_ES">
|
||||||
|
<context>
|
||||||
|
<name>BookmarksWidget</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/bookmarkswidget.ui" line="32"/>
|
||||||
|
<source>Filter:</source>
|
||||||
|
<translation>Filtro:</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>FontDialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="14"/>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="73"/>
|
||||||
|
<source>Select Terminal Font</source>
|
||||||
|
<translation>Selecciona fuente del terminal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="32"/>
|
||||||
|
<source>Font:</source>
|
||||||
|
<translation>Fuente:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="42"/>
|
||||||
|
<source>Size:</source>
|
||||||
|
<translation>Tamaño:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="59"/>
|
||||||
|
<source>Preview</source>
|
||||||
|
<translation>Vista Previa</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>MainWindow</name>
|
||||||
|
<message>
|
||||||
|
<source>Add Tab</source>
|
||||||
|
<translation type="obsolete">Añadir Pestaña</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="310"/>
|
||||||
|
<source>Close Tab</source>
|
||||||
|
<translation>Cerrar Pestaña</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
|
<source>Split Terminal Horizontally</source>
|
||||||
|
<translation>Dividir terminal horizontalmente </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="197"/>
|
||||||
|
<source>Split Terminal Vertically</source>
|
||||||
|
<translation>Dividir terminal verticalmente </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="203"/>
|
||||||
|
<source>Collapse Subterminal</source>
|
||||||
|
<translation>Colapsar subterminal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="209"/>
|
||||||
|
<source>Next Subterminal</source>
|
||||||
|
<translation>Subterminal siguiente</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="215"/>
|
||||||
|
<source>Previous Subterminal</source>
|
||||||
|
<translation>Subterminal previa</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="165"/>
|
||||||
|
<source>Next Tab</source>
|
||||||
|
<translation>Pestaña siguiente</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="53"/>
|
||||||
|
<source>Bookmarks</source>
|
||||||
|
<translation>Marcadores</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="91"/>
|
||||||
|
<source>Rename Session</source>
|
||||||
|
<translation>Renombrar Session</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="146"/>
|
||||||
|
<source>Press "%1" to see the terminal.</source>
|
||||||
|
<translation>Presiona "%1" para ver la terminal.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="157"/>
|
||||||
|
<source>Clear Current Tab</source>
|
||||||
|
<translation>Limpiar pestaña actual</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="171"/>
|
||||||
|
<source>Previous Tab</source>
|
||||||
|
<translation>Pestaña previa</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="177"/>
|
||||||
|
<source>Move Tab Left</source>
|
||||||
|
<translation>Mover pestaña a izquierda</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="183"/>
|
||||||
|
<source>Move Tab Right</source>
|
||||||
|
<translation>Mover pestaña a derecha</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="224"/>
|
||||||
|
<source>Copy Selection</source>
|
||||||
|
<translation>Copiar selección</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="230"/>
|
||||||
|
<source>Paste Clipboard</source>
|
||||||
|
<translation>Pegar desde portapapeles</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="236"/>
|
||||||
|
<source>Paste Selection</source>
|
||||||
|
<translation>Pegar selección</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="242"/>
|
||||||
|
<source>Zoom in</source>
|
||||||
|
<translation>Acercar</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="248"/>
|
||||||
|
<source>Zoom out</source>
|
||||||
|
<translation>Alejar</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="254"/>
|
||||||
|
<source>Zoom reset</source>
|
||||||
|
<translation>Reestablecer zoom</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="262"/>
|
||||||
|
<source>Find...</source>
|
||||||
|
<translation>Buscar...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="273"/>
|
||||||
|
<source>Save Session</source>
|
||||||
|
<translation>Guardar session</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="279"/>
|
||||||
|
<source>Load Session</source>
|
||||||
|
<translation>Cargar session</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="286"/>
|
||||||
|
<source>Toggle Menu</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="304"/>
|
||||||
|
<source>New Tab</source>
|
||||||
|
<translation>Nueva Pestaña</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="316"/>
|
||||||
|
<source>New Window</source>
|
||||||
|
<translation>Nueva Ventana</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="339"/>
|
||||||
|
<source>Hide Window Borders</source>
|
||||||
|
<translation>Ocultar bordes de ventana</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="350"/>
|
||||||
|
<source>Show Tab Bar</source>
|
||||||
|
<translation>Mostrar barra de pestañas</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="370"/>
|
||||||
|
<source>Bottom</source>
|
||||||
|
<translation>Abajo</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="371"/>
|
||||||
|
<source>Top</source>
|
||||||
|
<translation>Arriba</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="372"/>
|
||||||
|
<location filename="../mainwindow.cpp" line="403"/>
|
||||||
|
<source>Right</source>
|
||||||
|
<translation>Derecha</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="373"/>
|
||||||
|
<location filename="../mainwindow.cpp" line="404"/>
|
||||||
|
<source>Left</source>
|
||||||
|
<translation>Izquierda</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="388"/>
|
||||||
|
<source>Tabs Layout</source>
|
||||||
|
<translation>Layout Pestañas</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="402"/>
|
||||||
|
<source>None</source>
|
||||||
|
<translation>Ninguno</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="420"/>
|
||||||
|
<source>Scrollbar Layout</source>
|
||||||
|
<translation>Layout barra de desplazamiento</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="474"/>
|
||||||
|
<source>Exit QTerminal</source>
|
||||||
|
<translation>Salir de QTerminal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="476"/>
|
||||||
|
<source>Do not ask again</source>
|
||||||
|
<translation>No volver a preguntar</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="483"/>
|
||||||
|
<source>Are you sure you want to exit?</source>
|
||||||
|
<translation>¿Estás seguro que quieres salir?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="503"/>
|
||||||
|
<source>A lightweight multiplatform terminal emulator</source>
|
||||||
|
<translation>Un emulador de terminal liviano multiplataforma </translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>PropertiesDialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="14"/>
|
||||||
|
<source>QTerminal Properties</source>
|
||||||
|
<translation>Propiedades de QTerminal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="49"/>
|
||||||
|
<source>Terminal Font</source>
|
||||||
|
<translation>Fuente de terminal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="54"/>
|
||||||
|
<source>Look and Feel</source>
|
||||||
|
<translation>Apariencia</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="59"/>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="314"/>
|
||||||
|
<source>History</source>
|
||||||
|
<translation>Historia</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="64"/>
|
||||||
|
<source>Emulation</source>
|
||||||
|
<translation>Emulación</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="69"/>
|
||||||
|
<source>Shortcuts</source>
|
||||||
|
<translation>Atajos</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="74"/>
|
||||||
|
<source>DropDown</source>
|
||||||
|
<translation>Desplegar</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="79"/>
|
||||||
|
<source>Bookmarks</source>
|
||||||
|
<translation>Marcadores</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="97"/>
|
||||||
|
<source>Font</source>
|
||||||
|
<translation>Fuente</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="129"/>
|
||||||
|
<source>&Set Font...</source>
|
||||||
|
<translation>&Definir fuente...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="152"/>
|
||||||
|
<source>Note: only fixed width font are allowed to be used in terminal</source>
|
||||||
|
<translation>Nota: sólo está permitido usar fuentes de tamaño fijo en la terminal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="169"/>
|
||||||
|
<source>Action after paste clipboard</source>
|
||||||
|
<translation>Acción después de pegar portapapeles</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="176"/>
|
||||||
|
<source>Color Scheme:</source>
|
||||||
|
<translation>Esquema de color:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="209"/>
|
||||||
|
<source>GUI Style:</source>
|
||||||
|
<translation>Estilo de GUI:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="252"/>
|
||||||
|
<source>Scrollbar Position:</source>
|
||||||
|
<translation>Posición de barra de dezplazamiento:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="303"/>
|
||||||
|
<source>Always Show Tabs</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="445"/>
|
||||||
|
<source>Show on start</source>
|
||||||
|
<translation>Mostrar al inicio</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="452"/>
|
||||||
|
<source>Size</source>
|
||||||
|
<translation>Tamaño</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="460"/>
|
||||||
|
<source>Height %:</source>
|
||||||
|
<translation>Altura %:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="470"/>
|
||||||
|
<source>Width %:</source>
|
||||||
|
<translation>Ancho %:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="487"/>
|
||||||
|
<source>Shortcut:</source>
|
||||||
|
<translation>Atajo:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="516"/>
|
||||||
|
<source>Edit File Content</source>
|
||||||
|
<translation>Editar contenido de archivo</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="538"/>
|
||||||
|
<source>Use Bookmarks</source>
|
||||||
|
<translation>Usar marcadores</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="547"/>
|
||||||
|
<source>Bookmark FIle:</source>
|
||||||
|
<translation>Archivo de marcadores:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="557"/>
|
||||||
|
<source>Find...</source>
|
||||||
|
<translation>Buscar...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="566"/>
|
||||||
|
<source>You can specify your own bookmarks file location. It allows easy bookmark sharing with tools like OwnCloud or Dropbox.</source>
|
||||||
|
<translation>Puedes especificar tu propia locación de archivo de marcadores. Permite facilmente compartir marcadores con herramientas como OwnCloud o Dropbox.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="202"/>
|
||||||
|
<source>Tabs Position:</source>
|
||||||
|
<translation>Posición de pestaña:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="259"/>
|
||||||
|
<source>&Application Transparency:</source>
|
||||||
|
<translation>&Transparencia de aplicación:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="216"/>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="236"/>
|
||||||
|
<source> %</source>
|
||||||
|
<translation> %</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="229"/>
|
||||||
|
<source>Terminal Transparency:</source>
|
||||||
|
<translation>Transparencia de la terminal:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="272"/>
|
||||||
|
<source>&Highlight Current Terminal With Border</source>
|
||||||
|
<translation>&Resaltar la terminal actual con borde</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="279"/>
|
||||||
|
<source>Ask for Window Closing Confirmation</source>
|
||||||
|
<translation>Preguntar por confirmación de cierre de ventana</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="289"/>
|
||||||
|
<source>Open New Sub-Terminals in Current Working Dir</source>
|
||||||
|
<translation>Abrir nueva subterminal en la actual dirección de trabajo</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="296"/>
|
||||||
|
<source>Show Main Menu</source>
|
||||||
|
<translation>Mostrar menu principal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="320"/>
|
||||||
|
<source>Limited to: </source>
|
||||||
|
<translation>Limitada: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="340"/>
|
||||||
|
<source>Unlimited</source>
|
||||||
|
<translation>Ilimitada</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="367"/>
|
||||||
|
<source>Emulation Type</source>
|
||||||
|
<translation>Tipo de emulación</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="376"/>
|
||||||
|
<source>Select emulation behaviour. It does not mean that for example "linux" has to be used only on Linux OS. Feel free to use it on Mac too etc.<p>Default is the failback type with minimal feature set.</source>
|
||||||
|
<translation>Seleccionar comportamiento de emulación. No significa que, por ejemplo, «linux» puede ser usada sólo en Linux SO. Sentite libre de usar esta en Mac, etc.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="428"/>
|
||||||
|
<source>Shortcut</source>
|
||||||
|
<translation>Acción</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="433"/>
|
||||||
|
<source>Key</source>
|
||||||
|
<translation>Acceso rápido</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>No move</source>
|
||||||
|
<translation type="obsolete">No mover</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Move start</source>
|
||||||
|
<translation type="obsolete">Mover al inicio</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Move end</source>
|
||||||
|
<translation type="obsolete">Mover al final</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="65"/>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="117"/>
|
||||||
|
<source>System Default</source>
|
||||||
|
<translation>Por defecto del sistema</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="245"/>
|
||||||
|
<source>Open or create bookmarks file</source>
|
||||||
|
<translation>Abrir o crear archivo de marcadores</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Select Terminal Font</source>
|
||||||
|
<translation type="obsolete">Seleccionar fuente de la terminal</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>QObject</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../bookmarkswidget.cpp" line="97"/>
|
||||||
|
<source>Local Bookmarks</source>
|
||||||
|
<translation>Marcadores locales</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../bookmarkswidget.cpp" line="190"/>
|
||||||
|
<source>Synchronized Bookmarks</source>
|
||||||
|
<translation>Marcadores sincronizados</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TabWidget</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="69"/>
|
||||||
|
<location filename="../tabwidget.cpp" line="174"/>
|
||||||
|
<source>Shell No. %1</source>
|
||||||
|
<translation>Shell N° %1</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="160"/>
|
||||||
|
<source>Tab name</source>
|
||||||
|
<translation>Nombre de pestaña</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="161"/>
|
||||||
|
<source>New tab name:</source>
|
||||||
|
<translation>Nuevo nombre de pestaña:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="183"/>
|
||||||
|
<source>Close session</source>
|
||||||
|
<translation>Cerrar session</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="185"/>
|
||||||
|
<source>Rename session</source>
|
||||||
|
<translation>Renombrar session</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TermWidgetHolder</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../termwidgetholder.cpp" line="46"/>
|
||||||
|
<source>Load Session</source>
|
||||||
|
<translation>Cargar session</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../termwidgetholder.cpp" line="47"/>
|
||||||
|
<source>List of saved sessions:</source>
|
||||||
|
<translation>Lista de sessiones guardadas:</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TermWidgetImpl</name>
|
||||||
|
<message>
|
||||||
|
<source>Copy Selection</source>
|
||||||
|
<translation type="obsolete">Copiar selección</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Paste Clipboard</source>
|
||||||
|
<translation type="obsolete">Pegar desde portapapeles</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Paste Selection</source>
|
||||||
|
<translation type="obsolete">Pegar selección</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Zoom in</source>
|
||||||
|
<translation type="obsolete">Acercar</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Zoom out</source>
|
||||||
|
<translation type="obsolete">Alejar</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Zoom reset</source>
|
||||||
|
<translation type="obsolete">Reestablecer zoom</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Split Terminal Horizontally</source>
|
||||||
|
<translation type="obsolete">Dividir terminal horizontalmente </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Split Terminal Vertically</source>
|
||||||
|
<translation type="obsolete">Dividir terminal verticalmente </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Collapse Subterminal</source>
|
||||||
|
<translation type="obsolete">Colapsar subterminal</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>mainWindow</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="14"/>
|
||||||
|
<source>MainWindow</source>
|
||||||
|
<translation>Ventana principal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="68"/>
|
||||||
|
<source>File</source>
|
||||||
|
<translation>Archivo</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="76"/>
|
||||||
|
<source>Actions</source>
|
||||||
|
<translation>Acciones</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="81"/>
|
||||||
|
<source>Help</source>
|
||||||
|
<translation>Ayuda</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="88"/>
|
||||||
|
<source>View</source>
|
||||||
|
<translation>Vista</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="93"/>
|
||||||
|
<source>Edit</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="125"/>
|
||||||
|
<source>&Quit</source>
|
||||||
|
<translation>&Salir</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Window</source>
|
||||||
|
<translation type="obsolete">&Ventana</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="107"/>
|
||||||
|
<source>About...</source>
|
||||||
|
<translation>Acerca de...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="112"/>
|
||||||
|
<source>About Qt...</source>
|
||||||
|
<translation>Acerca de QT...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="117"/>
|
||||||
|
<source>&Preferences...</source>
|
||||||
|
<translation>&Preferencias...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Quit...</source>
|
||||||
|
<translation type="obsolete">&Salir...</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
607
src/translations/qterminal_et.ts
Normal file
@ -0,0 +1,607 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1" language="et_EE">
|
||||||
|
<context>
|
||||||
|
<name>BookmarksWidget</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/bookmarkswidget.ui" line="32"/>
|
||||||
|
<source>Filter:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>FontDialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="14"/>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="73"/>
|
||||||
|
<source>Select Terminal Font</source>
|
||||||
|
<translation type="unfinished">Vali terminali font</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="32"/>
|
||||||
|
<source>Font:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="42"/>
|
||||||
|
<source>Size:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="59"/>
|
||||||
|
<source>Preview</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>MainWindow</name>
|
||||||
|
<message>
|
||||||
|
<source>Add Tab</source>
|
||||||
|
<translation type="obsolete">Lisa kaart</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="310"/>
|
||||||
|
<source>Close Tab</source>
|
||||||
|
<translation>Sulge kaart</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
|
<source>Split Terminal Horizontally</source>
|
||||||
|
<translation>Poolita terminal horisontaalselt</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="197"/>
|
||||||
|
<source>Split Terminal Vertically</source>
|
||||||
|
<translation>Poolita terminal vertikaalselt</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="203"/>
|
||||||
|
<source>Collapse Subterminal</source>
|
||||||
|
<translation>Ahenda alamterminal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="209"/>
|
||||||
|
<source>Next Subterminal</source>
|
||||||
|
<translation>Järgmine alamterminal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="215"/>
|
||||||
|
<source>Previous Subterminal</source>
|
||||||
|
<translation>Eelmine alamterminal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="165"/>
|
||||||
|
<source>Next Tab</source>
|
||||||
|
<translation>Järgmine kaart</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="53"/>
|
||||||
|
<source>Bookmarks</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="91"/>
|
||||||
|
<source>Rename Session</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="146"/>
|
||||||
|
<source>Press "%1" to see the terminal.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="157"/>
|
||||||
|
<source>Clear Current Tab</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="171"/>
|
||||||
|
<source>Previous Tab</source>
|
||||||
|
<translation>Eelmine kaart</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="177"/>
|
||||||
|
<source>Move Tab Left</source>
|
||||||
|
<translation>Liiguta kaart vasakule</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="183"/>
|
||||||
|
<source>Move Tab Right</source>
|
||||||
|
<translation>Liiguta kaart paremale</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="224"/>
|
||||||
|
<source>Copy Selection</source>
|
||||||
|
<translation>Kopeeri valik</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="230"/>
|
||||||
|
<source>Paste Clipboard</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="236"/>
|
||||||
|
<source>Paste Selection</source>
|
||||||
|
<translation>Aseta valik</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="242"/>
|
||||||
|
<source>Zoom in</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="248"/>
|
||||||
|
<source>Zoom out</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="254"/>
|
||||||
|
<source>Zoom reset</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="262"/>
|
||||||
|
<source>Find...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="273"/>
|
||||||
|
<source>Save Session</source>
|
||||||
|
<translation>Salvesta seanss</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="279"/>
|
||||||
|
<source>Load Session</source>
|
||||||
|
<translation>Lae seanss</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="286"/>
|
||||||
|
<source>Toggle Menu</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="304"/>
|
||||||
|
<source>New Tab</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="316"/>
|
||||||
|
<source>New Window</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="339"/>
|
||||||
|
<source>Hide Window Borders</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="350"/>
|
||||||
|
<source>Show Tab Bar</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Toggle Borderless</source>
|
||||||
|
<translation type="obsolete">Lülita ääristeta režiimile</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Toggle TabBar</source>
|
||||||
|
<translation type="obsolete">Lülita kaardiriba</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="370"/>
|
||||||
|
<source>Bottom</source>
|
||||||
|
<translation>All</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="371"/>
|
||||||
|
<source>Top</source>
|
||||||
|
<translation>Ülal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="372"/>
|
||||||
|
<location filename="../mainwindow.cpp" line="403"/>
|
||||||
|
<source>Right</source>
|
||||||
|
<translation>Paremal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="373"/>
|
||||||
|
<location filename="../mainwindow.cpp" line="404"/>
|
||||||
|
<source>Left</source>
|
||||||
|
<translation>Vasakul</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="388"/>
|
||||||
|
<source>Tabs Layout</source>
|
||||||
|
<translation>Kaartide paigutus</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="402"/>
|
||||||
|
<source>None</source>
|
||||||
|
<translation>Puudub</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="420"/>
|
||||||
|
<source>Scrollbar Layout</source>
|
||||||
|
<translation>Kerimisriba paigutus</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="474"/>
|
||||||
|
<source>Exit QTerminal</source>
|
||||||
|
<translation>Lõpeta Qterminali töö</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="476"/>
|
||||||
|
<source>Do not ask again</source>
|
||||||
|
<translation>Ära küsi uuesti</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="483"/>
|
||||||
|
<source>Are you sure you want to exit?</source>
|
||||||
|
<translation>Soovid sa tõesti väljuda?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="503"/>
|
||||||
|
<source>A lightweight multiplatform terminal emulator</source>
|
||||||
|
<translation>Ressursisäästlik multiplatvormne terminaliemulaator</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>PropertiesDialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="14"/>
|
||||||
|
<source>QTerminal Properties</source>
|
||||||
|
<translation>QTerminali omadused</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="49"/>
|
||||||
|
<source>Terminal Font</source>
|
||||||
|
<translation>Terminali font</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="54"/>
|
||||||
|
<source>Look and Feel</source>
|
||||||
|
<translation>Tööilme</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="59"/>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="314"/>
|
||||||
|
<source>History</source>
|
||||||
|
<translation>Ajalugu</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="64"/>
|
||||||
|
<source>Emulation</source>
|
||||||
|
<translation>Emuleering</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="69"/>
|
||||||
|
<source>Shortcuts</source>
|
||||||
|
<translation>Otseteed</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="74"/>
|
||||||
|
<source>DropDown</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="79"/>
|
||||||
|
<source>Bookmarks</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="97"/>
|
||||||
|
<source>Font</source>
|
||||||
|
<translation>Font</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="129"/>
|
||||||
|
<source>&Set Font...</source>
|
||||||
|
<translation>&Määra font...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="152"/>
|
||||||
|
<source>Note: only fixed width font are allowed to be used in terminal</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="169"/>
|
||||||
|
<source>Action after paste clipboard</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="176"/>
|
||||||
|
<source>Color Scheme:</source>
|
||||||
|
<translation>Värviskeem:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="209"/>
|
||||||
|
<source>GUI Style:</source>
|
||||||
|
<translation>GUI stiil:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="252"/>
|
||||||
|
<source>Scrollbar Position:</source>
|
||||||
|
<translation>Kerimisriba asukoht:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="445"/>
|
||||||
|
<source>Show on start</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="452"/>
|
||||||
|
<source>Size</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="460"/>
|
||||||
|
<source>Height %:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="470"/>
|
||||||
|
<source>Width %:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="487"/>
|
||||||
|
<source>Shortcut:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="516"/>
|
||||||
|
<source>Edit File Content</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="538"/>
|
||||||
|
<source>Use Bookmarks</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="547"/>
|
||||||
|
<source>Bookmark FIle:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="557"/>
|
||||||
|
<source>Find...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="566"/>
|
||||||
|
<source>You can specify your own bookmarks file location. It allows easy bookmark sharing with tools like OwnCloud or Dropbox.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="202"/>
|
||||||
|
<source>Tabs Position:</source>
|
||||||
|
<translation>Kaartide asukoht:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="259"/>
|
||||||
|
<source>&Application Transparency:</source>
|
||||||
|
<translation>&Rakenduse läbipaistvus:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="216"/>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="236"/>
|
||||||
|
<source> %</source>
|
||||||
|
<translation> %</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="229"/>
|
||||||
|
<source>Terminal Transparency:</source>
|
||||||
|
<translation>Terminali läbipaistvus:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="272"/>
|
||||||
|
<source>&Highlight Current Terminal With Border</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="279"/>
|
||||||
|
<source>Ask for Window Closing Confirmation</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="289"/>
|
||||||
|
<source>Open New Sub-Terminals in Current Working Dir</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="296"/>
|
||||||
|
<source>Show Main Menu</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="303"/>
|
||||||
|
<source>Always Show Tabs</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="320"/>
|
||||||
|
<source>Limited to: </source>
|
||||||
|
<translation>Piiratud kuni: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="340"/>
|
||||||
|
<source>Unlimited</source>
|
||||||
|
<translation>Piiramatu</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="367"/>
|
||||||
|
<source>Emulation Type</source>
|
||||||
|
<translation>Emuleeringu tüüp</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="376"/>
|
||||||
|
<source>Select emulation behaviour. It does not mean that for example "linux" has to be used only on Linux OS. Feel free to use it on Mac too etc.<p>Default is the failback type with minimal feature set.</source>
|
||||||
|
<translation>Vali emuleeringu käitumine. See ei tähenda, et näiteks "linux" tohib olla kasutusel vaid Linux OS puhul. Kasuta seda vabalt ka Mac'l jne.<p>Vaikimisi varuvariant on minimaalsete võimalustega.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="428"/>
|
||||||
|
<source>Shortcut</source>
|
||||||
|
<translation>Otsetee</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="433"/>
|
||||||
|
<source>Key</source>
|
||||||
|
<translation>Klahv</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="65"/>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="117"/>
|
||||||
|
<source>System Default</source>
|
||||||
|
<translation>Süsteemne vaikeväärtus</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="245"/>
|
||||||
|
<source>Open or create bookmarks file</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Select Terminal Font</source>
|
||||||
|
<translation type="obsolete">Vali terminali font</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>QObject</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../bookmarkswidget.cpp" line="97"/>
|
||||||
|
<source>Local Bookmarks</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../bookmarkswidget.cpp" line="190"/>
|
||||||
|
<source>Synchronized Bookmarks</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TabWidget</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="69"/>
|
||||||
|
<location filename="../tabwidget.cpp" line="174"/>
|
||||||
|
<source>Shell No. %1</source>
|
||||||
|
<translation>Shell No. %1</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="160"/>
|
||||||
|
<source>Tab name</source>
|
||||||
|
<translation>Kaardi nimi</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="161"/>
|
||||||
|
<source>New tab name:</source>
|
||||||
|
<translation>Kaardi uus nimi:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="183"/>
|
||||||
|
<source>Close session</source>
|
||||||
|
<translation>Sulge seanss</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="185"/>
|
||||||
|
<source>Rename session</source>
|
||||||
|
<translation>Nimeta seanss ümber</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TermWidgetHolder</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../termwidgetholder.cpp" line="46"/>
|
||||||
|
<source>Load Session</source>
|
||||||
|
<translation>Lae seanss</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../termwidgetholder.cpp" line="47"/>
|
||||||
|
<source>List of saved sessions:</source>
|
||||||
|
<translation>Salvestatud seansside nimekiri:</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TermWidgetImpl</name>
|
||||||
|
<message>
|
||||||
|
<source>Copy Selection</source>
|
||||||
|
<translation type="obsolete">Kopeeri valik</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Paste Selection</source>
|
||||||
|
<translation type="obsolete">Aseta valik</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Split Terminal Horizontally</source>
|
||||||
|
<translation type="obsolete">Poolita terminal horisontaalselt</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Split Terminal Vertically</source>
|
||||||
|
<translation type="obsolete">Poolita terminal vertikaalselt</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Collapse Subterminal</source>
|
||||||
|
<translation type="obsolete">Ahenda alamterminal</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>mainWindow</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="14"/>
|
||||||
|
<source>MainWindow</source>
|
||||||
|
<translation>PeaAken</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="68"/>
|
||||||
|
<source>File</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="76"/>
|
||||||
|
<source>Actions</source>
|
||||||
|
<translation>Tegevused</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="81"/>
|
||||||
|
<source>Help</source>
|
||||||
|
<translation>Abi</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="88"/>
|
||||||
|
<source>View</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="93"/>
|
||||||
|
<source>Edit</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="125"/>
|
||||||
|
<source>&Quit</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Window</source>
|
||||||
|
<translation type="obsolete">&Aken</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="107"/>
|
||||||
|
<source>About...</source>
|
||||||
|
<translation>QTerminali info...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="112"/>
|
||||||
|
<source>About Qt...</source>
|
||||||
|
<translation>Qt info...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="117"/>
|
||||||
|
<source>&Preferences...</source>
|
||||||
|
<translation>&Seadistused...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Quit...</source>
|
||||||
|
<translation type="obsolete">&Välju...</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
603
src/translations/qterminal_it.ts
Normal file
@ -0,0 +1,603 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1" language="it_IT">
|
||||||
|
<context>
|
||||||
|
<name>BookmarksWidget</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/bookmarkswidget.ui" line="32"/>
|
||||||
|
<source>Filter:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>FontDialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="14"/>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="73"/>
|
||||||
|
<source>Select Terminal Font</source>
|
||||||
|
<translation type="unfinished">Seleziona Carattere Terminale</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="32"/>
|
||||||
|
<source>Font:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="42"/>
|
||||||
|
<source>Size:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="59"/>
|
||||||
|
<source>Preview</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>MainWindow</name>
|
||||||
|
<message>
|
||||||
|
<source>Add Tab</source>
|
||||||
|
<translation type="obsolete">Aggiungi Tab</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="310"/>
|
||||||
|
<source>Close Tab</source>
|
||||||
|
<translation>Chiudi Tab</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
|
<source>Split Terminal Horizontally</source>
|
||||||
|
<translation>Dividi Terminale Orizzontalmente</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="197"/>
|
||||||
|
<source>Split Terminal Vertically</source>
|
||||||
|
<translation>Dividi Terminale Verticalmente</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="203"/>
|
||||||
|
<source>Collapse Subterminal</source>
|
||||||
|
<translation>Collassa Sottoterminale</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="209"/>
|
||||||
|
<source>Next Subterminal</source>
|
||||||
|
<translation>Sottoterminale Successivo</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="215"/>
|
||||||
|
<source>Previous Subterminal</source>
|
||||||
|
<translation>Sottoterminale Precedente</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="165"/>
|
||||||
|
<source>Next Tab</source>
|
||||||
|
<translation>Tab Successivo</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="53"/>
|
||||||
|
<source>Bookmarks</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="91"/>
|
||||||
|
<source>Rename Session</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="146"/>
|
||||||
|
<source>Press "%1" to see the terminal.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="157"/>
|
||||||
|
<source>Clear Current Tab</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="171"/>
|
||||||
|
<source>Previous Tab</source>
|
||||||
|
<translation>Tab Precedente</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="177"/>
|
||||||
|
<source>Move Tab Left</source>
|
||||||
|
<translation>Sposta Tab a Sinistra</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="183"/>
|
||||||
|
<source>Move Tab Right</source>
|
||||||
|
<translation>Sposta Tab a Destra</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="224"/>
|
||||||
|
<source>Copy Selection</source>
|
||||||
|
<translation>Copia Selezione</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="230"/>
|
||||||
|
<source>Paste Clipboard</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="236"/>
|
||||||
|
<source>Paste Selection</source>
|
||||||
|
<translation>Incolla Selezione</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="242"/>
|
||||||
|
<source>Zoom in</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="248"/>
|
||||||
|
<source>Zoom out</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="254"/>
|
||||||
|
<source>Zoom reset</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="262"/>
|
||||||
|
<source>Find...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="273"/>
|
||||||
|
<source>Save Session</source>
|
||||||
|
<translation>Salva Sessione</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="279"/>
|
||||||
|
<source>Load Session</source>
|
||||||
|
<translation>Carica Sessione</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="286"/>
|
||||||
|
<source>Toggle Menu</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="304"/>
|
||||||
|
<source>New Tab</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="316"/>
|
||||||
|
<source>New Window</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="339"/>
|
||||||
|
<source>Hide Window Borders</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="350"/>
|
||||||
|
<source>Show Tab Bar</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Toggle Borderless</source>
|
||||||
|
<translation type="obsolete">Toggle Senzabordi</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="370"/>
|
||||||
|
<source>Bottom</source>
|
||||||
|
<translation>Basso</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="371"/>
|
||||||
|
<source>Top</source>
|
||||||
|
<translation>Alto</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="372"/>
|
||||||
|
<location filename="../mainwindow.cpp" line="403"/>
|
||||||
|
<source>Right</source>
|
||||||
|
<translation>Destra</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="373"/>
|
||||||
|
<location filename="../mainwindow.cpp" line="404"/>
|
||||||
|
<source>Left</source>
|
||||||
|
<translation>Sinistra</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="388"/>
|
||||||
|
<source>Tabs Layout</source>
|
||||||
|
<translation>Layout Tabs</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="402"/>
|
||||||
|
<source>None</source>
|
||||||
|
<translation>Nessuno</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="420"/>
|
||||||
|
<source>Scrollbar Layout</source>
|
||||||
|
<translation>Layout Barra di scorrimento</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="474"/>
|
||||||
|
<source>Exit QTerminal</source>
|
||||||
|
<translation>Esci da QTerminal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="476"/>
|
||||||
|
<source>Do not ask again</source>
|
||||||
|
<translation>Non chiedermelo più</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="483"/>
|
||||||
|
<source>Are you sure you want to exit?</source>
|
||||||
|
<translation>Sei sicuro di voler uscire?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="503"/>
|
||||||
|
<source>A lightweight multiplatform terminal emulator</source>
|
||||||
|
<translation>Un emulatore di terminale multipiattaforma e leggero</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>PropertiesDialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="14"/>
|
||||||
|
<source>QTerminal Properties</source>
|
||||||
|
<translation>Proprietà QTerminal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="49"/>
|
||||||
|
<source>Terminal Font</source>
|
||||||
|
<translation>Caratteri Terminale</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="54"/>
|
||||||
|
<source>Look and Feel</source>
|
||||||
|
<translation>Aspetto</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="59"/>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="314"/>
|
||||||
|
<source>History</source>
|
||||||
|
<translation>Storia</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="64"/>
|
||||||
|
<source>Emulation</source>
|
||||||
|
<translation>Emulazione</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="69"/>
|
||||||
|
<source>Shortcuts</source>
|
||||||
|
<translation>Scorciatoie</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="74"/>
|
||||||
|
<source>DropDown</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="79"/>
|
||||||
|
<source>Bookmarks</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="97"/>
|
||||||
|
<source>Font</source>
|
||||||
|
<translation>Caratteri</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="129"/>
|
||||||
|
<source>&Set Font...</source>
|
||||||
|
<translation>&Imposta carattere...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="152"/>
|
||||||
|
<source>Note: only fixed width font are allowed to be used in terminal</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="169"/>
|
||||||
|
<source>Action after paste clipboard</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="176"/>
|
||||||
|
<source>Color Scheme:</source>
|
||||||
|
<translation>Schema Colore:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="209"/>
|
||||||
|
<source>GUI Style:</source>
|
||||||
|
<translation>Stile GUI:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="252"/>
|
||||||
|
<source>Scrollbar Position:</source>
|
||||||
|
<translation>Posizione Barra di Scorrimento:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="445"/>
|
||||||
|
<source>Show on start</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="452"/>
|
||||||
|
<source>Size</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="460"/>
|
||||||
|
<source>Height %:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="470"/>
|
||||||
|
<source>Width %:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="487"/>
|
||||||
|
<source>Shortcut:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="516"/>
|
||||||
|
<source>Edit File Content</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="538"/>
|
||||||
|
<source>Use Bookmarks</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="547"/>
|
||||||
|
<source>Bookmark FIle:</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="557"/>
|
||||||
|
<source>Find...</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="566"/>
|
||||||
|
<source>You can specify your own bookmarks file location. It allows easy bookmark sharing with tools like OwnCloud or Dropbox.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="202"/>
|
||||||
|
<source>Tabs Position:</source>
|
||||||
|
<translation>Posizione Tabs:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="259"/>
|
||||||
|
<source>&Application Transparency:</source>
|
||||||
|
<translation>&Trasparenza Applicazione:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="216"/>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="236"/>
|
||||||
|
<source> %</source>
|
||||||
|
<translation>%</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="229"/>
|
||||||
|
<source>Terminal Transparency:</source>
|
||||||
|
<translation>Trasparenza Terminale:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="272"/>
|
||||||
|
<source>&Highlight Current Terminal With Border</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="279"/>
|
||||||
|
<source>Ask for Window Closing Confirmation</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="289"/>
|
||||||
|
<source>Open New Sub-Terminals in Current Working Dir</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="296"/>
|
||||||
|
<source>Show Main Menu</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="303"/>
|
||||||
|
<source>Always Show Tabs</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="320"/>
|
||||||
|
<source>Limited to: </source>
|
||||||
|
<translation>Limitato a:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="340"/>
|
||||||
|
<source>Unlimited</source>
|
||||||
|
<translation>Illimitato</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="367"/>
|
||||||
|
<source>Emulation Type</source>
|
||||||
|
<translation>Tipo Emulazione</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="376"/>
|
||||||
|
<source>Select emulation behaviour. It does not mean that for example "linux" has to be used only on Linux OS. Feel free to use it on Mac too etc.<p>Default is the failback type with minimal feature set.</source>
|
||||||
|
<translation>Seleziona comportamento emulazione. Non significa che per esempio "linux" deve essere utilizzato solo su SO Linux. Sentiti libero di usarlo anche su Mac ecc.<p>L'impostazione di base è quella più sicura con un set minimo di proprietà.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="428"/>
|
||||||
|
<source>Shortcut</source>
|
||||||
|
<translation>Scorciatoia</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="433"/>
|
||||||
|
<source>Key</source>
|
||||||
|
<translation>Chiave</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="65"/>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="117"/>
|
||||||
|
<source>System Default</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="245"/>
|
||||||
|
<source>Open or create bookmarks file</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Select Terminal Font</source>
|
||||||
|
<translation type="obsolete">Seleziona Carattere Terminale</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>QObject</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../bookmarkswidget.cpp" line="97"/>
|
||||||
|
<source>Local Bookmarks</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../bookmarkswidget.cpp" line="190"/>
|
||||||
|
<source>Synchronized Bookmarks</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TabWidget</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="69"/>
|
||||||
|
<location filename="../tabwidget.cpp" line="174"/>
|
||||||
|
<source>Shell No. %1</source>
|
||||||
|
<translation>Shell N° %1</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="160"/>
|
||||||
|
<source>Tab name</source>
|
||||||
|
<translation>Nome tab</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="161"/>
|
||||||
|
<source>New tab name:</source>
|
||||||
|
<translation>Nuovo nome tab:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="183"/>
|
||||||
|
<source>Close session</source>
|
||||||
|
<translation>Chiudi sessione</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="185"/>
|
||||||
|
<source>Rename session</source>
|
||||||
|
<translation>Rinomina sessione</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TermWidgetHolder</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../termwidgetholder.cpp" line="46"/>
|
||||||
|
<source>Load Session</source>
|
||||||
|
<translation>Carica Sessione</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../termwidgetholder.cpp" line="47"/>
|
||||||
|
<source>List of saved sessions:</source>
|
||||||
|
<translation>Lista delle sessioni salvate:</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TermWidgetImpl</name>
|
||||||
|
<message>
|
||||||
|
<source>Copy Selection</source>
|
||||||
|
<translation type="obsolete">Copia Selezione</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Paste Selection</source>
|
||||||
|
<translation type="obsolete">Incolla Selezione</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Split Terminal Horizontally</source>
|
||||||
|
<translation type="obsolete">Dividi Terminale Orizzontalmente</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Split Terminal Vertically</source>
|
||||||
|
<translation type="obsolete">Dividi Terminale Verticalmente</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Collapse Subterminal</source>
|
||||||
|
<translation type="obsolete">Collassa Sottoterminale</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>mainWindow</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="14"/>
|
||||||
|
<source>MainWindow</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="68"/>
|
||||||
|
<source>File</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="76"/>
|
||||||
|
<source>Actions</source>
|
||||||
|
<translation>Azioni</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="81"/>
|
||||||
|
<source>Help</source>
|
||||||
|
<translation>Aiuto</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="88"/>
|
||||||
|
<source>View</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="93"/>
|
||||||
|
<source>Edit</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="125"/>
|
||||||
|
<source>&Quit</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Window</source>
|
||||||
|
<translation type="obsolete">&Finestra</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="107"/>
|
||||||
|
<source>About...</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="112"/>
|
||||||
|
<source>About Qt...</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="117"/>
|
||||||
|
<source>&Preferences...</source>
|
||||||
|
<translation>&Preferenze...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Quit...</source>
|
||||||
|
<translation type="obsolete">&Chiudi...</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
623
src/translations/qterminal_ru.ts
Normal file
@ -0,0 +1,623 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1" language="ru_RU">
|
||||||
|
<context>
|
||||||
|
<name>BookmarksWidget</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/bookmarkswidget.ui" line="32"/>
|
||||||
|
<source>Filter:</source>
|
||||||
|
<translation>Фильтр:</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>FontDialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="14"/>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="73"/>
|
||||||
|
<source>Select Terminal Font</source>
|
||||||
|
<translation>Выбрать шрифт терминала</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="32"/>
|
||||||
|
<source>Font:</source>
|
||||||
|
<translation>Шрифт:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="42"/>
|
||||||
|
<source>Size:</source>
|
||||||
|
<translation>Кегль:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/fontdialog.ui" line="59"/>
|
||||||
|
<source>Preview</source>
|
||||||
|
<translation>Предпросмотр</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>MainWindow</name>
|
||||||
|
<message>
|
||||||
|
<source>Add Tab</source>
|
||||||
|
<translation type="obsolete">Новая вкладка</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="310"/>
|
||||||
|
<source>Close Tab</source>
|
||||||
|
<translation>Закрыть вкладку</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="191"/>
|
||||||
|
<source>Split Terminal Horizontally</source>
|
||||||
|
<translation>Разделить терминал по горизонтали </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="197"/>
|
||||||
|
<source>Split Terminal Vertically</source>
|
||||||
|
<translation>Разделить терминал по вертикали </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="203"/>
|
||||||
|
<source>Collapse Subterminal</source>
|
||||||
|
<translation>Закрыть подтерминал</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="209"/>
|
||||||
|
<source>Next Subterminal</source>
|
||||||
|
<translation>Следующий подтерминал</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="215"/>
|
||||||
|
<source>Previous Subterminal</source>
|
||||||
|
<translation>Предыдущий подтерминал</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="165"/>
|
||||||
|
<source>Next Tab</source>
|
||||||
|
<translation>Следующая вкладка</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="53"/>
|
||||||
|
<source>Bookmarks</source>
|
||||||
|
<translation>Закладки</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="91"/>
|
||||||
|
<source>Rename Session</source>
|
||||||
|
<translation>Переименовать сессию</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="146"/>
|
||||||
|
<source>Press "%1" to see the terminal.</source>
|
||||||
|
<translation>Нажмите "%1" чтобы увидеть терминал.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="157"/>
|
||||||
|
<source>Clear Current Tab</source>
|
||||||
|
<translation>Очистить текущую вкладку</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="171"/>
|
||||||
|
<source>Previous Tab</source>
|
||||||
|
<translation>Предыдущая вкладка</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="177"/>
|
||||||
|
<source>Move Tab Left</source>
|
||||||
|
<translation>Сдвинуть вкладку влево</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="183"/>
|
||||||
|
<source>Move Tab Right</source>
|
||||||
|
<translation>Сдвинуть вкладку вправо</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="224"/>
|
||||||
|
<source>Copy Selection</source>
|
||||||
|
<translation>Скопировать выделенное</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="230"/>
|
||||||
|
<source>Paste Clipboard</source>
|
||||||
|
<translation>Вставить из буфера</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="236"/>
|
||||||
|
<source>Paste Selection</source>
|
||||||
|
<translation>Вставить выделенное</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="242"/>
|
||||||
|
<source>Zoom in</source>
|
||||||
|
<translation>Увеличить</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="248"/>
|
||||||
|
<source>Zoom out</source>
|
||||||
|
<translation>Уменьшить</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="254"/>
|
||||||
|
<source>Zoom reset</source>
|
||||||
|
<translation>Сбросить увеличение</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="262"/>
|
||||||
|
<source>Find...</source>
|
||||||
|
<translation>Найти...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="273"/>
|
||||||
|
<source>Save Session</source>
|
||||||
|
<translation>Сохранить сессию</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="279"/>
|
||||||
|
<source>Load Session</source>
|
||||||
|
<translation>Загрузить сессию</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="286"/>
|
||||||
|
<source>Toggle Menu</source>
|
||||||
|
<translation>Показать строку меню</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="304"/>
|
||||||
|
<source>New Tab</source>
|
||||||
|
<translation>Новая вкладка</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="316"/>
|
||||||
|
<source>New Window</source>
|
||||||
|
<translation>Новое окно</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="339"/>
|
||||||
|
<source>Hide Window Borders</source>
|
||||||
|
<translation>Спрятать рамку окна</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="350"/>
|
||||||
|
<source>Show Tab Bar</source>
|
||||||
|
<translation>Показать панель вкладок</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Toggle Borderless</source>
|
||||||
|
<translation type="obsolete">Без рамки</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Toggle TabBar</source>
|
||||||
|
<translation type="obsolete">Без панели вкладок</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="370"/>
|
||||||
|
<source>Bottom</source>
|
||||||
|
<translation>Снизу</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="371"/>
|
||||||
|
<source>Top</source>
|
||||||
|
<translation>Сверху</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="372"/>
|
||||||
|
<location filename="../mainwindow.cpp" line="403"/>
|
||||||
|
<source>Right</source>
|
||||||
|
<translation>Справа</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="373"/>
|
||||||
|
<location filename="../mainwindow.cpp" line="404"/>
|
||||||
|
<source>Left</source>
|
||||||
|
<translation>Слева</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="388"/>
|
||||||
|
<source>Tabs Layout</source>
|
||||||
|
<translation>Расположение вкладок</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="402"/>
|
||||||
|
<source>None</source>
|
||||||
|
<translation>Убрать</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="420"/>
|
||||||
|
<source>Scrollbar Layout</source>
|
||||||
|
<translation>Расположение полосы прокрутки</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="474"/>
|
||||||
|
<source>Exit QTerminal</source>
|
||||||
|
<translation>Выйти из QTerminal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="476"/>
|
||||||
|
<source>Do not ask again</source>
|
||||||
|
<translation>Не справшивать снова</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="483"/>
|
||||||
|
<source>Are you sure you want to exit?</source>
|
||||||
|
<translation>Вы уверены, что хотите выйти?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../mainwindow.cpp" line="503"/>
|
||||||
|
<source>A lightweight multiplatform terminal emulator</source>
|
||||||
|
<translation>Лёгкий мультиплатформенный эмулятор терминала </translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>PropertiesDialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="14"/>
|
||||||
|
<source>QTerminal Properties</source>
|
||||||
|
<translation>Настройки QTerminal</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="49"/>
|
||||||
|
<source>Terminal Font</source>
|
||||||
|
<translation>Шрифт терминала</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="54"/>
|
||||||
|
<source>Look and Feel</source>
|
||||||
|
<translation>Внешний вид</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="59"/>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="314"/>
|
||||||
|
<source>History</source>
|
||||||
|
<translation>История</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="64"/>
|
||||||
|
<source>Emulation</source>
|
||||||
|
<translation>Эмуляция</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="69"/>
|
||||||
|
<source>Shortcuts</source>
|
||||||
|
<translation>Сочетания клавиш</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="74"/>
|
||||||
|
<source>DropDown</source>
|
||||||
|
<translation>Выпадающий</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="79"/>
|
||||||
|
<source>Bookmarks</source>
|
||||||
|
<translation>Закладки</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="97"/>
|
||||||
|
<source>Font</source>
|
||||||
|
<translation>Шрифт</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="129"/>
|
||||||
|
<source>&Set Font...</source>
|
||||||
|
<translation>&Выбрать шрифт...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="152"/>
|
||||||
|
<source>Note: only fixed width font are allowed to be used in terminal</source>
|
||||||
|
<translation>Заметка: для использования в терминале разрешены только шрифты фиксированной ширины</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="169"/>
|
||||||
|
<source>Action after paste clipboard</source>
|
||||||
|
<translation>Действие после вставки из буфера</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="176"/>
|
||||||
|
<source>Color Scheme:</source>
|
||||||
|
<translation>Цветовая схема:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="209"/>
|
||||||
|
<source>GUI Style:</source>
|
||||||
|
<translation>Стиль GUI:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="252"/>
|
||||||
|
<source>Scrollbar Position:</source>
|
||||||
|
<translation>Расположение полосы прокрутки:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="303"/>
|
||||||
|
<source>Always Show Tabs</source>
|
||||||
|
<translation>Всегда показывать вкладки</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="445"/>
|
||||||
|
<source>Show on start</source>
|
||||||
|
<translation>Показать при запуске</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="452"/>
|
||||||
|
<source>Size</source>
|
||||||
|
<translation>Размер</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="460"/>
|
||||||
|
<source>Height %:</source>
|
||||||
|
<translation>Высота %:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="470"/>
|
||||||
|
<source>Width %:</source>
|
||||||
|
<translation>Ширина %:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="487"/>
|
||||||
|
<source>Shortcut:</source>
|
||||||
|
<translation>Сочетание клавиш:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="516"/>
|
||||||
|
<source>Edit File Content</source>
|
||||||
|
<translation>Изменить содержимое файла</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="538"/>
|
||||||
|
<source>Use Bookmarks</source>
|
||||||
|
<translation>Использовать закладки</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="547"/>
|
||||||
|
<source>Bookmark FIle:</source>
|
||||||
|
<translation>Файл закладок:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="557"/>
|
||||||
|
<source>Find...</source>
|
||||||
|
<translation>Найти...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="566"/>
|
||||||
|
<source>You can specify your own bookmarks file location. It allows easy bookmark sharing with tools like OwnCloud or Dropbox.</source>
|
||||||
|
<translation>Вы можете выбрать ваше собственное место для хранения закладок. Это позволит легко делиться закладками с помощью таких инструментов как OwnCloud или Dropbox.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="202"/>
|
||||||
|
<source>Tabs Position:</source>
|
||||||
|
<translation>Расположение вкладок:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="259"/>
|
||||||
|
<source>&Application Transparency:</source>
|
||||||
|
<translation>&Прозрачность приложения:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="216"/>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="236"/>
|
||||||
|
<source> %</source>
|
||||||
|
<translation> %</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="229"/>
|
||||||
|
<source>Terminal Transparency:</source>
|
||||||
|
<translation>Прозрачность терминала:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="272"/>
|
||||||
|
<source>&Highlight Current Terminal With Border</source>
|
||||||
|
<translation>&Выделять текущий терминал границами</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="279"/>
|
||||||
|
<source>Ask for Window Closing Confirmation</source>
|
||||||
|
<translation>Подтверждать закрыте окна</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="289"/>
|
||||||
|
<source>Open New Sub-Terminals in Current Working Dir</source>
|
||||||
|
<translation>Открыть новый подтерминал в текущей папке</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="296"/>
|
||||||
|
<source>Show Main Menu</source>
|
||||||
|
<translation>Показать главное меню</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="320"/>
|
||||||
|
<source>Limited to: </source>
|
||||||
|
<translation>Ограничение: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="340"/>
|
||||||
|
<source>Unlimited</source>
|
||||||
|
<translation>Без ограничения</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="367"/>
|
||||||
|
<source>Emulation Type</source>
|
||||||
|
<translation>Тип эмуляции</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="376"/>
|
||||||
|
<source>Select emulation behaviour. It does not mean that for example "linux" has to be used only on Linux OS. Feel free to use it on Mac too etc.<p>Default is the failback type with minimal feature set.</source>
|
||||||
|
<translation>Выбрать вид эмуляции. Это не означает, что, например, «linux» должно быть использовано только в ОС Linux. Вы можете использовать его на Mac и др.<p>По умолчанию — это запасной режим с минимальным набором функций.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="428"/>
|
||||||
|
<source>Shortcut</source>
|
||||||
|
<translation>Сочетание клавиш</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/propertiesdialog.ui" line="433"/>
|
||||||
|
<source>Key</source>
|
||||||
|
<translation>Клавиши</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="65"/>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="117"/>
|
||||||
|
<source>System Default</source>
|
||||||
|
<translation>Системный</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../propertiesdialog.cpp" line="245"/>
|
||||||
|
<source>Open or create bookmarks file</source>
|
||||||
|
<translation>Открыть или создать файл закладок</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Select Terminal Font</source>
|
||||||
|
<translation type="obsolete">Выбрать шрифт терминала</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>QObject</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../bookmarkswidget.cpp" line="97"/>
|
||||||
|
<source>Local Bookmarks</source>
|
||||||
|
<translation>Локальные закладки</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../bookmarkswidget.cpp" line="190"/>
|
||||||
|
<source>Synchronized Bookmarks</source>
|
||||||
|
<translation>Синхронизированные закладки</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TabWidget</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="69"/>
|
||||||
|
<location filename="../tabwidget.cpp" line="174"/>
|
||||||
|
<source>Shell No. %1</source>
|
||||||
|
<translation>Оболочка № %1</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="160"/>
|
||||||
|
<source>Tab name</source>
|
||||||
|
<translation>Имя вкладки</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="161"/>
|
||||||
|
<source>New tab name:</source>
|
||||||
|
<translation>Имя новой вкладки:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="183"/>
|
||||||
|
<source>Close session</source>
|
||||||
|
<translation>Закрыть сессию</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../tabwidget.cpp" line="185"/>
|
||||||
|
<source>Rename session</source>
|
||||||
|
<translation>Переименовать сессию</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TermWidgetHolder</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../termwidgetholder.cpp" line="46"/>
|
||||||
|
<source>Load Session</source>
|
||||||
|
<translation>Загрузить сессию</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../termwidgetholder.cpp" line="47"/>
|
||||||
|
<source>List of saved sessions:</source>
|
||||||
|
<translation>Список сохранённых сессий:</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>TermWidgetImpl</name>
|
||||||
|
<message>
|
||||||
|
<source>Copy Selection</source>
|
||||||
|
<translation type="obsolete">Копировать выделение</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Paste Clipboard</source>
|
||||||
|
<translation type="obsolete">Вставить из буфера</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Paste Selection</source>
|
||||||
|
<translation type="obsolete">Вставить выделение</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Zoom in</source>
|
||||||
|
<translation type="obsolete">Увеличить</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Zoom out</source>
|
||||||
|
<translation type="obsolete">Уменьшить</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Zoom reset</source>
|
||||||
|
<translation type="obsolete">Сбросить увеличение</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Split Terminal Horizontally</source>
|
||||||
|
<translation type="obsolete">Разделить терминал по горизонтали </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Split Terminal Vertically</source>
|
||||||
|
<translation type="obsolete">Разделить терминал по вертикали </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Collapse Subterminal</source>
|
||||||
|
<translation type="obsolete">Закрыть подтерминал</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>mainWindow</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="14"/>
|
||||||
|
<source>MainWindow</source>
|
||||||
|
<translation>Главное окно</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="68"/>
|
||||||
|
<source>File</source>
|
||||||
|
<translation>Файл</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="76"/>
|
||||||
|
<source>Actions</source>
|
||||||
|
<translation>Действия</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="81"/>
|
||||||
|
<source>Help</source>
|
||||||
|
<translation>Помощь</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="88"/>
|
||||||
|
<source>View</source>
|
||||||
|
<translation>Вид</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="93"/>
|
||||||
|
<source>Edit</source>
|
||||||
|
<translation>Правка</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="125"/>
|
||||||
|
<source>&Quit</source>
|
||||||
|
<translation>&Выход</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Window</source>
|
||||||
|
<translation type="obsolete">&Окно</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="107"/>
|
||||||
|
<source>About...</source>
|
||||||
|
<translation>О программе...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="112"/>
|
||||||
|
<source>About Qt...</source>
|
||||||
|
<translation>О QT...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../forms/qterminal.ui" line="117"/>
|
||||||
|
<source>&Preferences...</source>
|
||||||
|
<translation>&Настройки...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Quit...</source>
|
||||||
|
<translation type="obsolete">&Выйти...</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|