pax_global_header00006660000000000000000000000064126150047270014516gustar00rootroot0000000000000052 comment=dcf70ec6a2b4de748e052b7301b599fe327ec2e7 lxqt-panel-0.10.0/000077500000000000000000000000001261500472700136615ustar00rootroot00000000000000lxqt-panel-0.10.0/.gitignore000066400000000000000000000000421261500472700156450ustar00rootroot00000000000000build *.kdev4 CMakeLists.txt.user lxqt-panel-0.10.0/AUTHORS000066400000000000000000000004161261500472700147320ustar00rootroot00000000000000Upstream Authors: LXQt team: http://lxqt.org Razor team: http://razor-qt.org Copyright: Copyright (c) 2010-2012 Razor team Copyright (c) 2012-2014 LXQt team License: GPL-2 and LGPL-2.1+ The full text of the licenses can be found in the 'COPYING' file. lxqt-panel-0.10.0/CMakeLists.txt000066400000000000000000000214261261500472700164260ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) project(lxqt-panel) option(UPDATE_TRANSLATIONS "Update source translation translations/*.ts files" OFF) # additional cmake files set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) if(COMPILER_SUPPORTS_CXX11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") elseif(COMPILER_SUPPORTS_CXX0X) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") else() message(FATAL "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. C++11 support is required") endif() macro(setByDefault VAR_NAME VAR_VALUE) if(NOT DEFINED ${VAR_NAME}) set (${VAR_NAME} ${VAR_VALUE}) endif(NOT DEFINED ${VAR_NAME}) endmacro() # use gcc visibility feature to decrease unnecessary exported symbols if (CMAKE_COMPILER_IS_GNUCXX) # set visibility to hidden to hide symbols, unlesss they're exporeted manually in the code set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden -fno-exceptions") # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-no-undefined") endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") ######################################################################### add_definitions (-Wall) include(GNUInstallDirs) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) find_package(Qt5Widgets REQUIRED) find_package(Qt5DBus REQUIRED) find_package(Qt5LinguistTools REQUIRED) find_package(Qt5Xml REQUIRED) find_package(Qt5X11Extras REQUIRED) find_package(KF5WindowSystem REQUIRED) find_package(lxqt REQUIRED) find_package(lxqt-globalkeys REQUIRED) find_package(lxqt-globalkeys-ui REQUIRED) include(LXQtTranslate) # Warning: This must be before add_subdirectory(panel). Move with caution. set(PLUGIN_DIR "${CMAKE_INSTALL_FULL_LIBDIR}/lxqt-panel") add_definitions(-DPLUGIN_DIR=\"${PLUGIN_DIR}\") message(STATUS "Panel plugins location: ${PLUGIN_DIR}") ######################################################################### # Plugin system # You can enable/disable building of the plugin using cmake options. # cmake -DCLOCK_PLUGIN=Yes .. # Enable clock plugin # cmake -DCLOCK_PLUGIN=No .. # Disable clock plugin include("cmake/BuildPlugin.cmake") set(ENABLED_PLUGINS) # list of enabled plugins set(STATIC_PLUGINS) # list of statically linked plugins setByDefault(CLOCK_PLUGIN Yes) if(CLOCK_PLUGIN) list(APPEND STATIC_PLUGINS "clock") add_definitions(-DWITH_CLOCK_PLUGIN) list(APPEND ENABLED_PLUGINS "Clock") add_subdirectory(plugin-clock) endif() setByDefault(COLORPICKER_PLUGIN Yes) if(COLORPICKER_PLUGIN) list(APPEND ENABLED_PLUGINS "Color Picker") add_subdirectory(plugin-colorpicker) endif() setByDefault(CPULOAD_PLUGIN Yes) if(CPULOAD_PLUGIN) find_library(STATGRAB_LIB statgrab) if(NOT(${STATGRAB_LIB} MATCHES "NOTFOUND")) list(APPEND ENABLED_PLUGINS "Cpu Load") add_subdirectory(plugin-cpuload) else() message(STATUS "") message(STATUS "CPU Load plugin requires libstatgrab") message(STATUS "") endif() endif() setByDefault(DIRECTORYMENU_PLUGIN Yes) if(DIRECTORYMENU_PLUGIN) list(APPEND ENABLED_PLUGINS "Directory menu") add_subdirectory(plugin-directorymenu) endif() setByDefault(DOM_PLUGIN No) if(DOM_PLUGIN) list(APPEND ENABLED_PLUGINS "DOM") add_subdirectory(plugin-dom) endif(DOM_PLUGIN) setByDefault(DESKTOPSWITCH_PLUGIN Yes) if(DESKTOPSWITCH_PLUGIN) list(APPEND STATIC_PLUGINS "desktopswitch") add_definitions(-DWITH_DESKTOPSWITCH_PLUGIN) list(APPEND ENABLED_PLUGINS "Desktop Switcher") add_subdirectory(plugin-desktopswitch) endif() setByDefault(KBINDICATOR_PLUGIN Yes) if(KBINDICATOR_PLUGIN) list(APPEND ENABLED_PLUGINS "Keyboard Indicator") add_subdirectory(plugin-kbindicator) endif(KBINDICATOR_PLUGIN) setByDefault(MAINMENU_PLUGIN Yes) if(MAINMENU_PLUGIN) list(APPEND STATIC_PLUGINS "mainmenu") add_definitions(-DWITH_MAINMENU_PLUGIN) list(APPEND ENABLED_PLUGINS "Application menu") add_subdirectory(plugin-mainmenu) endif() setByDefault(MOUNT_PLUGIN Yes) if(MOUNT_PLUGIN) list(APPEND ENABLED_PLUGINS "Mount") add_subdirectory(plugin-mount) endif(MOUNT_PLUGIN) setByDefault(QUICKLAUNCH_PLUGIN Yes) if(QUICKLAUNCH_PLUGIN) list(APPEND STATIC_PLUGINS "quicklaunch") add_definitions(-DWITH_QUICKLAUNCH_PLUGIN) list(APPEND ENABLED_PLUGINS "Quicklaunch") add_subdirectory(plugin-quicklaunch) endif() setByDefault(SCREENSAVER_PLUGIN Yes) if(SCREENSAVER_PLUGIN) list(APPEND ENABLED_PLUGINS "Screensaver") add_subdirectory(plugin-screensaver) endif() setByDefault(SENSORS_PLUGIN Yes) if(SENSORS_PLUGIN) find_library(SENSORS_LIB sensors) if(NOT(${SENSORS_LIB} MATCHES "NOTFOUND")) list(APPEND ENABLED_PLUGINS "Sensors") add_subdirectory(plugin-sensors) else() message(STATUS "") message(STATUS "Sensors plugin requires lm_sensors") message(STATUS "") endif() endif() setByDefault(SHOWDESKTOP_PLUGIN Yes) if(SHOWDESKTOP_PLUGIN) list(APPEND STATIC_PLUGINS "showdesktop") add_definitions(-DWITH_SHOWDESKTOP_PLUGIN) list(APPEND ENABLED_PLUGINS "Show Desktop") add_subdirectory(plugin-showdesktop) endif() setByDefault(NETWORKMONITOR_PLUGIN Yes) if(NETWORKMONITOR_PLUGIN) find_library(STATGRAB_LIB statgrab) if(NOT(${STATGRAB_LIB} MATCHES "NOTFOUND")) list(APPEND ENABLED_PLUGINS "Network Monitor") add_subdirectory(plugin-networkmonitor) else() message(STATUS "") message(STATUS "Network Monitor plugin requires libstatgrab") message(STATUS "") endif() endif() setByDefault(SYSSTAT_PLUGIN Yes) if(SYSSTAT_PLUGIN) list(APPEND ENABLED_PLUGINS "System Stats") add_subdirectory(plugin-sysstat) endif(SYSSTAT_PLUGIN) setByDefault(TASKBAR_PLUGIN Yes) if(TASKBAR_PLUGIN) list(APPEND STATIC_PLUGINS "taskbar") add_definitions(-DWITH_TASKBAR_PLUGIN) list(APPEND ENABLED_PLUGINS "Taskbar") add_subdirectory(plugin-taskbar) endif() setByDefault(STATUSNOTIFIER_PLUGIN Yes) if(STATUSNOTIFIER_PLUGIN) list(APPEND STATIC_PLUGINS "statusnotifier") add_definitions(-DWITH_STATUSNOTIFIER_PLUGIN) list(APPEND ENABLED_PLUGINS "Status Notifier") add_subdirectory(plugin-statusnotifier) endif() setByDefault(TRAY_PLUGIN Yes) if(TRAY_PLUGIN) list(APPEND STATIC_PLUGINS "tray") add_definitions(-DWITH_TRAY_PLUGIN) list(APPEND ENABLED_PLUGINS "System Tray") add_subdirectory(plugin-tray) endif() setByDefault(VOLUME_PLUGIN Yes) setByDefault(VOLUME_USE_PULSEAUDIO Yes) setByDefault(VOLUME_USE_ALSA Yes) if(VOLUME_PLUGIN) if (VOLUME_USE_PULSEAUDIO) find_package(PulseAudio) endif(VOLUME_USE_PULSEAUDIO) if(VOLUME_USE_ALSA) find_package(ALSA) endif() if(PULSEAUDIO_FOUND OR ALSA_FOUND) list(APPEND ENABLED_PLUGINS "Volume") message(STATUS "") message(STATUS "Volume plugin will be built") message(STATUS " ALSA: ${ALSA_FOUND}") message(STATUS " PulseAudio: ${PULSEAUDIO_FOUND}") message(STATUS "") add_subdirectory(plugin-volume) else() message(STATUS "") message(STATUS "Volume plugin requires pulseaudio or alsa") message(STATUS " ALSA: ${ALSA_FOUND}") message(STATUS " PulseAudio: ${PULSEAUDIO_FOUND}") message(STATUS "") endif() endif() setByDefault(WORLDCLOCK_PLUGIN Yes) if(WORLDCLOCK_PLUGIN) list(APPEND STATIC_PLUGINS "worldclock") add_definitions(-DWITH_WORLDCLOCK_PLUGIN) list(APPEND ENABLED_PLUGINS "World Clock") add_subdirectory(plugin-worldclock) endif(WORLDCLOCK_PLUGIN) setByDefault(SPACER_PLUGIN Yes) if(SPACER_PLUGIN) list(APPEND STATIC_PLUGINS "spacer") add_definitions(-DWITH_SPACER_PLUGIN) list(APPEND ENABLED_PLUGINS "Spacer") add_subdirectory(plugin-spacer) endif() ######################################################################### message(STATUS "**************** The following plugins will be built ****************") foreach (PLUGIN_STR ${ENABLED_PLUGINS}) message(STATUS " ${PLUGIN_STR}") endforeach() message(STATUS "*********************************************************************") add_subdirectory(panel) # building tarball with CPack ------------------------------------------------- include(InstallRequiredSystemLibraries) set(CPACK_PACKAGE_VERSION_MAJOR ${LXQT_MAJOR_VERSION}) set(CPACK_PACKAGE_VERSION_MINOR ${LXQT_MINOR_VERSION}) set(CPACK_PACKAGE_VERSION_PATCH ${LXQT_PATCH_VERSION}) set(CPACK_GENERATOR TBZ2) set(CPACK_SOURCE_GENERATOR TBZ2) set(CPACK_SOURCE_IGNORE_FILES /build/;.gitignore;.*~;.git;.kdev4;temp) include(CPack) lxqt-panel-0.10.0/LICENSE000066400000000000000000000576361261500472700147070ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 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. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with the Library. 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 Library or any portion of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 Library, 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 Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you 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. If distribution of 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 satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be 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. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library 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. 9. 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 Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library 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 with this License. 11. 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 Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library 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 Library. 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. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library 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. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS lxqt-panel-0.10.0/cmake/000077500000000000000000000000001261500472700147415ustar00rootroot00000000000000lxqt-panel-0.10.0/cmake/BuildPlugin.cmake000066400000000000000000000041221261500472700201600ustar00rootroot00000000000000MACRO (BUILD_LXQT_PLUGIN NAME) set(PROGRAM "lxqt-panel") project(${PROGRAM}_${NAME}) set(PROG_SHARE_DIR ${CMAKE_INSTALL_FULL_DATAROOTDIR}/lxqt/${PROGRAM}) set(PLUGIN_SHARE_DIR ${PROG_SHARE_DIR}/${NAME}) # Translations ********************************** lxqt_translate_ts(${PROJECT_NAME}_QM_FILES UPDATE_TRANSLATIONS ${UPDATE_TRANSLATIONS} SOURCES ${HEADERS} ${SOURCES} ${MOCS} ${UIS} TEMPLATE ${NAME} INSTALL_DIR ${LXQT_TRANSLATIONS_DIR}/${PROGRAM}/${NAME} ) #lxqt_translate_to(QM_FILES ${CMAKE_INSTALL_FULL_DATAROOTDIR}/lxqt/${PROGRAM}/${PROJECT_NAME}) file (GLOB ${PROJECT_NAME}_DESKTOP_FILES_IN resources/*.desktop.in) lxqt_translate_desktop(DESKTOP_FILES SOURCES ${${PROJECT_NAME}_DESKTOP_FILES_IN} ) lxqt_plugin_translation_loader(QM_LOADER ${NAME} "lxqt-panel") #************************************************ file (GLOB CONFIG_FILES resources/*.conf) if (NOT DEFINED PLUGIN_DIR) set (PLUGIN_DIR ${CMAKE_INSTALL_FULL_LIBDIR}/${PROGRAM}) endif (NOT DEFINED PLUGIN_DIR) set(QTX_LIBRARIES Qt5::Widgets) if(QT_USE_QTXML) set(QTX_LIBRARIES ${QTX_LIBRARIES} Qt5::Xml) endif() if(QT_USE_QTDBUS) set(QTX_LIBRARIES ${QTX_LIBRARIES} Qt5::DBus) endif() list(FIND STATIC_PLUGINS ${NAME} IS_STATIC) set(SRC ${HEADERS} ${SOURCES} ${QM_LOADER} ${MOC_SOURCES} ${${PROJECT_NAME}_QM_FILES} ${RESOURCES} ${UIS} ${DESKTOP_FILES}) if (${IS_STATIC} EQUAL -1) # not static add_library(${NAME} MODULE ${SRC}) # build dynamically loadable modules install(TARGETS ${NAME} DESTINATION ${PLUGIN_DIR}) # install the *.so file else() # static add_library(${NAME} STATIC ${SRC}) # build statically linked lib endif() target_link_libraries(${NAME} ${QTX_LIBRARIES} lxqt ${LIBRARIES} KF5::WindowSystem) install(FILES ${CONFIG_FILES} DESTINATION ${PLUGIN_SHARE_DIR}) install(FILES ${DESKTOP_FILES} DESTINATION ${PROG_SHARE_DIR}) ENDMACRO(BUILD_LXQT_PLUGIN) lxqt-panel-0.10.0/panel/000077500000000000000000000000001261500472700147605ustar00rootroot00000000000000lxqt-panel-0.10.0/panel/CMakeLists.txt000066400000000000000000000040021261500472700175140ustar00rootroot00000000000000set(PROJECT lxqt-panel) set(PRIV_HEADERS panelpluginsmodel.h lxqtpanel.h lxqtpanelapplication.h lxqtpanellayout.h plugin.h lxqtpanellimits.h popupmenu.h pluginmoveprocessor.h lxqtpanelpluginconfigdialog.h config/configpaneldialog.h config/configpanelwidget.h config/configpluginswidget.h config/addplugindialog.h ) # using LXQt namespace in the public headers. set(PUB_HEADERS lxqtpanelglobals.h ilxqtpanelplugin.h ilxqtpanel.h ) set(SOURCES main.cpp panelpluginsmodel.cpp lxqtpanel.cpp lxqtpanelapplication.cpp lxqtpanellayout.cpp plugin.cpp popupmenu.cpp pluginmoveprocessor.cpp lxqtpanelpluginconfigdialog.cpp config/configpaneldialog.cpp config/configpanelwidget.cpp config/configpluginswidget.cpp config/addplugindialog.cpp ) set(UI config/configpanelwidget.ui config/configpluginswidget.ui config/addplugindialog.ui ) set(LIBRARIES lxqt ) file(GLOB CONFIG_FILES resources/*.conf) ############################################ add_definitions(-DCOMPILE_LXQT_PANEL) set(PLUGIN_DESKTOPS_DIR "${CMAKE_INSTALL_FULL_DATAROOTDIR}/lxqt/${PROJECT}") add_definitions(-DPLUGIN_DESKTOPS_DIR=\"${PLUGIN_DESKTOPS_DIR}\") project(${PROJECT}) set(QTX_LIBRARIES Qt5::Widgets Qt5::Xml Qt5::DBus) # Translations lxqt_translate_ts(QM_FILES SOURCES UPDATE_TRANSLATIONS ${UPDATE_TRANSLATIONS} SOURCES ${PUB_HEADERS} ${PRIV_HEADERS} ${SOURCES} ${UI} INSTALL_DIR "${LXQT_TRANSLATIONS_DIR}/${PROJECT_NAME}" ) lxqt_app_translation_loader(SOURCES ${PROJECT_NAME}) add_executable(${PROJECT} ${PUB_HEADERS} ${PRIV_HEADERS} ${QM_FILES} ${SOURCES} ${UI} ) target_link_libraries(${PROJECT} ${LIBRARIES} ${QTX_LIBRARIES} KF5::WindowSystem ${STATIC_PLUGINS} ) install(TARGETS ${PROJECT} RUNTIME DESTINATION bin) install(FILES ${CONFIG_FILES} DESTINATION ${LXQT_ETC_XDG_DIR}/lxqt) install(FILES ${PUB_HEADERS} DESTINATION include/lxqt) lxqt-panel-0.10.0/panel/config/000077500000000000000000000000001261500472700162255ustar00rootroot00000000000000lxqt-panel-0.10.0/panel/config/addplugindialog.cpp000066400000000000000000000120771261500472700220670ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXQt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "ui_addplugindialog.h" #include "addplugindialog.h" #include "plugin.h" #include "../lxqtpanelapplication.h" #include #include #include #include #include #include #include #define SEARCH_ROLE Qt::UserRole #define INDEX_ROLE SEARCH_ROLE+1 AddPluginDialog::AddPluginDialog(QWidget *parent): QDialog(parent), ui(new Ui::AddPluginDialog) { ui->setupUi(this); QStringList desktopFilesDirs; desktopFilesDirs << QString(getenv("LXQT_PANEL_PLUGINS_DIR")).split(':', QString::SkipEmptyParts); desktopFilesDirs << QString("%1/%2").arg(XdgDirs::dataHome(), "/lxqt/lxqt-panel"); desktopFilesDirs << PLUGIN_DESKTOPS_DIR; mPlugins = LXQt::PluginInfo::search(desktopFilesDirs, QLatin1String("LXQtPanel/Plugin"), QLatin1String("*")); std::sort(mPlugins.begin(), mPlugins.end(), [](const LXQt::PluginInfo &p1, const LXQt::PluginInfo &p2) { return p1.name() < p2.name() || (p1.name() == p2.name() && p1.comment() < p2.comment()); }); ui->pluginList->setItemDelegate(new LXQt::HtmlDelegate(QSize(32, 32), ui->pluginList)); ui->pluginList->setContextMenuPolicy(Qt::CustomContextMenu); filter(); // search mSearchTimer.setInterval(300); mSearchTimer.setSingleShot(true); connect(ui->searchEdit, &QLineEdit::textEdited, &mSearchTimer, static_cast(&QTimer::start)); connect(&mSearchTimer, &QTimer::timeout, this, &AddPluginDialog::filter); connect(ui->pluginList, &QListWidget::doubleClicked, this, &AddPluginDialog::emitPluginSelected); connect(ui->addButton, &QPushButton::clicked, this, &AddPluginDialog::emitPluginSelected); connect(dynamic_cast(qApp), &LXQtPanelApplication::pluginAdded , this, &AddPluginDialog::filter); connect(dynamic_cast(qApp), &LXQtPanelApplication::pluginRemoved , this, &AddPluginDialog::filter); } AddPluginDialog::~AddPluginDialog() { delete ui; } void AddPluginDialog::filter() { QListWidget* pluginList = ui->pluginList; const int curr_item = 0 < pluginList->count() ? pluginList->currentRow() : 0; pluginList->clear(); static QIcon fallIco = XdgIcon::fromTheme("preferences-plugin"); int pluginCount = mPlugins.length(); for (int i = 0; i < pluginCount; ++i) { const LXQt::PluginInfo &plugin = mPlugins.at(i); QString s = QString("%1 %2 %3 %4 %5").arg(plugin.name(), plugin.comment(), plugin.value("Name").toString(), plugin.value("Comment").toString(), plugin.id()); if (!s.contains(ui->searchEdit->text(), Qt::CaseInsensitive)) continue; QListWidgetItem* item = new QListWidgetItem(ui->pluginList); // disable single-instances plugins already in use if (dynamic_cast(qApp)->isPluginSingletonAndRunnig(plugin.id())) { item->setFlags(item->flags() & ~Qt::ItemIsEnabled); item->setBackground(palette().brush(QPalette::Disabled, QPalette::Text)); item->setText(QString("%1 (%2)
%3
%4") .arg(plugin.name(), plugin.id(), plugin.comment(), tr("(only one instance can run at a time)"))); } else item->setText(QString("%1 (%2)
%3").arg(plugin.name(), plugin.id(), plugin.comment())); item->setIcon(plugin.icon(fallIco)); item->setData(INDEX_ROLE, i); } if (pluginCount > 0) ui->pluginList->setCurrentRow(curr_item < pluginCount ? curr_item : pluginCount - 1); } void AddPluginDialog::emitPluginSelected() { QListWidget* pluginList = ui->pluginList; if (pluginList->currentItem() && pluginList->currentItem()->isSelected()) { LXQt::PluginInfo plugin = mPlugins.at(pluginList->currentItem()->data(INDEX_ROLE).toInt()); emit pluginSelected(plugin); } } lxqt-panel-0.10.0/panel/config/addplugindialog.h000066400000000000000000000031121261500472700215220ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXQt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQT_ADDPLUGINDIALOG_H #define LXQT_ADDPLUGINDIALOG_H #include #include #include #define SEARCH_DELAY 125 namespace Ui { class AddPluginDialog; } class AddPluginDialog : public QDialog { Q_OBJECT public: AddPluginDialog(QWidget *parent = 0); ~AddPluginDialog(); signals: void pluginSelected(const LXQt::PluginInfo &plugin); private: Ui::AddPluginDialog *ui; LXQt::PluginInfoList mPlugins; QTimer mSearchTimer; private slots: void filter(); void emitPluginSelected(); }; #endif // LXQT_ADDPLUGINDIALOG_H lxqt-panel-0.10.0/panel/config/addplugindialog.ui000066400000000000000000000071401261500472700217150ustar00rootroot00000000000000 AddPluginDialog 0 0 400 359 Add Plugins Search: QAbstractScrollArea::AdjustToContents true true QAbstractItemView::SingleSelection QAbstractItemView::SelectRows QAbstractItemView::ScrollPerPixel QListView::Static QListView::TopToBottom QListView::Adjust 0 0 false true -1 false Qt::Horizontal 40 20 Add Widget Close false true pluginList addButton closeButton searchEdit closeButton clicked() AddPluginDialog close() 380 279 118 270 lxqt-panel-0.10.0/panel/config/configpaneldialog.cpp000066400000000000000000000036741261500472700224100ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Marat "Morion" Talipov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "configpaneldialog.h" ConfigPanelDialog::ConfigPanelDialog(LXQtPanel *panel, QWidget *parent): LXQt::ConfigDialog(tr("Configure Panel"), panel->settings(), parent), mPanelPage(nullptr), mPluginsPage(nullptr) { setAttribute(Qt::WA_DeleteOnClose); mPanelPage = new ConfigPanelWidget(panel, this); addPage(mPanelPage, tr("Panel"), QLatin1String("configure")); connect(this, &ConfigPanelDialog::reset, mPanelPage, &ConfigPanelWidget::reset); mPluginsPage = new ConfigPluginsWidget(panel, this); addPage(mPluginsPage, tr("Widgets"), QLatin1String("preferences-plugin")); connect(this, &ConfigPanelDialog::reset, mPluginsPage, &ConfigPluginsWidget::reset); connect(this, &ConfigPanelDialog::accepted, [panel] { panel->saveSettings(); }); } void ConfigPanelDialog::showConfigPanelPage() { showPage(mPanelPage); } void ConfigPanelDialog::showConfigPluginsPage() { showPage(mPluginsPage); } lxqt-panel-0.10.0/panel/config/configpaneldialog.h000066400000000000000000000027611261500472700220510ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Marat "Morion" Talipov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef CONFIGPANELDIALOG_H #define CONFIGPANELDIALOG_H #include "configpanelwidget.h" #include "configpluginswidget.h" #include "../lxqtpanel.h" #include class ConfigPanelDialog : public LXQt::ConfigDialog { Q_OBJECT public: ConfigPanelDialog(LXQtPanel *panel, QWidget *parent = 0); void showConfigPanelPage(); void showConfigPluginsPage(); private: ConfigPanelWidget *mPanelPage; ConfigPluginsWidget *mPluginsPage; }; #endif // CONFIGPANELDIALOG_H lxqt-panel-0.10.0/panel/config/configpanelwidget.cpp000066400000000000000000000331151261500472700224250ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Marat "Morion" Talipov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "configpanelwidget.h" #include "ui_configpanelwidget.h" #include "../lxqtpanellimits.h" #include #include #include #include #include #include #include #include using namespace LXQt; struct ScreenPosition { int screen; ILXQtPanel::Position position; }; Q_DECLARE_METATYPE(ScreenPosition) ConfigPanelWidget::ConfigPanelWidget(LXQtPanel *panel, QWidget *parent) : QWidget(parent), ui(new Ui::ConfigPanelWidget), mPanel(panel) { ui->setupUi(this); fillComboBox_position(); fillComboBox_alignment(); mOldPanelSize = mPanel->panelSize(); mOldIconSize = mPanel->iconSize(); mOldLineCount = mPanel->lineCount(); mOldLength = mPanel->length(); mOldLengthInPercents = mPanel->lengthInPercents(); mOldAlignment = mPanel->alignment(); mOldScreenNum = mPanel->screenNum(); mScreenNum = mOldScreenNum; mOldPosition = mPanel->position(); mPosition = mOldPosition; mOldHidable = mPanel->hidable(); ui->spinBox_panelSize->setMinimum(PANEL_MINIMUM_SIZE); ui->spinBox_panelSize->setMaximum(PANEL_MAXIMUM_SIZE); mOldFontColor = mPanel->fontColor(); mFontColor = mOldFontColor; mOldBackgroundColor = mPanel->backgroundColor(); mBackgroundColor = mOldBackgroundColor; mOldBackgroundImage = mPanel->backgroundImage(); mOldOpacity = mPanel->opacity(); // reset configurations from file reset(); connect(ui->spinBox_panelSize, SIGNAL(valueChanged(int)), this, SLOT(editChanged())); connect(ui->spinBox_iconSize, SIGNAL(valueChanged(int)), this, SLOT(editChanged())); connect(ui->spinBox_lineCount, SIGNAL(valueChanged(int)), this, SLOT(editChanged())); connect(ui->spinBox_length, SIGNAL(valueChanged(int)), this, SLOT(editChanged())); connect(ui->comboBox_lenghtType, SIGNAL(activated(int)), this, SLOT(widthTypeChanged())); connect(ui->comboBox_alignment, SIGNAL(activated(int)), this, SLOT(editChanged())); connect(ui->comboBox_position, SIGNAL(activated(int)), this, SLOT(positionChanged())); connect(ui->checkBox_hidable, SIGNAL(toggled(bool)), this, SLOT(editChanged())); connect(ui->checkBox_customFontColor, SIGNAL(toggled(bool)), this, SLOT(editChanged())); connect(ui->pushButton_customFontColor, SIGNAL(clicked(bool)), this, SLOT(pickFontColor())); connect(ui->checkBox_customBgColor, SIGNAL(toggled(bool)), this, SLOT(editChanged())); connect(ui->pushButton_customBgColor, SIGNAL(clicked(bool)), this, SLOT(pickBackgroundColor())); connect(ui->checkBox_customBgImage, SIGNAL(toggled(bool)), this, SLOT(editChanged())); connect(ui->lineEdit_customBgImage, SIGNAL(textChanged(QString)), this, SLOT(editChanged())); connect(ui->pushButton_customBgImage, SIGNAL(clicked(bool)), this, SLOT(pickBackgroundImage())); connect(ui->slider_opacity, SIGNAL(sliderReleased()), this, SLOT(editChanged())); } /************************************************ * ************************************************/ void ConfigPanelWidget::reset() { ui->spinBox_panelSize->setValue(mOldPanelSize); ui->spinBox_iconSize->setValue(mOldIconSize); ui->spinBox_lineCount->setValue(mOldLineCount); ui->comboBox_position->setCurrentIndex(indexForPosition(mOldScreenNum, mOldPosition)); ui->checkBox_hidable->setChecked(mOldHidable); fillComboBox_alignment(); ui->comboBox_alignment->setCurrentIndex(mOldAlignment + 1); ui->comboBox_lenghtType->setCurrentIndex(mOldLengthInPercents ? 0 : 1); widthTypeChanged(); ui->spinBox_length->setValue(mOldLength); mFontColor.setNamedColor(mOldFontColor.name()); ui->pushButton_customFontColor->setStyleSheet(QString("background: %1").arg(mOldFontColor.name())); mBackgroundColor.setNamedColor(mOldBackgroundColor.name()); ui->pushButton_customBgColor->setStyleSheet(QString("background: %1").arg(mOldBackgroundColor.name())); ui->lineEdit_customBgImage->setText(mOldBackgroundImage); ui->slider_opacity->setValue(mOldOpacity); ui->checkBox_customFontColor->setChecked(mOldFontColor.isValid()); ui->checkBox_customBgColor->setChecked(mOldBackgroundColor.isValid()); ui->checkBox_customBgImage->setChecked(QFileInfo(mOldBackgroundImage).exists()); // update position positionChanged(); } /************************************************ * ************************************************/ void ConfigPanelWidget::fillComboBox_position() { int screenCount = QApplication::desktop()->screenCount(); if (screenCount == 1) { addPosition(tr("Top of desktop"), 0, LXQtPanel::PositionTop); addPosition(tr("Left of desktop"), 0, LXQtPanel::PositionLeft); addPosition(tr("Right of desktop"), 0, LXQtPanel::PositionRight); addPosition(tr("Bottom of desktop"), 0, LXQtPanel::PositionBottom); } else { for (int screenNum = 0; screenNum < screenCount; screenNum++) { if (screenNum) ui->comboBox_position->insertSeparator(9999); addPosition(tr("Top of desktop %1").arg(screenNum +1), screenNum, LXQtPanel::PositionTop); addPosition(tr("Left of desktop %1").arg(screenNum +1), screenNum, LXQtPanel::PositionLeft); addPosition(tr("Right of desktop %1").arg(screenNum +1), screenNum, LXQtPanel::PositionRight); addPosition(tr("Bottom of desktop %1").arg(screenNum +1), screenNum, LXQtPanel::PositionBottom); } } } /************************************************ * ************************************************/ void ConfigPanelWidget::fillComboBox_alignment() { ui->comboBox_alignment->setItemData(0, QVariant(LXQtPanel::AlignmentLeft)); ui->comboBox_alignment->setItemData(1, QVariant(LXQtPanel::AlignmentCenter)); ui->comboBox_alignment->setItemData(2, QVariant(LXQtPanel::AlignmentRight)); if (mPosition == ILXQtPanel::PositionTop || mPosition == ILXQtPanel::PositionBottom) { ui->comboBox_alignment->setItemText(0, tr("Left")); ui->comboBox_alignment->setItemText(1, tr("Center")); ui->comboBox_alignment->setItemText(2, tr("Right")); } else { ui->comboBox_alignment->setItemText(0, tr("Top")); ui->comboBox_alignment->setItemText(1, tr("Center")); ui->comboBox_alignment->setItemText(2, tr("Bottom")); }; } /************************************************ * ************************************************/ void ConfigPanelWidget::addPosition(const QString& name, int screen, LXQtPanel::Position position) { if (LXQtPanel::canPlacedOn(screen, position)) ui->comboBox_position->addItem(name, QVariant::fromValue((ScreenPosition){screen, position})); } /************************************************ * ************************************************/ int ConfigPanelWidget::indexForPosition(int screen, ILXQtPanel::Position position) { for (int i = 0; i < ui->comboBox_position->count(); i++) { ScreenPosition sp = ui->comboBox_position->itemData(i).value(); if (screen == sp.screen && position == sp.position) return i; } return -1; } /************************************************ * ************************************************/ ConfigPanelWidget::~ConfigPanelWidget() { delete ui; } /************************************************ * ************************************************/ void ConfigPanelWidget::editChanged() { mPanel->setPanelSize(ui->spinBox_panelSize->value(), true); mPanel->setIconSize(ui->spinBox_iconSize->value(), true); mPanel->setLineCount(ui->spinBox_lineCount->value(), true); mPanel->setLength(ui->spinBox_length->value(), ui->comboBox_lenghtType->currentIndex() == 0, true); LXQtPanel::Alignment align = LXQtPanel::Alignment( ui->comboBox_alignment->itemData( ui->comboBox_alignment->currentIndex() ).toInt()); mPanel->setAlignment(align, true); mPanel->setPosition(mScreenNum, mPosition, true); mPanel->setHidable(ui->checkBox_hidable->isChecked(), true); mPanel->setFontColor(ui->checkBox_customFontColor->isChecked() ? mFontColor : QColor(), true); if (ui->checkBox_customBgColor->isChecked()) { mPanel->setBackgroundColor(mBackgroundColor, true); mPanel->setOpacity(ui->slider_opacity->value(), true); } else { mPanel->setBackgroundColor(QColor(), true); mPanel->setOpacity(100, true); } QString image = ui->checkBox_customBgImage->isChecked() ? ui->lineEdit_customBgImage->text() : QString(); mPanel->setBackgroundImage(image, true); } /************************************************ * ************************************************/ void ConfigPanelWidget::widthTypeChanged() { int max = getMaxLength(); if (ui->comboBox_lenghtType->currentIndex() == 0) { // Percents ............................. int v = ui->spinBox_length->value() * 100.0 / max; ui->spinBox_length->setRange(1, 100); ui->spinBox_length->setValue(v); } else { // Pixels ............................... int v = max / 100.0 * ui->spinBox_length->value(); ui->spinBox_length->setRange(-max, max); ui->spinBox_length->setValue(v); } } /************************************************ * ************************************************/ int ConfigPanelWidget::getMaxLength() { QDesktopWidget* dw = QApplication::desktop(); if (mPosition == ILXQtPanel::PositionTop || mPosition == ILXQtPanel::PositionBottom) return dw->screenGeometry(mScreenNum).width(); else return dw->screenGeometry(mScreenNum).height(); } /************************************************ * ************************************************/ void ConfigPanelWidget::positionChanged() { ScreenPosition sp = ui->comboBox_position->itemData( ui->comboBox_position->currentIndex()).value(); bool updateAlig = (sp.position == ILXQtPanel::PositionTop || sp.position == ILXQtPanel::PositionBottom) != (mPosition == ILXQtPanel::PositionTop || mPosition == ILXQtPanel::PositionBottom); int oldMax = getMaxLength(); mPosition = sp.position; mScreenNum = sp.screen; int newMax = getMaxLength(); if (ui->comboBox_lenghtType->currentIndex() == 1 && oldMax != newMax) { // Pixels ............................... int v = ui->spinBox_length->value() * 1.0 * newMax / oldMax; ui->spinBox_length->setMaximum(newMax); ui->spinBox_length->setValue(v); } if (updateAlig) fillComboBox_alignment(); editChanged(); } /************************************************ * ************************************************/ void ConfigPanelWidget::pickFontColor() { QColorDialog d(QColor(mFontColor.name()), this); d.setWindowTitle(tr("Pick color")); d.setWindowModality(Qt::WindowModal); if (d.exec() && d.currentColor().isValid()) { mFontColor.setNamedColor(d.currentColor().name()); ui->pushButton_customFontColor->setStyleSheet(QString("background: %1").arg(mFontColor.name())); editChanged(); } } /************************************************ * ************************************************/ void ConfigPanelWidget::pickBackgroundColor() { QColorDialog d(QColor(mBackgroundColor.name()), this); d.setWindowTitle(tr("Pick color")); d.setWindowModality(Qt::WindowModal); if (d.exec() && d.currentColor().isValid()) { mBackgroundColor.setNamedColor(d.currentColor().name()); ui->pushButton_customBgColor->setStyleSheet(QString("background: %1").arg(mBackgroundColor.name())); editChanged(); } } /************************************************ * ************************************************/ void ConfigPanelWidget::pickBackgroundImage() { QString picturesLocation; picturesLocation = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); QFileDialog* d = new QFileDialog(this, tr("Pick image"), picturesLocation, tr("Images (*.png *.gif *.jpg)")); d->setAttribute(Qt::WA_DeleteOnClose); d->setWindowModality(Qt::WindowModal); connect(d, &QFileDialog::fileSelected, ui->lineEdit_customBgImage, &QLineEdit::setText); d->show(); } lxqt-panel-0.10.0/panel/config/configpanelwidget.h000066400000000000000000000050471261500472700220750ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Marat "Morion" Talipov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef CONFIGPANELWIDGET_H #define CONFIGPANELWIDGET_H #include "../lxqtpanel.h" #include #include #include class LXQtPanel; namespace Ui { class ConfigPanelWidget; } class ConfigPanelWidget : public QWidget { Q_OBJECT public: explicit ConfigPanelWidget(LXQtPanel *panel, QWidget *parent = 0); ~ConfigPanelWidget(); int screenNum() const { return mScreenNum; } ILXQtPanel::Position position() const { return mPosition; } signals: void changed(); public slots: void reset(); private slots: void editChanged(); void widthTypeChanged(); void positionChanged(); void pickFontColor(); void pickBackgroundColor(); void pickBackgroundImage(); private: Ui::ConfigPanelWidget *ui; LXQtPanel *mPanel; int mScreenNum; ILXQtPanel::Position mPosition; void addPosition(const QString& name, int screen, LXQtPanel::Position position); void fillComboBox_position(); void fillComboBox_alignment(); int indexForPosition(int screen, ILXQtPanel::Position position); int getMaxLength(); // new values QColor mFontColor; QColor mBackgroundColor; // old values for reset int mOldPanelSize; int mOldIconSize; int mOldLineCount; int mOldLength; bool mOldLengthInPercents; LXQtPanel::Alignment mOldAlignment; ILXQtPanel::Position mOldPosition; bool mOldHidable; int mOldScreenNum; QColor mOldFontColor; QColor mOldBackgroundColor; QString mOldBackgroundImage; int mOldOpacity; }; #endif lxqt-panel-0.10.0/panel/config/configpanelwidget.ui000066400000000000000000000440151261500472700222610ustar00rootroot00000000000000 ConfigPanelWidget 0 0 372 397 0 0 Configure panel 0 0 0 0 0 0 Size false 0 0 0 0 <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> 1 100 Size: Length: % px px 24 Qt::Horizontal QSizePolicy::MinimumExpanding 5 20 0 0 0 0 px 10 128 Icon size: Rows count: 1 20 0 0 Alignment && position Position: Alignment: 0 0 0 0 1 Left Center Right Qt::Horizontal QSizePolicy::Minimum 15 20 0 0 Auto-hide 0 0 Custom styling 0 0 0 0 Font color: false ../../../../../.designer/backup../../../../../.designer/backup Qt::Horizontal QSizePolicy::MinimumExpanding 5 20 Background color: false ../../../../../.designer/backup../../../../../.designer/backup 6 6 false Background opacity: false 100 5 100 Qt::Horizontal false <small>Compositing is required for panel transparency.</small> Qt::AlignCenter 0 0 0 0 Background image: 0 0 0 0 false false ../../../../../.designer/backup../../../../../.designer/backup checkBox_customBgColor toggled(bool) pushButton_customBgColor setEnabled(bool) 144 332 350 350 checkBox_customBgImage toggled(bool) lineEdit_customBgImage setEnabled(bool) 137 403 149 440 checkBox_customBgImage toggled(bool) pushButton_customBgImage setEnabled(bool) 125 403 350 441 checkBox_customFontColor toggled(bool) pushButton_customFontColor setEnabled(bool) 190 294 350 312 checkBox_customBgColor toggled(bool) slider_opacity setEnabled(bool) 99 333 114 367 checkBox_customBgColor toggled(bool) label_2 setEnabled(bool) 34 341 32 362 checkBox_customBgColor toggled(bool) compositingL setEnabled(bool) lxqt-panel-0.10.0/panel/config/configpluginswidget.cpp000066400000000000000000000106761261500472700230160ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "configpluginswidget.h" #include "ui_configpluginswidget.h" #include "addplugindialog.h" #include "panelpluginsmodel.h" #include "../plugin.h" #include "../ilxqtpanelplugin.h" #include #include #include ConfigPluginsWidget::ConfigPluginsWidget(LXQtPanel *panel, QWidget* parent) : QWidget(parent), ui(new Ui::ConfigPluginsWidget), mPanel(panel) { ui->setupUi(this); PanelPluginsModel * plugins = mPanel->mPlugins.data(); { QScopedPointer m(ui->listView_plugins->selectionModel()); ui->listView_plugins->setModel(plugins); } { QScopedPointer d(ui->listView_plugins->itemDelegate()); ui->listView_plugins->setItemDelegate(new LXQt::HtmlDelegate(QSize(16, 16), ui->listView_plugins)); } resetButtons(); connect(ui->listView_plugins, &QListView::activated, plugins, &PanelPluginsModel::onActivatedIndex); connect(ui->listView_plugins->selectionModel(), &QItemSelectionModel::selectionChanged, this, &ConfigPluginsWidget::resetButtons); connect(ui->pushButton_moveUp, &QToolButton::clicked, plugins, &PanelPluginsModel::onMovePluginUp); connect(ui->pushButton_moveDown, &QToolButton::clicked, plugins, &PanelPluginsModel::onMovePluginDown); connect(ui->pushButton_addPlugin, &QPushButton::clicked, this, &ConfigPluginsWidget::showAddPluginDialog); connect(ui->pushButton_removePlugin, &QToolButton::clicked, plugins, &PanelPluginsModel::onRemovePlugin); connect(ui->pushButton_pluginConfig, &QToolButton::clicked, plugins, &PanelPluginsModel::onConfigurePlugin); connect(plugins, &PanelPluginsModel::pluginAdded, this, &ConfigPluginsWidget::resetButtons); connect(plugins, &PanelPluginsModel::pluginRemoved, this, &ConfigPluginsWidget::resetButtons); connect(plugins, &PanelPluginsModel::pluginMoved, this, &ConfigPluginsWidget::resetButtons); } ConfigPluginsWidget::~ConfigPluginsWidget() { delete ui; } void ConfigPluginsWidget::reset() { } void ConfigPluginsWidget::showAddPluginDialog() { if (mAddPluginDialog.isNull()) { mAddPluginDialog.reset(new AddPluginDialog); connect(mAddPluginDialog.data(), &AddPluginDialog::pluginSelected, mPanel->mPlugins.data(), &PanelPluginsModel::addPlugin); } mAddPluginDialog->show(); mAddPluginDialog->raise(); mAddPluginDialog->activateWindow(); } void ConfigPluginsWidget::resetButtons() { PanelPluginsModel *model = mPanel->mPlugins.data(); QItemSelectionModel *selectionModel = ui->listView_plugins->selectionModel(); bool hasSelection = selectionModel->hasSelection(); bool isFirstSelected = selectionModel->isSelected(model->index(0)); bool isLastSelected = selectionModel->isSelected(model->index(model->rowCount() - 1)); bool hasConfigDialog = false; if (hasSelection) { Plugin const * plugin = ui->listView_plugins->model()->data(selectionModel->currentIndex(), Qt::UserRole).value(); if (nullptr != plugin) hasConfigDialog = plugin->iPlugin()->flags().testFlag(ILXQtPanelPlugin::HaveConfigDialog); } ui->pushButton_removePlugin->setEnabled(hasSelection); ui->pushButton_moveUp->setEnabled(hasSelection && !isFirstSelected); ui->pushButton_moveDown->setEnabled(hasSelection && !isLastSelected); ui->pushButton_pluginConfig->setEnabled(hasSelection && hasConfigDialog); } lxqt-panel-0.10.0/panel/config/configpluginswidget.h000066400000000000000000000031161261500472700224520ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef CONFIGPLUGINSWIDGET_H #define CONFIGPLUGINSWIDGET_H #include "../lxqtpanel.h" #include namespace Ui { class ConfigPluginsWidget; } class AddPluginDialog; class ConfigPluginsWidget : public QWidget { Q_OBJECT public: ConfigPluginsWidget(LXQtPanel *panel, QWidget* parent = 0); ~ConfigPluginsWidget(); signals: void changed(); public slots: void reset(); private slots: void showAddPluginDialog(); void resetButtons(); private: Ui::ConfigPluginsWidget *ui; QScopedPointer mAddPluginDialog; LXQtPanel *mPanel; }; #endif lxqt-panel-0.10.0/panel/config/configpluginswidget.ui000066400000000000000000000142211261500472700226370ustar00rootroot00000000000000 ConfigPluginsWidget 0 0 339 220 Configure Plugins 0 0 0 0 6 0 0 0 0 QAbstractScrollArea::AdjustToContents true QAbstractItemView::SingleSelection QAbstractItemView::SelectRows QAbstractItemView::ScrollPerPixel QListView::TopToBottom QListView::Adjust 0 false true Note: changes made in this page cannot be reset. true 0 0 0 0 Move up ... ../../../../../.designer/backup../../../../../.designer/backup Move down ... ../../../../../.designer/backup../../../../../.designer/backup Qt::Horizontal Add ... ../../../../../.designer/backup../../../../../.designer/backup Remove ... ../../../../../.designer/backup../../../../../.designer/backup Qt::Horizontal Configure ... ../../../../../.designer/backup../../../../../.designer/backup Qt::Vertical 20 40 lxqt-panel-0.10.0/panel/ilxqtpanel.h000066400000000000000000000051171261500472700173160ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef ILXQTPANEL_H #define ILXQTPANEL_H #include #include "lxqtpanelglobals.h" class ILXQtPanelPlugin; /** **/ class LXQT_PANEL_API ILXQtPanel { public: /** Specifies the position of the panel on screen. **/ enum Position{ PositionBottom, //! The bottom side of the screen. PositionTop, //! The top side of the screen. PositionLeft, //! The left side of the screen. PositionRight //! The right side of the screen. }; /** This property holds position of the panel. Possible values for this property are described by the Position enum **/ virtual Position position() const = 0; virtual int iconSize() const = 0; virtual int lineCount() const = 0; /** Helper functions for eazy direction checking. Retuns true if panel on the top or bottom of the screen; otherwise returns false. **/ bool isHorizontal() const { return position() == PositionBottom || position() == PositionTop; } /** Returns global screen coordinates of the panel. You no need to use mapToGlobal. **/ virtual QRect globalGometry() const = 0; /** Helper functions for calculating global screen position of some popup window with windowSize size. If you need to show some popup window, you can use it, to get global screen position for the new window. **/ virtual QRect calculatePopupWindowPos(const QPoint &absolutePos, const QSize &windowSize) const = 0; virtual QRect calculatePopupWindowPos(const ILXQtPanelPlugin *plugin, const QSize &windowSize) const = 0; }; #endif // ILXQTPANEL_H lxqt-panel-0.10.0/panel/ilxqtpanelplugin.h000066400000000000000000000175351261500472700205440ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef ILXQTPANELPLUGIN_H #define ILXQTPANELPLUGIN_H #include #include // For XEvent #include #include #include "ilxqtpanel.h" #include "lxqtpanelglobals.h" /** LXQt panel plugins are standalone sharedlibraries (*.so) located in PLUGIN_DIR (define provided by CMakeLists.txt). Plugin for the panel is a library written on C++. One more necessary thing is a .desktop file describing this plugin. The same may be additional files, like translations. Themselves plugins will be installed to /usr/local/lib/lxqt-panel or /usr/lib/lxqt-panel (dependent on cmake option -DCMAKE_INSTALL_PREFIX). Desktop files are installed to /usr/local/share/lxqt/lxqt-panel, translations to /usr/local/share/lxqt/lxqt-panel/PLUGIN_NAME. **/ class QDialog; struct LXQT_PANEL_API ILXQtPanelPluginStartupInfo { ILXQtPanel *lxqtPanel; QSettings *settings; const LXQt::PluginInfo *desktopFile; }; /** \brief Base abstract class for LXQt panel widgets/plugins. All plugins *must* be inherited from this one. This class provides some basic API and inherited/implemented plugins GUIs will be responsible on the functionality itself. See How to write the panel plugin for more information about how to make your plugins. **/ class LXQT_PANEL_API ILXQtPanelPlugin { public: /** This enum describes the properties of an plugin. **/ enum Flag { NoFlags = 0, ///< It does not have any properties set. PreferRightAlignment = 1, /**< The plugin is prefer right alignment (for example the clock plugin); otherwise plugin prefer left (like main menu). This flag is used only at the first start, later positions of all plugins saved in a config, and this saved information is used. */ HaveConfigDialog = 2, ///< The plugin have a configuration dialog. SingleInstance = 4, ///< The plugin allows only one instance to run. NeedsHandle = 8 ///< The plugin needs a handle for the context menu }; Q_DECLARE_FLAGS(Flags, Flag) /** This enum describes the reason the plugin was activated. **/ enum ActivationReason { Unknown = 0, ///< Unknown reason DoubleClick = 2, ///< The plugin entry was double clicked Trigger = 3, ///< The plugin was clicked MiddleClick = 4 ///< The plugin was clicked with the middle mouse button }; /** Constructs a ILXQtPanelPlugin object with the given startupInfo. You do not have to worry about the startupInfo parameters, ILXQtPanelPlugin process the parameters yourself. **/ ILXQtPanelPlugin(const ILXQtPanelPluginStartupInfo &startupInfo): mSettings(startupInfo.settings), mPanel(startupInfo.lxqtPanel), mDesktopFile(startupInfo.desktopFile) {} /** Destroys the object. **/ virtual ~ILXQtPanelPlugin() {} /** Returns the plugin flags. The base class implementation returns a NoFlags. **/ virtual Flags flags() const { return NoFlags; } /** Returns the string that is used in the theme QSS file. If you retuns "WorldClock" string, theme author may write something like `#WorldClock { border: 1px solid red; }` to set custom border for the your plugin. **/ virtual QString themeId() const = 0; /** From users point of view plugin is a some visual widget on the panel. This function retuns pointer to it. This method called only once, so you are free to return pointer on class member, or create widget on the fly. **/ virtual QWidget *widget() = 0; /** Returns the plugin settings dialog. Reimplement this function if your plugin has it. The panel does not take ownership of the dialog, it would probably a good idea to set Qt::WA_DeleteOnClose attribute for the dialog. The default implementation returns 0, no dialog; Note that the flags method has to return HaveConfigDialog flag. To save the settings you should use a ready-to-use ILXQtPanelPlugin::settings() object. **/ virtual QDialog *configureDialog() { return 0; } /** This function is called when values are changed in the plugin settings. Reimplement this function to your plugin corresponded the new settings. The default implementation do nothing. **/ virtual void settingsChanged() {} /** This function is called when the user activates the plugin. reason specifies the reason for activation. ILXQtPanelPlugin::ActivationReason enumerates the various reasons. The default implementation do nothing. **/ virtual void activated(ActivationReason reason) {} /** This function is called when the panel geometry or lines count are changed. The default implementation do nothing. **/ virtual void realign() {} /** Returns the panel object. **/ ILXQtPanel *panel() const { return mPanel; } QSettings *settings() const { return mSettings; } const LXQt::PluginInfo *desktopFile() const { return mDesktopFile; } /** Helper functions for calculating global screen position of some popup window with windowSize size. If you need to show some popup window, you can use it, to get global screen position for the new window. **/ virtual QRect calculatePopupWindowPos(const QSize &windowSize) { return mPanel->calculatePopupWindowPos(this, windowSize); } virtual bool isSeparate() const { return false; } virtual bool isExpandable() const { return false; } private: QSettings *mSettings; ILXQtPanel *mPanel; const LXQt::PluginInfo *mDesktopFile; }; Q_DECLARE_OPERATORS_FOR_FLAGS(ILXQtPanelPlugin::Flags) /** Every plugin must has the loader. You shoul only reimplement instance() method, and return your plugin. Example: @code class LXQtClockPluginLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) { return new LXQtClock(startupInfo);} }; @endcode **/ class LXQT_PANEL_API ILXQtPanelPluginLibrary { public: /** Destroys the ILXQtPanelPluginLibrary object. **/ virtual ~ILXQtPanelPluginLibrary() {} /** Returns the root component object of the plugin. When the library is finally unloaded, the root component will automatically be deleted. **/ virtual ILXQtPanelPlugin* instance(const ILXQtPanelPluginStartupInfo &startupInfo) const = 0; }; Q_DECLARE_INTERFACE(ILXQtPanelPluginLibrary, "lxde-qt.org/Panel/PluginInterface/3.0") #endif // ILXQTPANELPLUGIN_H lxqt-panel-0.10.0/panel/lxqtpanel.cpp000066400000000000000000001055531261500472700175050ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtpanel.h" #include "lxqtpanellimits.h" #include "ilxqtpanelplugin.h" #include "lxqtpanelapplication.h" #include "lxqtpanellayout.h" #include "config/configpaneldialog.h" #include "popupmenu.h" #include "plugin.h" #include "panelpluginsmodel.h" #include #include #include #include #include #include #include #include #include #include #include #include // Turn on this to show the time required to load each plugin during startup // #define DEBUG_PLUGIN_LOADTIME #ifdef DEBUG_PLUGIN_LOADTIME #include #endif // Config keys and groups #define CFG_KEY_SCREENNUM "desktop" #define CFG_KEY_POSITION "position" #define CFG_KEY_PANELSIZE "panelSize" #define CFG_KEY_ICONSIZE "iconSize" #define CFG_KEY_LINECNT "lineCount" #define CFG_KEY_LENGTH "width" #define CFG_KEY_PERCENT "width-percent" #define CFG_KEY_ALIGNMENT "alignment" #define CFG_KEY_FONTCOLOR "font-color" #define CFG_KEY_BACKGROUNDCOLOR "background-color" #define CFG_KEY_BACKGROUNDIMAGE "background-image" #define CFG_KEY_OPACITY "opacity" #define CFG_KEY_PLUGINS "plugins" #define CFG_KEY_HIDABLE "hidable" /************************************************ Returns the Position by the string. String is one of "Top", "Left", "Bottom", "Right", string is not case sensitive. If the string is not correct, returns defaultValue. ************************************************/ ILXQtPanel::Position LXQtPanel::strToPosition(const QString& str, ILXQtPanel::Position defaultValue) { if (str.toUpper() == "TOP") return LXQtPanel::PositionTop; if (str.toUpper() == "LEFT") return LXQtPanel::PositionLeft; if (str.toUpper() == "RIGHT") return LXQtPanel::PositionRight; if (str.toUpper() == "BOTTOM") return LXQtPanel::PositionBottom; return defaultValue; } /************************************************ Return string representation of the position ************************************************/ QString LXQtPanel::positionToStr(ILXQtPanel::Position position) { switch (position) { case LXQtPanel::PositionTop: return QString("Top"); case LXQtPanel::PositionLeft: return QString("Left"); case LXQtPanel::PositionRight: return QString("Right"); case LXQtPanel::PositionBottom: return QString("Bottom"); } return QString(); } /************************************************ ************************************************/ LXQtPanel::LXQtPanel(const QString &configGroup, LXQt::Settings *settings, QWidget *parent) : QFrame(parent), mSettings(settings), mConfigGroup(configGroup), mPlugins{nullptr}, mPanelSize(0), mIconSize(0), mLineCount(0), mLength(0), mAlignment(AlignmentLeft), mPosition(ILXQtPanel::PositionBottom), mScreenNum(0), //whatever (avoid conditional on uninitialized value) mActualScreenNum(0), mHidable(false), mHidden(false) { Qt::WindowFlags flags = Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint; // NOTE: by PCMan: // In Qt 4, the window is not activated if it has Qt::WA_X11NetWmWindowTypeDock. // Since Qt 5, the default behaviour is changed. A window is always activated on mouse click. // Please see the source code of Qt5: src/plugins/platforms/xcb/qxcbwindow.cpp. // void QXcbWindow::handleButtonPressEvent(const xcb_button_press_event_t *event) // This new behaviour caused lxqt bug #161 - Cannot minimize windows from panel 1 when two task managers are open // Besides, this breaks minimizing or restoring windows when clicking on the taskbar buttons. // To workaround this regression bug, we need to add this window flag here. // However, since the panel gets no keyboard focus, this may decrease accessibility since // it's not possible to use the panel with keyboards. We need to find a better solution later. flags |= Qt::WindowDoesNotAcceptFocus; setWindowFlags(flags); setAttribute(Qt::WA_X11NetWmWindowTypeDock); setAttribute(Qt::WA_AlwaysShowToolTips); setAttribute(Qt::WA_TranslucentBackground); setAttribute(Qt::WA_AcceptDrops); setWindowTitle("LXQt Panel"); setObjectName(QString("LXQtPanel %1").arg(configGroup)); LXQtPanelWidget = new QFrame(this); LXQtPanelWidget->setObjectName("BackgroundWidget"); QGridLayout* lav = new QGridLayout(); lav->setMargin(0); setLayout(lav); this->layout()->addWidget(LXQtPanelWidget); mLayout = new LXQtPanelLayout(LXQtPanelWidget); connect(mLayout, &LXQtPanelLayout::pluginMoved, this, &LXQtPanel::pluginMoved); LXQtPanelWidget->setLayout(mLayout); mLayout->setLineCount(mLineCount); mDelaySave.setSingleShot(true); mDelaySave.setInterval(SETTINGS_SAVE_DELAY); connect(&mDelaySave, SIGNAL(timeout()), this, SLOT(saveSettings())); mHideTimer.setSingleShot(true); mHideTimer.setInterval(PANEL_HIDE_DELAY); connect(&mHideTimer, SIGNAL(timeout()), this, SLOT(hidePanelWork())); connect(QApplication::desktop(), SIGNAL(workAreaResized(int)), this, SLOT(realign())); connect(QApplication::desktop(), SIGNAL(screenCountChanged(int)), this, SLOT(ensureVisible())); connect(LXQt::Settings::globalSettings(), SIGNAL(settingsChanged()), this, SLOT(update())); connect(lxqtApp, SIGNAL(themeChanged()), this, SLOT(realign())); readSettings(); // the old position might be on a visible screen ensureVisible(); loadPlugins(); show(); // show it the first first time, despite setting if (mHidable) { showPanel(); QTimer::singleShot(PANEL_HIDE_FIRST_TIME, this, SLOT(hidePanel())); } } /************************************************ ************************************************/ void LXQtPanel::readSettings() { // Read settings ...................................... mSettings->beginGroup(mConfigGroup); // Let Hidability be the first thing we read // so that every call to realign() is without side-effect mHidable = mSettings->value(CFG_KEY_HIDABLE, mHidable).toBool(); mHidden = mHidable; // By default we are using size & count from theme. setPanelSize(mSettings->value(CFG_KEY_PANELSIZE, PANEL_DEFAULT_SIZE).toInt(), false); setIconSize(mSettings->value(CFG_KEY_ICONSIZE, PANEL_DEFAULT_ICON_SIZE).toInt(), false); setLineCount(mSettings->value(CFG_KEY_LINECNT, PANEL_DEFAULT_LINE_COUNT).toInt(), false); setLength(mSettings->value(CFG_KEY_LENGTH, 100).toInt(), mSettings->value(CFG_KEY_PERCENT, true).toBool(), false); mScreenNum = mSettings->value(CFG_KEY_SCREENNUM, QApplication::desktop()->primaryScreen()).toInt(); setPosition(mScreenNum, strToPosition(mSettings->value(CFG_KEY_POSITION).toString(), PositionBottom), false); setAlignment(Alignment(mSettings->value(CFG_KEY_ALIGNMENT, mAlignment).toInt()), false); QColor color = mSettings->value(CFG_KEY_FONTCOLOR, "").value(); if (color.isValid()) setFontColor(color, true); setOpacity(mSettings->value(CFG_KEY_OPACITY, 100).toInt(), true); color = mSettings->value(CFG_KEY_BACKGROUNDCOLOR, "").value(); if (color.isValid()) setBackgroundColor(color, true); QString image = mSettings->value(CFG_KEY_BACKGROUNDIMAGE, "").toString(); if (!image.isEmpty()) setBackgroundImage(image, false); mSettings->endGroup(); } /************************************************ ************************************************/ void LXQtPanel::saveSettings(bool later) { mDelaySave.stop(); if (later) { mDelaySave.start(); return; } mSettings->beginGroup(mConfigGroup); //Note: save/load of plugin names is completely handled by mPlugins object //mSettings->setValue(CFG_KEY_PLUGINS, mPlugins->pluginNames()); mSettings->setValue(CFG_KEY_PANELSIZE, mPanelSize); mSettings->setValue(CFG_KEY_ICONSIZE, mIconSize); mSettings->setValue(CFG_KEY_LINECNT, mLineCount); mSettings->setValue(CFG_KEY_LENGTH, mLength); mSettings->setValue(CFG_KEY_PERCENT, mLengthInPercents); mSettings->setValue(CFG_KEY_SCREENNUM, mScreenNum); mSettings->setValue(CFG_KEY_POSITION, positionToStr(mPosition)); mSettings->setValue(CFG_KEY_ALIGNMENT, mAlignment); mSettings->setValue(CFG_KEY_FONTCOLOR, mFontColor.isValid() ? mFontColor : QColor()); mSettings->setValue(CFG_KEY_BACKGROUNDCOLOR, mBackgroundColor.isValid() ? mBackgroundColor : QColor()); mSettings->setValue(CFG_KEY_BACKGROUNDIMAGE, QFileInfo(mBackgroundImage).exists() ? mBackgroundImage : QString()); mSettings->setValue(CFG_KEY_OPACITY, mOpacity); mSettings->setValue(CFG_KEY_HIDABLE, mHidable); mSettings->endGroup(); } /************************************************ ************************************************/ void LXQtPanel::ensureVisible() { if (!canPlacedOn(mScreenNum, mPosition)) setPosition(findAvailableScreen(mPosition), mPosition, true); else mActualScreenNum = mScreenNum; // the screen size might be changed, let's update the reserved screen space. updateWmStrut(); } /************************************************ ************************************************/ LXQtPanel::~LXQtPanel() { mLayout->setEnabled(false); // do not save settings because of "user deleted panel" functionality saveSettings(); } /************************************************ ************************************************/ void LXQtPanel::show() { QWidget::show(); KWindowSystem::setOnDesktop(effectiveWinId(), NET::OnAllDesktops); } /************************************************ ************************************************/ QStringList pluginDesktopDirs() { QStringList dirs; dirs << QString(getenv("LXQT_PANEL_PLUGINS_DIR")).split(':', QString::SkipEmptyParts); dirs << QString("%1/%2").arg(XdgDirs::dataHome(), "/lxqt/lxqt-panel"); dirs << PLUGIN_DESKTOPS_DIR; return dirs; } /************************************************ ************************************************/ void LXQtPanel::loadPlugins() { QString names_key(mConfigGroup); names_key += '/'; names_key += QLatin1String(CFG_KEY_PLUGINS); mPlugins.reset(new PanelPluginsModel(this, names_key, pluginDesktopDirs())); connect(mPlugins.data(), &PanelPluginsModel::pluginAdded, mLayout, &LXQtPanelLayout::addPlugin); connect(mPlugins.data(), &PanelPluginsModel::pluginMovedUp, mLayout, &LXQtPanelLayout::moveUpPlugin); //reemit signals connect(mPlugins.data(), &PanelPluginsModel::pluginAdded, this, &LXQtPanel::pluginAdded); connect(mPlugins.data(), &PanelPluginsModel::pluginRemoved, this, &LXQtPanel::pluginRemoved); for (auto const & plugin : mPlugins->plugins()) mLayout->addPlugin(plugin); } /************************************************ ************************************************/ int LXQtPanel::getReserveDimension() { return mHidable ? PANEL_HIDE_SIZE : qMax(PANEL_MINIMUM_SIZE, mPanelSize); } void LXQtPanel::setPanelGeometry() { const QRect currentScreen = QApplication::desktop()->screenGeometry(mActualScreenNum); QRect rect; if (isHorizontal()) { // Horiz panel *************************** rect.setHeight(mHidden ? PANEL_HIDE_SIZE : qMax(PANEL_MINIMUM_SIZE, mPanelSize)); if (mLengthInPercents) rect.setWidth(currentScreen.width() * mLength / 100.0); else { if (mLength <= 0) rect.setWidth(currentScreen.width() + mLength); else rect.setWidth(mLength); } rect.setWidth(qMax(rect.size().width(), mLayout->minimumSize().width())); // Horiz ...................... switch (mAlignment) { case LXQtPanel::AlignmentLeft: rect.moveLeft(currentScreen.left()); break; case LXQtPanel::AlignmentCenter: rect.moveCenter(currentScreen.center()); break; case LXQtPanel::AlignmentRight: rect.moveRight(currentScreen.right()); break; } // Vert ....................... if (mPosition == ILXQtPanel::PositionTop) rect.moveTop(currentScreen.top()); else rect.moveBottom(currentScreen.bottom()); } else { // Vert panel *************************** rect.setWidth(mHidden ? PANEL_HIDE_SIZE : qMax(PANEL_MINIMUM_SIZE, mPanelSize)); if (mLengthInPercents) rect.setHeight(currentScreen.height() * mLength / 100.0); else { if (mLength <= 0) rect.setHeight(currentScreen.height() + mLength); else rect.setHeight(mLength); } rect.setHeight(qMax(rect.size().height(), mLayout->minimumSize().height())); // Vert ....................... switch (mAlignment) { case LXQtPanel::AlignmentLeft: rect.moveTop(currentScreen.top()); break; case LXQtPanel::AlignmentCenter: rect.moveCenter(currentScreen.center()); break; case LXQtPanel::AlignmentRight: rect.moveBottom(currentScreen.bottom()); break; } // Horiz ...................... if (mPosition == ILXQtPanel::PositionLeft) rect.moveLeft(currentScreen.left()); else rect.moveRight(currentScreen.right()); } mLayout->setMargin(mHidden ? PANEL_HIDE_MARGIN : 0); if (rect != geometry()) { setGeometry(rect); setFixedSize(rect.size()); } } void LXQtPanel::realign() { if (!isVisible()) return; #if 0 qDebug() << "** Realign *********************"; qDebug() << "PanelSize: " << mPanelSize; qDebug() << "IconSize: " << mIconSize; qDebug() << "LineCount: " << mLineCount; qDebug() << "Length: " << mLength << (mLengthInPercents ? "%" : "px"); qDebug() << "Alignment: " << (mAlignment == 0 ? "center" : (mAlignment < 0 ? "left" : "right")); qDebug() << "Position: " << positionToStr(mPosition) << "on" << mScreenNum; qDebug() << "Plugins count: " << mPlugins.count(); #endif setPanelGeometry(); // Reserve our space on the screen .......... // It's possible that our geometry is not changed, but screen resolution is changed, // so resetting WM_STRUT is still needed. To make it simple, we always do it. updateWmStrut(); } // Update the _NET_WM_PARTIAL_STRUT and _NET_WM_STRUT properties for the window void LXQtPanel::updateWmStrut() { WId wid = effectiveWinId(); if(wid == 0 || !isVisible()) return; const QRect wholeScreen = QApplication::desktop()->geometry(); const QRect rect = geometry(); // NOTE: http://standards.freedesktop.org/wm-spec/wm-spec-latest.html // Quote from the EWMH spec: " Note that the strut is relative to the screen edge, and not the edge of the xinerama monitor." // So, we use the geometry of the whole screen to calculate the strut rather than using the geometry of individual monitors. // Though the spec only mention Xinerama and did not mention XRandR, the rule should still be applied. // At least openbox is implemented like this. switch (mPosition) { case LXQtPanel::PositionTop: KWindowSystem::setExtendedStrut(wid, /* Left */ 0, 0, 0, /* Right */ 0, 0, 0, /* Top */ rect.top() + getReserveDimension(), rect.left(), rect.right(), /* Bottom */ 0, 0, 0 ); break; case LXQtPanel::PositionBottom: KWindowSystem::setExtendedStrut(wid, /* Left */ 0, 0, 0, /* Right */ 0, 0, 0, /* Top */ 0, 0, 0, /* Bottom */ wholeScreen.bottom() - rect.bottom() + getReserveDimension(), rect.left(), rect.right() ); break; case LXQtPanel::PositionLeft: KWindowSystem::setExtendedStrut(wid, /* Left */ rect.left() + getReserveDimension(), rect.top(), rect.bottom(), /* Right */ 0, 0, 0, /* Top */ 0, 0, 0, /* Bottom */ 0, 0, 0 ); break; case LXQtPanel::PositionRight: KWindowSystem::setExtendedStrut(wid, /* Left */ 0, 0, 0, /* Right */ wholeScreen.right() - rect.right() + getReserveDimension(), rect.top(), rect.bottom(), /* Top */ 0, 0, 0, /* Bottom */ 0, 0, 0 ); break; } } /************************************************ The panel can't be placed on boundary of two displays. This function checks, is the panel can be placed on the display @displayNum on @position. ************************************************/ bool LXQtPanel::canPlacedOn(int screenNum, LXQtPanel::Position position) { QDesktopWidget* dw = QApplication::desktop(); switch (position) { case LXQtPanel::PositionTop: for (int i = 0; i < dw->screenCount(); ++i) if (dw->screenGeometry(i).bottom() < dw->screenGeometry(screenNum).top()) return false; return true; case LXQtPanel::PositionBottom: for (int i = 0; i < dw->screenCount(); ++i) if (dw->screenGeometry(i).top() > dw->screenGeometry(screenNum).bottom()) return false; return true; case LXQtPanel::PositionLeft: for (int i = 0; i < dw->screenCount(); ++i) if (dw->screenGeometry(i).right() < dw->screenGeometry(screenNum).left()) return false; return true; case LXQtPanel::PositionRight: for (int i = 0; i < dw->screenCount(); ++i) if (dw->screenGeometry(i).left() > dw->screenGeometry(screenNum).right()) return false; return true; } return false; } /************************************************ ************************************************/ int LXQtPanel::findAvailableScreen(LXQtPanel::Position position) { int current = mScreenNum; for (int i = current; i < QApplication::desktop()->screenCount(); ++i) if (canPlacedOn(i, position)) return i; for (int i = 0; i < current; ++i) if (canPlacedOn(i, position)) return i; return 0; } /************************************************ ************************************************/ void LXQtPanel::showConfigDialog() { if (mConfigDialog.isNull()) mConfigDialog = new ConfigPanelDialog(this, nullptr /*make it top level window*/); mConfigDialog->showConfigPanelPage(); mConfigDialog->show(); mConfigDialog->raise(); mConfigDialog->activateWindow(); WId wid = mConfigDialog->windowHandle()->winId(); KWindowSystem::activateWindow(wid); KWindowSystem::setOnDesktop(wid, KWindowSystem::currentDesktop()); } /************************************************ ************************************************/ void LXQtPanel::showAddPluginDialog() { if (mConfigDialog.isNull()) mConfigDialog = new ConfigPanelDialog(this, nullptr /*make it top level window*/); mConfigDialog->showConfigPluginsPage(); mConfigDialog->show(); mConfigDialog->raise(); mConfigDialog->activateWindow(); WId wid = mConfigDialog->windowHandle()->winId(); KWindowSystem::activateWindow(wid); KWindowSystem::setOnDesktop(wid, KWindowSystem::currentDesktop()); } /************************************************ ************************************************/ void LXQtPanel::updateStyleSheet() { QStringList sheet; sheet << QString("Plugin > QAbstractButton, LXQtTray { qproperty-iconSize: %1px %1px; }").arg(mIconSize); sheet << QString("Plugin > * > QAbstractButton, TrayIcon { qproperty-iconSize: %1px %1px; }").arg(mIconSize); if (mFontColor.isValid()) sheet << QString("Plugin * { color: " + mFontColor.name() + "; }"); QString object = LXQtPanelWidget->objectName(); if (mBackgroundColor.isValid()) { QString color = QString("%1, %2, %3, %4") .arg(mBackgroundColor.red()) .arg(mBackgroundColor.green()) .arg(mBackgroundColor.blue()) .arg((float) mOpacity / 100); sheet << QString("LXQtPanel #BackgroundWidget { background-color: rgba(" + color + "); }"); } if (QFileInfo(mBackgroundImage).exists()) sheet << QString("LXQtPanel #BackgroundWidget { background-image: url('" + mBackgroundImage + "');}"); setStyleSheet(sheet.join("\n")); } /************************************************ ************************************************/ void LXQtPanel::setPanelSize(int value, bool save) { if (mPanelSize != value) { mPanelSize = value; realign(); if (save) saveSettings(true); } } /************************************************ ************************************************/ void LXQtPanel::setIconSize(int value, bool save) { if (mIconSize != value) { mIconSize = value; updateStyleSheet(); mLayout->setLineSize(mIconSize); if (save) saveSettings(true); realign(); } } /************************************************ ************************************************/ void LXQtPanel::setLineCount(int value, bool save) { if (mLineCount != value) { mLineCount = value; mLayout->setEnabled(false); mLayout->setLineCount(mLineCount); mLayout->setEnabled(true); if (save) saveSettings(true); realign(); } } /************************************************ ************************************************/ void LXQtPanel::setLength(int length, bool inPercents, bool save) { if (mLength == length && mLengthInPercents == inPercents) return; mLength = length; mLengthInPercents = inPercents; if (save) saveSettings(true); realign(); } /************************************************ ************************************************/ void LXQtPanel::setPosition(int screen, ILXQtPanel::Position position, bool save) { if (mScreenNum == screen && mPosition == position) return; mActualScreenNum = screen; mPosition = position; mLayout->setPosition(mPosition); if (save) saveSettings(true); // Qt 5 adds a new class QScreen and add API for setting the screen of a QWindow. // so we had better use it. However, without this, our program should still work // as long as XRandR is used. Since XRandR combined all screens into a large virtual desktop // every screen and their virtual siblings are actually on the same virtual desktop. // So things still work if we don't set the screen correctly, but this is not the case // for other backends, such as the upcoming wayland support. Hence it's better to set it. if(windowHandle()) { // QScreen* newScreen = qApp->screens().at(screen); // QScreen* oldScreen = windowHandle()->screen(); // const bool shouldRecreate = windowHandle()->handle() && !(oldScreen && oldScreen->virtualSiblings().contains(newScreen)); // Q_ASSERT(shouldRecreate == false); // NOTE: When you move a window to another screen, Qt 5 might recreate the window as needed // But luckily, this never happen in XRandR, so Qt bug #40681 is not triggered here. // (The only exception is when the old screen is destroyed, Qt always re-create the window and // this corner case triggers #40681.) // When using other kind of multihead settings, such as Xinerama, this might be different and // unless Qt developers can fix their bug, we have no way to workaround that. windowHandle()->setScreen(qApp->screens().at(screen)); } realign(); } /************************************************ * ************************************************/ void LXQtPanel::setAlignment(Alignment value, bool save) { if (mAlignment == value) return; mAlignment = value; if (save) saveSettings(true); realign(); } /************************************************ * ************************************************/ void LXQtPanel::setFontColor(QColor color, bool save) { mFontColor = color; updateStyleSheet(); if (save) saveSettings(true); } /************************************************ ************************************************/ void LXQtPanel::setBackgroundColor(QColor color, bool save) { mBackgroundColor = color; updateStyleSheet(); if (save) saveSettings(true); } /************************************************ ************************************************/ void LXQtPanel::setBackgroundImage(QString path, bool save) { mBackgroundImage = path; updateStyleSheet(); if (save) saveSettings(true); } /************************************************ * ************************************************/ void LXQtPanel::setOpacity(int opacity, bool save) { mOpacity = opacity; updateStyleSheet(); if (save) saveSettings(true); } /************************************************ ************************************************/ QRect LXQtPanel::globalGometry() const { return QRect(mapToGlobal(QPoint(0, 0)), this->size()); } /************************************************ ************************************************/ bool LXQtPanel::event(QEvent *event) { switch (event->type()) { case QEvent::ContextMenu: showPopupMenu(); break; case QEvent::LayoutRequest: emit realigned(); break; case QEvent::WinIdChange: { // qDebug() << "WinIdChange" << hex << effectiveWinId(); if(effectiveWinId() == 0) break; // Sometimes Qt needs to re-create the underlying window of the widget and // the winId() may be changed at runtime. So we need to reset all X11 properties // when this happens. qDebug() << "WinIdChange" << hex << effectiveWinId() << "handle" << windowHandle() << windowHandle()->screen(); // Qt::WA_X11NetWmWindowTypeDock becomes ineffective in Qt 5 // See QTBUG-39887: https://bugreports.qt-project.org/browse/QTBUG-39887 // Let's use KWindowSystem for that KWindowSystem::setType(effectiveWinId(), NET::Dock); updateWmStrut(); // reserve screen space for the panel KWindowSystem::setOnAllDesktops(effectiveWinId(), true); break; } case QEvent::DragEnter: event->ignore(); //no break intentionally case QEvent::Enter: showPanel(); break; case QEvent::Leave: case QEvent::DragLeave: hidePanel(); break; default: break; } return QFrame::event(event); } /************************************************ ************************************************/ void LXQtPanel::showEvent(QShowEvent *event) { QFrame::showEvent(event); realign(); } /************************************************ ************************************************/ void LXQtPanel::showPopupMenu(Plugin *plugin) { PopupMenu * menu = new PopupMenu(tr("Panel"), this); menu->setAttribute(Qt::WA_DeleteOnClose); menu->setIcon(XdgIcon::fromTheme("configure-toolbars")); // Plugin Menu .............................. if (plugin) { QMenu *m = plugin->popupMenu(); if (m) { menu->addTitle(plugin->windowTitle()); menu->addActions(m->actions()); qobject_cast(m)->setParent(menu); } } // Panel menu ............................... menu->addTitle(QIcon(), tr("Panel")); menu->addAction(XdgIcon::fromTheme(QLatin1String("configure")), tr("Configure Panel"), this, SLOT(showConfigDialog()) ); menu->addAction(XdgIcon::fromTheme("preferences-plugin"), tr("Manage Widgets"), this, SLOT(showAddPluginDialog()) ); LXQtPanelApplication *a = reinterpret_cast(qApp); menu->addAction(XdgIcon::fromTheme(QLatin1String("list-add")), tr("Add Panel"), a, SLOT(addNewPanel()) ); if (a->count() > 1) { menu->addAction(XdgIcon::fromTheme(QLatin1String("list-remove")), tr("Remove Panel"), this, SLOT(userRequestForDeletion()) ); } #ifdef DEBUG menu->addSeparator(); menu->addAction("Exit (debug only)", qApp, SLOT(quit())); #endif /* Note: in multihead & multipanel setup the QMenu::popup/exec places the window * sometimes wrongly (it seems that this bug is somehow connected to misinterpretation * of QDesktopWidget::availableGeometry) */ menu->setGeometry(calculatePopupWindowPos(QCursor::pos(), menu->sizeHint())); menu->show(); } Plugin* LXQtPanel::findPlugin(const ILXQtPanelPlugin* iPlugin) const { Plugin *plugin = nullptr; for (Plugin *plug : mPlugins->plugins()) if (plug->iPlugin() == iPlugin) plugin = plug; return plugin; } /************************************************ ************************************************/ QRect LXQtPanel::calculatePopupWindowPos(QPoint const & absolutePos, QSize const & windowSize) const { int x = absolutePos.x(), y = absolutePos.y(); switch (position()) { case ILXQtPanel::PositionTop: y = globalGometry().bottom(); break; case ILXQtPanel::PositionBottom: y = globalGometry().top() - windowSize.height(); break; case ILXQtPanel::PositionLeft: x = globalGometry().right(); break; case ILXQtPanel::PositionRight: x = globalGometry().left() - windowSize.width(); break; } QRect res(QPoint(x, y), windowSize); QRect screen = QApplication::desktop()->screenGeometry(this); // NOTE: We cannot use AvailableGeometry() which returns the work area here because when in a // multihead setup with different resolutions. In this case, the size of the work area is limited // by the smallest monitor and may be much smaller than the current screen and we will place the // menu at the wrong place. This is very bad for UX. So let's use the full size of the screen. if (res.right() > screen.right()) res.moveRight(screen.right()); if (res.bottom() > screen.bottom()) res.moveBottom(screen.bottom()); if (res.left() < screen.left()) res.moveLeft(screen.left()); if (res.top() < screen.top()) res.moveTop(screen.top()); return res; } /************************************************ ************************************************/ QRect LXQtPanel::calculatePopupWindowPos(const ILXQtPanelPlugin *plugin, const QSize &windowSize) const { Plugin *panel_plugin = findPlugin(plugin); if (nullptr == panel_plugin) return QRect(); return calculatePopupWindowPos(panel_plugin->mapToGlobal(QPoint(0, 0)), windowSize); } /************************************************ ************************************************/ QString LXQtPanel::qssPosition() const { return positionToStr(position()); } /************************************************ ************************************************/ void LXQtPanel::pluginMoved(Plugin * plug) { //get new position of the moved plugin bool found{false}; QString plug_is_before; for (int i=0; icount(); ++i) { Plugin *plugin = qobject_cast(mLayout->itemAt(i)->widget()); if (plugin) { if (found) { //we found our plugin in previous cycle -> is before this (or empty as last) plug_is_before = plugin->settingsGroup(); break; } else found = (plug == plugin); } } mPlugins->movePlugin(plug, plug_is_before); } /************************************************ ************************************************/ void LXQtPanel::userRequestForDeletion() { mSettings->beginGroup(mConfigGroup); QStringList plugins = mSettings->value("plugins").toStringList(); mSettings->endGroup(); Q_FOREACH(QString i, plugins) if (!i.isEmpty()) mSettings->remove(i); mSettings->remove(mConfigGroup); emit deletedByUser(this); } void LXQtPanel::showPanel() { if (mHidable) { mHideTimer.stop(); if (mHidden) { mHidden = false; setPanelGeometry(); } } } void LXQtPanel::hidePanel() { if (mHidable && !mHidden) mHideTimer.start(); } void LXQtPanel::hidePanelWork() { if (mHidable && !mHidden && !geometry().contains(QCursor::pos())) { mHidden = true; setPanelGeometry(); } else { mHideTimer.start(); } } void LXQtPanel::setHidable(bool hidable, bool save) { if (mHidable == hidable) return; mHidable = mHidden = hidable; if (save) saveSettings(true); realign(); } bool LXQtPanel::isPluginSingletonAndRunnig(QString const & pluginId) const { Plugin const * plugin = mPlugins->pluginByID(pluginId); if (nullptr == plugin) return false; else return plugin->iPlugin()->flags().testFlag(ILXQtPanelPlugin::SingleInstance); } lxqt-panel-0.10.0/panel/lxqtpanel.h000066400000000000000000000133011261500472700171370ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTPANEL_H #define LXQTPANEL_H #include #include #include #include #include #include "ilxqtpanel.h" #include "lxqtpanelglobals.h" class QMenu; class Plugin; class QAbstractItemModel; namespace LXQt { class Settings; class PluginInfo; } class LXQtPanelLayout; class ConfigPanelDialog; class PanelPluginsModel; /*! \brief The LXQtPanel class provides a single lxqt-panel. */ class LXQT_PANEL_API LXQtPanel : public QFrame, public ILXQtPanel { Q_OBJECT Q_PROPERTY(QString position READ qssPosition) // for configuration dialog friend class ConfigPanelWidget; friend class ConfigPluginsWidget; friend class ConfigPanelDialog; friend class PanelPluginsModel; public: enum Alignment { AlignmentLeft = -1, AlignmentCenter = 0, AlignmentRight = 1 }; LXQtPanel(const QString &configGroup, LXQt::Settings *settings, QWidget *parent = 0); virtual ~LXQtPanel(); QString name() { return mConfigGroup; } void readSettings(); void showPopupMenu(Plugin *plugin = 0); // ILXQtPanel ......................... ILXQtPanel::Position position() const { return mPosition; } QRect globalGometry() const; Plugin *findPlugin(const ILXQtPanelPlugin *iPlugin) const; QRect calculatePopupWindowPos(QPoint const & absolutePos, QSize const & windowSize) const; QRect calculatePopupWindowPos(const ILXQtPanelPlugin *plugin, const QSize &windowSize) const; // For QSS properties .................. QString qssPosition() const; static bool canPlacedOn(int screenNum, LXQtPanel::Position position); static QString positionToStr(ILXQtPanel::Position position); static ILXQtPanel::Position strToPosition(const QString &str, ILXQtPanel::Position defaultValue); // Settings int panelSize() const { return mPanelSize; } int iconSize() const { return mIconSize; } int lineCount() const { return mLineCount; } int length() const { return mLength; } bool lengthInPercents() const { return mLengthInPercents; } LXQtPanel::Alignment alignment() const { return mAlignment; } int screenNum() const { return mScreenNum; } QColor fontColor() const { return mFontColor; }; QColor backgroundColor() const { return mBackgroundColor; }; QString backgroundImage() const { return mBackgroundImage; }; int opacity() const { return mOpacity; }; bool hidable() const { return mHidable; } bool isPluginSingletonAndRunnig(QString const & pluginId) const; public slots: void show(); void showPanel(); void hidePanel(); void hidePanelWork(); // Settings void setPanelSize(int value, bool save); void setIconSize(int value, bool save); void setLineCount(int value, bool save); void setLength(int length, bool inPercents, bool save); void setPosition(int screen, ILXQtPanel::Position position, bool save); void setAlignment(LXQtPanel::Alignment value, bool save); void setFontColor(QColor color, bool save); void setBackgroundColor(QColor color, bool save); void setBackgroundImage(QString path, bool save); void setOpacity(int opacity, bool save); void setHidable(bool hidable, bool save); void saveSettings(bool later=false); void ensureVisible(); signals: void realigned(); void deletedByUser(LXQtPanel *self); void pluginAdded(); void pluginRemoved(); protected: bool event(QEvent *event); void showEvent(QShowEvent *event); public slots: void showConfigDialog(); private slots: void showAddPluginDialog(); void realign(); void pluginMoved(Plugin * plug); void userRequestForDeletion(); private: LXQtPanelLayout* mLayout; LXQt::Settings *mSettings; QFrame *LXQtPanelWidget; QString mConfigGroup; QScopedPointer mPlugins; int findAvailableScreen(LXQtPanel::Position position); void updateWmStrut(); void loadPlugins(); void setPanelGeometry(); int getReserveDimension(); int mPanelSize; int mIconSize; int mLineCount; int mLength; bool mLengthInPercents; Alignment mAlignment; ILXQtPanel::Position mPosition; int mScreenNum; //!< configured screen (user preference) int mActualScreenNum; //!< panel currently shown at (if the configured screen is not available) QTimer mDelaySave; bool mHidable; bool mHidden; QTimer mHideTimer; QColor mFontColor; QColor mBackgroundColor; QString mBackgroundImage; // 0 to 100 int mOpacity; QPointer mConfigDialog; void updateStyleSheet(); // settings should be kept private for security LXQt::Settings *settings() const { return mSettings; } }; #endif // LXQTPANEL_H lxqt-panel-0.10.0/panel/lxqtpanelapplication.cpp000066400000000000000000000206671261500472700217330ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtpanelapplication.h" #include "lxqtpanel.h" #include "config/configpaneldialog.h" #include #include #include #include #include #include LXQtPanelApplication::LXQtPanelApplication(int& argc, char** argv) : LXQt::Application(argc, argv, true) { QCoreApplication::setApplicationName(QLatin1String("lxqt-panel")); QCoreApplication::setApplicationVersion(LXQT_VERSION); QCommandLineParser parser; parser.setApplicationDescription(QLatin1String("LXQt panel")); parser.addHelpOption(); parser.addVersionOption(); QCommandLineOption configFileOption(QStringList() << QLatin1String("c") << QLatin1String("config") << QLatin1String("configfile"), QCoreApplication::translate("main", "Use alternate configuration file."), QCoreApplication::translate("main", "Configuration file")); parser.addOption(configFileOption); parser.process(*this); const QString configFile = parser.value(configFileOption); if (configFile.isEmpty()) mSettings = new LXQt::Settings(QLatin1String("panel"), this); else mSettings = new LXQt::Settings(configFile, QSettings::IniFormat, this); // This is a workaround for Qt 5 bug #40681. Q_FOREACH(QScreen* screen, screens()) { connect(screen, &QScreen::destroyed, this, &LXQtPanelApplication::screenDestroyed); } connect(this, &QGuiApplication::screenAdded, this, &LXQtPanelApplication::handleScreenAdded); connect(this, &QCoreApplication::aboutToQuit, this, &LXQtPanelApplication::cleanup); QStringList panels = mSettings->value("panels").toStringList(); if (panels.isEmpty()) { panels << "panel1"; } Q_FOREACH(QString i, panels) { addPanel(i); } } LXQtPanelApplication::~LXQtPanelApplication() { } void LXQtPanelApplication::cleanup() { qDeleteAll(mPanels); } void LXQtPanelApplication::addNewPanel() { QString name("panel_" + QUuid::createUuid().toString()); LXQtPanel *p = addPanel(name); QStringList panels = mSettings->value("panels").toStringList(); panels << name; mSettings->setValue("panels", panels); // Poupup the configuration dialog to allow user configuration right away p->showConfigDialog(); } LXQtPanel* LXQtPanelApplication::addPanel(const QString& name) { LXQtPanel *panel = new LXQtPanel(name, mSettings); mPanels << panel; // reemit signals connect(panel, &LXQtPanel::deletedByUser, this, &LXQtPanelApplication::removePanel); connect(panel, &LXQtPanel::pluginAdded, this, &LXQtPanelApplication::pluginAdded); connect(panel, &LXQtPanel::pluginRemoved, this, &LXQtPanelApplication::pluginRemoved); return panel; } void LXQtPanelApplication::handleScreenAdded(QScreen* newScreen) { // qDebug() << "LXQtPanelApplication::handleScreenAdded" << newScreen; connect(newScreen, &QScreen::destroyed, this, &LXQtPanelApplication::screenDestroyed); } void LXQtPanelApplication::reloadPanelsAsNeeded() { // NOTE by PCMan: This is a workaround for Qt 5 bug #40681. // Here we try to re-create the missing panels which are deleted in // LXQtPanelApplication::screenDestroyed(). // qDebug() << "LXQtPanelApplication::reloadPanelsAsNeeded()"; QStringList names = mSettings->value("panels").toStringList(); Q_FOREACH(const QString& name, names) { bool found = false; Q_FOREACH(LXQtPanel* panel, mPanels) { if(panel->name() == name) { found = true; break; } } if(!found) { // the panel is found in the config file but does not exist, create it. qDebug() << "Workaround Qt 5 bug #40681: re-create panel:" << name; addPanel(name); } } qApp->setQuitOnLastWindowClosed(true); } void LXQtPanelApplication::screenDestroyed(QObject* screenObj) { // NOTE by PCMan: This is a workaround for Qt 5 bug #40681. // With this very dirty workaround, we can fix lxde/lxde-qt bug #204, #205, and #206. // Qt 5 has two new regression bugs which breaks lxqt-panel in a multihead environment. // #40681: Regression bug: QWidget::winId() returns old value and QEvent::WinIdChange event is not emitted sometimes. (multihead setup) // #40791: Regression: QPlatformWindow, QWindow, and QWidget::winId() are out of sync. // Explanations for the workaround: // Internally, Qt mantains a list of QScreens and update it when XRandR configuration changes. // When the user turn off an monitor with xrandr --output --off, this will destroy the QScreen // object which represent the output. If the QScreen being destroyed contains our panel widget, // Qt will call QWindow::setScreen(0) on the internal windowHandle() of our panel widget to move it // to the primary screen. However, moving a window to a different screen is more than just changing // its position. With XRandR, all screens are actually part of the same virtual desktop. However, // this is not the case in other setups, such as Xinerama and moving a window to another screen is // not possible unless you destroy the widget and create it again for a new screen. // Therefore, Qt destroy the widget and re-create it when moving our panel to a new screen. // Unfortunately, destroying the window also destroy the child windows embedded into it, // using XEMBED such as the tray icons. (#206) // Second, when the window is re-created, the winId of the QWidget is changed, but Qt failed to // generate QEvent::WinIdChange event so we have no way to know that. We have to set // some X11 window properties using the native winId() to make it a dock, but this stop working // because we cannot get the correct winId(), so this causes #204 and #205. // // The workaround is very simple. Just completely destroy the panel before Qt has a chance to do // QWindow::setScreen() for it. Later, we reload the panel ourselves. So this can bypassing the Qt bugs. QScreen* screen = static_cast(screenObj); bool reloadNeeded = false; qApp->setQuitOnLastWindowClosed(false); Q_FOREACH(LXQtPanel* panel, mPanels) { QWindow* panelWindow = panel->windowHandle(); if(panelWindow && panelWindow->screen() == screen) { // the screen containing the panel is destroyed // delete and then re-create the panel ourselves QString name = panel->name(); panel->saveSettings(false); delete panel; // delete the panel, so Qt does not have a chance to set a new screen to it. mPanels.removeAll(panel); reloadNeeded = true; qDebug() << "Workaround Qt 5 bug #40681: delete panel:" << name; } } if(reloadNeeded) QTimer::singleShot(1000, this, SLOT(reloadPanelsAsNeeded())); else qApp->setQuitOnLastWindowClosed(true); } void LXQtPanelApplication::removePanel(LXQtPanel* panel) { Q_ASSERT(mPanels.contains(panel)); mPanels.removeAll(panel); QStringList panels = mSettings->value("panels").toStringList(); panels.removeAll(panel->name()); mSettings->setValue("panels", panels); panel->deleteLater(); } bool LXQtPanelApplication::isPluginSingletonAndRunnig(QString const & pluginId) const { for (auto const & panel : mPanels) if (panel->isPluginSingletonAndRunnig(pluginId)) return true; return false; } lxqt-panel-0.10.0/panel/lxqtpanelapplication.h000066400000000000000000000036441261500472700213740ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTPANELAPPLICATION_H #define LXQTPANELAPPLICATION_H #include #include "ilxqtpanelplugin.h" class QScreen; class LXQtPanel; namespace LXQt { class Settings; } class LXQtPanelApplication : public LXQt::Application { Q_OBJECT public: explicit LXQtPanelApplication(int& argc, char** argv); ~LXQtPanelApplication(); int count() { return mPanels.count(); } bool isPluginSingletonAndRunnig(QString const & pluginId) const; public slots: void addNewPanel(); signals: void pluginAdded(); void pluginRemoved(); private: QList mPanels; LXQtPanel* addPanel(const QString &name); private slots: void removePanel(LXQtPanel* panel); void handleScreenAdded(QScreen* newScreen); void screenDestroyed(QObject* screenObj); void reloadPanelsAsNeeded(); void cleanup(); private: LXQt::Settings *mSettings; }; #endif // LXQTPANELAPPLICATION_H lxqt-panel-0.10.0/panel/lxqtpanelglobals.h000066400000000000000000000023361261500472700205110ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxde.org/ * * Copyright: 2013 LXDE-Qt team * Authors: * Hong Jen Yee (PCMan) * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef __LXQT_PANEL_GLOBALS_H__ #define __LXQT_PANEL_GLOBALS_H__ #include #ifdef COMPILE_LXQT_PANEL #define LXQT_PANEL_API Q_DECL_EXPORT #else #define LXQT_PANEL_API Q_DECL_IMPORT #endif #endif // __LXQT_PANEL_GLOBALS_H__ lxqt-panel-0.10.0/panel/lxqtpanellayout.cpp000066400000000000000000000630511261500472700207370ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtpanellayout.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "plugin.h" #include "lxqtpanellimits.h" #include "ilxqtpanelplugin.h" #include "lxqtpanel.h" #include "pluginmoveprocessor.h" #include #include #define ANIMATION_DURATION 250 class ItemMoveAnimation : public QVariantAnimation { public: ItemMoveAnimation(QLayoutItem *item) : mItem(item) { setEasingCurve(QEasingCurve::OutBack); setDuration(ANIMATION_DURATION); } void updateCurrentValue(const QVariant ¤t) { mItem->setGeometry(current.toRect()); } private: QLayoutItem* mItem; }; struct LayoutItemInfo { LayoutItemInfo(QLayoutItem *layoutItem=0); QLayoutItem *item; QRect geometry; bool separate; bool expandable; }; LayoutItemInfo::LayoutItemInfo(QLayoutItem *layoutItem): item(layoutItem), separate(false), expandable(false) { if (!item) return; Plugin *p = qobject_cast(item->widget()); if (p) { separate = p->isSeparate(); expandable = p->isExpandable(); return; } } /************************************************ This is logical plugins grid, it's same for horizontal and vertical panel. Plugins keeps as: <---LineCount--> + ---+----+----+ | P1 | P2 | P3 | +----+----+----+ | P4 | P5 | | +----+----+----+ ... +----+----+----+ | PN | | | +----+----+----+ ************************************************/ class LayoutItemGrid { public: explicit LayoutItemGrid(); void addItem(QLayoutItem *item); int count() const { return mItems.count(); } QLayoutItem *itemAt(int index) const { return mItems[index]; } QLayoutItem *takeAt(int index); const LayoutItemInfo &itemInfo(int row, int col) const; LayoutItemInfo &itemInfo(int row, int col); void update(); int lineSize() const { return mLineSize; } void setLineSize(int value); int colCount() const { return mColCount; } void setColCount(int value); int usedColCount() const { return mUsedColCount; } int rowCount() const { return mRowCount; } void invalidate() { mValid = false; } bool isValid() const { return mValid; } QSize sizeHint() const { return mSizeHint; } bool horiz() const { return mHoriz; } void setHoriz(bool value); void clear(); void rebuild(); bool isExpandable() const { return mExpandable; } int expandableSize() const { return mExpandableSize; } void moveItem(int from, int to); private: QVector mInfoItems; int mColCount; int mUsedColCount; int mRowCount; bool mValid; int mExpandableSize; int mLineSize; QSize mSizeHint; QSize mMinSize; bool mHoriz; int mNextRow; int mNextCol; bool mExpandable; QList mItems; void doAddToGrid(QLayoutItem *item); }; /************************************************ ************************************************/ LayoutItemGrid::LayoutItemGrid() { mLineSize = 0; mHoriz = true; clear(); } /************************************************ ************************************************/ void LayoutItemGrid::clear() { mRowCount = 0; mNextRow = 0; mNextCol = 0; mInfoItems.resize(0); mValid = false; mExpandable = false; mExpandableSize = 0; mUsedColCount = 0; mSizeHint = QSize(0,0); mMinSize = QSize(0,0); } /************************************************ ************************************************/ void LayoutItemGrid::rebuild() { clear(); foreach(QLayoutItem *item, mItems) { doAddToGrid(item); } } /************************************************ ************************************************/ void LayoutItemGrid::addItem(QLayoutItem *item) { doAddToGrid(item); mItems.append(item); } /************************************************ ************************************************/ void LayoutItemGrid::doAddToGrid(QLayoutItem *item) { LayoutItemInfo info(item); if (info.separate && mNextCol > 0) { mNextCol = 0; mNextRow++; } int cnt = (mNextRow + 1 ) * mColCount; if (mInfoItems.count() <= cnt) mInfoItems.resize(cnt); int idx = mNextRow * mColCount + mNextCol; mInfoItems[idx] = info; mUsedColCount = qMax(mUsedColCount, mNextCol + 1); mExpandable = mExpandable || info.expandable; mRowCount = qMax(mRowCount, mNextRow+1); if (info.separate || mNextCol >= mColCount-1) { mNextRow++; mNextCol = 0; } else { mNextCol++; } invalidate(); } /************************************************ ************************************************/ QLayoutItem *LayoutItemGrid::takeAt(int index) { QLayoutItem *item = mItems.takeAt(index); rebuild(); return item; } /************************************************ ************************************************/ void LayoutItemGrid::moveItem(int from, int to) { mItems.move(from, to); rebuild(); } /************************************************ ************************************************/ const LayoutItemInfo &LayoutItemGrid::itemInfo(int row, int col) const { return mInfoItems[row * mColCount + col]; } /************************************************ ************************************************/ LayoutItemInfo &LayoutItemGrid::itemInfo(int row, int col) { return mInfoItems[row * mColCount + col]; } /************************************************ ************************************************/ void LayoutItemGrid::update() { mExpandableSize = 0; mSizeHint = QSize(0,0); if (mHoriz) { mSizeHint.setHeight(mLineSize * mColCount); int x = 0; for (int r=0; rsizeHint(); info.geometry = QRect(QPoint(x,y), sz); y += sz.height(); rw = qMax(rw, sz.width()); } x += rw; if (itemInfo(r, 0).expandable) mExpandableSize += rw; mSizeHint.setWidth(x); mSizeHint.rheight() = qMax(mSizeHint.rheight(), y); } } else { mSizeHint.setWidth(mLineSize * mColCount); int y = 0; for (int r=0; rsizeHint(); info.geometry = QRect(QPoint(x,y), sz); x += sz.width(); rh = qMax(rh, sz.height()); } y += rh; if (itemInfo(r, 0).expandable) mExpandableSize += rh; mSizeHint.setHeight(y); mSizeHint.rwidth() = qMax(mSizeHint.rwidth(), x); } } mValid = true; } /************************************************ ************************************************/ void LayoutItemGrid::setLineSize(int value) { mLineSize = qMax(1, value); invalidate(); } /************************************************ ************************************************/ void LayoutItemGrid::setColCount(int value) { mColCount = qMax(1, value); rebuild(); } /************************************************ ************************************************/ void LayoutItemGrid::setHoriz(bool value) { mHoriz = value; invalidate(); } /************************************************ ************************************************/ LXQtPanelLayout::LXQtPanelLayout(QWidget *parent) : QLayout(parent), mLeftGrid(new LayoutItemGrid()), mRightGrid(new LayoutItemGrid()), mPosition(ILXQtPanel::PositionBottom), mAnimate(false) { setMargin(0); } /************************************************ ************************************************/ LXQtPanelLayout::~LXQtPanelLayout() { delete mLeftGrid; delete mRightGrid; } /************************************************ ************************************************/ void LXQtPanelLayout::addItem(QLayoutItem *item) { LayoutItemGrid *grid = mRightGrid; Plugin *p = qobject_cast(item->widget()); if (p && p->alignment() == Plugin::AlignLeft) grid = mLeftGrid; grid->addItem(item); } /************************************************ ************************************************/ void LXQtPanelLayout::globalIndexToLocal(int index, LayoutItemGrid **grid, int *gridIndex) { if (index < mLeftGrid->count()) { *grid = mLeftGrid; *gridIndex = index; return; } *grid = mRightGrid; *gridIndex = index - mLeftGrid->count(); } /************************************************ ************************************************/ void LXQtPanelLayout::globalIndexToLocal(int index, LayoutItemGrid **grid, int *gridIndex) const { if (index < mLeftGrid->count()) { *grid = mLeftGrid; *gridIndex = index; return; } *grid = mRightGrid; *gridIndex = index - mLeftGrid->count(); } /************************************************ ************************************************/ QLayoutItem *LXQtPanelLayout::itemAt(int index) const { if (index < 0 || index >= count()) return 0; LayoutItemGrid *grid=0; int idx=0; globalIndexToLocal(index, &grid, &idx); return grid->itemAt(idx); } /************************************************ ************************************************/ QLayoutItem *LXQtPanelLayout::takeAt(int index) { if (index < 0 || index >= count()) return 0; LayoutItemGrid *grid=0; int idx=0; globalIndexToLocal(index, &grid, &idx); return grid->takeAt(idx); } /************************************************ ************************************************/ int LXQtPanelLayout::count() const { return mLeftGrid->count() + mRightGrid->count(); } /************************************************ ************************************************/ void LXQtPanelLayout::moveItem(int from, int to, bool withAnimation) { if (from != to) { LayoutItemGrid *fromGrid=0; int fromIdx=0; globalIndexToLocal(from, &fromGrid, &fromIdx); LayoutItemGrid *toGrid=0; int toIdx=0; globalIndexToLocal(to, &toGrid, &toIdx); if (fromGrid == toGrid) { fromGrid->moveItem(fromIdx, toIdx); } else { QLayoutItem *item = fromGrid->takeAt(fromIdx); toGrid->addItem(item); //recalculate position because we removed from one and put to another grid LayoutItemGrid *toGridAux=0; globalIndexToLocal(to, &toGridAux, &toIdx); Q_ASSERT(toGrid == toGridAux); //grid must be the same (if not something is wrong with our logic) toGrid->moveItem(toGridAux->count()-1, toIdx); } } mAnimate = withAnimation; invalidate(); } /************************************************ ************************************************/ QSize LXQtPanelLayout::sizeHint() const { if (!mLeftGrid->isValid()) mLeftGrid->update(); if (!mRightGrid->isValid()) mRightGrid->update(); QSize ls = mLeftGrid->sizeHint(); QSize rs = mRightGrid->sizeHint(); if (isHorizontal()) { return QSize(ls.width() + rs.width(), qMax(ls.height(), rs.height())); } else { return QSize(qMax(ls.width(), rs.width()), ls.height() + rs.height()); } } /************************************************ ************************************************/ void LXQtPanelLayout::setGeometry(const QRect &geometry) { if (!mLeftGrid->isValid()) mLeftGrid->update(); if (!mRightGrid->isValid()) mRightGrid->update(); QRect my_geometry{geometry}; my_geometry -= contentsMargins(); if (count()) { if (isHorizontal()) setGeometryHoriz(my_geometry); else setGeometryVert(my_geometry); } mAnimate = false; QLayout::setGeometry(my_geometry); } /************************************************ ************************************************/ void LXQtPanelLayout::setItemGeometry(QLayoutItem *item, const QRect &geometry, bool withAnimation) { Plugin *plugin = qobject_cast(item->widget()); if (withAnimation && plugin) { ItemMoveAnimation* animation = new ItemMoveAnimation(item); animation->setStartValue(item->geometry()); animation->setEndValue(geometry); animation->start(animation->DeleteWhenStopped); } else { item->setGeometry(geometry); } } /************************************************ ************************************************/ void LXQtPanelLayout::setGeometryHoriz(const QRect &geometry) { // Calc expFactor for expandable plugins like TaskBar. double expFactor; { int expWidth = mLeftGrid->expandableSize() + mRightGrid->expandableSize(); int nonExpWidth = mLeftGrid->sizeHint().width() - mLeftGrid->expandableSize() + mRightGrid->sizeHint().width() - mRightGrid->expandableSize(); expFactor = expWidth ? ((1.0 * geometry.width() - nonExpWidth) / expWidth) : 1; } // Calc baselines for plugins like button. QVector baseLines(qMax(mLeftGrid->colCount(), mRightGrid->colCount())); { int bh = geometry.height() / baseLines.count(); int base = geometry.top() + (bh >> 1); for (auto i = baseLines.begin(), i_e = baseLines.end(); i_e != i; ++i, base += bh) { *i = base; } } #if 0 qDebug() << "** LXQtPanelLayout::setGeometryHoriz **************"; qDebug() << "geometry: " << geometry; qDebug() << "Left grid"; qDebug() << " cols:" << mLeftGrid->colCount() << " rows:" << mLeftGrid->rowCount(); qDebug() << " usedCols" << mLeftGrid->usedColCount(); qDebug() << "Right grid"; qDebug() << " cols:" << mRightGrid->colCount() << " rows:" << mRightGrid->rowCount(); qDebug() << " usedCols" << mRightGrid->usedColCount(); #endif // Left aligned plugins. int left=geometry.left(); for (int r=0; rrowCount(); ++r) { int rw = 0; for (int c=0; cusedColCount(); ++c) { const LayoutItemInfo &info = mLeftGrid->itemInfo(r, c); if (info.item) { QRect rect; if (info.separate) { rect.setLeft(left); rect.setTop(geometry.top()); rect.setHeight(geometry.height()); if (info.expandable) rect.setWidth(info.geometry.width() * expFactor); else rect.setWidth(info.geometry.width()); } else { rect.setHeight(qMin(info.geometry.height(), geometry.height())); rect.setWidth(qMin(info.geometry.width(), geometry.width())); rect.moveCenter(QPoint(0, baseLines[c])); rect.moveLeft(left); } rw = qMax(rw, rect.width()); setItemGeometry(info.item, rect, mAnimate); } } left += rw; } // Right aligned plugins. int right=geometry.right(); for (int r=mRightGrid->rowCount()-1; r>=0; --r) { int rw = 0; for (int c=0; cusedColCount(); ++c) { const LayoutItemInfo &info = mRightGrid->itemInfo(r, c); if (info.item) { QRect rect; if (info.separate) { rect.setTop(geometry.top()); rect.setHeight(geometry.height()); if (info.expandable) rect.setWidth(info.geometry.width() * expFactor); else rect.setWidth(info.geometry.width()); rect.moveRight(right); } else { rect.setHeight(qMin(info.geometry.height(), geometry.height())); rect.setWidth(qMin(info.geometry.width(), geometry.width())); rect.moveCenter(QPoint(0, baseLines[c])); rect.moveRight(right); } rw = qMax(rw, rect.width()); setItemGeometry(info.item, rect, mAnimate); } } right -= rw; } } /************************************************ ************************************************/ void LXQtPanelLayout::setGeometryVert(const QRect &geometry) { // Calc expFactor for expandable plugins like TaskBar. double expFactor; { int expHeight = mLeftGrid->expandableSize() + mRightGrid->expandableSize(); int nonExpHeight = mLeftGrid->sizeHint().height() - mLeftGrid->expandableSize() + mRightGrid->sizeHint().height() - mRightGrid->expandableSize(); expFactor = expHeight ? ((1.0 * geometry.height() - nonExpHeight) / expHeight) : 1; } // Calc baselines for plugins like button. QVector baseLines(qMax(mLeftGrid->colCount(), mRightGrid->colCount())); { int bw = geometry.width() / baseLines.count(); int base = geometry.left() + (bw >> 1); for (auto i = baseLines.begin(), i_e = baseLines.end(); i_e != i; ++i, base += bw) { *i = base; } } #if 0 qDebug() << "** LXQtPanelLayout::setGeometryVert **************"; qDebug() << "geometry: " << geometry; qDebug() << "Left grid"; qDebug() << " cols:" << mLeftGrid->colCount() << " rows:" << mLeftGrid->rowCount(); qDebug() << " usedCols" << mLeftGrid->usedColCount(); qDebug() << "Right grid"; qDebug() << " cols:" << mRightGrid->colCount() << " rows:" << mRightGrid->rowCount(); qDebug() << " usedCols" << mRightGrid->usedColCount(); #endif // Top aligned plugins. int top=geometry.top(); for (int r=0; rrowCount(); ++r) { int rh = 0; for (int c=0; cusedColCount(); ++c) { const LayoutItemInfo &info = mLeftGrid->itemInfo(r, c); if (info.item) { QRect rect; if (info.separate) { rect.moveTop(top); rect.setLeft(geometry.left()); rect.setWidth(geometry.width()); if (info.expandable) rect.setHeight(info.geometry.height() * expFactor); else rect.setHeight(info.geometry.height()); } else { rect.setHeight(qMin(info.geometry.height(), geometry.height())); rect.setWidth(qMin(info.geometry.width(), geometry.width())); rect.moveCenter(QPoint(baseLines[c], 0)); rect.moveTop(top); } rh = qMax(rh, rect.height()); setItemGeometry(info.item, rect, mAnimate); } } top += rh; } // Bottom aligned plugins. int bottom=geometry.bottom(); for (int r=mRightGrid->rowCount()-1; r>=0; --r) { int rh = 0; for (int c=0; cusedColCount(); ++c) { const LayoutItemInfo &info = mRightGrid->itemInfo(r, c); if (info.item) { QRect rect; if (info.separate) { rect.setLeft(geometry.left()); rect.setWidth(geometry.width()); if (info.expandable) rect.setHeight(info.geometry.height() * expFactor); else rect.setHeight(info.geometry.height()); rect.moveBottom(bottom); } else { rect.setHeight(qMin(info.geometry.height(), geometry.height())); rect.setWidth(qMin(info.geometry.width(), geometry.width())); rect.moveCenter(QPoint(baseLines[c], 0)); rect.moveBottom(bottom); } rh = qMax(rh, rect.height()); setItemGeometry(info.item, rect, mAnimate); } } bottom -= rh; } } /************************************************ ************************************************/ void LXQtPanelLayout::invalidate() { mLeftGrid->invalidate(); mRightGrid->invalidate(); mMinPluginSize = QSize(); QLayout::invalidate(); } /************************************************ ************************************************/ int LXQtPanelLayout::lineCount() const { return mLeftGrid->colCount(); } /************************************************ ************************************************/ void LXQtPanelLayout::setLineCount(int value) { mLeftGrid->setColCount(value); mRightGrid->setColCount(value); invalidate(); } /************************************************ ************************************************/ int LXQtPanelLayout::lineSize() const { return mLeftGrid->lineSize(); } /************************************************ ************************************************/ void LXQtPanelLayout::setLineSize(int value) { mLeftGrid->setLineSize(value); mRightGrid->setLineSize(value); invalidate(); } /************************************************ ************************************************/ void LXQtPanelLayout::setPosition(ILXQtPanel::Position value) { mPosition = value; mLeftGrid->setHoriz(isHorizontal()); mRightGrid->setHoriz(isHorizontal()); } /************************************************ ************************************************/ bool LXQtPanelLayout::isHorizontal() const { return mPosition == ILXQtPanel::PositionTop || mPosition == ILXQtPanel::PositionBottom; } /************************************************ ************************************************/ bool LXQtPanelLayout::itemIsSeparate(QLayoutItem *item) { if (!item) return true; Plugin *p = qobject_cast(item->widget()); if (!p) return true; return p->isSeparate(); } /************************************************ ************************************************/ void LXQtPanelLayout::startMovePlugin() { Plugin *plugin = qobject_cast(sender()); if (plugin) { // We have not memoryleaks there. // The processor will be automatically deleted when stopped. PluginMoveProcessor *moveProcessor = new PluginMoveProcessor(this, plugin); moveProcessor->start(); connect(moveProcessor, SIGNAL(finished()), this, SLOT(finishMovePlugin())); } } /************************************************ ************************************************/ void LXQtPanelLayout::finishMovePlugin() { PluginMoveProcessor *moveProcessor = qobject_cast(sender()); if (moveProcessor) { Plugin *plugin = moveProcessor->plugin(); int n = indexOf(plugin); plugin->setAlignment(ncount() ? Plugin::AlignLeft : Plugin::AlignRight); emit pluginMoved(plugin); } } /************************************************ ************************************************/ void LXQtPanelLayout::moveUpPlugin(Plugin * plugin) { const int i = indexOf(plugin); if (0 < i) moveItem(i, i - 1, true); } /************************************************ ************************************************/ void LXQtPanelLayout::addPlugin(Plugin * plugin) { connect(plugin, &Plugin::startMove, this, &LXQtPanelLayout::startMovePlugin); const int prev_count = count(); addWidget(plugin); //check actual position const int pos = indexOf(plugin); if (prev_count > pos) moveItem(pos, prev_count, false); } lxqt-panel-0.10.0/panel/lxqtpanellayout.h000066400000000000000000000054241261500472700204040ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTPANELLAYOUT_H #define LXQTPANELLAYOUT_H #include #include #include #include #include "ilxqtpanel.h" #include "lxqtpanelglobals.h" class MoveInfo; class QMouseEvent; class QEvent; class Plugin; class LayoutItemGrid; class LXQT_PANEL_API LXQtPanelLayout : public QLayout { Q_OBJECT public: explicit LXQtPanelLayout(QWidget *parent); ~LXQtPanelLayout(); void addItem(QLayoutItem *item); QLayoutItem *itemAt(int index) const; QLayoutItem *takeAt(int index); int count() const; void moveItem(int from, int to, bool withAnimation=false); QSize sizeHint() const; //QSize minimumSize() const; void setGeometry(const QRect &geometry); bool isHorizontal() const; void invalidate(); int lineCount() const; void setLineCount(int value); int lineSize() const; void setLineSize(int value); ILXQtPanel::Position position() const { return mPosition; } void setPosition(ILXQtPanel::Position value); static bool itemIsSeparate(QLayoutItem *item); signals: void pluginMoved(Plugin * plugin); public slots: void startMovePlugin(); void finishMovePlugin(); void moveUpPlugin(Plugin * plugin); void addPlugin(Plugin * plugin); private: mutable QSize mMinPluginSize; LayoutItemGrid *mLeftGrid; LayoutItemGrid *mRightGrid; ILXQtPanel::Position mPosition; bool mAnimate; void setGeometryHoriz(const QRect &geometry); void setGeometryVert(const QRect &geometry); void globalIndexToLocal(int index, LayoutItemGrid **grid, int *gridIndex); void globalIndexToLocal(int index, LayoutItemGrid **grid, int *gridIndex) const; void setItemGeometry(QLayoutItem *item, const QRect &geometry, bool withAnimation); }; #endif // LXQTPANELLAYOUT_H lxqt-panel-0.10.0/panel/lxqtpanellimits.h000066400000000000000000000027341261500472700203710ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Luís Pereira * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTPANELLIMITS_H #define LXQTPANELLIMITS_H #define PANEL_DEFAULT_SIZE 32 #define PANEL_MINIMUM_SIZE 16 #define PANEL_MAXIMUM_SIZE 200 #define PANEL_HIDE_SIZE 4 #define PANEL_HIDE_MARGIN (PANEL_HIDE_SIZE / 2) #define PANEL_DEFAULT_ICON_SIZE 22 #define PANEL_DEFAULT_LINE_COUNT 1 #define PANEL_DEFAULT_BACKGROUND_COLOR "#CCCCCC" #define PANEL_HIDE_DELAY 500 #define PANEL_HIDE_FIRST_TIME (5000 - PANEL_HIDE_DELAY) #define SETTINGS_SAVE_DELAY 3000 #endif // LXQTPANELLIMITS_H lxqt-panel-0.10.0/panel/lxqtpanelpluginconfigdialog.cpp000066400000000000000000000050331261500472700232620ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtpanelpluginconfigdialog.h" #include #include #include #include /************************************************ ************************************************/ LXQtPanelPluginConfigDialog::LXQtPanelPluginConfigDialog(QSettings &settings, QWidget *parent) : QDialog(parent), mSettings(settings), mOldSettings(settings) { } /************************************************ ************************************************/ LXQtPanelPluginConfigDialog::~LXQtPanelPluginConfigDialog() { } /************************************************ ************************************************/ QSettings& LXQtPanelPluginConfigDialog::settings() const { return mSettings; } /************************************************ ************************************************/ void LXQtPanelPluginConfigDialog::dialogButtonsAction(QAbstractButton *btn) { QDialogButtonBox *box = qobject_cast(btn->parent()); if (box && box->buttonRole(btn) == QDialogButtonBox::ResetRole) { mOldSettings.loadToSettings(); loadSettings(); } else { close(); } } /************************************************ ************************************************/ void LXQtPanelPluginConfigDialog::setComboboxIndexByData(QComboBox *comboBox, const QVariant &data, int defaultIndex) const { int index = comboBox ->findData(data); if (index < 0) index = defaultIndex; comboBox->setCurrentIndex(index); } lxqt-panel-0.10.0/panel/lxqtpanelpluginconfigdialog.h000066400000000000000000000035071261500472700227330ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTPANELPLUGINCONFIGDIALOG_H #define LXQTPANELPLUGINCONFIGDIALOG_H #include #include #include #include "lxqtpanelglobals.h" class QComboBox; class LXQT_PANEL_API LXQtPanelPluginConfigDialog : public QDialog { Q_OBJECT public: explicit LXQtPanelPluginConfigDialog(QSettings &settings, QWidget *parent = 0); virtual ~LXQtPanelPluginConfigDialog(); QSettings& settings() const; protected slots: /* Saves settings in conf file. */ virtual void loadSettings() = 0; virtual void dialogButtonsAction(QAbstractButton *btn); protected: void setComboboxIndexByData(QComboBox *comboBox, const QVariant &data, int defaultIndex = 0) const; private: QSettings &mSettings; LXQt::SettingsCache mOldSettings; }; #endif // LXQTPANELPLUGINCONFIGDIALOG_H lxqt-panel-0.10.0/panel/main.cpp000066400000000000000000000025041261500472700164110ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtpanelapplication.h" /*! The lxqt-panel is the panel of LXDE-Qt. Usage: lxqt-panel [CONFIG_ID] CONFIG_ID Section name in config file ~/.config/lxqt-panel/panel.conf (default main) */ int main(int argc, char *argv[]) { LXQtPanelApplication app(argc, argv); return app.exec(); } lxqt-panel-0.10.0/panel/man/000077500000000000000000000000001261500472700155335ustar00rootroot00000000000000lxqt-panel-0.10.0/panel/man/lxqt-panel.1000066400000000000000000000043121261500472700177020ustar00rootroot00000000000000.TH lxqt-panel "1" "September 2012" "LXQt\ 0.5.0" "LXQt\ Module" .SH NAME lxqt-panel \- Panel of \fBLXQt\fR: the faster and lighter QT Desktop Environment .SH SYNOPSIS .B lxqt-panel .br .SH DESCRIPTION This module adds a panel to the desktop. .P .P The \fBLXQt modules\fR are desktop independent tools, and operate as daemons for the local user for desktop specific operations. .P \fBLXQt\fR is an advanced, easy-to-use, and fast desktop environment based on Qt technologies, ships several core desktop components, all of which are optional: .P * Panel \fI(this)\fR * Desktop * Application launcher * Settings center * Session handler * Polkit handler * SSH password access * Display manager handler .P These components perform similar actions to those available in other desktop environments, and their name is self-descriptive. They are usually not launched by hand but automatically, when choosing a \fBLXQt\fR session in the Display Manager. .SH BEHAVIOR The module can be run standard alone, and also autostarted at logon. Show a bar panel by default in bottom of desktop. .P The panel works with plugins, each component are a plugin, like the menu or the volume icon. .P Several plugins are loaded by default, the desktop menu and windows workspaces can also managed here. .SH CONFIGURATIONS By right clickin over there show config setting options for each plugins and also panel itsefl. .SH AUTOSTART The module only are showed on \fBLXQt\fR desktop environment, but you can create an autostart action for you prefered desktop environment. .SH "REPORTING BUGS" Report bugs to https://github.com/LXDE/LXQt/issues .SH "SEE ALSO" \fBLXQt\fR it has been tailored for users who value simplicity, speed, and an intuitive interface, also intended for less powerful machines. See: .\" any module must refers to session app, for more info on start it .P \fBlxqt-session.1\fR LXQt for manage LXQt complete environment .P \fBstart-lxqt.1\fR LXQt display management independient starup. .P \fBlxqt-config.1\fR LXQt config center application for performing settings .P .SH AUTHOR This manual page was created by \fBPICCORO Lenz McKAY\fR \fI\fR for \fBLXQt\fR project and VENENUX GNU/Linux but can be used by others. lxqt-panel-0.10.0/panel/panelpluginsmodel.cpp000066400000000000000000000251221261500472700212100ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXQt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "panelpluginsmodel.h" #include "plugin.h" #include "ilxqtpanelplugin.h" #include "lxqtpanel.h" #include "lxqtpanelapplication.h" #include #include #include #include PanelPluginsModel::PanelPluginsModel(LXQtPanel * panel, QString const & namesKey, QStringList const & desktopDirs, QObject * parent/* = nullptr*/) : QAbstractListModel{parent}, mNamesKey(namesKey), mPanel(panel) { loadPlugins(desktopDirs); } PanelPluginsModel::~PanelPluginsModel() { qDeleteAll(plugins()); } int PanelPluginsModel::rowCount(const QModelIndex & parent/* = QModelIndex()*/) const { return QModelIndex() == parent ? mPlugins.size() : 0; } QVariant PanelPluginsModel::data(const QModelIndex & index, int role/* = Qt::DisplayRole*/) const { Q_ASSERT(QModelIndex() == index.parent() && 0 == index.column() && mPlugins.size() > index.row() ); pluginslist_t::const_reference plugin = mPlugins[index.row()]; QVariant ret; switch (role) { case Qt::DisplayRole: if (plugin.second.isNull()) ret = QString("Unknown (%1)").arg(plugin.first); else ret = QString("%1 (%2)").arg(plugin.second->name(), plugin.first); break; case Qt::DecorationRole: if (plugin.second.isNull()) ret = XdgIcon::fromTheme("preferences-plugin"); else ret = plugin.second->desktopFile().icon(XdgIcon::fromTheme("preferences-plugin")); break; case Qt::UserRole: ret = QVariant::fromValue(const_cast(plugin.second.data())); break; } return ret; } Qt::ItemFlags PanelPluginsModel::flags(const QModelIndex & index) const { return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemNeverHasChildren; } QStringList PanelPluginsModel::pluginNames() const { QStringList names; for (auto const & p : mPlugins) names.append(p.first); return names; } QList PanelPluginsModel::plugins() const { QList plugins; for (auto const & p : mPlugins) if (!p.second.isNull()) plugins.append(p.second.data()); return plugins; } Plugin* PanelPluginsModel::pluginByName(QString name) const { for (auto const & p : mPlugins) if (p.first == name) return p.second.data(); return nullptr; } Plugin const * PanelPluginsModel::pluginByID(QString id) const { for (auto const & p : mPlugins) { Plugin *plugin = p.second.data(); if (plugin && plugin->desktopFile().id() == id) return plugin; } return nullptr; } void PanelPluginsModel::addPlugin(const LXQt::PluginInfo &desktopFile) { if (dynamic_cast(qApp)->isPluginSingletonAndRunnig(desktopFile.id())) return; QString name = findNewPluginSettingsGroup(desktopFile.id()); QPointer plugin = loadPlugin(desktopFile, name); if (plugin.isNull()) return; beginInsertRows(QModelIndex(), mPlugins.size(), mPlugins.size()); mPlugins.append({name, plugin}); endInsertRows(); mPanel->settings()->setValue(mNamesKey, pluginNames()); emit pluginAdded(plugin.data()); } void PanelPluginsModel::removePlugin(pluginslist_t::iterator plugin) { if (mPlugins.end() != plugin) { mPanel->settings()->remove(plugin->first); Plugin * p = plugin->second.data(); const int row = plugin - mPlugins.begin(); beginRemoveRows(QModelIndex(), row, row); mPlugins.erase(plugin); endRemoveRows(); mActive = mPlugins.isEmpty() ? QModelIndex() : createIndex(mPlugins.size() > row ? row : row - 1, 0); emit pluginRemoved(p); // p can be nullptr mPanel->settings()->setValue(mNamesKey, pluginNames()); if (nullptr != p) p->deleteLater(); } } void PanelPluginsModel::removePlugin() { Plugin * p = qobject_cast(sender()); auto plugin = std::find_if(mPlugins.begin(), mPlugins.end(), [p] (pluginslist_t::const_reference obj) { return p == obj.second; }); removePlugin(std::move(plugin)); } void PanelPluginsModel::movePlugin(Plugin * plugin, QString const & nameAfter) { //merge list of plugins (try to preserve original position) const int from = std::find_if(mPlugins.begin(), mPlugins.end(), [plugin] (pluginslist_t::const_reference obj) { return plugin == obj.second.data(); }) - mPlugins.begin(); const int to = std::find_if(mPlugins.begin(), mPlugins.end(), [nameAfter] (pluginslist_t::const_reference obj) { return nameAfter == obj.first; }) - mPlugins.begin(); const int to_plugins = from < to ? to - 1 : to; if (from != to && from != to_plugins) { beginMoveRows(QModelIndex(), from, from, QModelIndex(), to); mPlugins.move(from, to_plugins); endMoveRows(); emit pluginMoved(plugin); mPanel->settings()->setValue(mNamesKey, pluginNames()); } } void PanelPluginsModel::loadPlugins(QStringList const & desktopDirs) { QStringList plugin_names = mPanel->settings()->value(mNamesKey).toStringList(); #ifdef DEBUG_PLUGIN_LOADTIME QElapsedTimer timer; timer.start(); qint64 lastTime = 0; #endif for (auto const & name : plugin_names) { pluginslist_t::iterator i = mPlugins.insert(mPlugins.end(), {name, nullptr}); QString type = mPanel->settings()->value(name + "/type").toString(); if (type.isEmpty()) { qWarning() << QString("Section \"%1\" not found in %2.").arg(name, mPanel->settings()->fileName()); continue; } LXQt::PluginInfoList list = LXQt::PluginInfo::search(desktopDirs, "LXQtPanel/Plugin", QString("%1.desktop").arg(type)); if( !list.count()) { qWarning() << QString("Plugin \"%1\" not found.").arg(type); continue; } i->second = loadPlugin(list.first(), name); #ifdef DEBUG_PLUGIN_LOADTIME qDebug() << "load plugin" << type << "takes" << (timer.elapsed() - lastTime) << "ms"; lastTime = timer.elapsed(); #endif } } QPointer PanelPluginsModel::loadPlugin(LXQt::PluginInfo const & desktopFile, QString const & settingsGroup) { std::unique_ptr plugin(new Plugin(desktopFile, mPanel->settings()->fileName(), settingsGroup, mPanel)); if (plugin->isLoaded()) { connect(mPanel, &LXQtPanel::realigned, plugin.get(), &Plugin::realign); connect(plugin.get(), &Plugin::remove, this, static_cast(&PanelPluginsModel::removePlugin)); return plugin.release(); } return nullptr; } QString PanelPluginsModel::findNewPluginSettingsGroup(const QString &pluginType) const { QStringList groups = mPanel->settings()->childGroups(); groups.sort(); // Generate new section name QString pluginName = QString("%1").arg(pluginType); if (!groups.contains(pluginName)) return pluginName; else { for (int i = 2; true; ++i) { pluginName = QString("%1%2").arg(pluginType).arg(i); if (!groups.contains(pluginName)) return pluginName; } } } void PanelPluginsModel::onActivatedIndex(QModelIndex const & index) { mActive = index; } bool PanelPluginsModel::isActiveIndexValid() const { return mActive.isValid() && QModelIndex() == mActive.parent() && 0 == mActive.column() && mPlugins.size() > mActive.row(); } void PanelPluginsModel::onMovePluginUp() { if (!isActiveIndexValid()) return; const int row = mActive.row(); if (0 >= row) return; //can't move up beginMoveRows(QModelIndex(), row, row, QModelIndex(), row - 1); mPlugins.swap(row - 1, row); endMoveRows(); pluginslist_t::const_reference moved_plugin = mPlugins[row - 1]; pluginslist_t::const_reference prev_plugin = mPlugins[row]; emit pluginMoved(moved_plugin.second.data()); //emit signal for layout only in case both plugins are loaded/displayed if (!moved_plugin.second.isNull() && !prev_plugin.second.isNull()) emit pluginMovedUp(moved_plugin.second.data()); mPanel->settings()->setValue(mNamesKey, pluginNames()); } void PanelPluginsModel::onMovePluginDown() { if (!isActiveIndexValid()) return; const int row = mActive.row(); if (mPlugins.size() <= row + 1) return; //can't move down beginMoveRows(QModelIndex(), row, row, QModelIndex(), row + 2); mPlugins.swap(row, row + 1); endMoveRows(); pluginslist_t::const_reference moved_plugin = mPlugins[row + 1]; pluginslist_t::const_reference next_plugin = mPlugins[row]; emit pluginMoved(moved_plugin.second.data()); //emit signal for layout only in case both plugins are loaded/displayed if (!moved_plugin.second.isNull() && !next_plugin.second.isNull()) emit pluginMovedUp(next_plugin.second.data()); mPanel->settings()->setValue(mNamesKey, pluginNames()); } void PanelPluginsModel::onConfigurePlugin() { if (!isActiveIndexValid()) return; Plugin * const plugin = mPlugins[mActive.row()].second.data(); if (nullptr != plugin && (ILXQtPanelPlugin::HaveConfigDialog & plugin->iPlugin()->flags())) plugin->showConfigureDialog(); } void PanelPluginsModel::onRemovePlugin() { if (!isActiveIndexValid()) return; auto plugin = mPlugins.begin() + mActive.row(); if (plugin->second.isNull()) removePlugin(std::move(plugin)); else plugin->second->requestRemove(); } lxqt-panel-0.10.0/panel/panelpluginsmodel.h000066400000000000000000000063711261500472700206620ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXQt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef PANELPLUGINSMODEL_H #define PANELPLUGINSMODEL_H #include #include namespace LXQt { class PluginInfo; struct PluginData; } class LXQtPanel; class Plugin; class PanelPluginsModel : public QAbstractListModel { Q_OBJECT public: PanelPluginsModel(LXQtPanel * panel, QString const & namesKey, QStringList const & desktopDirs, QObject * parent = nullptr); ~PanelPluginsModel(); virtual int rowCount(const QModelIndex & parent = QModelIndex()) const override; virtual QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const override; virtual Qt::ItemFlags flags(const QModelIndex & index) const override; QStringList pluginNames() const; QList plugins() const; Plugin *pluginByName(QString name) const; Plugin const *pluginByID(QString id) const; /*! * \param plugin plugin that has been moved * \param nameAfter name of plugin that is right after moved plugin */ void movePlugin(Plugin * plugin, QString const & nameAfter); signals: void pluginAdded(Plugin * plugin); void pluginRemoved(Plugin * plugin); void pluginMoved(Plugin * plugin); //plugin can be nullptr in case of move of not loaded plugin /*! * Emiting only move-up for simplification of using (and problematic layout/list move) */ void pluginMovedUp(Plugin * plugin); public slots: void addPlugin(const LXQt::PluginInfo &desktopFile); void removePlugin(); // slots for configuration dialog void onActivatedIndex(QModelIndex const & index); void onMovePluginUp(); void onMovePluginDown(); void onConfigurePlugin(); void onRemovePlugin(); private: typedef QList > > pluginslist_t; private: void loadPlugins(QStringList const & desktopDirs); QPointer loadPlugin(LXQt::PluginInfo const & desktopFile, QString const & settingsGroup); QString findNewPluginSettingsGroup(const QString &pluginType) const; bool isActiveIndexValid() const; void removePlugin(pluginslist_t::iterator plugin); const QString mNamesKey; pluginslist_t mPlugins; LXQtPanel * mPanel; QPersistentModelIndex mActive; }; Q_DECLARE_METATYPE(Plugin const *) #endif // PANELPLUGINSMODEL_H lxqt-panel-0.10.0/panel/plugin.cpp000066400000000000000000000354231261500472700167710ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "plugin.h" #include "ilxqtpanelplugin.h" #include "lxqtpanel.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // statically linked built-in plugins #include "../plugin-clock/lxqtclock.h" // clock extern void * loadPluginTranslation_clock_helper; #include "../plugin-desktopswitch/desktopswitch.h" // desktopswitch extern void * loadPluginTranslation_desktopswitch_helper; #include "../plugin-mainmenu/lxqtmainmenu.h" // mainmenu extern void * loadPluginTranslation_mainmenu_helper; #include "../plugin-quicklaunch/lxqtquicklaunchplugin.h" // quicklaunch extern void * loadPluginTranslation_quicklaunch_helper; #include "../plugin-showdesktop/showdesktop.h" // showdesktop extern void * loadPluginTranslation_showdesktop_helper; #include "../plugin-spacer/spacer.h" // spacer extern void * loadPluginTranslation_spacer_helper; #include "../plugin-statusnotifier/statusnotifier.h" // statusnotifier extern void * loadPluginTranslation_statusnotifier_helper; #include "../plugin-taskbar/lxqttaskbarplugin.h" // taskbar extern void * loadPluginTranslation_taskbar_helper; #include "../plugin-tray/lxqttrayplugin.h" // tray extern void * loadPluginTranslation_tray_helper; #include "../plugin-worldclock/lxqtworldclock.h" // worldclock extern void * loadPluginTranslation_worldclock_helper; QColor Plugin::mMoveMarkerColor= QColor(255, 0, 0, 255); /************************************************ ************************************************/ Plugin::Plugin(const LXQt::PluginInfo &desktopFile, const QString &settingsFile, const QString &settingsGroup, LXQtPanel *panel) : QFrame(panel), mDesktopFile(desktopFile), mPluginLoader(0), mPlugin(0), mPluginWidget(0), mAlignment(AlignLeft), mSettingsGroup(settingsGroup), mPanel(panel) { mSettings = new LXQt::Settings(settingsFile, QSettings::IniFormat, this); connect(mSettings, SIGNAL(settingsChanged()), this, SLOT(settingsChanged())); mSettings->beginGroup(settingsGroup); mSettingsHash = calcSettingsHash(); setWindowTitle(desktopFile.name()); mName = desktopFile.name(); QStringList dirs; dirs << QProcessEnvironment::systemEnvironment().value("LXQTPANEL_PLUGIN_PATH").split(":"); dirs << PLUGIN_DIR; bool found = false; if(ILXQtPanelPluginLibrary const * pluginLib = findStaticPlugin(desktopFile.id())) { // this is a static plugin found = true; loadLib(pluginLib); } else { // this plugin is a dynamically loadable module QString baseName = QString("lib%1.so").arg(desktopFile.id()); foreach(QString dirName, dirs) { QFileInfo fi(QDir(dirName), baseName); if (fi.exists()) { found = true; if (loadModule(fi.absoluteFilePath())) break; } } } if (!isLoaded()) { if (!found) qWarning() << QString("Plugin %1 not found in the").arg(desktopFile.id()) << dirs; return; } setObjectName(mPlugin->themeId() + "Plugin"); // plugin handle for easy context menu setProperty("NeedsHandle", mPlugin->flags().testFlag(ILXQtPanelPlugin::NeedsHandle)); QString s = mSettings->value("alignment").toString(); // Retrun default value if (s.isEmpty()) { mAlignment = (mPlugin->flags().testFlag(ILXQtPanelPlugin::PreferRightAlignment)) ? Plugin::AlignRight : Plugin::AlignLeft; } else { mAlignment = (s.toUpper() == "RIGHT") ? Plugin::AlignRight : Plugin::AlignLeft; } if (mPluginWidget) { QGridLayout* layout = new QGridLayout(this); layout->setSpacing(0); layout->setMargin(0); layout->setContentsMargins(0, 0, 0, 0); setLayout(layout); layout->addWidget(mPluginWidget, 0, 0); } saveSettings(); } /************************************************ ************************************************/ Plugin::~Plugin() { delete mPlugin; if (mPluginLoader) { mPluginLoader->unload(); delete mPluginLoader; } } void Plugin::setAlignment(Plugin::Alignment alignment) { mAlignment = alignment; saveSettings(); } /************************************************ ************************************************/ namespace { //helper types for static plugins storage & binary search typedef std::unique_ptr plugin_ptr_t; typedef std::tuple plugin_tuple_t; //NOTE: Please keep the plugins sorted by name while adding new plugins. //NOTE2: we need to reference some (dummy) symbol from (autogenerated) LXQtPluginTranslationLoader.cpp // to be not stripped (as unused/unreferenced) in static linking time static plugin_tuple_t const static_plugins[] = { #if defined(WITH_CLOCK_PLUGIN) std::make_tuple(QLatin1String("clock"), plugin_ptr_t{new LXQtClockPluginLibrary}, loadPluginTranslation_clock_helper),// clock #endif #if defined(WITH_DESKTOPSWITCH_PLUGIN) std::make_tuple(QLatin1String("desktopswitch"), plugin_ptr_t{new DesktopSwitchPluginLibrary}, loadPluginTranslation_desktopswitch_helper),// desktopswitch #endif #if defined(WITH_MAINMENU_PLUGIN) std::make_tuple(QLatin1String("mainmenu"), plugin_ptr_t{new LXQtMainMenuPluginLibrary}, loadPluginTranslation_mainmenu_helper),// mainmenu #endif #if defined(WITH_QUICKLAUNCH_PLUGIN) std::make_tuple(QLatin1String("quicklaunch"), plugin_ptr_t{new LXQtQuickLaunchPluginLibrary}, loadPluginTranslation_quicklaunch_helper),// quicklaunch #endif #if defined(WITH_SHOWDESKTOP_PLUGIN) std::make_tuple(QLatin1String("showdesktop"), plugin_ptr_t{new ShowDesktopLibrary}, loadPluginTranslation_showdesktop_helper),// showdesktop #endif #if defined(WITH_SPACER_PLUGIN) std::make_tuple(QLatin1String("spacer"), plugin_ptr_t{new SpacerPluginLibrary}, loadPluginTranslation_spacer_helper),// spacer #endif #if defined(WITH_STATUSNOTIFIER_PLUGIN) std::make_tuple(QLatin1String("statusnotifier"), plugin_ptr_t{new StatusNotifierLibrary}, loadPluginTranslation_statusnotifier_helper),// statusnotifier #endif #if defined(WITH_TASKBAR_PLUGIN) std::make_tuple(QLatin1String("taskbar"), plugin_ptr_t{new LXQtTaskBarPluginLibrary}, loadPluginTranslation_taskbar_helper),// taskbar #endif #if defined(WITH_TRAY_PLUGIN) std::make_tuple(QLatin1String("tray"), plugin_ptr_t{new LXQtTrayPluginLibrary}, loadPluginTranslation_tray_helper),// tray #endif #if defined(WITH_WORLDCLOCK_PLUGIN) std::make_tuple(QLatin1String("worldclock"), plugin_ptr_t{new LXQtWorldClockLibrary}, loadPluginTranslation_worldclock_helper),// worldclock #endif }; static constexpr plugin_tuple_t const * const plugins_begin = static_plugins; static constexpr plugin_tuple_t const * const plugins_end = static_plugins + sizeof (static_plugins) / sizeof (static_plugins[0]); struct assert_helper { assert_helper() { Q_ASSERT(std::is_sorted(plugins_begin, plugins_end , [] (plugin_tuple_t const & p1, plugin_tuple_t const & p2) -> bool { return std::get<0>(p1) < std::get<0>(p2); })); } }; static assert_helper h; } ILXQtPanelPluginLibrary const * Plugin::findStaticPlugin(const QString &libraryName) { // find a static plugin library by name -> binary search plugin_tuple_t const * plugin = std::lower_bound(plugins_begin, plugins_end, libraryName , [] (plugin_tuple_t const & plugin, QString const & name) -> bool { return std::get<0>(plugin) < name; }); if (plugins_end != plugin && libraryName == std::get<0>(*plugin)) return std::get<1>(*plugin).get(); return nullptr; } // load a plugin from a library bool Plugin::loadLib(ILXQtPanelPluginLibrary const * pluginLib) { ILXQtPanelPluginStartupInfo startupInfo; startupInfo.settings = mSettings; startupInfo.desktopFile = &mDesktopFile; startupInfo.lxqtPanel = mPanel; mPlugin = pluginLib->instance(startupInfo); if (!mPlugin) { qWarning() << QString("Can't load plugin \"%1\". Plugin can't build ILXQtPanelPlugin.").arg(mPluginLoader->fileName()); return false; } mPluginWidget = mPlugin->widget(); if (mPluginWidget) { mPluginWidget->setObjectName(mPlugin->themeId()); } this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); return true; } // load dynamic plugin from a *.so module bool Plugin::loadModule(const QString &libraryName) { mPluginLoader = new QPluginLoader(libraryName); if (!mPluginLoader->load()) { qWarning() << mPluginLoader->errorString(); return false; } QObject *obj = mPluginLoader->instance(); if (!obj) { qWarning() << mPluginLoader->errorString(); return false; } ILXQtPanelPluginLibrary* pluginLib= qobject_cast(obj); if (!pluginLib) { qWarning() << QString("Can't load plugin \"%1\". Plugin is not a ILXQtPanelPluginLibrary.").arg(mPluginLoader->fileName()); delete obj; return false; } return loadLib(pluginLib); } /************************************************ ************************************************/ QByteArray Plugin::calcSettingsHash() { QCryptographicHash hash(QCryptographicHash::Md5); QStringList keys = mSettings->allKeys(); foreach (const QString &key, keys) { hash.addData(key.toUtf8()); hash.addData(mSettings->value(key).toByteArray()); } return hash.result(); } /************************************************ ************************************************/ void Plugin::settingsChanged() { QByteArray hash = calcSettingsHash(); if (mSettingsHash != hash) { mSettingsHash = hash; mPlugin->settingsChanged(); } } /************************************************ ************************************************/ void Plugin::saveSettings() { mSettings->setValue("alignment", (mAlignment == AlignLeft) ? "Left" : "Right"); mSettings->setValue("type", mDesktopFile.id()); mSettings->sync(); } /************************************************ ************************************************/ void Plugin::contextMenuEvent(QContextMenuEvent *event) { mPanel->showPopupMenu(this); } /************************************************ ************************************************/ void Plugin::mousePressEvent(QMouseEvent *event) { switch (event->button()) { case Qt::LeftButton: mPlugin->activated(ILXQtPanelPlugin::Trigger); break; case Qt::MidButton: mPlugin->activated(ILXQtPanelPlugin::MiddleClick); break; default: break; } } /************************************************ ************************************************/ void Plugin::mouseDoubleClickEvent(QMouseEvent*) { mPlugin->activated(ILXQtPanelPlugin::DoubleClick); } /************************************************ ************************************************/ void Plugin::showEvent(QShowEvent *) { if (mPluginWidget) mPluginWidget->adjustSize(); } /************************************************ ************************************************/ QMenu *Plugin::popupMenu() const { QString name = this->name().replace("&", "&&"); QMenu* menu = new QMenu(windowTitle()); if (mPlugin->flags().testFlag(ILXQtPanelPlugin::HaveConfigDialog)) { QAction* configAction = new QAction( XdgIcon::fromTheme(QLatin1String("preferences-other")), tr("Configure \"%1\"").arg(name), menu); menu->addAction(configAction); connect(configAction, SIGNAL(triggered()), this, SLOT(showConfigureDialog())); } QAction* moveAction = new QAction(XdgIcon::fromTheme("transform-move"), tr("Move \"%1\"").arg(name), menu); menu->addAction(moveAction); connect(moveAction, SIGNAL(triggered()), this, SIGNAL(startMove())); menu->addSeparator(); QAction* removeAction = new QAction( XdgIcon::fromTheme(QLatin1String("list-remove")), tr("Remove \"%1\"").arg(name), menu); menu->addAction(removeAction); connect(removeAction, SIGNAL(triggered()), this, SLOT(requestRemove())); return menu; } /************************************************ ************************************************/ bool Plugin::isSeparate() const { return mPlugin->isSeparate(); } /************************************************ ************************************************/ bool Plugin::isExpandable() const { return mPlugin->isExpandable(); } /************************************************ ************************************************/ void Plugin::realign() { if (mPlugin) mPlugin->realign(); } /************************************************ ************************************************/ void Plugin::showConfigureDialog() { // store a pointer to each plugin using the plugins' names static QHash > refs; QDialog *dialog = refs[name()].data(); if (!dialog) { dialog = mPlugin->configureDialog(); refs[name()] = dialog; connect(this, SIGNAL(destroyed()), dialog, SLOT(close())); } if (!dialog) return; dialog->show(); dialog->raise(); dialog->activateWindow(); } /************************************************ ************************************************/ void Plugin::requestRemove() { emit remove(); deleteLater(); } lxqt-panel-0.10.0/panel/plugin.h000066400000000000000000000064741261500472700164420ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef PLUGIN_H #define PLUGIN_H #include #include #include #include "ilxqtpanel.h" #include "lxqtpanelglobals.h" class QPluginLoader; class QSettings; class ILXQtPanelPlugin; class ILXQtPanelPluginLibrary; class LXQtPanel; class QMenu; class LXQT_PANEL_API Plugin : public QFrame { Q_OBJECT Q_PROPERTY(QColor moveMarkerColor READ moveMarkerColor WRITE setMoveMarkerColor) public: enum Alignment { AlignLeft, AlignRight }; explicit Plugin(const LXQt::PluginInfo &desktopFile, const QString &settingsFile, const QString &settingsGroup, LXQtPanel *panel); ~Plugin(); bool isLoaded() const { return mPlugin != 0; } Alignment alignment() const { return mAlignment; } void setAlignment(Alignment alignment); QString settingsGroup() const { return mSettingsGroup; } void saveSettings(); QMenu* popupMenu() const; const ILXQtPanelPlugin * iPlugin() const { return mPlugin; } const LXQt::PluginInfo desktopFile() const { return mDesktopFile; } bool isSeparate() const; bool isExpandable() const; QWidget *widget() { return mPluginWidget; } QString name() const { return mName; } // For QSS properties .................. static QColor moveMarkerColor() { return mMoveMarkerColor; } static void setMoveMarkerColor(QColor color) { mMoveMarkerColor = color; } public slots: void realign(); void showConfigureDialog(); void requestRemove(); signals: void startMove(); void remove(); protected: void contextMenuEvent(QContextMenuEvent *event); void mousePressEvent(QMouseEvent *event); void mouseDoubleClickEvent(QMouseEvent *event); void showEvent(QShowEvent *event); private: bool loadLib(ILXQtPanelPluginLibrary const * pluginLib); bool loadModule(const QString &libraryName); ILXQtPanelPluginLibrary const * findStaticPlugin(const QString &libraryName); const LXQt::PluginInfo mDesktopFile; QByteArray calcSettingsHash(); QPluginLoader *mPluginLoader; ILXQtPanelPlugin *mPlugin; QWidget *mPluginWidget; Alignment mAlignment; QSettings *mSettings; QString mSettingsGroup; LXQtPanel *mPanel; QByteArray mSettingsHash; static QColor mMoveMarkerColor; QString mName; private slots: void settingsChanged(); }; #endif // PLUGIN_H lxqt-panel-0.10.0/panel/pluginmoveprocessor.cpp000066400000000000000000000206631261500472700216200ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "pluginmoveprocessor.h" #include "plugin.h" #include "lxqtpanellayout.h" #include /************************************************ ************************************************/ PluginMoveProcessor::PluginMoveProcessor(LXQtPanelLayout *layout, Plugin *plugin): QWidget(plugin), mLayout(layout), mPlugin(plugin) { mDestIndex = mLayout->indexOf(plugin); grabKeyboard(); } /************************************************ ************************************************/ PluginMoveProcessor::~PluginMoveProcessor() { } /************************************************ ************************************************/ void PluginMoveProcessor::start() { // We have not memoryleaks there. // The animation will be automatically deleted when stopped. CursorAnimation *cursorAnimation = new CursorAnimation(); connect(cursorAnimation, SIGNAL(finished()), this, SLOT(doStart())); cursorAnimation->setEasingCurve(QEasingCurve::InOutQuad); cursorAnimation->setDuration(150); cursorAnimation->setStartValue(QCursor::pos()); cursorAnimation->setEndValue(mPlugin->mapToGlobal(mPlugin->rect().center())); cursorAnimation->start(QAbstractAnimation::DeleteWhenStopped); } /************************************************ ************************************************/ void PluginMoveProcessor::doStart() { setMouseTracking(true); show(); // Only visible widgets can grab mouse input. grabMouse(mLayout->isHorizontal() ? Qt::SizeHorCursor : Qt::SizeVerCursor); } /************************************************ ************************************************/ void PluginMoveProcessor::mouseMoveEvent(QMouseEvent *event) { QPoint mouse = mLayout->parentWidget()->mapFromGlobal(event->globalPos()); MousePosInfo pos = itemByMousePos(mouse); QLayoutItem *prevItem = 0; QLayoutItem *nextItem = 0; if (pos.after) { mDestIndex = pos.index + 1; prevItem = pos.item; nextItem = mLayout->itemAt(pos.index + 1); } else { prevItem = mLayout->itemAt(pos.index - 1); nextItem = pos.item; mDestIndex = pos.index; } bool plugSep = mPlugin->isSeparate(); bool prevSep = LXQtPanelLayout::itemIsSeparate(prevItem); bool nextSep = LXQtPanelLayout::itemIsSeparate(nextItem); if (!nextItem) { if (mLayout->isHorizontal()) drawMark(prevItem, prevSep ? RightMark : BottomMark); else drawMark(prevItem, prevSep ? BottomMark : RightMark); return; } if (mLayout->lineCount() == 1) { if (mLayout->isHorizontal()) drawMark(nextItem, LeftMark); else drawMark(nextItem, TopMark); return; } if (!prevItem) { if (mLayout->isHorizontal()) drawMark(nextItem, nextSep ? LeftMark : TopMark); else drawMark(nextItem, nextSep ? TopMark : LeftMark); return; } // We prefer to draw line at the top/left of next item. // But if next item and moved plugin have different types (separate an not) and // previous item hase same type as moved plugin we draw line at the end of previous one. if (plugSep != nextSep && plugSep == prevSep) { if (mLayout->isHorizontal()) drawMark(prevItem, prevSep ? RightMark : BottomMark); else drawMark(prevItem, prevSep ? BottomMark : RightMark); } else { if (mLayout->isHorizontal()) drawMark(nextItem, nextSep ? LeftMark : TopMark); else drawMark(nextItem, nextSep ? TopMark : LeftMark); } } /************************************************ ************************************************/ PluginMoveProcessor::MousePosInfo PluginMoveProcessor::itemByMousePos(const QPoint mouse) const { MousePosInfo ret; for (int i = mLayout->count()-1; i > -1; --i) { QLayoutItem *item = mLayout->itemAt(i); QRect itemRect = item->geometry(); if (mouse.x() > itemRect.left() && mouse.y() > itemRect.top()) { ret.index = i; ret.item = item; if (mLayout->isHorizontal()) { ret.after = LXQtPanelLayout::itemIsSeparate(item) ? mouse.x() > itemRect.center().x() : mouse.y() > itemRect.center().y() ; } else { ret.after = LXQtPanelLayout::itemIsSeparate(item) ? mouse.y() > itemRect.center().y() : mouse.x() > itemRect.center().x() ; } return ret; } } ret.index = 0; ret.item = mLayout->itemAt(0); ret.after = false; return ret; } /************************************************ ************************************************/ void PluginMoveProcessor::drawMark(QLayoutItem *item, MarkType markType) { QWidget *widget = (item) ? item->widget() : 0; static QWidget *prevWidget = 0; if (prevWidget && prevWidget != widget) prevWidget->setStyleSheet(""); prevWidget = widget; if (!widget) return; QString border1; QString border2; switch(markType) { case TopMark: border1 = "top"; border2 = "bottom"; break; case BottomMark: border1 = "bottom"; border2 = "top"; break; case LeftMark: border1 = "left"; border2 = "right"; break; case RightMark: border1 = "right"; border2 = "left"; break; } widget->setStyleSheet(QString("#%1 {" "border-%2: 2px solid rgba(%4, %5, %6, %7); " "border-%3: -2px solid; " "background-color: transparent; }") .arg(widget->objectName()) .arg(border1) .arg(border2) .arg(Plugin::moveMarkerColor().red()) .arg(Plugin::moveMarkerColor().green()) .arg(Plugin::moveMarkerColor().blue()) .arg(Plugin::moveMarkerColor().alpha()) ); } /************************************************ ************************************************/ void PluginMoveProcessor::mousePressEvent(QMouseEvent *event) { event->accept(); } /************************************************ ************************************************/ void PluginMoveProcessor::mouseReleaseEvent(QMouseEvent *event) { event->accept(); releaseMouse(); setMouseTracking(false); doFinish(false); } /************************************************ ************************************************/ void PluginMoveProcessor::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Escape) { doFinish(true); return; } QWidget::keyPressEvent(event); } /************************************************ ************************************************/ void PluginMoveProcessor::doFinish(bool cancel) { releaseKeyboard(); drawMark(0, TopMark); if (!cancel) { int currentIdx = mLayout->indexOf(mPlugin); if (currentIdx == mDestIndex) return; if (mDestIndex > currentIdx) mDestIndex--; mLayout->moveItem(currentIdx, mDestIndex, true); } emit finished(); deleteLater(); } lxqt-panel-0.10.0/panel/pluginmoveprocessor.h000066400000000000000000000045551261500472700212670ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef PLUGINMOVEPROCESSOR_H #define PLUGINMOVEPROCESSOR_H #include #include #include #include "plugin.h" #include "lxqtpanelglobals.h" class LXQtPanelLayout; class QLayoutItem; class LXQT_PANEL_API PluginMoveProcessor : public QWidget { Q_OBJECT public: explicit PluginMoveProcessor(LXQtPanelLayout *layout, Plugin *plugin); ~PluginMoveProcessor(); Plugin *plugin() const { return mPlugin; } signals: void finished(); public slots: void start(); protected: void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void keyPressEvent(QKeyEvent *event); private slots: void doStart(); void doFinish(bool cancel); private: enum MarkType { TopMark, BottomMark, LeftMark, RightMark }; struct MousePosInfo { int index; QLayoutItem *item; bool after; }; LXQtPanelLayout *mLayout; Plugin *mPlugin; int mDestIndex; MousePosInfo itemByMousePos(const QPoint mouse) const; void drawMark(QLayoutItem *item, MarkType markType); }; class LXQT_PANEL_API CursorAnimation: public QVariantAnimation { Q_OBJECT public: void updateCurrentValue(const QVariant &value) { QCursor::setPos(value.toPoint()); } }; #endif // PLUGINMOVEPROCESSOR_H lxqt-panel-0.10.0/panel/popupmenu.cpp000066400000000000000000000067531261500472700175270ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2012 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "popupmenu.h" #include #include #include #include static const char POPUPMENU_TITLE[] = "POPUP_MENU_TITLE_OBJECT_NAME"; /************************************************ ************************************************/ QAction* PopupMenu::addTitle(const QIcon &icon, const QString &text) { QAction *buttonAction = new QAction(this); QFont font = buttonAction->font(); font.setBold(true); buttonAction->setText(QString(text).replace("&", "&&")); buttonAction->setFont(font); buttonAction->setIcon(icon); QWidgetAction *action = new QWidgetAction(this); action->setObjectName(POPUPMENU_TITLE); QToolButton *titleButton = new QToolButton(this); titleButton->installEventFilter(this); // prevent clicks on the title of the menu titleButton->setDefaultAction(buttonAction); titleButton->setDown(true); // prevent hover style changes in some styles titleButton->setCheckable(true); titleButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); action->setDefaultWidget(titleButton); addAction(action); return action; } /************************************************ ************************************************/ QAction* PopupMenu::addTitle(const QString &text) { return addTitle(QIcon(), text); } /************************************************ ************************************************/ bool PopupMenu::eventFilter(QObject *object, QEvent *event) { Q_UNUSED(object); if (event->type() == QEvent::Paint || event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease ) { return false; } event->accept(); return true; } /************************************************ ************************************************/ void PopupMenu::keyPressEvent(QKeyEvent* e) { if (e->key() == Qt::Key_Up || e->key() == Qt::Key_Down) { QMenu::keyPressEvent(e); QWidgetAction *action = qobject_cast(this->activeAction()); QWidgetAction *firstAction = action; while (action && action->objectName() == POPUPMENU_TITLE) { this->keyPressEvent(e); action = qobject_cast(this->activeAction()); if (firstAction == action) // we looped and only found titles { this->setActiveAction(0); break; } } return; } QMenu::keyPressEvent(e); } lxqt-panel-0.10.0/panel/popupmenu.h000066400000000000000000000030301261500472700171550ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2012 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef POPUPMENU_H #define POPUPMENU_H #include #include "lxqtpanelglobals.h" class LXQT_PANEL_API PopupMenu: public QMenu { public: explicit PopupMenu(QWidget *parent = 0): QMenu(parent) {} explicit PopupMenu(const QString &title, QWidget *parent = 0): QMenu(title, parent) {} QAction* addTitle(const QIcon &icon, const QString &text); QAction* addTitle(const QString &text); bool eventFilter(QObject *object, QEvent *event); protected: virtual void keyPressEvent(QKeyEvent* e); }; #endif // POPUPMENU_H lxqt-panel-0.10.0/panel/resources/000077500000000000000000000000001261500472700167725ustar00rootroot00000000000000lxqt-panel-0.10.0/panel/resources/panel.conf000066400000000000000000000011451261500472700207410ustar00rootroot00000000000000panels=panel1 [panel1] plugins=mainmenu,desktopswitch,quicklaunch,taskbar,tray,statusnotifier,mount,volume,clock,showdesktop position=Bottom desktop=0 [mainmenu] type=mainmenu [desktopswitch] type=desktopswitch [quicklaunch] type=quicklaunch apps/size=5 apps/1/desktop=firefox.desktop apps/2/desktop=chromium-browser.desktop apps/3/desktop=pcmanfm-qt.desktop apps/5/desktop=lxqt-config.desktop [taskbar] type=taskbar [tray] type=tray [mount] type=mount [clock] type=clock [volume] device=0 type=volume [showdesktop] alignment=Right type=showdesktop [statusnotifier] alignment=Right type=statusnotifier lxqt-panel-0.10.0/panel/translations/000077500000000000000000000000001261500472700175015ustar00rootroot00000000000000lxqt-panel-0.10.0/panel/translations/lxqt-panel.ts000066400000000000000000000323051261500472700221410ustar00rootroot00000000000000 AddPluginDialog Add Plugins Search: Add Widget Close (only one instance can run at a time) ConfigPanelDialog Configure Panel Panel Widgets ConfigPanelWidget Configure panel Size <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> Size: Length: % px px Icon size: Rows count: Alignment && position Position: Alignment: Left Center Right Auto-hide Custom styling Font color: Background color: Background opacity: <small>Compositing is required for panel transparency.</small> Background image: Top of desktop Left of desktop Right of desktop Bottom of desktop Top of desktop %1 Left of desktop %1 Right of desktop %1 Bottom of desktop %1 Top Bottom Pick color Pick image Images (*.png *.gif *.jpg) ConfigPluginsWidget Configure Plugins Note: changes made in this page cannot be reset. Move up ... Move down Add Remove Configure LXQtPanel Panel Configure Panel Manage Widgets Add Panel Remove Panel Plugin Configure "%1" Move "%1" Remove "%1" main Use alternate configuration file. Configuration file lxqt-panel-0.10.0/panel/translations/lxqt-panel_ar.ts000066400000000000000000000330211261500472700226170ustar00rootroot00000000000000 ConfigPanelDialog Configure panel تهيئة اللوحة Panel size حجم اللوحة Size: الحجم: px نقطة ضوئيَّة Use automatic sizing استخدم التَّحجيم اﻵلي Panel length && position طول وموقع اللوحة Left اليسار Center الوسظ Right اليمين % % Alignment: المحاذاة: Length: الطُّول: Position: الموقع: Top of desktop أعلى سطح المكتب Left of desktop يسار سطح المكتب Right of desktop يمين سطح المكتب Bottom of desktop أسفل سطح المكتب Top of desktop %1 أعلى سطح المكتب %1 Left of desktop %1 يسار سطح المكتب %1 Right of desktop %1 يمين سطح المكتب %1 Bottom of desktop %1 أسفل سطح المكتب %1 Configure Panel ConfigPanelWidget Configure panel تهيئة اللوحة Size Size: الحجم: px Icon size: Length: الطُّول: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px نقطة ضوئيَّة Rows count: Alignment && position Left اليسار Center الوسظ Right اليمين Alignment: المحاذاة: Position: الموقع: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop أعلى سطح المكتب Left of desktop يسار سطح المكتب Right of desktop يمين سطح المكتب Bottom of desktop أسفل سطح المكتب Top of desktop %1 أعلى سطح المكتب %1 Left of desktop %1 يسار سطح المكتب %1 Right of desktop %1 يمين سطح المكتب %1 Bottom of desktop %1 أسفل سطح المكتب %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel قائمة التطبيقات Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... تهيئة اللوحة... Add plugins ... ضمُّ إضافات... LXQtPanelPlugin Configure تهيئة Move تحريك Remove إزالة LXQtPanelPrivate Configure panel تهيئة اللوحة Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_cs.ts000066400000000000000000000326471261500472700226370ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Nastavit panel Panel size Velikost panelu Size: Velikost: px px Use automatic sizing Použít automatickou velikost Panel length && position Délka &a poloha panelu Left Zarovnat vlevo Center Zarovnat na střed Right Zarovnat vpravo % % Alignment: Zarovnání: Length: Délka: Position: Poloha: Top of desktop Horní strana pracovní plochy Left of desktop Levá strana pracovní plochy Right of desktop Pravá strana pracovní plochy Bottom of desktop Dolní strana pracovní plochy Top of desktop %1 Horní strana pracovní plochy %1 Left of desktop %1 Levá strana pracovní plochy %1 Right of desktop %1 Pravá strana pracovní plochy %1 Bottom of desktop %1 Dolní strana pracovní plochy %1 Configure Panel ConfigPanelWidget Configure panel Nastavit panel Size Size: Velikost: px Icon size: Length: Délka: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left Zarovnat vlevo Center Zarovnat na střed Right Zarovnat vpravo Alignment: Zarovnání: Position: Poloha: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Horní strana pracovní plochy Left of desktop Levá strana pracovní plochy Right of desktop Pravá strana pracovní plochy Bottom of desktop Dolní strana pracovní plochy Top of desktop %1 Horní strana pracovní plochy %1 Left of desktop %1 Levá strana pracovní plochy %1 Right of desktop %1 Pravá strana pracovní plochy %1 Bottom of desktop %1 Dolní strana pracovní plochy %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Panel Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... Nastavit panel... Add plugins ... Přidat přídavné moduly... LXQtPanelPlugin Configure Nastavit Move Přesunout Remove Odstranit LXQtPanelPrivate Configure panel Nastavit panel Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_cs_CZ.ts000066400000000000000000000326521261500472700232270ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Nastavit panel Panel size Velikost panelu Size: Velikost: px px Use automatic sizing Použít automatickou velikost Panel length && position Délka &a poloha panelu Left Zarovnat vlevo Center Zarovnat na střed Right Zarovnat vpravo % % Alignment: Zarovnání: Length: Délka: Position: Poloha: Top of desktop Horní strana pracovní plochy Left of desktop Levá strana pracovní plochy Right of desktop Pravá strana pracovní plochy Bottom of desktop Dolní strana pracovní plochy Top of desktop %1 Horní strana pracovní plochy %1 Left of desktop %1 Levá strana pracovní plochy %1 Right of desktop %1 Pravá strana pracovní plochy %1 Bottom of desktop %1 Dolní strana pracovní plochy %1 Configure Panel ConfigPanelWidget Configure panel Nastavit panel Size Size: Velikost: px Icon size: Length: Délka: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left Zarovnat vlevo Center Zarovnat na střed Right Zarovnat vpravo Alignment: Zarovnání: Position: Poloha: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Horní strana pracovní plochy Left of desktop Levá strana pracovní plochy Right of desktop Pravá strana pracovní plochy Bottom of desktop Dolní strana pracovní plochy Top of desktop %1 Horní strana pracovní plochy %1 Left of desktop %1 Levá strana pracovní plochy %1 Right of desktop %1 Pravá strana pracovní plochy %1 Bottom of desktop %1 Dolní strana pracovní plochy %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Panel Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... Nastavit panel... Add plugins ... Přidat přídavné moduly... LXQtPanelPlugin Configure Nastavit Move Přesunout Remove Odstranit LXQtPanelPrivate Configure panel Nastavit panel Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_da.ts000066400000000000000000000335411261500472700226100ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Indstil panel Panel size Panelstørrelse Size: Størrelse: px pkt Use theme size Brug tema-størrelse Panel lenght & position Panel længde & position Length: Længde: Alignment: Placering: Left Venstre Center Midtpå Right Højre % % Configure Panel ConfigPanelWidget Configure panel Indstil panel Size Size: Størrelse: px Icon size: Length: Længde: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px pkt Rows count: Alignment && position Left Venstre Center Midtpå Right Højre Alignment: Placering: Position: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Toppen af skrivebordet Left of desktop Venstre side af skrivebordet Right of desktop Højre side af skrivebordet Bottom of desktop Bunden af skrivebordet Top of desktop %1 Toppen af skrivebord %1 Left of desktop %1 Venstre side af skrivebord %1 Right of desktop %1 Højre side af skrivebord %1 Bottom of desktop %1 Bunden af skrivebord %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Panel Configure Panel... Add Panel Widgets... Add Panel Remove Panel LXQtPanelPluginPrivate Configure Indstil Move Flyt Delete Slet LXQtPanelPrivate Panel Panel Plugins Udvidelsesmoduler Add plugins ... Tilføj udvidelsesmoduler ... Move plugin Flyt udvidelsesmodul Configure plugin Indstil udvidelsesmodul Delete plugin Fjern udvidelsesmodul Show this panel at Vis dette panel ved Configure panel Indstil panel Plugin Configure "%1" Move "%1" Remove "%1" PositionAction Top of desktop Toppen af skrivebordet Bottom of desktop Bunden af skrivebordet Left of desktop Venstre side af skrivebordet Right of desktop Højre side af skrivebordet Top of desktop %1 Toppen af skrivebord %1 Bottom of desktop %1 Bunden af skrivebord %1 Left of desktop %1 Venstre side af skrivebord %1 Right of desktop %1 Højre side af skrivebord %1 lxqt-panel-0.10.0/panel/translations/lxqt-panel_da_DK.ts000066400000000000000000000324601261500472700231650ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Panelindstillinger Panel size Panelstørrelse Size: Størrelse: px px Use automatic sizing Brug automatisk dimensionering Panel length && position Panel længde && position Left Venstrestillet Center Midterstillet Right Højrestillet % % Alignment: Tilpasning: Length: Længde: Position: Position: Top of desktop Toppen af skrivebordet Left of desktop Venstre side af skrivebordet Right of desktop Højre side af skrivebordet Bottom of desktop Bunden af skrivebordet Top of desktop %1 Toppen af skrivebord %1 Left of desktop %1 Venstre side af skrivebord %1 Right of desktop %1 Højre side af skrivebord %1 Bottom of desktop %1 Bunden af skrivebord %1 Configure Panel ConfigPanelWidget Configure panel Size Size: Størrelse: px Icon size: Length: Længde: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left Venstrestillet Center Midterstillet Right Højrestillet Alignment: Tilpasning: Position: Position: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Toppen af skrivebordet Left of desktop Venstre side af skrivebordet Right of desktop Højre side af skrivebordet Bottom of desktop Bunden af skrivebordet Top of desktop %1 Toppen af skrivebord %1 Left of desktop %1 Venstre side af skrivebord %1 Right of desktop %1 Højre side af skrivebord %1 Bottom of desktop %1 Bunden af skrivebord %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Hej Verden Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... Indstil panelet... Add plugins ... Tilføj plugins ... LXQtPanelPlugin Configure Indstil Move Flyt Remove Fjern LXQtPanelPrivate Configure panel Indstil panel Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_de.ts000066400000000000000000000327761261500472700226250ustar00rootroot00000000000000 AddPluginDialog Add Plugins Plugins hinzufügen Search: Suchen: Add Widget Widget hinzufügen Close Schließen (only one instance can run at a time) (es kann nur eine Instanz gleichzeitig ausgeführt werden) ConfigPanelDialog Configure Panel Leiste konfigurieren Panel Leiste Widgets Widgets ConfigPanelWidget Configure panel Leiste konfigurieren Size Größe <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> <p>Negative Pixelwerte setzen die Leistenlänge auf den Wert verfügbare Größe minus angegebener Größe.</p><p/><p><i>Z.B. bei "Länge" gesetzt auf -100px und einer Bildschirmgröße von 1000px hat die Leiste eine Größe von 900 px.</i></p> Size: Größe: Length: Länge: % % px px px px Icon size: Symbolgröße: Rows count: Zeilenzahl: Alignment && position Ausrichtung und Position Position: Position: Alignment: Ausrichtung: Left Links Center Mitte Right Rechts Auto-hide Automatisch ausblenden Custom styling Eigener Stil Font color: Schriftfarbe: Background color: Hintergrundfarbe: Background opacity: Deckkraft: <small>Compositing is required for panel transparency.</small> <small>Für Transparenzeffekt wird Compositing benötigt.</small> Background image: Hintergrundbild: Top of desktop Oben auf der Arbeitsfläche Left of desktop Links auf der Arbeitsfläche Right of desktop Rechts auf der Arbeitsfläche Bottom of desktop Unten auf der Arbeitsfläche Top of desktop %1 Oben auf Arbeitsfläche %1 Left of desktop %1 Links auf Arbeitsfläche %1 Right of desktop %1 Rechts auf Arbeitsfläche %1 Bottom of desktop %1 Unten auf Arbeitsfläche %1 Top Oben Bottom Unten Pick color Farbe auswählen Pick image Bild auswählen Images (*.png *.gif *.jpg) Bilder (*.png *.gif *.jpg) ConfigPluginsWidget Configure Plugins Plugins konfigurieren Note: changes made in this page cannot be reset. Hinweis: Hier gemachte Änderungen können nicht rückgängig gemacht werden. Move up Nach oben schieben ... ... Move down Nach unten schieben Add Hinzufügen Remove Entfernen Configure Konfigurieren LXQtPanel Panel Leiste Configure Panel Leiste konfigurieren Manage Widgets Widgets verwalten Add Panel Leiste hinzufügen Remove Panel Leiste entfernen Plugin Configure "%1" "%1" konfigurieren Move "%1" "%1" verschieben Remove "%1" "%1" entfernen main Use alternate configuration file. Alternative Konfigurationsdatei verwenden. Configuration file Konfigurationsdatei lxqt-panel-0.10.0/panel/translations/lxqt-panel_el.ts000066400000000000000000000351021261500472700226170ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Διαμόρφωση πίνακα Panel size Μέγεθος πίνακα Size: Μέγεθος: px px Use automatic sizing Χρήση αυτόματου μεγέθους Panel length && position Μήκος && θέση πίνακα Left Αριστερά Center Κέντρο Right Δεξιά % % Alignment: Στοίχιση: Length: Μήκος: Position: Θέση: Top of desktop Επάνω στην επιφάνεια εργασίας Left of desktop Αριστερά στην επιφάνεια εργασίας Right of desktop Δεξιά στην επιφάνεια εργασίας Bottom of desktop Κάτω στην επιφάνεια εργασίας Top of desktop %1 Επάνω στην επιφάνεια εργασίας %1 Left of desktop %1 Αριστερά στην επιφάνεια εργασίας %1 Right of desktop %1 Δεξιά στην επιφάνεια εργασίας %1 Bottom of desktop %1 Κάτω στην επιφάνεια εργασίας %1 Configure Panel Διαμόρφωση του πίνακα ConfigPanelWidget Configure panel Διαμόρφωση του πίνακα Size Μέγεθος Size: Μέγεθος: px εικ Icon size: Μέγεθος εικονιδίων: Length: Μήκος: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> <p>Μια αρνητική τιμή εικονοστοιχείων θέτει το μήκος του πίνακα σε τόσα εικονοστοιχεία λιγότερο από τον διαθέσιμο χώρο της οθόνης.</p><p/><p><i>Π.χ. θέτοντας το «Μήκος» σε -100εικ, και με μέγεθος οθόνης 1000εικ, τότε το πραγματικό μήκος του πίνακα θα είναι 900 εικ.</i></p> % % px εικ Rows count: Πλήθος γραμμών: Alignment && position Στοίχιση && θέση Left Αριστερά Center Κέντρο Right Δεξιά Alignment: Στοίχιση: Position: Θέση: Auto-hide Αυτόματη απόκρυψη Styling Ύφος Custom font color: Προσαρμοσμένο χρώμα γραμματοσειράς: Custom background image: Προσαρμοσμένη εικόνα ταπετσαρίας: Custom background color: Προσαρμοσμένο χρώμα ταπετσαρίας: Opacity Αδιαφάνεια Top of desktop Στην κορυφή της επιφάνεια εργασίας Left of desktop Στα αριστερά της επιφάνειας εργασίας Right of desktop Στα δεξιά της επιφάνειας εργασίας Bottom of desktop Στη βάση της επιφάνειας εργασίας Top of desktop %1 Στην κορυφή της επιφάνειας εργασίας %1 Left of desktop %1 Στα αριστερά της επιφάνειας εργασίας %1 Right of desktop %1 Στα δεξιά της επιφάνειας εργασίας %1 Bottom of desktop %1 Στη βάση της επιφάνειας εργασίας %1 Top Κορυφή Bottom Βάση Pick color Επιλέξτε το χρώμα Images (*.png *.gif *.jpg) Εικόνες (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Προσθήκη γραφικών συστατικών στον πίνακα Panel Πίνακας Configure Panel... Διαμόρφωση του πίνακα... Add Panel Widgets... Προσθήκη γραφικών συστατικών στον πίνακα... Add Panel Προσθήκη πίνακα Remove Panel Αφαίρεση πίνακα Configure panel... Διαμόρφωση του πίνακα... Add plugins ... Προσθήκη πρόσθετων... LXQtPanelPlugin Configure Διαμόρφωση Move Μετακίνηση Remove Αφαίρεση LXQtPanelPrivate Configure panel Διαμόρφωση του πίνακα Plugin Configure "%1" Διαμόρφωση του «%1» Move "%1" Μετακίνηση του «%1» Remove "%1" Αφαίρεση του «%1» lxqt-panel-0.10.0/panel/translations/lxqt-panel_eo.ts000066400000000000000000000323351261500472700226270ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Agordi panelon Panel size Grando de panelo Size: Grando: px rastr Use automatic sizing Uzi aŭtomatan grandigon Panel length && position Longo kaj loko de panelo Left Maldekstre Center Centre Right Dekstre % % Alignment: Loko: Length: Longo: Position: Loko: Top of desktop Supre de labortablo Left of desktop Maldekstre de labortablo Right of desktop Dekstre de labortablo Bottom of desktop Malsupre de labortablo Top of desktop %1 Supre de labortablo %1 Left of desktop %1 Maldekstre de labortablo %1 Right of desktop %1 Dekstre de labortablo %1 Bottom of desktop %1 Malsupre de labortablo %1 Configure Panel ConfigPanelWidget Configure panel Agordi panelon Size Size: Grando: px Icon size: Length: Longo: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px rastr Rows count: Alignment && position Left Maldekstre Center Centre Right Dekstre Alignment: Loko: Position: Loko: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Supre de labortablo Left of desktop Maldekstre de labortablo Right of desktop Dekstre de labortablo Bottom of desktop Malsupre de labortablo Top of desktop %1 Supre de labortablo %1 Left of desktop %1 Maldekstre de labortablo %1 Right of desktop %1 Dekstre de labortablo %1 Bottom of desktop %1 Malsupre de labortablo %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Agordoj de muso por LXQto Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... Agordi panelon... Add plugins ... Aldoni kromprogramojn... LXQtPanelPlugin Configure Agordi Move Movi Remove Forigi LXQtPanelPrivate Configure panel Agordi panelon Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_es.ts000066400000000000000000000326021261500472700226300ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Configurar panel Panel size Tamaño del panel Size: Tamaño: px px Use automatic sizing Usar tamaño automático Panel length && position Largo y posición del panel Left Izquierda Center Centro Right Derecha % % Alignment: Alineación: Length: Largo: Position: Posición: Top of desktop Extremo superior del escritorio Left of desktop Extremo izquierdo del escritorio Right of desktop Extremo derecho del escritorio Bottom of desktop Extremo inferior del escritorio Top of desktop %1 Extremo superior del escritorio %1 Left of desktop %1 Extremo izquierdo del escritorio %1 Right of desktop %1 Extremo derecho del escritorio %1 Bottom of desktop %1 Extremo inferior del escritorio %1 Configure Panel Configurar Panel ConfigPanelWidget Configure panel Configurar panel Size Tamaño Size: Tamaño: px px Icon size: Tamaño de ícono: Length: Largo: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> <p>Un largo negativo en píxeles configura el largo del panel a esa cantidad de píxeles menos que el espacio disponible en la pantalla.</p><p/><p><i>E.j. "Largo" configurado a -100px, el tamaño de la pantalla es 1000px, entonces el largo real del panel será de 900 px.</i></p> % % px px Rows count: Cantidad de filas: Alignment && position Alineación y posición Left Izquierda Center Centro Right Derecha Alignment: Alineación: Position: Posición: Auto-hide Ocultar automáticamente Styling Estilo Custom font color: Color de fuente personalizado: Custom background image: Imagen de fondo personalizada: Custom background color: Color de fondo personalizado: Opacity Opacidad Top of desktop Extremo superior del escritorio Left of desktop Extremo izquierdo del escritorio Right of desktop Extremo derecho del escritorio Bottom of desktop Extremo inferior del escritorio Top of desktop %1 Extremo superior del escritorio %1 Left of desktop %1 Extremo izquierdo del escritorio %1 Right of desktop %1 Extremo derecho del escritorio %1 Bottom of desktop %1 Extremo inferior del escritorio %1 Top Arriba Bottom Abajo Pick color Seleccione un color Images (*.png *.gif *.jpg) Imágenes (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Agregar Widgets al Panel Panel Panel Configure Panel... Configurar Panel... Add Panel Widgets... Agregar Widgets al Panel... Add Panel Agregar Panel Remove Panel Eliminar Panel Configure panel... Configuración del panel... Add plugins ... Añadir extensiones... LXQtPanelPlugin Configure Configurar Move Mover Remove Quitar LXQtPanelPrivate Configure panel Configurar panel Plugin Configure "%1" Configurar "%1" Move "%1" Mover "%1" Remove "%1" Eliminar "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_es_UY.ts000066400000000000000000000274071261500472700232540ustar00rootroot00000000000000 ConfigPanelDialog Configure Panel ConfigPanelWidget Configure panel Size Size: px Icon size: Length: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % px Rows count: Alignment && position Left Center Right Alignment: Position: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Arriba del escritorio Left of desktop A la izquierda del escritorio Right of desktop A la derecha del escritorio Bottom of desktop Abajo del escritorio Top of desktop %1 Arriba del escritorio %1 Left of desktop %1 A la izquierda del escritorio %1 Right of desktop %1 A la derecha del excritorio %1 Bottom of desktop %1 Abajo del escritorio %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Panel Configure Panel... Add Panel Widgets... Add Panel Remove Panel LXQtPanelPrivate Panel Panel Plugins Complementos Add plugins ... Agregar complemento ... Move plugin Mover complemento Configure plugin Configurar complemento Delete plugin Borrar complemento Show this panel at Mostrar este complemento Plugin Configure "%1" Move "%1" Remove "%1" PositionAction Top of desktop Arriba del escritorio Bottom of desktop Abajo del escritorio Left of desktop A la izquierda del escritorio Right of desktop A la derecha del escritorio Top of desktop %1 Arriba del escritorio %1 Bottom of desktop %1 Abajo del escritorio %1 Left of desktop %1 A la izquierda del escritorio %1 Right of desktop %1 A la derecha del excritorio %1 lxqt-panel-0.10.0/panel/translations/lxqt-panel_es_VE.ts000066400000000000000000000323531261500472700232250ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Configurar panel Panel size Tamaño de panel Size: Tamaño: px px Use automatic sizing Tamaño automatico Panel length && position Tamaño & posicion el panel Left Izquierda Center Centrado Right Derecha % % Alignment: Alineacion: Length: Largo: Position: Posicion: Top of desktop Tope del escritorio Left of desktop Izquierda del escritorio Right of desktop Derecha del escritorio Bottom of desktop Inferior del escritorio Top of desktop %1 Tope del escritorio %1 Left of desktop %1 Izquierda del escritorio %1 Right of desktop %1 Derecha del escritorio %1 Bottom of desktop %1 Inferior del escritorio %1 Configure Panel ConfigPanelWidget Configure panel Configurar panel Size Size: Tamaño: px Icon size: Length: Largo: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left Izquierda Center Centrado Right Derecha Alignment: Alineacion: Position: Posicion: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Tope del escritorio Left of desktop Izquierda del escritorio Right of desktop Derecha del escritorio Bottom of desktop Inferior del escritorio Top of desktop %1 Tope del escritorio %1 Left of desktop %1 Izquierda del escritorio %1 Right of desktop %1 Derecha del escritorio %1 Bottom of desktop %1 Inferior del escritorio %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Panel Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... Configura el panel Add plugins ... Agregar plugins LXQtPanelPlugin Configure Configurar Move Mover Remove Remover LXQtPanelPrivate Configure panel Configurar panel Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_eu.ts000066400000000000000000000324231261500472700226330ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Konfiguratu panela Panel size Panelaren tamaina Size: Tamaina: px px Use automatic sizing Erabili tamaina automatikoa Panel length && position Panelaren luzera eta posizioa Left Ezkerra Center Erdia Right Eskuina % % Alignment: Lerrokatzea: Length: Luzera: Position: Posizioa: Top of desktop Mahaigainaren goialdea Left of desktop Mahaigainaren ezkerraldea Right of desktop Mahaigainaren eskuinaldea Bottom of desktop Mahaigainaren behealdea Top of desktop %1 %1 mahaigainaren goialdea Left of desktop %1 %1 mahaigainaren ezkerraldea Right of desktop %1 %1 mahaigainaren eskuinaldea Bottom of desktop %1 %1 mahaigainaren behealdea Configure Panel ConfigPanelWidget Configure panel Konfiguratu panela Size Size: Tamaina: px Icon size: Length: Luzera: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left Ezkerra Center Erdia Right Eskuina Alignment: Lerrokatzea: Position: Posizioa: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Mahaigainaren goialdea Left of desktop Mahaigainaren ezkerraldea Right of desktop Mahaigainaren eskuinaldea Bottom of desktop Mahaigainaren behealdea Top of desktop %1 %1 mahaigainaren goialdea Left of desktop %1 %1 mahaigainaren ezkerraldea Right of desktop %1 %1 mahaigainaren eskuinaldea Bottom of desktop %1 %1 mahaigainaren behealdea Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Panela Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... Konfiguratu panela... Add plugins ... Gehitu pluginak... LXQtPanelPlugin Configure Konfiguratu Move Mugitu Remove Kendu LXQtPanelPrivate Configure panel Konfiguratu panela Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_fi.ts000066400000000000000000000325301261500472700226170ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Muokkaa paneelia Panel size Paneelin koko Size: Koko: px pikseliä Use automatic sizing Käytä automaattista kokoa Panel length && position Paneelin pituus && sijainti Left Vasemmalla Center Keskellä Right Oikealla % % Alignment: Kohdistus: Length: Leveys: Position: Sijainti: Top of desktop Työpöydän yläosassa Left of desktop Työpöydän vasemmassa laidassa Right of desktop Työpöydän oikeassa laidassa Bottom of desktop Työpöydän alaosassa Top of desktop %1 Työpöydän %1 yläosassa Left of desktop %1 Työpöydän %1 vasemmassa laidassa Right of desktop %1 Työpöydän %1 oikeassa laidassa Bottom of desktop %1 Työpöydän %1 alaosassa Configure Panel ConfigPanelWidget Configure panel Muokkaa paneelia Size Size: Koko: px Icon size: Length: Leveys: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px pikseliä Rows count: Alignment && position Left Vasemmalla Center Keskellä Right Oikealla Alignment: Kohdistus: Position: Sijainti: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Työpöydän yläosassa Left of desktop Työpöydän vasemmassa laidassa Right of desktop Työpöydän oikeassa laidassa Bottom of desktop Työpöydän alaosassa Top of desktop %1 Työpöydän %1 yläosassa Left of desktop %1 Työpöydän %1 vasemmassa laidassa Right of desktop %1 Työpöydän %1 oikeassa laidassa Bottom of desktop %1 Työpöydän %1 alaosassa Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Paneeli Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... Muokkaa paneelia... Add plugins ... Lisää liitännäisiä... LXQtPanelPlugin Configure Muokkaa Move Siirrä Remove Poista LXQtPanelPrivate Configure panel Muokkaa paneelia Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_fr_FR.ts000066400000000000000000000323471261500472700232250ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Configurer le tableau de bord Panel size Taille du tableau de bord Size: Taille : px px Use automatic sizing Utiliser le dimensionnement automatique Panel length && position Longueur et position du tableau de bord Left Gauche Center Centre Right Droite % % Alignment: Alignement : Length: Longueur : Position: Position : Top of desktop Haut du bureau Left of desktop Gauche du bureau Right of desktop Droite du bureau Bottom of desktop Bas du bureau Top of desktop %1 Haut du bureau %1 Left of desktop %1 Gauche du bureau %1 Right of desktop %1 Droite du bureau %1 Bottom of desktop %1 Bas du bureau %1 Configure Panel ConfigPanelWidget Configure panel Configurer le tableau de bord Size Size: Taille : px Icon size: Length: Longueur : <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left Gauche Center Centre Right Droite Alignment: Alignement : Position: Position : Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Haut du bureau Left of desktop Gauche du bureau Right of desktop Droite du bureau Bottom of desktop Bas du bureau Top of desktop %1 Haut du bureau %1 Left of desktop %1 Gauche du bureau %1 Right of desktop %1 Droite du bureau %1 Bottom of desktop %1 Bas du bureau %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Bloc-notes Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... Configurer le tableau de bord... Add plugins ... Ajouter des extensions... LXQtPanelPlugin Configure Configurer Move Déplacer Remove Supprimer LXQtPanelPrivate Configure panel Configurer le tableau de bord Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_hu.ts000066400000000000000000000252021261500472700226330ustar00rootroot00000000000000 ConfigPanelDialog Top of desktop Az asztal tetejére Left of desktop Az asztal bal oldalára Right of desktop Az asztal jobb oldalára Bottom of desktop Az asztal aljára Top of desktop %1 A(z) %1. asztal tetejére Left of desktop %1 A(z) %1. asztal bal oldalára Right of desktop %1 A(z) %1. asztal jobb oldalára Bottom of desktop %1 A(z) %1. asztal aljára Configure Panel Panelbeállítás ConfigPanelWidget Configure panel Panelbeállítás Size Méret Size: Méret: px pixel Icon size: Ikonméret: Length: Hossz: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> <p>Negatív pixel érték azt jelöli, hogy mennyivel rövidebb a panel a képernyőnél.</p><p/><p><i>Például -100px érték esetén az 1000px széles képernyőnél a panel hossza 900px.</i></p % px pixel Rows count: Sorszámláló: Alignment && position Igazítás && helyzet Left Balra Center Középre Right Jobbra Alignment: Igazítás: Position: Pozíció: Auto-hide Automata elrejtés Styling Hangolás Custom font color: Egyéni betűszín: Custom background image: Egyéni háttérkép: Custom background color: Egyéni háttérszín: Opacity Áttetszőség Top of desktop Az asztal tetejére Left of desktop Az asztal bal oldalára Right of desktop Az asztal jobb oldalára Bottom of desktop Az asztal aljára Top of desktop %1 A(z) %1. asztal tetejére Left of desktop %1 A(z) %1. asztal bal oldalára Right of desktop %1 A(z) %1. asztal jobb oldalára Bottom of desktop %1 A(z) %1. asztal aljára Top Fenn Bottom Lenn Pick color Színválasztás Images (*.png *.gif *.jpg) Képek (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panelelem hozzáadás Panel Panel Configure Panel... Panel beállítása… Add Panel Widgets... Panelelem hozzáadás... Add Panel Panel hozzáadás Remove Panel Panel törlése Add plugins ... Bővítmények hozzáadása… Plugin Configure "%1" "%1" beállítása Move "%1" "%1" mozgatása Remove "%1" "%1" törlése lxqt-panel-0.10.0/panel/translations/lxqt-panel_hu_HU.ts000066400000000000000000000252051261500472700232320ustar00rootroot00000000000000 ConfigPanelDialog Top of desktop Az asztal tetejére Left of desktop Az asztal bal oldalára Right of desktop Az asztal jobb oldalára Bottom of desktop Az asztal aljára Top of desktop %1 A(z) %1. asztal tetejére Left of desktop %1 A(z) %1. asztal bal oldalára Right of desktop %1 A(z) %1. asztal jobb oldalára Bottom of desktop %1 A(z) %1. asztal aljára Configure Panel Panelbeállítás ConfigPanelWidget Configure panel Panelbeállítás Size Méret Size: Méret: px pixel Icon size: Ikonméret: Length: Hossz: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> <p>Negatív pixel érték azt jelöli, hogy mennyivel rövidebb a panel a képernyőnél.</p><p/><p><i>Például -100px érték esetén az 1000px széles képernyőnél a panel hossza 900px.</i></p % px pixel Rows count: Sorszámláló: Alignment && position Igazítás && helyzet Left Balra Center Középre Right Jobbra Alignment: Igazítás: Position: Pozíció: Auto-hide Automata elrejtés Styling Hangolás Custom font color: Egyéni betűszín: Custom background image: Egyéni háttérkép: Custom background color: Egyéni háttérszín: Opacity Áttetszőség Top of desktop Az asztal tetejére Left of desktop Az asztal bal oldalára Right of desktop Az asztal jobb oldalára Bottom of desktop Az asztal aljára Top of desktop %1 A(z) %1. asztal tetejére Left of desktop %1 A(z) %1. asztal bal oldalára Right of desktop %1 A(z) %1. asztal jobb oldalára Bottom of desktop %1 A(z) %1. asztal aljára Top Fenn Bottom Lenn Pick color Színválasztás Images (*.png *.gif *.jpg) Képek (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panelelem hozzáadás Panel Panel Configure Panel... Panel beállítása… Add Panel Widgets... Panelelem hozzáadás... Add Panel Panel hozzáadás Remove Panel Panel törlése Add plugins ... Bővítmények hozzáadása… Plugin Configure "%1" "%1" beállítása Move "%1" "%1" mozgatása Remove "%1" "%1" törlése lxqt-panel-0.10.0/panel/translations/lxqt-panel_ia.ts000066400000000000000000000231501261500472700226100ustar00rootroot00000000000000 ConfigPanelDialog Panel size Dimension de pannello Size: Dimension Configure Panel ConfigPanelWidget Configure panel Size Size: Dimension px Icon size: Length: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % px Rows count: Alignment && position Left Center Right Alignment: Position: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Left of desktop Right of desktop Bottom of desktop Top of desktop %1 Left of desktop %1 Right of desktop %1 Bottom of desktop %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Configure Panel... Add Panel Widgets... Add Panel Remove Panel Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_id_ID.ts000066400000000000000000000225271261500472700231760ustar00rootroot00000000000000 ConfigPanelDialog Configure Panel ConfigPanelWidget Configure panel Size Size: px Icon size: Length: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % px Rows count: Alignment && position Left Center Right Alignment: Position: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Left of desktop Right of desktop Bottom of desktop Top of desktop %1 Left of desktop %1 Right of desktop %1 Bottom of desktop %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Hell World Configure Panel... Add Panel Widgets... Add Panel Remove Panel Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_it.ts000066400000000000000000000322271261500472700226400ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Configura il pannello Panel size Dimensione pannello Size: Dimensione: px px Use automatic sizing Usa dimensionamento automatico Panel length && position Lunghezza e posizione del pannello Left Sinistra Center Centro Right Destra % % Alignment: Allineamento: Length: Lunghezza: Position: Posizione: Top of desktop Alto del desktop Left of desktop Sinistra del desktop Right of desktop Destra del desktop Bottom of desktop Basso del desktop Top of desktop %1 Alto del desktop %1 Left of desktop %1 Sinistra del desktop %1 Right of desktop %1 Destra del desktop %1 Bottom of desktop %1 Basso del desktop %1 Configure Panel Configura panello ConfigPanelWidget Configure panel Configura panello Size Dimensione Size: Dimensione: px Icon size: Dimensione icone: Length: Lunghezza: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> <p>Valori negativi impongano una lunghezza del panello di quel numero di pixel meno dello spazio disponibile. </p><p/><p><i>Esempio: -100px e schermo di 1280px = 1180px</i></p> % % px px Rows count: Numero righe: Alignment && position Allineamento e posizione Left Sinistra Center Centro Right Destra Alignment: Allineamento: Position: Posizione: Auto-hide Nascondi automaticamente Styling Aspetto Custom font color: Colore carattere personalizzato: Custom background image: Immagine sfondo: Custom background color: Colore sfondo personalizzato: Opacity Trasparenza Top of desktop Alto del desktop Left of desktop Sinistra del desktop Right of desktop Destra del desktop Bottom of desktop Basso del desktop Top of desktop %1 Alto del desktop %1 Left of desktop %1 Sinistra del desktop %1 Right of desktop %1 Destra del desktop %1 Bottom of desktop %1 Basso del desktop %1 Top In cima Bottom In fondo Pick color Scegli colore Images (*.png *.gif *.jpg) Immagini (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Aggiungi elementi Panel Panello Configure Panel... Configura panello... Add Panel Widgets... Call them "plugins" better? Aggiungi elementi... Add Panel Aggiungi panello Remove Panel Rimuovi panello Configure panel... Configura pannello... Add plugins ... Aggiungi plugin... LXQtPanelPlugin Configure Configura Move Sposta Remove Rimuovi LXQtPanelPrivate Configure panel Configura pannello Plugin Configure "%1" Configura "%1" Move "%1" Sposta "%1" Remove "%1" Rimuovi "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_ja.ts000066400000000000000000000232421261500472700226130ustar00rootroot00000000000000 ConfigPanelDialog Configure Panel パネルを設定 ConfigPanelWidget Configure panel パネルを設定 Size 大きさ Size: 幅: px ピクセル Icon size: アイコンの大きさ: Length: 長さ: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> <p>負のピクセル値を設定すると、スクリーンの最大領域からその値を差し引いた長さになります。</p><p/><p><i>例: スクリーンの大きさが 1000 ピクセルである場合に -100 ピクセルを設定すると、パネルの長さは 900 ピクセルになります。</i></p> % % px ピクセル Rows count: 列の数 Alignment && position 位置寄せと場所 Left 左寄せ Center 中央 Right 右寄せ Alignment: 位置寄せ: Position: 場所: Auto-hide Styling 見た目 Custom font color: フォントの色を変更: Custom background image: 背景画像を指定 Custom background color: 背景の色を変更: Opacity 透明度 Top of desktop デスクトップの上 Left of desktop デスクトップの左 Right of desktop デスクトップの右 Bottom of desktop デスクトップの下 Top of desktop %1 デスクトップ %1 の上 Left of desktop %1 デスクトップ %1 の左 Right of desktop %1 デスクトップ %1 の右 Bottom of desktop %1 デスクトップ %1 の下 Top Bottom Pick color 色を選ぶ Images (*.png *.gif *.jpg) 画像 (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets パネルウィジェットを追加 Panel パネル Configure Panel... パネルの設定 Add Panel Widgets... ウィジェットを追加 Add Panel パネルを追加 Remove Panel パネルを削除 Plugin Configure "%1" "%1" を設定 Move "%1" "%1" を移動 Remove "%1" "%1" を削除 lxqt-panel-0.10.0/panel/translations/lxqt-panel_ko.ts000066400000000000000000000225341261500472700226350ustar00rootroot00000000000000 ConfigPanelDialog Configure Panel ConfigPanelWidget Configure panel Size Size: px Icon size: Length: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % px Rows count: Alignment && position Left Center Right Alignment: Position: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Left of desktop Right of desktop Bottom of desktop Top of desktop %1 Left of desktop %1 Right of desktop %1 Bottom of desktop %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Configure Panel... Add Panel Widgets... Add Panel Remove Panel Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_lt.ts000066400000000000000000000324151261500472700226420ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Skydelio konfigūravimas Panel size Skydelio dydis Size: Dydis: px taškeliai Use automatic sizing Automatinis dydis Panel length && position Skydelio ilgis ir padėtis Left Kairinė Center Centrinė Right Dešininė % % Alignment: Lygiuotė: Length: Ilgis: Position: Padėtis: Top of desktop Darbalaukio viršuje Left of desktop Darbalaukio kairėje Right of desktop Darbalaukio dešinėje Bottom of desktop Darbalaukio apačioje Top of desktop %1 %1 darbalaukio viršuje Left of desktop %1 %1 darbalaukio kairėje Right of desktop %1 %1 darbalaukio dešinėje Bottom of desktop %1 %1 darbalaukio apačioje Configure Panel ConfigPanelWidget Configure panel Skydelio konfigūravimas Size Size: Dydis: px Icon size: Length: Ilgis: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px taškeliai Rows count: Alignment && position Left Kairinė Center Centrinė Right Dešininė Alignment: Lygiuotė: Position: Padėtis: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Darbalaukio viršuje Left of desktop Darbalaukio kairėje Right of desktop Darbalaukio dešinėje Bottom of desktop Darbalaukio apačioje Top of desktop %1 %1 darbalaukio viršuje Left of desktop %1 %1 darbalaukio kairėje Right of desktop %1 %1 darbalaukio dešinėje Bottom of desktop %1 %1 darbalaukio apačioje Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Qlipper Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... Konfigūruoti skydelį... Add plugins ... Įdėti papildinių... LXQtPanelPlugin Configure Konfigūruoti Move Perkelti Remove Pašalinti LXQtPanelPrivate Configure panel Skydelio konfigūravimas Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_nl.ts000066400000000000000000000324611261500472700226350ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Paneel instellen Panel size Paneelgrootte Size: Grootte: px px Use automatic sizing Gebruik automatische afmetingen Panel length && position Lengte && positie van paneel Left Links Center Midden Right Rechts % % Alignment: Uitlijning: Length: Lengte: Position: Positie: Top of desktop Bovenaan bureaublad Left of desktop Linkerzijkant van bureaublad Right of desktop Rechterzijkant van bureaublad Bottom of desktop Onderkant van bureaublad Top of desktop %1 Bovenkant van bureaublad %1 Left of desktop %1 Linkerzijkant van bureaublad %1 Right of desktop %1 Rechterzijkant van bureaublad %1 Bottom of desktop %1 Onderkant van bureaublad %1 Configure Panel ConfigPanelWidget Configure panel Size Size: Grootte: px Icon size: Length: Lengte: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left Links Center Midden Right Rechts Alignment: Uitlijning: Position: Positie: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Bovenaan bureaublad Left of desktop Linkerzijkant van bureaublad Right of desktop Rechterzijkant van bureaublad Bottom of desktop Onderkant van bureaublad Top of desktop %1 Bovenkant van bureaublad %1 Left of desktop %1 Linkerzijkant van bureaublad %1 Right of desktop %1 Rechterzijkant van bureaublad %1 Bottom of desktop %1 Onderkant van bureaublad %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Paneel Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... Paneel instellen... Add plugins ... Invoegtoepassingen toevoegen... LXQtPanelPlugin Configure Instellen Move Verplaatsen Remove Verwijderen LXQtPanelPrivate Configure panel Paneel instellingen Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_pl.ts000066400000000000000000000225161261500472700226370ustar00rootroot00000000000000 ConfigPanelDialog Configure Panel ConfigPanelWidget Configure panel Size Size: px Icon size: Length: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % px Rows count: Alignment && position Left Center Right Alignment: Position: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Left of desktop Right of desktop Bottom of desktop Top of desktop %1 Left of desktop %1 Right of desktop %1 Bottom of desktop %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Menu Configure Panel... Add Panel Widgets... Add Panel Remove Panel Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_pl_PL.ts000066400000000000000000000321241261500472700232260ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Konfiguruj panel Panel size Rozmiar panelu Size: Rozmiar: px px Use automatic sizing Użyj automatycznego dopasowywania Panel length && position Długość i położenie panelu Left Lewa Center Środek Right Prawa % % Alignment: Wyrównanie: Length: Długość: Position: Pozycja: Top of desktop Górna krawędź pulpitu Left of desktop Lewa krawędź pulpitu Right of desktop Prawa krawędź pulpitu Bottom of desktop Dolna krawędź pulpitu Top of desktop %1 Górna krawędź pulpitu %1 Left of desktop %1 Lewa krawędź pulpitu %1 Right of desktop %1 Prawa krawędź pulpitu %1 Bottom of desktop %1 Dolna krawędź pulpitu %1 Configure Panel KOnfiguruj Panel ConfigPanelWidget Configure panel Konfiguruj panel Size Rozmiar Size: Rozmiar: px px Icon size: Rozmiar ikon: Length: Długość: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> <p>Ujemna ilość pikseli powoduje zmniejszenie panelu .</p><p/><p><i>Np. "Długość" ustawiona na -100px, rozmiar ekranu 1000px, długość panelu wyniesie 900 px.</i></p> % % px px Rows count: Ilość wierszy: Alignment && position Wyrównanie i pozycja Left Lewa Center Środek Right Prawa Alignment: Wyrównanie: Position: Pozycja: Auto-hide Styling Wygląd Custom font color: Własny kolor czcionki: Custom background image: Własny obrazek tła: Custom background color: Własny kolor tła: Opacity Przezroczystość Top of desktop Górna krawędź pulpitu Left of desktop Lewa krawędź pulpitu Right of desktop Prawa krawędź pulpitu Bottom of desktop Dolna krawędź pulpitu Top of desktop %1 Górna krawędź pulpitu %1 Left of desktop %1 Lewa krawędź pulpitu %1 Right of desktop %1 Prawa krawędź pulpitu %1 Bottom of desktop %1 Dolna krawędź pulpitu %1 Top Góra Bottom Dół Pick color Wybierz kolor Images (*.png *.gif *.jpg) Obrazki (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets DOdaj Widgety Panel Panel Configure Panel... Konfiguruj Panel... Add Panel Widgets... Dodaj Widgety... Add Panel Dodaj Panel Remove Panel Usuń panel Configure panel... Konfiguruj panel... Add plugins ... Dodaj wtyczkę ... LXQtPanelPlugin Configure Konfiguruj Move Przesuń Remove Usuń LXQtPanelPrivate Configure panel Konfiguruj panel Plugin Configure "%1" Konfiguruj "%1" Move "%1" Przesuń "%1" Remove "%1" Usuń "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_pt.ts000066400000000000000000000323301261500472700226420ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Configurar painel Panel size Tamanho do painel Size: Tamanho: px px Use automatic sizing Tamanho automático Panel length && position Posição e comprimento do painel Left À esquerda Center Ao centro Right À direita % % Alignment: Alinhamento Length: Comprimento: Position: Posição: Top of desktop Em cima Left of desktop À esquerda Right of desktop À direita Bottom of desktop Em baixo Top of desktop %1 Em cima, área de trabalho %1 Left of desktop %1 À esquerda, área de trabalho %1 Right of desktop %1 À direita, área de trabalho %1 Bottom of desktop %1 Em baixo, área de trabalho %1 Configure Panel ConfigPanelWidget Configure panel Configurar painel Size Size: Tamanho: px Icon size: Length: Comprimento: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left À esquerda Center Ao centro Right À direita Alignment: Alinhamento Position: Posição: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Em cima Left of desktop À esquerda Right of desktop À direita Bottom of desktop Em baixo Top of desktop %1 Em cima, área de trabalho %1 Left of desktop %1 À esquerda, área de trabalho %1 Right of desktop %1 À direita, área de trabalho %1 Bottom of desktop %1 Em baixo, área de trabalho %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Painel Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... Configurar painel... Add plugins ... Adicionar extras... LXQtPanelPlugin Configure Configurar Move Mover Remove Remover LXQtPanelPrivate Configure panel Configurar painel Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_pt_BR.ts000066400000000000000000000327571261500472700232420ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Configurar painel Panel size Tamanho do painel Size: Tamanho: px px Use automatic sizing Usar dimensionamento automático Panel length && position Comprimento e posição do painel Left Esquerda Center Centro Right Direita % % Alignment: Alinhamento: Length: Comprimento: Position: Posição: Top of desktop Na parte superior da área de trabalho Left of desktop À esquerda da área de trabalho Right of desktop À direita da área de trabalho Bottom of desktop Na parte inferior da área de trabalho Top of desktop %1 Na parte superior da área de trabalho %1 Left of desktop %1 A esquerda da área de trabalho %1 Right of desktop %1 À direita da área de trabalho %1 Bottom of desktop %1 Na parte inferior da área de trabalho %1 Configure Panel ConfigPanelWidget Configure panel Configurar painel Size Size: Tamanho: px Icon size: Length: Comprimento: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left Esquerda Center Centro Right Direita Alignment: Alinhamento: Position: Posição: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Na parte superior da área de trabalho Left of desktop À esquerda da área de trabalho Right of desktop À direita da área de trabalho Bottom of desktop Na parte inferior da área de trabalho Top of desktop %1 Na parte superior da área de trabalho %1 Left of desktop %1 A esquerda da área de trabalho %1 Right of desktop %1 À direita da área de trabalho %1 Bottom of desktop %1 Na parte inferior da área de trabalho %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Suspender Automaticamente Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... Configurar painel... Add plugins ... Adicionar plug-ins... LXQtPanelPlugin Configure Configurar Move Mover Remove Remover LXQtPanelPrivate Configure panel Configurar painel Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_ro_RO.ts000066400000000000000000000340031261500472700232360ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Configurează panoul Panel size Dimensiune panou Size: Dimensiune: px px Use automatic sizing Utilizează dimensionarea automată Panel length && position Lungime && poziție panou Left Stânga Center Centru Right Dreapta % % Alignment: Aliniere: Length: Lungime: Position: Poziție: Top of desktop Partea de sus a ecranului Left of desktop Stânga ecranului Right of desktop Dreapta ecranului Bottom of desktop Partea de jos a ecranului Top of desktop %1 Partea de sus a ecranului %1 Left of desktop %1 Stânga ecranului %1 Right of desktop %1 Dreapta ecranului %1 Bottom of desktop %1 Partea de jos a ecranului %1 Configure Panel Configurează panoul ConfigPanelWidget Configure panel Configurează panoul Size Dimensiune Size: Dimensiune: px px Icon size: Dimensiune pictograme: Length: Lungime: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> <p>Pentru valori negative, dimensiunea panoului va fi calculată ca diferenta dintre marimea disponibilă a ecranului și valoarea introdusă.</p><p/><p><i>De ex. introducând o "lungime" de -100 px si o dimensiune a ecranului de 1000 px, dimensiunea reala a panoului va fi de 900 px.</i></p> % % px px Rows count: Număr coloane: Alignment && position Aliniere și poziție Left Stânga Center Centru Right Dreapta Alignment: Aliniere: Position: Poziție: Auto-hide Auto-ascundere Styling Stil Custom font color: Culoare de font personalizată Custom background image: Imagine de fundal personalizată Custom background color: Culoare de fundal personalizată Opacity Opacitate Top of desktop Partea de sus a ecranului Left of desktop Stânga ecranului Right of desktop Dreapta ecranului Bottom of desktop Partea de jos a ecranului Top of desktop %1 Partea de sus a ecranului %1 Left of desktop %1 Stânga ecranului %1 Right of desktop %1 Dreapta ecranului %1 Bottom of desktop %1 Partea de jos a ecranului %1 Top Sus Bottom Jos Pick color Alege culoare Images (*.png *.gif *.jpg) Imagini (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Panou Configure Panel... Configurează panoul... Add Panel Widgets... Adaugă widget de panou Add Panel Adaugă panou Remove Panel Îndepărtează panou Configure panel... Configurează panoul... Add plugins ... Adaugă module.... LXQtPanelPlugin Configure Configurează Move Mută Remove Îndepărtează LXQtPanelPrivate Configure panel Configurează panoul Plugin Configure "%1" Configurează "%1" Move "%1" Mută "%1" Remove "%1" Îndepărtează "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_ru.ts000066400000000000000000000344671261500472700226620ustar00rootroot00000000000000 AddPluginDialog Add Plugins Добавить плагины Search: Найти: Add Widget Добавить виджет Close Закрыть (only one instance can run at a time) (только одна копия может быть запущена за раз) ConfigPanelDialog Configure Panel Настроить панель Panel Панель Widgets Виджеты ConfigPanelWidget Configure panel Настроить панель px пикс Rows count: Количество строк: Icon size: Размер иконок: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> <p>Отрицательное число пикселей устанавливает длину панели на столько же пикселей меньше, чем доступное место экрана.</p><p/><p><i>Т.е. «Длина» выставленная на -100 пикс, размер экрана 1000 пикс, тогда реальная длина панели будет 900 пикс.</i></p> Left Слева Center По центру Right Справа % % Size Размер Size: Размер: px пикс Alignment && position Выравнивание && расположение Alignment: Выравнивание: Custom styling Пользовательский стиль Font color: Цвет шрифта: Background opacity: Непрозрачность фона: <small>Compositing is required for panel transparency.</small> <small>Композиция необходима для прозрачности панели.</small> Background image: Фоновое изображение: Background color: Цвет фона: Auto-hide Автоматически скрывать Length: Длина: Position: Расположение: Top of desktop Вверху Left of desktop Слева Right of desktop Справа Bottom of desktop Внизу Top of desktop %1 Вверху %1 рабочего стола Left of desktop %1 Слева на %1 рабочем столе Right of desktop %1 Справа на %1 рабочем столе Bottom of desktop %1 Внизу %1 рабочего стола Top Вверху Bottom Внизу Pick color Выбрать цвет Images (*.png *.gif *.jpg) Изображения (*.png *.gif *.jpg) Pick image Выберите изображение ConfigPluginsWidget Configure Plugins Настроить плагины Note: changes made in this page cannot be reset. Примечание: изменения, сделанные на этой странице, нельзя сбросить. Move up Переместить выше ... Move down Переместить ниже Add Добавить Remove Удалить Configure Настроить LXQtPanel Panel Панель Configure Panel Настроить панель Manage Widgets Управление виджетами Add Panel Добавить панель Remove Panel Удалить панель Plugin Configure "%1" Настроить «%1» Move "%1" Переместить «%1» Remove "%1" Удалить «%1» main Use alternate configuration file. Использовать альтернативный конфигурационный файл. Configuration file Файл настроек lxqt-panel-0.10.0/panel/translations/lxqt-panel_ru_RU.ts000066400000000000000000000344721261500472700232640ustar00rootroot00000000000000 AddPluginDialog Add Plugins Добавить плагины Search: Найти: Add Widget Добавить виджет Close Закрыть (only one instance can run at a time) (только одна копия может быть запущена за раз) ConfigPanelDialog Configure Panel Настроить панель Panel Панель Widgets Виджеты ConfigPanelWidget Configure panel Настроить панель px пикс Rows count: Количество строк: Icon size: Размер иконок: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> <p>Отрицательное число пикселей устанавливает длину панели на столько же пикселей меньше, чем доступное место экрана.</p><p/><p><i>Т.е. «Длина» выставленная на -100 пикс, размер экрана 1000 пикс, тогда реальная длина панели будет 900 пикс.</i></p> Left Слева Center По центру Right Справа % % Size Размер Size: Размер: px пикс Alignment && position Выравнивание && расположение Alignment: Выравнивание: Custom styling Пользовательский стиль Font color: Цвет шрифта: Background opacity: Непрозрачность фона: <small>Compositing is required for panel transparency.</small> <small>Композиция необходима для прозрачности панели.</small> Background image: Фоновое изображение: Background color: Цвет фона: Auto-hide Автоматически скрывать Length: Длина: Position: Расположение: Top of desktop Вверху Left of desktop Слева Right of desktop Справа Bottom of desktop Внизу Top of desktop %1 Вверху %1 рабочего стола Left of desktop %1 Слева на %1 рабочем столе Right of desktop %1 Справа на %1 рабочем столе Bottom of desktop %1 Внизу %1 рабочего стола Top Вверху Bottom Внизу Pick color Выбрать цвет Images (*.png *.gif *.jpg) Изображения (*.png *.gif *.jpg) Pick image Выберите изображение ConfigPluginsWidget Configure Plugins Настроить плагины Note: changes made in this page cannot be reset. Примечание: изменения, сделанные на этой странице, нельзя сбросить. Move up Переместить выше ... Move down Переместить ниже Add Добавить Remove Удалить Configure Настроить LXQtPanel Panel Панель Configure Panel Настроить панель Manage Widgets Управление виджетами Add Panel Добавить панель Remove Panel Удалить панель Plugin Configure "%1" Настроить «%1» Move "%1" Переместить «%1» Remove "%1" Удалить «%1» main Use alternate configuration file. Использовать альтернативный конфигурационный файл. Configuration file Файл настроек lxqt-panel-0.10.0/panel/translations/lxqt-panel_sk_SK.ts000066400000000000000000000271761261500472700232450ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Nastaviť panel px px Left Vľavo Center Stred Right Vpravo % % Top of desktop Vrch plochy Left of desktop Ľavá strana plochy Right of desktop Pravá strana plochy Bottom of desktop Spodok plochy Top of desktop %1 Vrch plochy %1 Left of desktop %1 Ľavá strana plochy %1 Right of desktop %1 Pravá strana plochy %1 Bottom of desktop %1 Spodok plochy %1 Configure Panel ConfigPanelWidget Configure panel Nastaviť panel Size Size: px Icon size: Length: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left Vľavo Center Stred Right Vpravo Alignment: Position: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Vrch plochy Left of desktop Ľavá strana plochy Right of desktop Pravá strana plochy Bottom of desktop Spodok plochy Top of desktop %1 Vrch plochy %1 Left of desktop %1 Ľavá strana plochy %1 Right of desktop %1 Pravá strana plochy %1 Bottom of desktop %1 Spodok plochy %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Panel Configure Panel... Add Panel Widgets... Add Panel Remove Panel Add plugins ... Pridať moduly... LXQtPanelPrivate Configure panel Nastaviť panel Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_sl.ts000066400000000000000000000322121261500472700226340ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Nastavitev pulta Panel size Velikost pulta Size: Velikost: px pik Use automatic sizing Uporabi samodejno prilagajanje velikosti Panel length && position Dolžina in položaj pulta Left Levo Center Na sredini Right Desno % % Alignment: Poravnava: Length: Dolžina: Position: Položaj: Top of desktop Vrh namizja Left of desktop Leva stran namizja Right of desktop Desna stran namizja Bottom of desktop Dno namizja Top of desktop %1 Vrh namizja %1 Left of desktop %1 Leva stran namizja %1 Right of desktop %1 Desna stran namizja %1 Bottom of desktop %1 Dno namizja %1 Configure Panel ConfigPanelWidget Configure panel Nastavitev pulta Size Size: Velikost: px Icon size: Length: Dolžina: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px pik Rows count: Alignment && position Left Levo Center Na sredini Right Desno Alignment: Poravnava: Position: Položaj: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Vrh namizja Left of desktop Leva stran namizja Right of desktop Desna stran namizja Bottom of desktop Dno namizja Top of desktop %1 Vrh namizja %1 Left of desktop %1 Leva stran namizja %1 Right of desktop %1 Desna stran namizja %1 Bottom of desktop %1 Dno namizja %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Pult Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... Nastavitev pulta ... Add plugins ... Dodaj vstavke ... LXQtPanelPlugin Configure Nastavitev Move Premakni Remove Odstrani LXQtPanelPrivate Configure panel Nastavitev pulta Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_sr@latin.ts000066400000000000000000000225501261500472700237760ustar00rootroot00000000000000 ConfigPanelDialog Configure Panel ConfigPanelWidget Configure panel Size Size: px Icon size: Length: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % px Rows count: Alignment && position Left Center Right Alignment: Position: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Left of desktop Right of desktop Bottom of desktop Top of desktop %1 Left of desktop %1 Right of desktop %1 Bottom of desktop %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Automatsko suspendovanje Configure Panel... Add Panel Widgets... Add Panel Remove Panel Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_sr_BA.ts000066400000000000000000000342001261500472700232030ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Подешавање панела % % px px Left Лијево Right Десно Center Центар Panel size Величина панела Size: Величина: Use theme size Величина постављена темом Panel lenght & position Дужина и положај панела Length: Дужина: Alignment: Поравнање: Configure Panel ConfigPanelWidget Configure panel Size Size: Величина: px Icon size: Length: Дужина: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left Лијево Center Центар Right Десно Alignment: Поравнање: Position: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop врху површи Left of desktop лијевој страни површи Right of desktop десној страни површи Bottom of desktop дну површи Top of desktop %1 врху површи %1 Left of desktop %1 лијевој страни површи %1 Right of desktop %1 десној страни површи %1 Bottom of desktop %1 дну површи %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Панел Configure Panel... Add Panel Widgets... Add Panel Remove Panel LXQtPanelPluginPrivate Configure Подеси Move Помјери Delete Обриши LXQtPanelPrivate Panel Панел Plugins Модули Add plugins ... Додај модуле... Move plugin Помјери модул Configure plugin Подеси модул Delete plugin Обриши модул Show this panel at Прикажи овај панел на Configure panel Подеси панел Plugin Configure "%1" Move "%1" Remove "%1" PositionAction Top of desktop врху површи Bottom of desktop дну површи Left of desktop лијевој страни површи Right of desktop десној страни површи Top of desktop %1 врху површи %1 Bottom of desktop %1 дну површи %1 Left of desktop %1 лијевој страни површи %1 Right of desktop %1 десној страни површи %1 lxqt-panel-0.10.0/panel/translations/lxqt-panel_sr_RS.ts000066400000000000000000000313651261500472700232560ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Подешавање панела Panel size Величина панела Size: Величина: px px Left Лево Center Центар Right Десно % % Alignment: Поравнање: Length: Дужина: Top of desktop врху површи Left of desktop левој страни површи Right of desktop десној страни површи Bottom of desktop дну површи Top of desktop %1 врху површи %1 Left of desktop %1 левој страни површи %1 Right of desktop %1 десној страни површи %1 Bottom of desktop %1 дну површи %1 Configure Panel ConfigPanelWidget Configure panel Size Size: Величина: px Icon size: Length: Дужина: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left Лево Center Центар Right Десно Alignment: Поравнање: Position: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop врху површи Left of desktop левој страни површи Right of desktop десној страни површи Bottom of desktop дну површи Top of desktop %1 врху површи %1 Left of desktop %1 левој страни површи %1 Right of desktop %1 десној страни површи %1 Bottom of desktop %1 дну површи %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Панел Configure Panel... Add Panel Widgets... Add Panel Remove Panel Add plugins ... Додај модуле... LXQtPanelPlugin Configure Подеси Move Помери LXQtPanelPrivate Configure panel Подеси панел Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_th_TH.ts000066400000000000000000000341101261500472700232230ustar00rootroot00000000000000 ConfigPanelDialog Configure panel ปรับแต่งพาเนล Panel size ขนาดพาเนล Size: ขนาด: px px Use automatic sizing ใช้การปรับขนาดอัตโนมัติ Panel length && position ความยาว && ตำแหน่งพาเนล Left ทางซ้าย Center ตรงกลาง Right ทางขวา % % Alignment: การจัดวาง: Length: ความยาว: Position: ตำแหน่ง: Top of desktop ด้านบนของหน้าจอ Left of desktop ด้านซ้ายของหน้าจอ Right of desktop ด้านขวาของหน้าจอ Bottom of desktop ด้านล่างของหน้าจอ Top of desktop %1 ด้านบนของหน้าจอ %1 Left of desktop %1 ด้านซ้ายของหน้าจอ %1 Right of desktop %1 ด้านขวาของหน้าจอ %1 Bottom of desktop %1 ด้านล่างของหน้าจอ %1 Configure Panel ConfigPanelWidget Configure panel ปรับแต่งพาเนล Size Size: ขนาด: px Icon size: Length: ความยาว: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left ทางซ้าย Center ตรงกลาง Right ทางขวา Alignment: การจัดวาง: Position: ตำแหน่ง: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop ด้านบนของหน้าจอ Left of desktop ด้านซ้ายของหน้าจอ Right of desktop ด้านขวาของหน้าจอ Bottom of desktop ด้านล่างของหน้าจอ Top of desktop %1 ด้านบนของหน้าจอ %1 Left of desktop %1 ด้านซ้ายของหน้าจอ %1 Right of desktop %1 ด้านขวาของหน้าจอ %1 Bottom of desktop %1 ด้านล่างของหน้าจอ %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel พาเนล Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... ปรับแต่งพาเนล... Add plugins ... เพิ่มปลั๊กอิน LXQtPanelPlugin Configure ปรับแต่ง Move ย้าย Remove ลบทิ้ง LXQtPanelPrivate Configure panel ปรับแต่งพาเนล Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_tr.ts000066400000000000000000000324711261500472700226520ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Paneli yapılandır Panel size Panel boyutu Size: Boyut: px px Use automatic sizing Otomatik boyutlandırmayı kullan Panel length && position Panel uzunluğu && konumu Left Sol Center Merkez Right Sağ % % Alignment: Yerleştirme: Length: Uzunluk: Position: Konum: Top of desktop Masasüstünün üst kısmı Left of desktop Masaüstünün sol kısmı Right of desktop Masaüstünün sağ kısmı Bottom of desktop Masaüstünün alt kısmı Top of desktop %1 Masaüstünün üst kısmı %1 Left of desktop %1 Masaüstünün sol kısmı %1 Right of desktop %1 Masaüstünün sağ kısmı %1 Bottom of desktop %1 Masaüstünün alt kısmı %1 Configure Panel ConfigPanelWidget Configure panel Paneli yapılandır Size Size: Boyut: px Icon size: Length: Uzunluk: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left Sol Center Merkez Right Sağ Alignment: Yerleştirme: Position: Konum: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Masasüstünün üst kısmı Left of desktop Masaüstünün sol kısmı Right of desktop Masaüstünün sağ kısmı Bottom of desktop Masaüstünün alt kısmı Top of desktop %1 Masaüstünün üst kısmı %1 Left of desktop %1 Masaüstünün sol kısmı %1 Right of desktop %1 Masaüstünün sağ kısmı %1 Bottom of desktop %1 Masaüstünün alt kısmı %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Not Defteri Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... Paneli yapılandır... Add plugins ... Eklenti ekle... LXQtPanelPlugin Configure Yapılandır Move Taşı Remove Sil LXQtPanelPrivate Configure panel Paneli yapılandır Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_uk.ts000066400000000000000000000332161261500472700226420ustar00rootroot00000000000000 ConfigPanelDialog Configure panel Налаштувати панель Panel size Розмір панелі Size: Розмір: px px Use automatic sizing Використовувати автоматичний розмір Panel length && position Довжина та місце панелі Left Зліва Center Посередині Right Справа % % Alignment: Вирівнювання: Length: Довжина: Position: Місце: Top of desktop Згори стільниці Left of desktop Зліва стільниці Right of desktop Справа стільниці Bottom of desktop Знизу стільниці Top of desktop %1 Згори стільниці %1 Left of desktop %1 Зліва стільниці %1 Right of desktop %1 Справа стільниці %1 Bottom of desktop %1 Знизу стільниці %1 Configure Panel ConfigPanelWidget Configure panel Налаштувати панель Size Size: Розмір: px Icon size: Length: Довжина: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left Зліва Center Посередині Right Справа Alignment: Вирівнювання: Position: Місце: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop Згори стільниці Left of desktop Зліва стільниці Right of desktop Справа стільниці Bottom of desktop Знизу стільниці Top of desktop %1 Згори стільниці %1 Left of desktop %1 Зліва стільниці %1 Right of desktop %1 Справа стільниці %1 Bottom of desktop %1 Знизу стільниці %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel Панель Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... Налаштувати панель... Add plugins ... Додати плаґіни... LXQtPanelPlugin Configure Налаштувати Move Пересунути Remove Вилучити LXQtPanelPrivate Configure panel Налаштувати панель Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_zh_CN.ts000066400000000000000000000320261261500472700232220ustar00rootroot00000000000000 ConfigPanelDialog Configure panel 配置面板 Panel size 面板大小 Size: 大小: px px Use automatic sizing 使用自动缩放 Panel length && position 面板长度和位置 Left Center 居中 Right % % Alignment: 对齐: Length: 长度: Position: 位置: Top of desktop 桌面顶部 Left of desktop 桌面左侧 Right of desktop 桌面右侧 Bottom of desktop 桌面底部 Top of desktop %1 桌面顶部 %1 Left of desktop %1 桌面左侧 %1 Right of desktop %1 左面右侧 %1 Bottom of desktop %1 桌面底部 %1 Configure Panel ConfigPanelWidget Configure panel 配置面板 Size Size: 大小: px Icon size: Length: 长度: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left Center 居中 Right Alignment: 对齐: Position: 位置: Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop 桌面顶部 Left of desktop 桌面左侧 Right of desktop 桌面右侧 Bottom of desktop 桌面底部 Top of desktop %1 桌面顶部 %1 Left of desktop %1 桌面左侧 %1 Right of desktop %1 左面右侧 %1 Bottom of desktop %1 桌面底部 %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel qxkb Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... 配置面板... Add plugins ... 添加插件 ... LXQtPanelPlugin Configure 配置 Move 移动 Remove 删除 LXQtPanelPrivate Configure panel 配置面板 Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/panel/translations/lxqt-panel_zh_TW.ts000066400000000000000000000320601261500472700232520ustar00rootroot00000000000000 ConfigPanelDialog Configure panel 設定面板 Panel size 面板尺寸 Size: 尺寸: px px Use automatic sizing 大小自動調整 Panel length && position 面板長度以及位置 Left 向左 Center 中間 Right 向右 % % Alignment: 對齊: Length: 長度: Position: 位置 : Top of desktop 桌面頂端 Left of desktop 桌面左方 Right of desktop 桌面右方 Bottom of desktop 桌面底端 Top of desktop %1 桌面頂端 %1 Left of desktop %1 桌面左方 %1 Right of desktop %1 桌面右方 %1 Bottom of desktop %1 桌面底端 %1 Configure Panel ConfigPanelWidget Configure panel 設定面板 Size Size: 尺寸: px Icon size: Length: 長度: <p>Negative pixel value sets the panel length to that many pixels less than available screen space.</p><p/><p><i>E.g. "Length" set to -100px, screen size is 1000px, then real panel length will be 900 px.</i></p> % % px px Rows count: Alignment && position Left 向左 Center 中間 Right 向右 Alignment: 對齊: Position: 位置 : Auto-hide Styling Custom font color: Custom background image: Custom background color: Opacity Top of desktop 桌面頂端 Left of desktop 桌面左方 Right of desktop 桌面右方 Bottom of desktop 桌面底端 Top of desktop %1 桌面頂端 %1 Left of desktop %1 桌面左方 %1 Right of desktop %1 桌面右方 %1 Bottom of desktop %1 桌面底端 %1 Top Bottom Pick color Images (*.png *.gif *.jpg) LXQtPanel Add Panel Widgets Panel LXQt滑鼠設定 Configure Panel... Add Panel Widgets... Add Panel Remove Panel Configure panel... 面板設定... Add plugins ... 新增外掛... LXQtPanelPlugin Configure 設定 Move 移動 Remove 移除 LXQtPanelPrivate Configure panel 設定面板 Plugin Configure "%1" Move "%1" Remove "%1" lxqt-panel-0.10.0/plugin-clock/000077500000000000000000000000001261500472700162505ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-clock/CMakeLists.txt000066400000000000000000000004011261500472700210030ustar00rootroot00000000000000set(PLUGIN "clock") set(HEADERS lxqtclock.h lxqtclockconfiguration.h calendarpopup.h ) set(SOURCES lxqtclock.cpp lxqtclockconfiguration.cpp calendarpopup.cpp ) set(UIS lxqtclockconfiguration.ui ) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-clock/calendarpopup.cpp000066400000000000000000000032051261500472700216110ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2014 LXQt team * Authors: * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "calendarpopup.h" #include #include CalendarPopup::CalendarPopup(QWidget *parent): QDialog(parent, Qt::Window | Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint | Qt::Popup | Qt::X11BypassWindowManagerHint) { setLayout(new QHBoxLayout(this)); layout()->setMargin(1); cal = new QCalendarWidget(this); layout()->addWidget(cal); adjustSize(); } CalendarPopup::~CalendarPopup() { } void CalendarPopup::show() { cal->setSelectedDate(QDate::currentDate()); activateWindow(); QDialog::show(); } void CalendarPopup::setFirstDayOfWeek(Qt::DayOfWeek wday) { cal->setFirstDayOfWeek(wday); } lxqt-panel-0.10.0/plugin-clock/calendarpopup.h000066400000000000000000000025221261500472700212570ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2014 LXQt team * Authors: * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef CALENDARPOPUP_H #define CALENDARPOPUP_H #include #include class CalendarPopup : public QDialog { Q_OBJECT public: CalendarPopup(QWidget *parent = 0); ~CalendarPopup(); void setFirstDayOfWeek(Qt::DayOfWeek wday); void show(); private: QCalendarWidget *cal; }; #endif // CALENDARPOPUP_H lxqt-panel-0.10.0/plugin-clock/lxqtclock.cpp000066400000000000000000000223301261500472700207600ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2013 Razor team * Authors: * Christopher "VdoP" Regali * Alexander Sokoloff * Maciej Płaza * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtclock.h" #include #include #include #include #include #include #include #include #include #include #include /** * @file lxqtclock.cpp * @brief implements LXQtclock and LXQtclockgui * @author Christopher "VdoP" Regali * @author Kuzma Shapran */ class DownscaleFontStyle : public QProxyStyle { using QProxyStyle::QProxyStyle; public: virtual void drawItemText(QPainter * painter, const QRect & rect, int flags , const QPalette & pal, bool enabled, const QString & text , QPalette::ColorRole textRole = QPalette::NoRole) const override { while (1 < painter->font().pointSize() && !(rect.size() - painter->fontMetrics().boundingRect(text).size()).isValid()) { QFont f{painter->font()}; f.setPointSize(f.pointSize() - 1); painter->setFont(f); } return QProxyStyle::drawItemText(painter, rect, flags, pal, enabled, text, textRole); } }; /** * @brief constructor */ LXQtClock::LXQtClock(const ILXQtPanelPluginStartupInfo &startupInfo): QObject(), ILXQtPanelPlugin(startupInfo), mAutoRotate(true), mTextStyle{new DownscaleFontStyle}, mCurrentCharCount(0) { mMainWidget = new QWidget(); mRotatedWidget = new LXQt::RotatedWidget(*(new QWidget()), mMainWidget); mContent = mRotatedWidget->content(); mContent->setStyle(mTextStyle.data()); mTimeLabel = new QLabel(mContent); mDateLabel = new QLabel(mContent); QVBoxLayout *borderLayout = new QVBoxLayout(mMainWidget); borderLayout->setContentsMargins(0, 0, 0, 0); borderLayout->setSpacing(0); borderLayout->addWidget(mRotatedWidget, 0, Qt::AlignCenter); mTimeLabel->setObjectName("TimeLabel"); mDateLabel->setObjectName("DateLabel"); mTimeLabel->setAlignment(Qt::AlignCenter); mDateLabel->setAlignment(Qt::AlignCenter); mContent->setLayout(new QVBoxLayout{mContent}); mContent->layout()->setContentsMargins(0, 0, 0, 0); mContent->layout()->setSpacing(0); mContent->layout()->addWidget(mTimeLabel); mContent->layout()->addWidget(mDateLabel); mClockTimer = new QTimer(this); mClockTimer->setTimerType(Qt::PreciseTimer); connect (mClockTimer, SIGNAL(timeout()), SLOT(updateTime())); mClockFormat = "hh:mm"; mCalendarPopup = new CalendarPopup(mContent); mMainWidget->installEventFilter(this); settingsChanged(); } /** * @brief destructor */ LXQtClock::~LXQtClock() { delete mMainWidget; } QDateTime LXQtClock::currentDateTime() { return QDateTime(mUseUTC ? QDateTime::currentDateTimeUtc() : QDateTime::currentDateTime()); } /** * @brief updates the time * Color and font settings can be configured in Qt CSS */ void LXQtClock::updateTime() { //XXX: do we need this with PreciseTimer ? if (currentDateTime().time().msec() > 500) restartTimer(); showTime(); } void LXQtClock::showTime() { QDateTime now{currentDateTime()}; int new_char_count; if (mDateOnNewLine) { QString new_time = QLocale::system().toString(now, mTimeFormat); QString new_date = QLocale::system().toString(now, mDateFormat); new_char_count = qMax(new_time.size(), new_date.size()); mTimeLabel->setText(new_time); mDateLabel->setText(new_date); } else { QString new_time = QLocale::system().toString(now, mClockFormat); new_char_count = new_time.size(); mTimeLabel->setText(new_time); } if (mCurrentCharCount != new_char_count) { mCurrentCharCount = new_char_count; realign(); } } void LXQtClock::restartTimer() { if (mClockTimer->isActive()) mClockTimer->stop(); int updateInterval = mClockTimer->interval(); QDateTime now{currentDateTime()}; int delay = updateInterval - ((now.time().msec() + now.time().second() * 1000) % updateInterval); QTimer::singleShot(delay, Qt::PreciseTimer, mClockTimer, SLOT(start())); QTimer::singleShot(delay, Qt::PreciseTimer, this, SLOT(updateTime())); } void LXQtClock::settingsChanged() { mFirstDayOfWeek = settings()->value("firstDayOfWeek", -1).toInt(); if (-1 == mFirstDayOfWeek) mCalendarPopup->setFirstDayOfWeek(QLocale::system().firstDayOfWeek()); else mCalendarPopup->setFirstDayOfWeek(static_cast(mFirstDayOfWeek)); mTimeFormat = settings()->value("timeFormat", QLocale::system().timeFormat(QLocale::ShortFormat).toUpper().contains("AP") ? "h:mm AP" : "HH:mm").toString(); mUseUTC = settings()->value("UTC", false).toBool(); if (mUseUTC) mTimeFormat += "' Z'"; mDateFormat = settings()->value("dateFormat", Qt::SystemLocaleShortDate).toString(); bool dateBeforeTime = (settings()->value("showDate", "no").toString().toLower() == "before"); bool dateAfterTime = (settings()->value("showDate", "no").toString().toLower() == "after"); mDateOnNewLine = (settings()->value("showDate", "no").toString().toLower() == "below"); mAutoRotate = settings()->value("autoRotate", true).toBool(); if (dateBeforeTime) mClockFormat = QString("%1 %2").arg(mDateFormat).arg(mTimeFormat); else if (dateAfterTime) mClockFormat = QString("%1 %2").arg(mTimeFormat).arg(mDateFormat); else mClockFormat = mTimeFormat; mDateLabel->setHidden(!mDateOnNewLine); // mDateFormat usually does not contain time portion, but since it's possible to use custom date format - it has to be supported. [Kuzma Shapran] int updateInterval = QString(mTimeFormat + " " + mDateFormat).replace(QRegExp("'[^']*'"),"").contains("s") ? 1000 : 60000; QDateTime now = currentDateTime(); showTime(); if (mClockTimer->interval() != updateInterval) { mClockTimer->setInterval(updateInterval); restartTimer(); } } void LXQtClock::realign() { QSize size{QWIDGETSIZE_MAX, QWIDGETSIZE_MAX}; Qt::Corner origin = Qt::TopLeftCorner; if (mAutoRotate || panel()->isHorizontal()) { switch (panel()->position()) { case ILXQtPanel::PositionTop: case ILXQtPanel::PositionBottom: origin = Qt::TopLeftCorner; break; case ILXQtPanel::PositionLeft: origin = Qt::BottomLeftCorner; break; case ILXQtPanel::PositionRight: origin = Qt::TopRightCorner; break; } //set minwidth QFontMetrics metrics{mTimeLabel->font()}; //Note: using a constant string of reasonably wide characters for computing the width // (not the current text as width of text can differ for each particular string (based on font)) size.setWidth(metrics.boundingRect(QString{mCurrentCharCount, 'A'}).width()); } else if (!panel()->isHorizontal()) { size.setWidth(panel()->globalGometry().width()); } mTimeLabel->setFixedWidth(size.width()); mDateLabel->setFixedWidth(size.width()); int label_height = mTimeLabel->sizeHint().height(); size.setHeight(mDateOnNewLine ? label_height * 2 : label_height); const bool changed = mContent->maximumSize() != size || mRotatedWidget->origin() != origin; mContent->setFixedSize(size); mRotatedWidget->setOrigin(origin); if (changed) { mRotatedWidget->adjustContentSize(); mRotatedWidget->update(); } } void LXQtClock::activated(ActivationReason reason) { if (reason != ILXQtPanelPlugin::Trigger) return; if (!mCalendarPopup->isVisible()) { QRect pos = calculatePopupWindowPos(mCalendarPopup->size()); mCalendarPopup->move(pos.topLeft()); mCalendarPopup->show(); } else { mCalendarPopup->hide(); } } QDialog * LXQtClock::configureDialog() { return new LXQtClockConfiguration(*settings()); } bool LXQtClock::eventFilter(QObject *watched, QEvent *event) { if (watched == mMainWidget) { if (event->type() == QEvent::ToolTip) mMainWidget->setToolTip(QDateTime::currentDateTime().toString(Qt::DefaultLocaleLongDate)); return false; } return false; } lxqt-panel-0.10.0/plugin-clock/lxqtclock.h000066400000000000000000000055441261500472700204350ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2013 Razor team * Authors: * Christopher "VdoP" Regali * Alexander Sokoloff * Maciej Płaza * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTCLOCK_H #define LXQTCLOCK_H #include "../panel/ilxqtpanelplugin.h" #include "lxqtclockconfiguration.h" #include "calendarpopup.h" #include #include class QLabel; class QDialog; class QTimer; class QProxyStyle; class LXQtClock : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: LXQtClock(const ILXQtPanelPluginStartupInfo &startupInfo); ~LXQtClock(); virtual Flags flags() const { return PreferRightAlignment | HaveConfigDialog ; } QString themeId() const { return "Clock"; } QWidget *widget() { return mMainWidget; } QDialog *configureDialog(); void settingsChanged(); void activated(ActivationReason reason); bool isSeparate() const { return true; } void realign(); public slots: void updateTime(); protected: bool eventFilter(QObject *watched, QEvent *event); private: QTimer* mClockTimer; QWidget *mMainWidget; QWidget *mContent; LXQt::RotatedWidget* mRotatedWidget; QLabel* mTimeLabel; QLabel* mDateLabel; QString mClockFormat; QString mToolTipFormat; CalendarPopup* mCalendarPopup; QString mTimeFormat; QString mDateFormat; bool mDateOnNewLine; bool mUseUTC; int mFirstDayOfWeek; bool mAutoRotate; QScopedPointer mTextStyle; int mCurrentCharCount; QDateTime currentDateTime(); void showTime(); void restartTimer(); }; class LXQtClockPluginLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT // Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new LXQtClock(startupInfo);} }; #endif lxqt-panel-0.10.0/plugin-clock/lxqtclockconfiguration.cpp000066400000000000000000000270371261500472700235610ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Maciej Płaza * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include #include #include "lxqtclockconfiguration.h" #include "ui_lxqtclockconfiguration.h" namespace { class FirstDayCombo : public QStandardItemModel { public: FirstDayCombo() { QStandardItem* item = 0; int row = 0; item = new QStandardItem; item->setData(-1, Qt::UserRole); setItem(row, 0, item); item = new QStandardItem; item->setData(tr(""), Qt::DisplayRole); setItem(row, 1, item); ++row; for (int wday = Qt::Monday; Qt::Sunday >= wday; ++wday, ++row) { item = new QStandardItem; item->setData(wday, Qt::UserRole); setItem(row, 0, item); item = new QStandardItem; item->setData(QLocale::system().dayName(wday), Qt::DisplayRole); setItem(row, 1, item); } } int findIndex(int wday) { int i = rowCount() - 1; for ( ; 0 <= i; --i) { if (item(i)->data(Qt::UserRole).toInt() == wday) break; } return i; } }; } LXQtClockConfiguration::LXQtClockConfiguration(QSettings &settings, QWidget *parent) : QDialog(parent), ui(new Ui::LXQtClockConfiguration), mSettings(settings), oldSettings(settings), mOldIndex(1) { setAttribute(Qt::WA_DeleteOnClose); setObjectName("ClockConfigurationWindow"); ui->setupUi(this); connect(ui->buttons, SIGNAL(clicked(QAbstractButton*)), SLOT(dialogButtonsAction(QAbstractButton*))); ui->firstDayOfWeekCB->setModel(new FirstDayCombo); ui->firstDayOfWeekCB->setModelColumn(1); loadSettings(); /* We use clicked() and activated(int) because these signals aren't emitting after programmaticaly change of state */ connect(ui->dateFormatCOB, SIGNAL(activated(int)), SLOT(dateFormatActivated(int))); connect(ui->showSecondsCB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->ampmClockCB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->useUtcCB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->dontShowDateRB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->showDateBeforeTimeRB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->showDateAfterTimeRB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->showDateBelowTimeRB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->autorotateCB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->firstDayOfWeekCB, SIGNAL(activated(int)), SLOT(saveSettings())); } LXQtClockConfiguration::~LXQtClockConfiguration() { delete ui; } static int currentYear = QDate::currentDate().year(); void LXQtClockConfiguration::addDateFormat(const QString &format) { if (ui->dateFormatCOB->findData(QVariant(format)) == -1) ui->dateFormatCOB->addItem(QDate(currentYear, 1, 1).toString(format), QVariant(format)); } void LXQtClockConfiguration::createDateFormats() { ui->dateFormatCOB->clear(); QString systemDateLocale = QLocale::system().dateFormat(QLocale::ShortFormat).toUpper(); if (systemDateLocale.indexOf("Y") < systemDateLocale.indexOf("D")) // Big-endian (year, month, day) -> in some Asia countires like China or Japan { addDateFormat("MMM d"); addDateFormat("MMMM d"); addDateFormat("MMM d, ddd"); addDateFormat("MMMM d, dddd"); addDateFormat("yyyy MMM d"); addDateFormat("yyyy MMMM d"); addDateFormat("yyyy MMM d, ddd"); addDateFormat("yyyy MMMM d, dddd"); addDateFormat("MMM dd"); addDateFormat("MMMM dd"); addDateFormat("MMM dd, ddd"); addDateFormat("MMMM dd, dddd"); addDateFormat("yyyy MMM dd"); addDateFormat("yyyy MMMM dd"); addDateFormat("yyyy MMM dd, ddd"); addDateFormat("yyyy MMMM dd, dddd"); } else if (systemDateLocale.indexOf("M") < systemDateLocale.indexOf("D")) // Middle-endian (month, day, year) -> USA { addDateFormat("MMM d"); addDateFormat("MMMM d"); addDateFormat("ddd, MMM d"); addDateFormat("dddd, MMMM d"); addDateFormat("MMM d yyyy"); addDateFormat("MMMM d yyyy"); addDateFormat("ddd, MMM d yyyy"); addDateFormat("dddd, MMMM d yyyy"); addDateFormat("MMM dd"); addDateFormat("MMMM dd"); addDateFormat("ddd, MMM dd"); addDateFormat("dddd, MMMM dd"); addDateFormat("MMM dd yyyy"); addDateFormat("MMMM dd yyyy"); addDateFormat("ddd, MMM dd yyyy"); addDateFormat("dddd, MMMM dd yyyy"); } else // Little-endian (day, month, year) -> most of Europe { addDateFormat("d MMM"); addDateFormat("d MMMM"); addDateFormat("ddd, d MMM"); addDateFormat("dddd, d MMMM"); addDateFormat("d MMM yyyy"); addDateFormat("d MMMM yyyy"); addDateFormat("ddd, d MMM yyyy"); addDateFormat("dddd, d MMMM yyyy"); addDateFormat("dd MMM"); addDateFormat("dd MMMM"); addDateFormat("ddd, dd MMM"); addDateFormat("dddd, dd MMMM"); addDateFormat("dd MMM yyyy"); addDateFormat("dd MMMM yyyy"); addDateFormat("ddd, dd MMM yyyy"); addDateFormat("dddd, dd MMMM yyyy"); } addDateFormat(QLocale::system().dateFormat(QLocale::ShortFormat)); addDateFormat(QLocale::system().dateFormat(QLocale::LongFormat)); addDateFormat("yyyy-MM-dd"); // ISO if (mCustomDateFormat.isEmpty()) ui->dateFormatCOB->addItem("Custom ...", QVariant(mCustomDateFormat)); else ui->dateFormatCOB->addItem(QString("Custom (%1) ...").arg(QDate(currentYear, 1, 1).toString(mCustomDateFormat)), QVariant(mCustomDateFormat)); } void LXQtClockConfiguration::loadSettings() { QString systemDateLocale = QLocale::system().dateFormat(QLocale::ShortFormat).toUpper(); QString systemTimeLocale = QLocale::system().timeFormat(QLocale::ShortFormat).toUpper(); QString timeFormat = mSettings.value("timeFormat", systemTimeLocale.contains("AP") ? "h:mm AP" : "HH:mm").toString(); ui->showSecondsCB->setChecked(timeFormat.indexOf("ss") > -1); ui->ampmClockCB->setChecked(timeFormat.toUpper().indexOf("AP") > -1); ui->useUtcCB->setChecked(mSettings.value("UTC", false).toBool()); ui->dontShowDateRB->setChecked(true); ui->showDateBeforeTimeRB->setChecked(mSettings.value("showDate", "no").toString().toLower() == "before"); ui->showDateAfterTimeRB->setChecked(mSettings.value("showDate", "no").toString().toLower() == "after"); ui->showDateBelowTimeRB->setChecked(mSettings.value("showDate", "no").toString().toLower() == "below"); mCustomDateFormat = mSettings.value("customDateFormat", QString()).toString(); QString dateFormat = mSettings.value("dateFormat", QLocale::system().dateFormat(QLocale::ShortFormat)).toString(); createDateFormats(); if (mCustomDateFormat == dateFormat) ui->dateFormatCOB->setCurrentIndex(ui->dateFormatCOB->count() - 1); else { ui->dateFormatCOB->setCurrentIndex(ui->dateFormatCOB->findData(dateFormat)); if (ui->dateFormatCOB->currentIndex() < 0) ui->dateFormatCOB->setCurrentIndex(1); } mOldIndex = ui->dateFormatCOB->currentIndex(); ui->autorotateCB->setChecked(mSettings.value("autoRotate", true).toBool()); ui->firstDayOfWeekCB->setCurrentIndex(dynamic_cast(*(ui->firstDayOfWeekCB->model())).findIndex(mSettings.value("firstDayOfWeek", -1).toInt())); } void LXQtClockConfiguration::saveSettings() { QString timeFormat(ui->ampmClockCB->isChecked() ? "h:mm AP" : "HH:mm"); if (ui->showSecondsCB->isChecked()) timeFormat.insert(timeFormat.indexOf("mm") + 2, ":ss"); mSettings.setValue("timeFormat", timeFormat); mSettings.setValue("UTC", ui->useUtcCB->isChecked()); mSettings.setValue("showDate", ui->showDateBeforeTimeRB->isChecked() ? "before" : (ui->showDateAfterTimeRB->isChecked() ? "after" : (ui->showDateBelowTimeRB->isChecked() ? "below" : "no" ))); mSettings.setValue("customDateFormat", mCustomDateFormat); if (ui->dateFormatCOB->currentIndex() == (ui->dateFormatCOB->count() - 1)) mSettings.setValue("dateFormat", mCustomDateFormat); else mSettings.setValue("dateFormat", ui->dateFormatCOB->itemData(ui->dateFormatCOB->currentIndex())); mSettings.setValue("autoRotate", ui->autorotateCB->isChecked()); mSettings.setValue("firstDayOfWeek", dynamic_cast(*ui->firstDayOfWeekCB->model()).item(ui->firstDayOfWeekCB->currentIndex(), 0)->data(Qt::UserRole)); } void LXQtClockConfiguration::dialogButtonsAction(QAbstractButton *btn) { if (ui->buttons->buttonRole(btn) == QDialogButtonBox::ResetRole) { oldSettings.loadToSettings(); loadSettings(); } else { close(); } } void LXQtClockConfiguration::dateFormatActivated(int index) { if (index == ui->dateFormatCOB->count() - 1) { bool ok; QString newCustomDateFormat = QInputDialog::getText(this, tr("Input custom date format"), tr( "Interpreted sequences of date format are:\n" "\n" "d\tthe day as number without a leading zero (1 to 31)\n" "dd\tthe day as number with a leading zero (01 to 31)\n" "ddd\tthe abbreviated localized day name (e.g. 'Mon' to 'Sun').\n" "dddd\tthe long localized day name (e.g. 'Monday' to 'Sunday').\n" "M\tthe month as number without a leading zero (1-12)\n" "MM\tthe month as number with a leading zero (01-12)\n" "MMM\tthe abbreviated localized month name (e.g. 'Jan' to 'Dec').\n" "MMMM\tthe long localized month name (e.g. 'January' to 'December').\n" "yy\tthe year as two digit number (00-99)\n" "yyyy\tthe year as four digit number\n" "\n" "All other input characters will be treated as text.\n" "Any sequence of characters that are enclosed in single quotes (')\n" "will also be treated as text and not be used as an expression.\n" "\n" "\n" "Custom date format:" ), QLineEdit::Normal, mCustomDateFormat, &ok); if (ok) { mCustomDateFormat = newCustomDateFormat; mOldIndex = index; createDateFormats(); } ui->dateFormatCOB->setCurrentIndex(mOldIndex); } else mOldIndex = index; saveSettings(); } lxqt-panel-0.10.0/plugin-clock/lxqtclockconfiguration.h000066400000000000000000000040631261500472700232200ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Maciej Płaza * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTCLOCKCONFIGURATION_H #define LXQTCLOCKCONFIGURATION_H #include #include #include #include #include #include namespace Ui { class LXQtClockConfiguration; } class LXQtClockConfiguration : public QDialog { Q_OBJECT public: explicit LXQtClockConfiguration(QSettings &settings, QWidget *parent = 0); ~LXQtClockConfiguration(); private: Ui::LXQtClockConfiguration *ui; QSettings &mSettings; LXQt::SettingsCache oldSettings; /* Read settings from conf file and put data into controls. */ void loadSettings(); /* Creates a date formats consistent with the region read from locale. */ void createDateFormats(); private slots: /* Saves settings in conf file. */ void saveSettings(); void dialogButtonsAction(QAbstractButton *btn); void dateFormatActivated(int); private: int mOldIndex; QString mCustomDateFormat; void addDateFormat(const QString &format); }; #endif // LXQTCLOCKCONFIGURATION_H lxqt-panel-0.10.0/plugin-clock/lxqtclockconfiguration.ui000066400000000000000000000137421261500472700234120ustar00rootroot00000000000000 LXQtClockConfiguration 0 0 330 447 Clock Settings Time &Show seconds 12 &hour style &Use UTC Date false Date &format dateFormatCOB false &Do not show date true Show date &before time Show date &after time Show date below time on new &line First day of week in calendar firstDayOfWeekCB Orientation Auto&rotate when the panel is vertical true Qt::Vertical 20 0 Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Reset buttons accepted() LXQtClockConfiguration accept() 214 350 157 274 buttons rejected() LXQtClockConfiguration reject() 214 350 196 274 dontShowDateRB toggled(bool) dateFormatL setDisabled(bool) 68 166 63 267 dontShowDateRB toggled(bool) dateFormatCOB setDisabled(bool) 174 167 239 275 lxqt-panel-0.10.0/plugin-clock/resources/000077500000000000000000000000001261500472700202625ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-clock/resources/clock.desktop.in000066400000000000000000000003061261500472700233540ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. Icon=preferences-system-time #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-clock/translations/000077500000000000000000000000001261500472700207715ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-clock/translations/clock.ts000066400000000000000000000105411261500472700224350ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration Clock Settings Time &Show seconds 12 &hour style &Use UTC &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical Date Date &format Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_ar.desktop000066400000000000000000000004061261500472700241410ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[ar]=السَّاعة والتَّقويم Name[ar]=السَّاعة lxqt-panel-0.10.0/plugin-clock/translations/clock_ar.ts000066400000000000000000000153641261500472700231270ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings إعدادات ساعة ريزر Clock Settings Time الوقت &Show seconds إ&ظهار الثَّواني 12 &hour style عرض 12 سا&عة &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font ال&خطُّ Font الخطُّ Date التَّاريخ Show &date إظهار ال&تَّاريخ D&ate format تنسيق التَّ&أريخ Fon&t الخ&طُّ Show date in &new line إظهار التَّارخ في سطرٍ &جديدٍ &Use theme fonts استخد&م خطوط الواجهة المخصَّصة Time font الخطُّ المستخدم للوقت Date font الخطُّ المستخدم للتَّاريخ Ultra light فاتحٌ زيادة Light فاتح Ultra black أسود دامس Black أسود Bold ثخين Demi bold نصف ثخين Italic مائل Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_cs.desktop000066400000000000000000000003521261500472700241440ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[cs]=Hodiny a kalendář Name[cs]=Hodiny lxqt-panel-0.10.0/plugin-clock/translations/clock_cs.ts000066400000000000000000000150211261500472700231200ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Nastavení hodin Clock Settings Time Čas &Show seconds &Ukázat sekundy 12 &hour style 12 &hodinový styl &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font &Písmo Font Písmo Date Datum Show &date Ukázat &datum D&ate format Formát d&ata Fon&t Pí&smo Show date in &new line Ukázat datum na &novém řádku &Use theme fonts &Použít písma motivu Time font Písmo pro čas Date font Písmo pro datum Ultra light Hodně světlé Light Světlé Ultra black Hodně černé Black Černé Bold Tučné Demi bold Polotučné Italic Kurzíva Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_cs_CZ.desktop000066400000000000000000000003601261500472700245370ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[cs_CZ]=Hodiny a kalendář Name[cs_CZ]=Hodiny lxqt-panel-0.10.0/plugin-clock/translations/clock_cs_CZ.ts000066400000000000000000000150241261500472700235170ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Nastavení hodin Clock Settings Time Čas &Show seconds &Ukázat sekundy 12 &hour style 12 &hodinový styl &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font &Písmo Font Písmo Date Datum Show &date Ukázat &datum D&ate format Formát d&ata Fon&t Pí&smo Show date in &new line Ukázat datum na &novém řádku &Use theme fonts &Použít písma motivu Time font Písmo pro čas Date font Písmo pro datum Ultra light Hodně světlé Light Světlé Ultra black Hodně černé Black Černé Bold Tučné Demi bold Polotučné Italic Kurzíva Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_da.desktop000066400000000000000000000003411261500472700241210ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[da]=Ur og kalender Name[da]=Ur lxqt-panel-0.10.0/plugin-clock/translations/clock_da.ts000066400000000000000000000121571261500472700231060ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings LXQt Ur-Indstillinger Clock Settings Time Tid &Show seconds 12 &hour style &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical Show seconds Vis sekunder 12 hour style 12 timers visning Date Dato Show date Vis dato Show date in new line Vis dato i ny linie Date format Datoformat Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_da_DK.desktop000066400000000000000000000003471261500472700245050ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[da_DK]=Ur og kalender Name[da_DK]=Ur lxqt-panel-0.10.0/plugin-clock/translations/clock_da_DK.ts000066400000000000000000000147541261500472700234710ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings LXQt Urindstillinger Clock Settings Time Tid &Show seconds Vis &sekunder 12 &hour style 12 &timers ur &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font Skri&fttype Font Skrifttype Date Dato Show &date Vis &dato D&ate format D&atoformat Fon&t Skrif&ttype Show date in &new line Vis dato i &ny linie &Use theme fonts Br&ug temaskrifttyper Time font Dato skrifttype Date font Dato skrifttype Ultra light Ultralyst Light Lyst Ultra black Ultramørkt Black Mørkt Bold Fed Demi bold Halvfed Italic Kursiv Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_de.desktop000066400000000000000000000001431261500472700241250ustar00rootroot00000000000000Name[de]=Uhr und Kalender Comment[de]=Zeigt die aktuelle Uhrzeit. Ein Kalender ist auch enthalten. lxqt-panel-0.10.0/plugin-clock/translations/clock_de.ts000066400000000000000000000124061261500472700231070ustar00rootroot00000000000000 FirstDayCombo <locale based> <Basierend auf lokale Datumseinstellungen> LXQtClockConfiguration Clock Settings Uhr-Einstellungen Time Zeit &Show seconds &Sekunden anzeigen 12 &hour style 12 Stunden U&hr-Stil &Use UTC &UTC verwenden Date Datum Date &format Datums&format &Do not show date &Datum nicht anzeigen Show date &before time Datum &vor Zeit anzeigen Show date &after time Datum hinter Uhrzeit &anzeigen Show date below time on new &line Datum unterha&lb Uhrzeit anzeigen First day of week in calendar Erster Wochentag im Kalender Orientation Ausrichtung Auto&rotate when the panel is vertical Automatisch d&rehen bei vertikaler Leiste Input custom date format Eigenes Datumsformat Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: Interpretierte Datumsformatsequenzen sind: d Tag als Zahl ohne führende Null (1 bis 31) dd Tag als Zahl mit führender Null (01 bis 31) ddd abgekürzter lokalisierter Tagesname (d.h. 'Mon' bis 'Son'). dddd ganzer lokalisierter Tagesname (d.h. 'Montag' bis 'Sonntag'). M Monat als Zahl ohne führende Null (1-12) MM Monat als Zahl mit führender Null (01-12) MMM abgekürzter lokalisierter Monatsname (d.h. 'Jan' bis 'Dez'). MMMM ganzer lokalisierter Monatsname (d.h. 'Januar' bis 'Dezember'). yy Jahr als zweistellige Zahl (00-99) yyyy Jahr als vierstellige Zahl Alle anderen Zeichen werden als Text behandelt. Jede Zeichenfolge, die in einfachen Hochkommas eingeschlossen ist ('), wird ebenfalls als Text behandelt und nicht als Ausdruck benutzt. Eigenes Datumsformat: lxqt-panel-0.10.0/plugin-clock/translations/clock_el.desktop000066400000000000000000000004011261500472700241320ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[el]=Ρολόι και ημερολόγιο Name[el]=Ρολόι lxqt-panel-0.10.0/plugin-clock/translations/clock_el.ts000066400000000000000000000217451261500472700231250ustar00rootroot00000000000000 FirstDayCombo <locale based> <locale based> LXQtClockConfiguration LXQt Clock Settings Ρυθμίσεις ρολογιού LXQt Clock Settings Ρυθμίσεις του ρολογιού Time Ώρα &Show seconds Εμ&φάνιση δευτερολέπτων 12 &hour style 12 &ωρη μορφή &Use UTC &Χρήση της UTC Date &format Μορφή &ημερομηνίας &Do not show date &Να μην εμφανίζεται η ημερομηνία Show date &before time Εμφάνιση της ημερομηνίας &πριν την ώρα Show date &after time Εμφάνιση της ημερομηνίας &μετά την ώρα Show date below time on new &line Εμφάνιση της ημερομηνίας κάτω από την ώρα σε νέα &γραμμή First day of week in calendar Η πρώτη ημέρα της εβδομάδας στο ημερολόγιο Orientation Προσανατολισμός Auto&rotate when the panel is vertical Αυτόματη περιστρο&φή όταν ο πίνακας είναι τοποθετημένος κατακόρυφα &Font &Γραμματοσειρά Font Γραμματοσειρά Date Ημερομηνία Show &date Εμφάνιση &ημερομηνίας D&ate format Μορφή η&μερομηνίας Fon&t Γρ&αμματοσειρά Show date in &new line Εμφάνιση ημερομηνίας σε &νέα γραμμή &Use theme fonts Χρήση γραμματοσειρών &θέματος Time font Γραμματοσειρά ώρας Date font Γραμματοσειρά ημερομηνίας Ultra light Υπερβολικά ελαφρύ Light Ελαφρύ Ultra black Υπερβολικά μαύρο Black Μαύρο Bold Έντονο Demi bold Ελαφρώς έντονο Italic Πλάγια Input custom date format Εισαγωγή προσαρμοσμένης μορφής ημερομηνίας Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: Οι ερμηνευόμενες ακολουθίες της μορφής της ημερομηνίας είναι: d η ημέρα ως αριθμός δίχως το αρχικό μηδενικό (1 ως 31) dd η ημέρα ως αριθμός με το αρχικό μηδενικό (01 ως 31) ddd η συντομογραφημένη τοπικοποιημένη ονομασία της ημέρας (π.χ. «Δευ» ως «Κυρ»). dddd η μακριά τοπικοποιημένη ονομασία της ημέρας (π.χ. «Δευτέρα» ως «Κυριακή»). M ο μήνας ως αριθμός δίχως το αρχικό μηδενικό (1-12) MM ο μήνας ως αριθμός με το αρχικό μηδενικό (01-12) MMM η συντομογραφημένη τοπικοποιημένη ονομασία του μήνα (π.χ. «Ιαν» ως «Δεκ»). MMMM η μακριά τοπικοποιημένη ονομασία του μήνα (π.χ. «Ιανουάριος» ως «Δεκέμβριος»). yy το έτος ως διψήφιος αριθμός (00-99) yyyy το έτος ως τετραψήφιος αριθμός Όλοι οι λοιποί χαρακτήρες εισόδου θα διαχειριστούν ως κείμενο. Οποιαδήποτε ακολουθία χαρακτήρων που εγκλείονται σε μονά εισαγωγικά (') θα διαχειρίζονται επίσης ως κείμενο και δεν θα χρησιμοποιούνται ως έκφραση. Προσαρμοσμένη μορφή ημερομηνίας: lxqt-panel-0.10.0/plugin-clock/translations/clock_eo.desktop000066400000000000000000000003571261500472700241470ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[eo]=Horloĝo kaj kalendaro Name[eo]=Horloĝo lxqt-panel-0.10.0/plugin-clock/translations/clock_eo.ts000066400000000000000000000150011261500472700231140ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Agordoj de horloĝo de LXQt Clock Settings Time Tempo &Show seconds Montri &sekundojn 12 &hour style 12-&hora aranĝo &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font &Tiparo Font Tiparo Date Dato Show &date Montri &daton D&ate format &Aranĝo de dato Fon&t &Tiparo Show date in &new line Montri daton en &nova linio &Use theme fonts &Uzi tiparojn de etoso Time font Tiparo de tempo Date font Tiparo de dato Ultra light Tre maldike Light Maldike Ultra black Tre nigre Black Nigre Bold Dike Demi bold Mezdike Italic Kursive Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_es.desktop000066400000000000000000000003501261500472700241440ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[es]=Reloj y calendario Name[es]=Reloj lxqt-panel-0.10.0/plugin-clock/translations/clock_es.ts000066400000000000000000000150351261500472700231270ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Configuración del reloj de LXQt Clock Settings Time Hora &Show seconds &Mostrar segundos 12 &hour style Estilo de 12 &horas &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font &Fuente Font Fuente Date Fecha Show &date Mostrar &fecha D&ate format Formato de &fecha Fon&t Fuen&te Show date in &new line Mostrar fecha en &nueva línea &Use theme fonts &Usar fuente del tema Time font Fuente de la hora Date font Fuente de la fecha Ultra light Ultra ligero Light Ligero Ultra black Ultra negro Black Negro Bold Negrita Demi bold Semi negrita Italic Cursiva Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_es_UY.ts000066400000000000000000000107401261500472700235420ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Configuración de Reloj LXQt Clock Settings Time Hora &Show seconds 12 &hour style &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical Date Fecha Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_es_VE.desktop000066400000000000000000000003561261500472700245440ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[es_VE]=Reloj y calendario Name[es_VE]=Reloj lxqt-panel-0.10.0/plugin-clock/translations/clock_es_VE.ts000066400000000000000000000150421261500472700235170ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Configuración de Reloj LXQt Clock Settings Time Hora &Show seconds Mostrar &Segundos 12 &hour style Estilo 12 &horas &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font &Fuente Font Fuente Date Fecha Show &date Mostrar &fecha D&ate format Formato &De Fecha Fon&t Fuen&te Show date in &new line Mostrar la fecha en una &nueva linea &Use theme fonts &Usar las letras del tema Time font Fuente de hora Date font Fuente de fecha Ultra light Ultra delgada Light Delgada Ultra black Ultra negrita Black Negra Bold Negrita Demi bold Semi negrilla Italic Italica Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_eu.desktop000066400000000000000000000003541261500472700241520ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[eu]=Erlojua eta egutegia Name[eu]=Erlojua lxqt-panel-0.10.0/plugin-clock/translations/clock_eu.ts000066400000000000000000000150531261500472700231310ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings LXQt erlojuaren ezarpenak Clock Settings Time Ordua &Show seconds &Erakutsi segundoak 12 &hour style 12 &orduko estiloa &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font &Letra-tipoa Font Letra-tipoa Date Data Show &date Erakutsi &data D&ate format D&ata-formatua Fon&t Letra-&tipoa Show date in &new line Erakutsi data lerro &berri batean &Use theme fonts &Erabili letra-tipoen gaiak Time font Orduaren letra-tipoa Date font Dataren letra-tipoa Ultra light Ultra argia Light Argia Ultra black Ultra beltza Black Beltza Bold Lodia Demi bold Erdi-lodia Italic Etzana Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_fi.desktop000066400000000000000000000003501261500472700241330ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[fi]=Kello ja kalenteri Name[fi]=Kello lxqt-panel-0.10.0/plugin-clock/translations/clock_fi.ts000066400000000000000000000151041261500472700231130ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings LXQtin kellon asetukset Clock Settings Time Aika &Show seconds &Näytä sekunnit 12 &hour style &12 tunnin esitystapa &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font &Kirjasin Font Kirjasin Date Päivä Show &date Näytä &päivä D&ate format Päiväyksen &muoto Fon&t Ki&rjasin Show date in &new line Näytä päivä &omalla rivillä &Use theme fonts Käytä &teeman kirjasimia Time font Kirjasin aikaa varten Date font Kirjasin päiväystä varten Ultra light Todella vaalea Light Vaalea Ultra black Todella musta Black Musta Bold Lihavoitu Demi bold Hieman lihavoitu Italic Kursivoitu Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_fr_FR.desktop000066400000000000000000000003631261500472700245370ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[fr_FR]=Horloge et calendrier Name[fr_FR]=Horloge lxqt-panel-0.10.0/plugin-clock/translations/clock_fr_FR.ts000066400000000000000000000115211261500472700235120ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Paramètres de l'horloge de LXQt Clock Settings Time Heure &Show seconds &Montrer les secondes 12 &hour style &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical Font Police Date Date Bold Gras Italic Italique Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_hu.desktop000066400000000000000000000003451261500472700241550ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[hu]=Óra és naptár Name[hu]=Óra lxqt-panel-0.10.0/plugin-clock/translations/clock_hu.ts000066400000000000000000000121301261500472700231250ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration Clock Settings Órabeállítás Time Idő &Show seconds Má&sodpercek 12 &hour style 12 órás &stílus &Use UTC &UTC használat &Do not show date Ne legyen &dátum Show date &before time &Dátum az óra előtt Show date &after time Dátum &az óra után Show date below time on new &line Dátum az órával új sorban First day of week in calendar A hét első napja Orientation Helyzet Auto&rotate when the panel is vertical Függélyes panelnél automata görgetés Date Dátum Date &format Dá&tumalak Input custom date format Egyéni dátumalak Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: Értelmezett dátumformázások: d a nap számként bevezető nulla nélkül (1 - 31) dd a nap számként bevezető nullával (01 - 31) ddd a nap rövid neve (e.g. 'Mon' to 'Sun'). dddd a nap hosszú neve (e.g. 'Monday' to 'Sunday'). M a hónap számként bevezető nulla nélkül (1-12) MM a hónap számként bevezető nullával (01-12) MMM a hónap rövid neve (e.g. 'Jan' to 'Dec'). MMMM a hónap hosszú neve (e.g. 'January' to 'December'). yy az év két számjeggyel (00-99) yyyy az év négy számjeggyel MInden más karakter szövegként értelmeződik. Sima zárójelbe (') tett karaktersorozat szövegként van kezelve, tehát az nem kifejezés. Egyéni dátumalak: lxqt-panel-0.10.0/plugin-clock/translations/clock_hu_HU.ts000066400000000000000000000121331261500472700235240ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration Clock Settings Órabeállítás Time Idő &Show seconds Má&sodpercek 12 &hour style 12 órás &stílus &Use UTC &UTC használat &Do not show date Ne legyen &dátum Show date &before time &Dátum az óra előtt Show date &after time Dátum &az óra után Show date below time on new &line Dátum az órával új sorban First day of week in calendar A hét első napja Orientation Helyzet Auto&rotate when the panel is vertical Függélyes panelnél automata görgetés Date Dátum Date &format Dá&tumalak Input custom date format Egyéni dátumalak Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: Értelmezett dátumformázások: d a nap számként bevezető nulla nélkül (1 - 31) dd a nap számként bevezető nullával (01 - 31) ddd a nap rövid neve (e.g. 'Mon' to 'Sun'). dddd a nap hosszú neve (e.g. 'Monday' to 'Sunday'). M a hónap számként bevezető nulla nélkül (1-12) MM a hónap számként bevezető nullával (01-12) MMM a hónap rövid neve (e.g. 'Jan' to 'Dec'). MMMM a hónap hosszú neve (e.g. 'January' to 'December'). yy az év két számjeggyel (00-99) yyyy az év négy számjeggyel MInden más karakter szövegként értelmeződik. Sima zárójelbe (') tett karaktersorozat szövegként van kezelve, tehát az nem kifejezés. Egyéni dátumalak: lxqt-panel-0.10.0/plugin-clock/translations/clock_ia.desktop000066400000000000000000000002251261500472700241270ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Clock Comment=Clock and calendar #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-clock/translations/clock_ia.ts000066400000000000000000000105361261500472700231120ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration Clock Settings Time &Show seconds 12 &hour style &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical Date Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_id_ID.desktop000066400000000000000000000002251261500472700245060ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Clock Comment=Clock and calendar #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-clock/translations/clock_id_ID.ts000066400000000000000000000107311261500472700234660ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Setting Waktu LXQt Clock Settings Time Waktu &Show seconds 12 &hour style &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical Date Tanggal Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_it.desktop000066400000000000000000000000651261500472700241540ustar00rootroot00000000000000Comment[it]=Orologio e calendario Name[it]=Orologio lxqt-panel-0.10.0/plugin-clock/translations/clock_it.ts000066400000000000000000000152011261500472700231270ustar00rootroot00000000000000 FirstDayCombo <locale based> <basato su locale> LXQtClockConfiguration LXQt Clock Settings Impostazioni dell'orologio di LXQt Clock Settings Impostazioni orologio Time Ora &Show seconds &Mostra i secondi 12 &hour style &Stile 12 ore &Use UTC &Usa UTC Date &format Formato &data &Do not show date &Non mostrare la data Show date &before time Prima la &data Show date &after time Prima l'&ora Show date below time on new &line Mostra la data su una &seconda riga First day of week in calendar Primo giorno della settimana Orientation Orientamento Auto&rotate when the panel is vertical &Ruota automaticamente se il panello è verticale &Font &Carattere Font Carattere Date Data Show &date Mostra la &data D&ate format &Formato della data Fon&t Cara&ttere Show date in &new line Mostra la data in una &nuova riga &Use theme fonts &Utilizza i caratteri del tema Time font Carattere dell'ora Date font Carattere della data Ultra light Chiarissimo Light Chiaro Ultra black Nerissimo Black Nero Bold Grassetto Demi bold Neretto Italic Corsivo Input custom date format Formato personalizzato Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_ja.desktop000066400000000000000000000003571261500472700241360ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[ja]=時計とカレンダー Name[ja]=時計 lxqt-panel-0.10.0/plugin-clock/translations/clock_ja.ts000066400000000000000000000122441261500472700231110ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration Clock Settings 時計の設定 Time 時刻 &Show seconds 秒を表示(&S) 12 &hour style 12時間表示(&H) &Use UTC UTCを使用する(&U) Date &format 日時の形式(&F) &Do not show date 日付を表示しない(&D) Show date &before time 日付のあとに時刻(&B) Show date &after time 時刻のあとに日付(&A) Show date below time on new &line 時刻の下に日付(&L) First day of week in calendar Orientation 回転 Auto&rotate when the panel is vertical パネルが縦のときに自動回転(&R) Date 日付 Input custom date format 日付の表示形式を指定 Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: 解釈される記法: d 日(ゼロなし) (1 - 31) dd 日(ゼロ埋め) (01 - 31) ddd 曜日(短い) ('月' - '日') dddd 曜日(長い) ('月曜日' - '日曜日') M 月(ゼロなし) (1 - 12) MM 月(ゼロ埋め) (01 - 12) MMM 月の名称(短い) ('1月' - '12月') MMMM 月の名称 (長い) ('1月' - '12月'、※日本語では上記と同じ) yy 西暦年(2桁) (00 - 99) yyyy 西暦年(4桁) そのほかの文字は解釈されず、テキストとして表示されます。 上記の解釈される文字も、シングルクオーテーション(')で括ると 一般の文字として扱われ、上記の解釈はされません。 日付形式の指定: lxqt-panel-0.10.0/plugin-clock/translations/clock_ko.desktop000066400000000000000000000002251261500472700241470ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Clock Comment=Clock and calendar #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-clock/translations/clock_ko.ts000066400000000000000000000105361261500472700231320ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration Clock Settings Time &Show seconds 12 &hour style &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical Date Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_lt.desktop000066400000000000000000000003621261500472700241570ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[lt]=Laikrodis ir kalendorius Name[lt]=Laikrodis lxqt-panel-0.10.0/plugin-clock/translations/clock_lt.ts000066400000000000000000000150631261500472700231400ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings LXQt laikrodžio nuostatos Clock Settings Time Laikas &Show seconds &Rodyti sekundes 12 &hour style 12 &valandų stilius &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font Šri&ftas Font Šriftas Date Data Show &date Rodyti &datą D&ate format D&atos formatas Fon&t Šrif&tas Show date in &new line Datą rodyti &naujoje eilutėje &Use theme fonts Na&udoti apipavidalinimo šriftus Time font Laiko šriftas Date font Datos šriftas Ultra light Ypač lengvas Light Lengvas Ultra black Ypač juodas Black Juodas Bold Pusjuodis Demi bold Šiek tiek pastorintas Italic Pasviręs Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_nl.desktop000066400000000000000000000003451261500472700241520ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[nl]=Klok en kalender Name[nl]=Klok lxqt-panel-0.10.0/plugin-clock/translations/clock_nl.ts000066400000000000000000000150151261500472700231270ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Instellingen van LXQt Klok Clock Settings Time Tijd &Show seconds &Toon seconden 12 &hour style 12 &uur stijl &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font &Lettertype Font Lettertype Date Datum Show &date Toon &datum D&ate format Datumnotatie Fon&t Lettertype Show date in &new line Toon datum in &nieuwe regel &Use theme fonts &Gebruik lettertypes van thema Time font Lettertype voor de tijd Date font Lettertype voor de datum Ultra light Ultralicht Light Licht Ultra black Ultrazwart Black Zwart Bold Vet Demi bold Halfvet Italic Schuin Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_pl.desktop000066400000000000000000000003521261500472700241520ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[pl]=Zegar oraz kalendarz Name[pl]=Zegar lxqt-panel-0.10.0/plugin-clock/translations/clock_pl_PL.desktop000066400000000000000000000003551261500472700245500ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[pl_PL]=Zegar i kalendarz Name[pl_PL]=Zegar lxqt-panel-0.10.0/plugin-clock/translations/clock_pl_PL.ts000066400000000000000000000151161261500472700235260ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Ustawienia zegara LXQt Clock Settings Ustawienia zegara Time Czas &Show seconds &Pokaż sekundy 12 &hour style 12 &godzinny styl &Use UTC &Użyj UTC Date &format &Format daty &Do not show date &Nie pokazuj daty Show date &before time Poka&ż datę przed godziną Show date &after time Pokaż datę &za godziną Show date below time on new &line Pokaż datę pod godziną w nowej &linii First day of week in calendar Orientation Orientacja Auto&rotate when the panel is vertical Ob&róć gdy panel jest pionowy &Font &Czcionka Font Czcionka Date Data Show &date Pokaż &date D&ate format Format C&zasu Fon&t Czcionk&a Show date in &new line Pokaż datę w &nowej linii &Use theme fonts &Użyj motywów czcionek Time font Czcionka czasu Date font Czcionka daty Ultra light Bardzo cienka Light Cienka Ultra black Bardzo czarna Black Czarna Bold Pogrubiona Demi bold Wpół pogrubiona Italic Kursywa Input custom date format Własny format daty Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_pt.desktop000066400000000000000000000003571261500472700241670ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Name[pt]=Relógio Comment[pt]=Relógio e calendário lxqt-panel-0.10.0/plugin-clock/translations/clock_pt.ts000066400000000000000000000151031261500472700231370ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Definições do relógio LXQt Clock Settings Time Horas &Show seconds Mo&strar segundos 12 &hour style Estilo 12 &horas &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font Tipo &de letra Font Tipo de letra Date Data Show &date Mostrar &data D&ate format Form&ato da data Fon&t &Tipo de letra Show date in &new line Mostrar data em linha disti&nta &Use theme fonts &Utilizar tipo de letra do tema Time font Tipo de letra das horas Date font Tipo de letra da data Ultra light Mais clara Light Clara Ultra black Normal carregado Black Normal Bold Negrito Demi bold Negrito suave Italic Itálico Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_pt_BR.desktop000066400000000000000000000003651261500472700245510ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[pt_BR]=Relógio e calendário Name[pt_BR]=Relógio lxqt-panel-0.10.0/plugin-clock/translations/clock_pt_BR.ts000066400000000000000000000150221261500472700235220ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Configurações do relógio do LXQt Clock Settings Time Hora &Show seconds &Mostrar segundos 12 &hour style Estilo 12 &horas &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font &Fonte Font Fonte Date Data Show &date Mostrar &data D&ate format Formato da d&ata Fon&t Fon&te Show date in &new line Mostrar data em &nova linha &Use theme fonts &Utilizar fontes do tema Time font Fonte da hora Date font Fonte da data Ultra light Super claro Light Claro Ultra black Super escuro Black Escuro Bold Negrito Demi bold Semi negrito Italic Itálico Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_ro_RO.desktop000066400000000000000000000004261261500472700245610ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[ro_RO]=Afișează ora curentă incluzând și un calendar. Name[ro_RO]=Data și ora lxqt-panel-0.10.0/plugin-clock/translations/clock_ro_RO.ts000066400000000000000000000141321261500472700235350ustar00rootroot00000000000000 FirstDayCombo <locale based> <bazat pe localizare> LXQtClockConfiguration LXQt Clock Settings Setări ceas LXQt Clock Settings Setări ceas Time Oră &Show seconds Afișează &secundele 12 &hour style Stil 12 de &ore &Use UTC &Utilizează UTC Date &format &Formatul datei &Do not show date &Nu afișa data Show date &before time Afișează data &înaintea orei Show date &after time Afișează data &după timp Show date below time on new &line Afișează data pe un &rând nou sub oră First day of week in calendar Prima zi a săptămânii Orientation Orientare Auto&rotate when the panel is vertical Rotire automată când panoul e vertical Date Dată Show &date Afișează &data D&ate format Format d&ată Show date in &new line Afișează data pe rând &nou Input custom date format Format de dată personalizat Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: Secvențe interpretate pentru formatarea datei sunt: d numărul zilei fără zero în față (între 1 și 31) dd numărul zilei cu zero în față (între 01 și 31) ddd numele abreviat al zilei (de ex. 'Lu' până 'Du'). dddd numele lung al zilei (de ex. 'Luni' până 'Duminică'). M numărul lunii fără zero în față (1-12) MM numărul lunii cu zero în față (01-12) MMM numele abreviat și localizat al lunii (de ex. 'Ian' - 'Dec'). MMMM numele lung și localizat al lunii (de ex. 'Ianuarie' - 'December'). yy anul ca un număr din 2 cifre (00-99) yyyy anul ca un număr din 4 cifre Orice alt caracter introdus va fi tratat ca text. Orice secvență de caractere intre ghilimele simple (') vor fi la fel tratate ca text si nu vor fi interpretate in expresie. Format de dată personalizat: lxqt-panel-0.10.0/plugin-clock/translations/clock_ru.desktop000066400000000000000000000004051261500472700241640ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[ru]=Часы и календарь Name[ru]=Дата и время lxqt-panel-0.10.0/plugin-clock/translations/clock_ru.ts000066400000000000000000000137241261500472700231510ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration Clock Settings Настройка даты и времени Time Время &Show seconds &Показывать секунды 12 &hour style 12 &часовой формат &Use UTC &Использовать UTC Date Дата Date &format Ф&ормат даты &Do not show date &Не показывать дату Show date &before time Показывать дату &перед временем Show date &after time Показывать дату &после времени Show date below time on new &line Показывать дату под временем новой &строкой First day of week in calendar Orientation Ориентация Auto&rotate when the panel is vertical Авто&поворот для вертикальной панели Input custom date format Введите свой формат даты Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: Интерпретация последовательностей формата даты: d день как число без ноля перед ним (от 1 до 31) dd день как число с нолём перед ним (от 01 до 31) ddd аббревиат́ура названия дня недели (от «Пн» к «Вс»). dddd полное название дня недели (от «Понедельник» к «Воскресенье»). M месяц как число без ноля перед ним (от 1 до 12) MM месяц как число с нолём перед ним (от 01 до 12) MMM аббревиат́ура названия месяца (от «Янв» до «Дек»). MMMM полное название месяца (от «Январь» до «Декабрь»). yy год как двухразрядное число (00-99) yyyy год как четырёхразрядное число Все прочие введёные знаки будут обработаны как текст. Любая последовательность знаков, заключённая в одинарные кавычки ('), также будет обработана как текст и не будет использована в выражении. Свой формат даты: lxqt-panel-0.10.0/plugin-clock/translations/clock_ru_RU.desktop000066400000000000000000000004131261500472700245710ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[ru_RU]=Часы и календарь Name[ru_RU]=Дата и время lxqt-panel-0.10.0/plugin-clock/translations/clock_ru_RU.ts000066400000000000000000000137271261500472700235620ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration Clock Settings Настройка даты и времени Time Время &Show seconds &Показывать секунды 12 &hour style 12 &часовой формат &Use UTC &Использовать UTC Date Дата Date &format Ф&ормат даты &Do not show date &Не показывать дату Show date &before time Показывать дату &перед временем Show date &after time Показывать дату &после времени Show date below time on new &line Показывать дату под временем новой &строкой First day of week in calendar Orientation Ориентация Auto&rotate when the panel is vertical Авто&поворот для вертикальной панели Input custom date format Введите свой формат даты Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: Интерпретация последовательностей формата даты: d день как число без ноля перед ним (от 1 до 31) dd день как число с нолём перед ним (от 01 до 31) ddd аббревиат́ура названия дня недели (от «Пн» к «Вс»). dddd полное название дня недели (от «Понедельник» к «Воскресенье»). M месяц как число без ноля перед ним (от 1 до 12) MM месяц как число с нолём перед ним (от 01 до 12) MMM аббревиат́ура названия месяца (от «Янв» до «Дек»). MMMM полное название месяца (от «Январь» до «Декабрь»). yy год как двухразрядное число (00-99) yyyy год как четырёхразрядное число Все прочие введёные знаки будут обработаны как текст. Любая последовательность знаков, заключённая в одинарные кавычки ('), также будет обработана как текст и не будет использована в выражении. Свой формат даты: lxqt-panel-0.10.0/plugin-clock/translations/clock_sk.desktop000066400000000000000000000003511261500472700241530ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[sk]=Hodiny a kalendár Name[sk]=Hodiny lxqt-panel-0.10.0/plugin-clock/translations/clock_sk_SK.ts000066400000000000000000000107461261500472700235360ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Nastavenia hodín prostredia LXQt Clock Settings Time Čas &Show seconds 12 &hour style &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical Date Dátum Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_sl.desktop000066400000000000000000000003421261500472700241540ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[sl]=Ura in koledar Name[sl]=Ura lxqt-panel-0.10.0/plugin-clock/translations/clock_sl.ts000066400000000000000000000150051261500472700231330ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Nastavitve ure za LXQt Clock Settings Time Čas &Show seconds Pokaži &sekunde 12 &hour style 12-&urni slog &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font &Pisava Font Pisava Date Datum Show &date Pokaži &datum D&ate format &Oblika datuma Fon&t P&isava Show date in &new line Pokaži datum v &novi vrstici &Use theme fonts &Uporabi pisavo teme Time font Pisava za čas Date font Pisava za datum Ultra light Ultra lahko Light Lahko Ultra black Ultra krepko Black Krepko Bold Polkrepko Demi bold Pol-polkrepko Italic Ležeče Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_sr.desktop000066400000000000000000000003611261500472700241630ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[sr]=Сат и календар Name[sr]=Сат lxqt-panel-0.10.0/plugin-clock/translations/clock_sr@ijekavian.desktop000066400000000000000000000001131261500472700261400ustar00rootroot00000000000000Name[sr@ijekavian]=Сат Comment[sr@ijekavian]=Сат и календар lxqt-panel-0.10.0/plugin-clock/translations/clock_sr@ijekavianlatin.desktop000066400000000000000000000001061261500472700271720ustar00rootroot00000000000000Name[sr@ijekavianlatin]=Sat Comment[sr@ijekavianlatin]=Sat i kalendar lxqt-panel-0.10.0/plugin-clock/translations/clock_sr@latin.desktop000066400000000000000000000003561261500472700253170ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[sr@latin]=Sat i kalendar Name[sr@latin]=Sat lxqt-panel-0.10.0/plugin-clock/translations/clock_sr@latin.ts000066400000000000000000000105441261500472700242740ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration Clock Settings Time &Show seconds 12 &hour style &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical Date Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_sr_BA.ts000066400000000000000000000123711261500472700235060ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Подешавање Рејзоровог сата Clock Settings Time Вријеме &Show seconds 12 &hour style &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical Show seconds Прикажи секунде 12 hour style 12-часовни сат Date Датум Show date Прикажи датум Show date in new line Прикажи датум у новој линији Date format Формат датума Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_sr_RS.ts000066400000000000000000000110011261500472700235350ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Подешавање Рејзоровог сата Clock Settings Time Време &Show seconds 12 &hour style &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical Date Датум Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_th_TH.desktop000066400000000000000000000004261261500472700245470ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[th_TH]=นาฬิกาและปฏิทิน Name[th_TH]=นาฬิกา lxqt-panel-0.10.0/plugin-clock/translations/clock_th_TH.ts000066400000000000000000000156301261500472700235270ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings ค่าตั้งนาฬิกา LXQt Clock Settings Time เวลา &Show seconds แ&สดงวินาที 12 &hour style รูปแบบ 12 ชั่วโ&มง &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font แบบอั&กษร Font แบบอักษร Date วันที่ Show &date แสดง&เวลา D&ate format รูปแ&บบวันที่ Fon&t แบบอักษ&ร Show date in &new line แสดงวันที่ในบรรทัดใ&หม่ &Use theme fonts &ใช้แบบอักษรของชุดตกแต่ง Time font แบบอักษรของเวลา Date font แบบอักษรของวันที่ Ultra light สว่างจ้า Light สว่าง Ultra black ดำมืด Black ดำ Bold ตัวหนา Demi bold ตัวกึ่งหนา Italic ตัวเอียง Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_tr.desktop000066400000000000000000000003431261500472700241640ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[tr]=Saat ve takvim Name[tr]=Saat lxqt-panel-0.10.0/plugin-clock/translations/clock_tr.ts000066400000000000000000000150371261500472700231470ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings LXQt Saat Ayarları Clock Settings Time Zaman &Show seconds &Saniyeyi göster 12 &hour style 12 saatlik &gösterim biçimi &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font &Yazı tipi Font Yazı Tipi Date Tarih Show &date Tarihi gö&ster D&ate format T&arih biçimi Fon&t Yazı &Tipi Show date in &new line Tarihi &yeni satırda göster &Use theme fonts &Tema yazıtipini kullan Time font Zaman yazı tipi Date font Tarih yazıtipi Ultra light Aşırı ince Light Hafif Ultra black Aşırı siyah Black Siyah Bold Koyu Demi bold Yarı koyu Italic Eğik Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_uk.desktop000066400000000000000000000004331261500472700241560ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[uk]=Показує поточний час. Календар Name[uk]=Дата і час lxqt-panel-0.10.0/plugin-clock/translations/clock_uk.ts000066400000000000000000000153521261500472700231410ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings Налаштування годинника LXQt Clock Settings Time Час &Show seconds Показувати &секунди 12 &hour style 12-&годинний стиль &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font &Шрифт Font Шрифт Date Дата Show &date Показувати &дату D&ate format Формат д&ати Fon&t Шриф&т Show date in &new line Показувати дату в &новому рядку &Use theme fonts &Використовувати шрифти з теми Time font Шрифт часу Date font Шрифт дати Ultra light Надтонкий Light Тонкий Ultra black Дуже темний Black Темний Bold Жирний Demi bold Напівжирний Italic Нахилений Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_zh_CN.GB2312.desktop000066400000000000000000000002251261500472700253360ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Clock Comment=Clock and calendar #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-clock/translations/clock_zh_CN.desktop000066400000000000000000000003541261500472700245420ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[zh_CN]=时钟和日历 Name[zh_CN]=时钟 lxqt-panel-0.10.0/plugin-clock/translations/clock_zh_CN.ts000066400000000000000000000147611261500472700235260ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings LXQt时钟设置 Clock Settings Time 时间 &Show seconds 显示秒(&S) 12 &hour style 12小时样式(&H) &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font 字体(&F) Font 字体 Date 日期 Show &date 显示日期(&D) D&ate format 日期格式(&A) Fon&t 字体(&T) Show date in &new line 在新行显示日期(&N) &Use theme fonts 使用主题字体(&U) Time font 时间字体 Date font 日期字体 Ultra light 超亮 Light Ultra black 超黑 Black Bold 黑体 Demi bold 半粗体 Italic 斜体 Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-clock/translations/clock_zh_TW.desktop000066400000000000000000000003541261500472700245740ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Date & time Comment=Displays the current time. Comes with a calendar. #TRANSLATIONS_DIR=../translations # Translations Comment[zh_TW]=時鐘與日曆 Name[zh_TW]=時鐘 lxqt-panel-0.10.0/plugin-clock/translations/clock_zh_TW.ts000066400000000000000000000147741261500472700235640ustar00rootroot00000000000000 FirstDayCombo <locale based> LXQtClockConfiguration LXQt Clock Settings LXQt時鐘設定 Clock Settings Time 時間 &Show seconds 顯示秒(&S) 12 &hour style 十二小時制(&h) &Use UTC Date &format &Do not show date Show date &before time Show date &after time Show date below time on new &line First day of week in calendar Orientation Auto&rotate when the panel is vertical &Font 字體(&F) Font 字體 Date 日期 Show &date 顯示日期(&d) D&ate format 日期格式(&a) Fon&t 字體(&t) Show date in &new line 日期顯示在下一行中 &Use theme fonts 使用主題預設字體(&U) Time font 時間的字體 Date font 日期的字體 Ultra light 極亮 Light Ultra black 極暗 Black Bold 粗體 Demi bold 半粗體 Italic 斜體 Input custom date format Interpreted sequences of date format are: d the day as number without a leading zero (1 to 31) dd the day as number with a leading zero (01 to 31) ddd the abbreviated localized day name (e.g. 'Mon' to 'Sun'). dddd the long localized day name (e.g. 'Monday' to 'Sunday'). M the month as number without a leading zero (1-12) MM the month as number with a leading zero (01-12) MMM the abbreviated localized month name (e.g. 'Jan' to 'Dec'). MMMM the long localized month name (e.g. 'January' to 'December'). yy the year as two digit number (00-99) yyyy the year as four digit number All other input characters will be treated as text. Any sequence of characters that are enclosed in single quotes (') will also be treated as text and not be used as an expression. Custom date format: lxqt-panel-0.10.0/plugin-colorpicker/000077500000000000000000000000001261500472700174715ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-colorpicker/CMakeLists.txt000066400000000000000000000002431261500472700222300ustar00rootroot00000000000000set(PLUGIN "colorpicker") set(HEADERS colorpicker.h ) set(SOURCES colorpicker.cpp ) set(UIS "") set(LIBRARIES lxqt ) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-colorpicker/colorpicker.cpp000066400000000000000000000047521261500472700225210ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Aaron Lewis * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "colorpicker.h" #include #include #include ColorPicker::ColorPicker(const ILXQtPanelPluginStartupInfo &startupInfo) : QObject(), ILXQtPanelPlugin(startupInfo) { realign(); } ColorPicker::~ColorPicker() { } void ColorPicker::realign() { mWidget.button()->setFixedHeight(panel()->iconSize()); mWidget.button()->setFixedWidth(panel()->iconSize()); mWidget.lineEdit()->setFixedHeight(panel()->iconSize()); } ColorPickerWidget::ColorPickerWidget(QWidget *parent): QFrame(parent) { QFontMetrics fm (mLineEdit.font()); mLineEdit.setFixedWidth ( 10*fm.width ("a") ); QHBoxLayout *layout = new QHBoxLayout(this); setLayout(layout); layout->addWidget (&mButton); layout->addWidget (&mLineEdit); mButton.setIcon(XdgIcon::fromTheme("color-picker", "kcolorchooser")); mCapturing = false; connect(&mButton, SIGNAL(clicked()), this, SLOT(captureMouse())); } ColorPickerWidget::~ColorPickerWidget() { } void ColorPickerWidget::mouseReleaseEvent(QMouseEvent *event) { if (!mCapturing) return; WId id = QApplication::desktop()->winId(); QPixmap pixmap = qApp->primaryScreen()->grabWindow(id, event->globalX(), event->globalY(), 1, 1); QImage img = pixmap.toImage(); QColor col = QColor(img.pixel(0,0)); mLineEdit.setText (col.name()); mCapturing = false; releaseMouse(); } void ColorPickerWidget::captureMouse() { grabMouse(Qt::CrossCursor); mCapturing = true; } lxqt-panel-0.10.0/plugin-colorpicker/colorpicker.h000066400000000000000000000045771261500472700221730ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Aaron Lewis * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQT_COLORPICKER_H #define LXQT_COLORPICKER_H #include "../panel/ilxqtpanelplugin.h" #include #include #include #include #include #include #include class ColorPickerWidget: public QFrame { Q_OBJECT public: ColorPickerWidget(QWidget* parent = 0); ~ColorPickerWidget(); QLineEdit *lineEdit() { return &mLineEdit; } QToolButton *button() { return &mButton; } protected: void mouseReleaseEvent(QMouseEvent *event); private slots: void captureMouse(); private: QLineEdit mLineEdit; QToolButton mButton; bool mCapturing; }; class ColorPicker : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: ColorPicker(const ILXQtPanelPluginStartupInfo &startupInfo); ~ColorPicker(); virtual QWidget *widget() { return &mWidget; } virtual QString themeId() const { return "ColorPicker"; } bool isSeparate() const { return true; } void realign(); private: ColorPickerWidget mWidget; }; class ColorPickerLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new ColorPicker(startupInfo); } }; #endif lxqt-panel-0.10.0/plugin-colorpicker/resources/000077500000000000000000000000001261500472700215035ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-colorpicker/resources/colorpicker.desktop.in000066400000000000000000000002761261500472700260240ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. Icon=color-picker #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-colorpicker/translations/000077500000000000000000000000001261500472700222125ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker.ts000066400000000000000000000001161261500472700250740ustar00rootroot00000000000000 lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_cs.desktop000066400000000000000000000003641261500472700266110ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[cs]=Dostaňte barvu pod ukazovátkem. Pro vývojáře webu. Name[cs]=Volič barev lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_cs_CZ.desktop000066400000000000000000000003721261500472700272040ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[cs_CZ]=Dostaňte barvu pod ukazovátkem. Pro vývojáře webu. Name[cs_CZ]=Volič barev lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_da.desktop000066400000000000000000000003571261500472700265720ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[da]=Find farven under musemarkøren. For webudviklere. Name[da]=Farvevælger lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_da_DK.desktop000066400000000000000000000003651261500472700271470ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[da_DK]=Find farven under musemarkøren. For webudviklere. Name[da_DK]=Farvevælger lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_de.desktop000066400000000000000000000001241261500472700265660ustar00rootroot00000000000000Name[de]=Farbwähler Comment[de]=Wählt Farbe unter dem Cursor. Für Webentwickler. lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_el.desktop000066400000000000000000000005271261500472700266050ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Name[el]=Επιλογέας χρωμάτων Comment[el]=Λήψη του χρώματος κάτω από τον δρομέα. Για προγραμματιστές ιστοσελίδων. lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_es.desktop000066400000000000000000000003741261500472700266140ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[es]=Obtiene el color bajo el cursor. Para desarrolladores web. Name[es]=Selector de color lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_es_VE.desktop000066400000000000000000000004121261500472700271770ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[es_VE]=Toma un color de la pantalla con el cursor, para desarrolladores web. Name[es_VE]=Recoge colores lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_eu.desktop000066400000000000000000000003771261500472700266210ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[eu]=Eskuratu kurtsorearen azpiko kolorea. Web-garatzaileentzat. Name[eu]=Kolore-hautatzailea lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_fi.desktop000066400000000000000000000003561261500472700266030ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[fi]=Näyttää hiiren osoittimen alla olevan värin. Name[fi]=Värivalitsin lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_hu.desktop000066400000000000000000000003401261500472700266120ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[hu]=Színszippantó. Fejlesztőknek. Name[hu]=Színválasztó lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_it.desktop000066400000000000000000000001441261500472700266140ustar00rootroot00000000000000Comment[it]=Rileva il colore sotto il cursore. Per sviluppatori web. Name[it]=Selettore del colore lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_ja.desktop000066400000000000000000000002441261500472700265730ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=カラーピッカー Comment=カーソルの下の色を取得します。ウェブ制作者向け lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_pl_PL.desktop000066400000000000000000000003721261500472700272110ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[pl_PL]=Pobierz kolor spod kursora. Dla webdeveloperów. Name[pl_PL]=Wybieracz kolorów lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_pt.desktop000066400000000000000000000003701261500472700266240ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Name[pt]=Seletor de cores Comment[pt]=Obter a cor por baixo do cursor. Para programadores web. lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_pt_BR.desktop000066400000000000000000000003721261500472700272110ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[pt_BR]=Obter a cor sob o cursor. Para desenvolvedores web. Name[pt_BR]=Seletor de cores lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_ro_RO.desktop000066400000000000000000000003421261500472700272200ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[ro_RO]=Obține culoarea de sub cursor. Pentru dezvoltatori web. lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_ru.desktop000066400000000000000000000004641261500472700266330ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[ru]=Получить цвет под курсором мыши. Для веб-разработчиков. Name[ru]=Цветовая палитраlxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_ru_RU.desktop000066400000000000000000000004721261500472700272400ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[ru_RU]=Получить цвет под курсором мыши. Для веб-разработчиков. Name[ru_RU]=Цветовая палитраlxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_th_TH.desktop000066400000000000000000000005701261500472700272110ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[th_TH]=นำค่าสีที่อยู่ใต้เคอร์เซอร์ขึ้นมา สำหรับนักพัฒนาเว็บ Name[th_TH]=ตัวเลือกค่าสี lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_uk.desktop000066400000000000000000000004371261500472700266240ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[uk]=Бере колір під курсором. Для web-розробників. Name[uk]=Селектор кольору lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_zh_CN.desktop000066400000000000000000000003631261500472700272040ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[zh_CN]=为网络开发者获取鼠标下的颜色。 Name[zh_CN]=颜色拾取器 lxqt-panel-0.10.0/plugin-colorpicker/translations/colorpicker_zh_TW.desktop000066400000000000000000000003741261500472700272400ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Color picker Comment=Get the color under the cursor. For web developers. # Translations Comment[zh_TW]=取得由標下的顏色。網頁開發者推荐使用。 Name[zh_TW]=取得顏色 lxqt-panel-0.10.0/plugin-cpuload/000077500000000000000000000000001261500472700166045ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-cpuload/CMakeLists.txt000066400000000000000000000004651261500472700213510ustar00rootroot00000000000000set(PLUGIN "cpuload") set(HEADERS lxqtcpuloadplugin.h lxqtcpuload.h lxqtcpuloadconfiguration.h ) set(SOURCES lxqtcpuloadplugin.cpp lxqtcpuload.cpp lxqtcpuloadconfiguration.cpp ) set(UIS lxqtcpuloadconfiguration.ui ) set(LIBRARIES ${STATGRAB_LIB}) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-cpuload/lxqtcpuload.cpp000066400000000000000000000127331261500472700216560ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtcpuload.h" #include "../panel/ilxqtpanelplugin.h" #include #include #include #include extern "C" { #include } #ifdef __sg_public // since libstatgrab 0.90 this macro is defined, so we use it for version check #define STATGRAB_NEWER_THAN_0_90 1 #endif #define BAR_ORIENT_BOTTOMUP "bottomUp" #define BAR_ORIENT_TOPDOWN "topDown" #define BAR_ORIENT_LEFTRIGHT "leftRight" #define BAR_ORIENT_RIGHTLEFT "rightLeft" LXQtCpuLoad::LXQtCpuLoad(ILXQtPanelPlugin* plugin, QWidget* parent): QFrame(parent), mPlugin(plugin), m_showText(false), m_barWidth(20), m_barOrientation(TopDownBar), m_timerID(-1) { setObjectName("LXQtCpuLoad"); QHBoxLayout *layout = new QHBoxLayout(this); layout->setSpacing(0); layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(&m_stuff); /* Initialise statgrab */ #ifdef STATGRAB_NEWER_THAN_0_90 sg_init(0); #else sg_init(); #endif /* Drop setuid/setgid privileges. */ if (sg_drop_privileges() != 0) { perror("Error. Failed to drop privileges"); } m_font.setPointSizeF(8); settingsChanged(); } LXQtCpuLoad::~LXQtCpuLoad() { } void LXQtCpuLoad::setSizes() { if (m_barOrientation == RightToLeftBar || m_barOrientation == LeftToRightBar) { m_stuff.setFixedHeight(m_barWidth); m_stuff.setMinimumWidth(24); } else { m_stuff.setFixedWidth(m_barWidth); m_stuff.setMinimumHeight(24); } } void LXQtCpuLoad::resizeEvent(QResizeEvent *) { setSizes(); update(); } double LXQtCpuLoad::getLoadCpu() const { #ifdef STATGRAB_NEWER_THAN_0_90 size_t count; sg_cpu_percents* cur = sg_get_cpu_percents(&count); #else sg_cpu_percents* cur = sg_get_cpu_percents(); #endif return (cur->user + cur->kernel + cur->nice); } void LXQtCpuLoad::timerEvent(QTimerEvent *event) { double avg = getLoadCpu(); if ( qAbs(m_avg-avg)>1 ) { m_avg = avg; setToolTip(tr("CPU load %1%").arg(m_avg)); update(); } } void LXQtCpuLoad::paintEvent ( QPaintEvent * ) { QPainter p(this); QPen pen; pen.setWidth(2); p.setPen(pen); p.setRenderHint(QPainter::Antialiasing, true); p.setFont(m_font); QRectF r = rect(); QRectF r1; QLinearGradient shade(0,0,1,1); if (m_barOrientation == RightToLeftBar || m_barOrientation == LeftToRightBar) { float vo = (r.height() - static_cast(m_barWidth))/2.0; float ho = r.width()*(1-m_avg*0.01); if (m_barOrientation == RightToLeftBar) { r1.setRect(r.left()+ho, r.top()+vo, r.width()-ho, r.height()-2*vo ); } else // LeftToRightBar { r1.setRect(r.left(), r.top()+vo, r.width()-ho, r.height()-2*vo ); } shade.setFinalStop(0, r1.height()); } else // BottomUpBar || TopDownBar { float vo = r.height()*(1-m_avg*0.01); float ho = (r.width() - static_cast(m_barWidth) )/2.0; if (m_barOrientation == TopDownBar) { r1.setRect(r.left()+ho, r.top(), r.width()-2*ho, r.height()-vo ); } else // BottomUpBar { r1.setRect(r.left()+ho, r.top()+vo, r.width()-2*ho, r.height()-vo ); } shade.setFinalStop(r1.width(), 0); } shade.setSpread(QLinearGradient::ReflectSpread); shade.setColorAt(0, QColor(0, 196, 0, 128)); shade.setColorAt(0.5, QColor(0, 128, 0, 255) ); shade.setColorAt(1, QColor(0, 196, 0 , 128)); p.fillRect(r1, shade); if (m_showText) { p.setPen(fontColor); p.drawText(rect(), Qt::AlignCenter, QString::number(m_avg)); } } void LXQtCpuLoad::settingsChanged() { if (m_timerID != -1) killTimer(m_timerID); m_showText = mPlugin->settings()->value("showText", false).toBool(); m_barWidth = mPlugin->settings()->value("barWidth", 20).toInt(); m_updateInterval = mPlugin->settings()->value("updateInterval", 1000).toInt(); QString barOrientation = mPlugin->settings()->value("barOrientation", BAR_ORIENT_BOTTOMUP).toString(); if (barOrientation == BAR_ORIENT_RIGHTLEFT) m_barOrientation = RightToLeftBar; else if (barOrientation == BAR_ORIENT_LEFTRIGHT) m_barOrientation = LeftToRightBar; else if (barOrientation == BAR_ORIENT_TOPDOWN) m_barOrientation = TopDownBar; else m_barOrientation = BottomUpBar; m_timerID = startTimer(m_updateInterval); setSizes(); update(); } lxqt-panel-0.10.0/plugin-cpuload/lxqtcpuload.h000066400000000000000000000044331261500472700213210ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTCPULOAD_H #define LXQTCPULOAD_H #include class ILXQtPanelPlugin; class LXQtCpuLoad: public QFrame { Q_OBJECT Q_PROPERTY(QColor fontColor READ getFontColor WRITE setFontColor) public: /** Describes orientation of cpu load bar **/ enum BarOrientation { BottomUpBar, //! Bar begins at bottom and grows up TopDownBar, //! Bar begins at top and grows down RightToLeftBar, //! Bar begins at right edge and grows to the left LeftToRightBar //! Bar begins at left edge and grows to the right }; LXQtCpuLoad(ILXQtPanelPlugin *plugin, QWidget* parent = 0); ~LXQtCpuLoad(); void settingsChanged(); void setFontColor(QColor value) { fontColor = value; } QColor getFontColor() const { return fontColor; } protected: void virtual timerEvent(QTimerEvent *event); void virtual paintEvent ( QPaintEvent * event ); void virtual resizeEvent(QResizeEvent *); private: double getLoadCpu() const; void setSizes(); ILXQtPanelPlugin *mPlugin; QWidget m_stuff; //! average load int m_avg; bool m_showText; int m_barWidth; BarOrientation m_barOrientation; int m_updateInterval; int m_timerID; QFont m_font; QColor fontColor; }; #endif // LXQTCPULOAD_H lxqt-panel-0.10.0/plugin-cpuload/lxqtcpuloadconfiguration.cpp000066400000000000000000000101551261500472700244420ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Maciej Płaza * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtcpuloadconfiguration.h" #include "ui_lxqtcpuloadconfiguration.h" #define BAR_ORIENT_BOTTOMUP "bottomUp" #define BAR_ORIENT_TOPDOWN "topDown" #define BAR_ORIENT_LEFTRIGHT "leftRight" #define BAR_ORIENT_RIGHTLEFT "rightLeft" LXQtCpuLoadConfiguration::LXQtCpuLoadConfiguration(QSettings *settings, QWidget *parent) : QDialog(parent), ui(new Ui::LXQtCpuLoadConfiguration), mSettings(settings), mOldSettings(settings) { setAttribute(Qt::WA_DeleteOnClose); setObjectName("CpuLoadConfigurationWindow"); ui->setupUi(this); fillBarOrientations(); connect(ui->buttons, SIGNAL(clicked(QAbstractButton*)), this, SLOT(dialogButtonsAction(QAbstractButton*))); loadSettings(); connect(ui->showTextCB, SIGNAL(toggled(bool)), this, SLOT(showTextChanged(bool))); connect(ui->barWidthSB, SIGNAL(valueChanged(int)), this, SLOT(barWidthChanged(int))); connect(ui->updateIntervalSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateIntervalChanged(double))); connect(ui->barOrientationCOB, SIGNAL(currentIndexChanged(int)), this, SLOT(barOrientationChanged(int))); } LXQtCpuLoadConfiguration::~LXQtCpuLoadConfiguration() { delete ui; } void LXQtCpuLoadConfiguration::fillBarOrientations() { ui->barOrientationCOB->addItem(trUtf8("Bottom up"), BAR_ORIENT_BOTTOMUP); ui->barOrientationCOB->addItem(trUtf8("Top down"), BAR_ORIENT_TOPDOWN); ui->barOrientationCOB->addItem(trUtf8("Left to right"), BAR_ORIENT_LEFTRIGHT); ui->barOrientationCOB->addItem(trUtf8("Right to left"), BAR_ORIENT_RIGHTLEFT); } void LXQtCpuLoadConfiguration::loadSettings() { ui->showTextCB->setChecked(mSettings->value("showText", false).toBool()); ui->barWidthSB->setValue(mSettings->value("barWidth", 20).toInt()); ui->updateIntervalSpinBox->setValue(mSettings->value("updateInterval", 1000).toInt() / 1000.0); int boIndex = ui->barOrientationCOB->findData( mSettings->value("barOrientation", BAR_ORIENT_BOTTOMUP)); boIndex = (boIndex < 0) ? 1 : boIndex; ui->barOrientationCOB->setCurrentIndex(boIndex); // QString menuFile = mSettings->value("menu_file", "").toString(); // if (menuFile.isEmpty()) // { // menuFile = XdgMenu::getMenuFileName(); // } // ui->menuFilePathLE->setText(menuFile); // ui->shortcutEd->setKeySequence(mSettings->value("shortcut", "Alt+F1").toString()); } void LXQtCpuLoadConfiguration::showTextChanged(bool value) { mSettings->setValue("showText", value); } void LXQtCpuLoadConfiguration::barWidthChanged(int value) { mSettings->setValue("barWidth", value); } void LXQtCpuLoadConfiguration::updateIntervalChanged(double value) { mSettings->setValue("updateInterval", value*1000); } void LXQtCpuLoadConfiguration::barOrientationChanged(int index) { mSettings->setValue("barOrientation", ui->barOrientationCOB->itemData(index).toString()); } void LXQtCpuLoadConfiguration::dialogButtonsAction(QAbstractButton *btn) { if (ui->buttons->buttonRole(btn) == QDialogButtonBox::ResetRole) { mOldSettings.loadToSettings(); loadSettings(); } else { close(); } } lxqt-panel-0.10.0/plugin-cpuload/lxqtcpuloadconfiguration.h000066400000000000000000000036361261500472700241150ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Maciej Płaza * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTCPULOADCONFIGURATION_H #define LXQTCPULOADCONFIGURATION_H #include #include class QSettings; class QAbstractButton; namespace Ui { class LXQtCpuLoadConfiguration; } class LXQtCpuLoadConfiguration : public QDialog { Q_OBJECT public: explicit LXQtCpuLoadConfiguration(QSettings *settings, QWidget *parent = 0); ~LXQtCpuLoadConfiguration(); private: Ui::LXQtCpuLoadConfiguration *ui; QSettings *mSettings; LXQt::SettingsCache mOldSettings; /* Fills Bar orientation combobox */ void fillBarOrientations(); private slots: /* Saves settings in conf file. */ void loadSettings(); void dialogButtonsAction(QAbstractButton *btn); void showTextChanged(bool value); void barWidthChanged(int value); void updateIntervalChanged(double value); void barOrientationChanged(int index); }; #endif // LXQTCPULOADCONFIGURATION_H lxqt-panel-0.10.0/plugin-cpuload/lxqtcpuloadconfiguration.ui000066400000000000000000000070301261500472700242730ustar00rootroot00000000000000 LXQtCpuLoadConfiguration 0 0 285 191 CPU Load Settings General Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter false false Show text Update interval: sec 1 0.500000000000000 10000.000000000000000 0.500000000000000 1.000000000000000 Bar orientation: Bar width: 4 2048 20 Qt::Vertical 20 41 Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Reset lxqt-panel-0.10.0/plugin-cpuload/lxqtcpuloadplugin.cpp000066400000000000000000000034771261500472700231020ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtcpuloadplugin.h" #include "lxqtcpuload.h" #include "lxqtcpuloadconfiguration.h" #include LXQtCpuLoadPlugin::LXQtCpuLoadPlugin(const ILXQtPanelPluginStartupInfo &startupInfo): QObject(), ILXQtPanelPlugin(startupInfo) { mWidget = new QWidget(); mContent = new LXQtCpuLoad(this, mWidget); QVBoxLayout *layout = new QVBoxLayout(mWidget); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); layout->addWidget(mContent); layout->setStretchFactor(mContent, 1); } LXQtCpuLoadPlugin::~LXQtCpuLoadPlugin() { delete mWidget; } QWidget *LXQtCpuLoadPlugin::widget() { return mWidget; } QDialog *LXQtCpuLoadPlugin::configureDialog() { return new LXQtCpuLoadConfiguration(settings()); } void LXQtCpuLoadPlugin::settingsChanged() { mContent->settingsChanged(); } lxqt-panel-0.10.0/plugin-cpuload/lxqtcpuloadplugin.h000066400000000000000000000041051261500472700225340ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTCPULOADPLUGIN_H #define LXQTCPULOADPLUGIN_H #include "../panel/ilxqtpanelplugin.h" #include class LXQtCpuLoad; class LXQtCpuLoadPlugin: public QObject, public ILXQtPanelPlugin { Q_OBJECT public: explicit LXQtCpuLoadPlugin(const ILXQtPanelPluginStartupInfo &startupInfo); ~LXQtCpuLoadPlugin(); virtual ILXQtPanelPlugin::Flags flags() const { return PreferRightAlignment | HaveConfigDialog; } virtual QWidget *widget(); virtual QString themeId() const { return "CpuLoad"; } bool isSeparate() const { return true; } QDialog *configureDialog(); protected: virtual void settingsChanged(); private: QWidget *mWidget; LXQtCpuLoad *mContent; }; class LXQtCpuLoadPluginLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new LXQtCpuLoadPlugin(startupInfo); } }; #endif // LXQTCPULOADPLUGIN_H lxqt-panel-0.10.0/plugin-cpuload/resources/000077500000000000000000000000001261500472700206165ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-cpuload/resources/cpuload.desktop.in000066400000000000000000000002371261500472700242470ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=CPU monitor Comment=Displays the current CPU load. Icon=cpu #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-cpuload/translations/000077500000000000000000000000001261500472700213255ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload.ts000066400000000000000000000047121261500472700233300ustar00rootroot00000000000000 LXQtCpuLoad CPU load %1% LXQtCpuLoadConfiguration CPU Load Settings General Show text Update interval: sec Bar orientation: Bar width: Bottom up Top down Left to right Right to left lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_ar.desktop000066400000000000000000000003251261500472700250310ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[ar]=مُراقب عبء المعالج Name[ar]=عبء المعالج lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_ar.ts000066400000000000000000000047101261500472700240100ustar00rootroot00000000000000 LXQtCpuLoad CPU load %1% LXQtCpuLoadConfiguration CPU Load Settings General العامّ Show text إظهار النَّصّ Update interval: sec Bar orientation: Bar width: Bottom up Top down Left to right Right to left lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_cs.desktop000066400000000000000000000003241261500472700250330ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[cs]=Sledování zatížení procesoru Name[cs]=Zatížení procesoru lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_cs.ts000066400000000000000000000053031261500472700240120ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Vytížení procesoru %1% CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings Nastavení vytížení procesoru v LXQtu CPU Load Settings General Obecné Show text Ukázat text Update interval: Obnovovací interval: sec s Bar orientation: Směr pruhu Bar width: Bottom up Zdola nahoru Top down Shora dolů Left to right Zleva doprava Right to left Zprava doleva lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_cs_CZ.desktop000066400000000000000000000003321261500472700254260ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[cs_CZ]=Sledování zatížení procesoru Name[cs_CZ]=Zatížení procesoru lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_cs_CZ.ts000066400000000000000000000053061261500472700244110ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Vytížení procesoru %1% CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings Nastavení vytížení procesoru v LXQtu CPU Load Settings General Obecné Show text Ukázat text Update interval: Obnovovací interval: sec s Bar orientation: Směr pruhu Bar width: Bottom up Zdola nahoru Top down Shora dolů Left to right Zleva doprava Right to left Zprava doleva lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_da.desktop000066400000000000000000000002741261500472700250160ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[da]=CPU Overvågning Name[da]=CPU-belastning lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_da_DK.desktop000066400000000000000000000003031261500472700253650ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[da_DK]=CPU Overvågning Name[da_DK]=CPU Belastning lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_da_DK.ts000066400000000000000000000053031261500472700243470ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% CPU belastning %1% CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings LXQt CPU-belastning indstillinger CPU Load Settings General Generelt Show text Vis tekst Update interval: Opdateringsinterval: sec sek Bar orientation: Bjælkens orientering: Bar width: Bottom up Nedefra Top down Oppefra Left to right Venstre mod højre Right to left Højre mod venstre lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_de.desktop000066400000000000000000000000771261500472700250230ustar00rootroot00000000000000Name[de]=Prozessorauslastung Comment[de]=Prozessorlast-Monitor lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_de.ts000066400000000000000000000047121261500472700240000ustar00rootroot00000000000000 LXQtCpuLoad CPU load %1% Prozessorauslastung %1% LXQtCpuLoadConfiguration CPU Load Settings Einstellungen zur Prozessorlast-Anzeige General Allgemein Show text Text anzeigen Update interval: Aktualisierungsintervall: sec s Bar orientation: Balkenrichtung: Bar width: Balkenbreite: Bottom up von unten nach oben Top down von oben nach unten Left to right von links nach rechts Right to left von rechts nach links lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_el.desktop000066400000000000000000000004161261500472700250300ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Name[el]=Επόπτης του επεξεργαστή Comment[el]=Εμφανίζει το φορτίο του επεξεργαστή. lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_el.ts000066400000000000000000000056631261500472700240160ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Φορτίο επεξεργαστή %1% CPU load %1% Φορτίο επεξεργαστή %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings Ρυθμίσεις φορτίου ΚΜΕ CPU Load Settings Ρυθμίσεις του Φορτίου επεξεργαστή General Γενικά Show text Εμφάνιση κειμένου Update interval: Διάστημα ενημέρωσης: sec δευτ Bar orientation: Προσανατολισμός ράβδου: Bar width: Πλάτος ράβδου: Bottom up Κάτω προς τα πάνω Top down Πάνω προς τα κάτω Left to right Αριστερά προς δεξιά Right to left Δεξιά προς αριστερά lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_eo.desktop000066400000000000000000000003021261500472700250250ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[eo]=Monitorado de CPU-ŝarĝo Name[eo]=CPU-ŝarĝo lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_eo.ts000066400000000000000000000046721261500472700240200ustar00rootroot00000000000000 LXQtCpuLoad CPU load %1% LXQtCpuLoadConfiguration CPU Load Settings General Ĝenerala Show text Montri tekston Update interval: sec Bar orientation: Bar width: Bottom up Top down Left to right Right to left lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_es.desktop000066400000000000000000000003011261500472700250300ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[es]=Monitor de carga de CPU Name[es]=Carga de CPU lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_es.ts000066400000000000000000000053601261500472700240170ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Carga de CPU %1% CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings Opciones de Carga de CPU LXQt CPU Load Settings General General Show text Mostrar texto Update interval: Intervalo de actualización sec segundos Bar orientation: Orientación de la barra: Bar width: Bottom up De Abajo hacia Arriba Top down De Arriba hacia Abajo Left to right De Izquierda a Derecha Right to left De Derecha a Izquierda lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_es_VE.desktop000066400000000000000000000003111261500472700254230ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[es_VE]=Monitor de carga del CPU Name[es_VE]=Carga del CPU lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_es_VE.ts000066400000000000000000000053221261500472700244070ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Cpu al %1% CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings Configuracion de Monitor de Cpu LXQt CPU Load Settings General General Show text Mostrar etiqueta Update interval: Intervalo actualizacion sec seg Bar orientation: Orientacion barra Bar width: Bottom up Abajo a Arriba Top down Arriba a abajo Left to right Izquierda a derecha Right to left Derecha a izquierda lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_eu.desktop000066400000000000000000000003221261500472700250350ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[eu]=PUZaren uneko karga bistaratzen du. Name[eu]=PUZaren monitorea lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_eu.ts000066400000000000000000000053171261500472700240230ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% PUZaren karga %%1 CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings LXQt PUZaren kargaren ezarpenak CPU Load Settings General Orokorra Show text Erakutsi testua Update interval: Eguneratze-tartea: sec seg Bar orientation: Barraren orientazioa: Bar width: Bottom up Behetik gora Top down Goitik behera Left to right Ezkerretik eskuinera Right to left Eskuinetik ezkerrera lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_fi.desktop000066400000000000000000000003241261500472700250240ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[fi]=Suorittimen kuormituksen seuranta Name[fi]=Suorittimen kuormitus lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_fi.ts000066400000000000000000000053161261500472700240070ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Suoritinkuorma %1% CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings LXQtin suoritinkuorman asetukset CPU Load Settings General Yleiset Show text Näytä teksti Update interval: Päivitysväli: sec s Bar orientation: Bar width: Bottom up Top down Left to right Right to left lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_fr_FR.ts000066400000000000000000000047001261500472700244030ustar00rootroot00000000000000 LXQtCpuLoad CPU load %1% LXQtCpuLoadConfiguration CPU Load Settings General Généraux Show text Montrer le texte Update interval: sec Bar orientation: Bar width: Bottom up Top down Left to right Right to left lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_hr.ts000066400000000000000000000052101261500472700240130ustar00rootroot00000000000000 LXQtCpuLoad CPU load %1% Učitavanje procesora %1 LXQtCpuLoadConfiguration CPU Load Settings Postavke učitavanja procesora General Općenito Show text Pokaži tekst Update interval: Interval ažuriranja: sec sek Bar orientation: Orijentacija trake: Bar width: Duljina trake: Bottom up Odozdo gore Top down Odozgo dolje Left to right S lijeva na desno Right to left S desna na lijevo lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_hu.desktop000066400000000000000000000003161261500472700250430ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[hu]=Megjeleníti a processzorterhelést. Name[hu]=CPU-figyelő lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_hu.ts000066400000000000000000000045771261500472700240350ustar00rootroot00000000000000 LXQtCpuLoad CPU load %1% LXQtCpuLoadConfiguration CPU Load Settings General Általános Show text Szöveg megjelenítése Update interval: Frissítési köz: sec mp Bar orientation: Sáv irány: Bar width: Sáv szélesség: Bottom up Felfele Top down Lefele Left to right Jobbra Right to left Balra lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_hu_HU.ts000066400000000000000000000046021261500472700244160ustar00rootroot00000000000000 LXQtCpuLoad CPU load %1% LXQtCpuLoadConfiguration CPU Load Settings General Általános Show text Szöveg megjelenítése Update interval: Frissítési köz: sec mp Bar orientation: Sáv irány: Bar width: Sáv szélesség: Bottom up Felfele Top down Lefele Left to right Jobbra Right to left Balra lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_it.desktop000066400000000000000000000001161261500472700250410ustar00rootroot00000000000000Comment[it]=Monitor del carico del processore Name[it]=Carico del processore lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_it.ts000066400000000000000000000054601261500472700240250ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Carico del processore %1% CPU load %1% Carico del processore %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings Impostazioni del carico del processore di LXQt CPU Load Settings Impostazioni di carica del processore General Generale Show text Mostra testo Update interval: Intervallo di aggiornamento: sec sec Bar orientation: Orientamento della barra: Bar width: Larghezza barra: Bottom up Dal basso all'alto Top down Dall'alto al basso Left to right Da sinistra a destra Right to left Da destra a sinistra lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_ja.desktop000066400000000000000000000003241261500472700250200ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=CPU monitor Comment=Displays the current CPU load. # Translations Comment[ja]=現在のCPUの負荷を表示します Name[ja]=CPUモニター lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_ja.ts000066400000000000000000000046351261500472700240060ustar00rootroot00000000000000 LXQtCpuLoad CPU load %1% CPU負荷 %1% LXQtCpuLoadConfiguration CPU Load Settings CPUモニターの設定 General 一般 Show text テキストを表示 Update interval: 更新頻度: sec Bar orientation: バーの向き: Bar width: Bottom up 下から上へ Top down 上から下へ Left to right 左から右へ Right to left 右から左へ lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_lt.desktop000066400000000000000000000003121261500472700250420ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[lt]=Procesoriaus stebėtojas Name[lt]=Procesoriaus apkrova lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_lt.ts000066400000000000000000000046751261500472700240370ustar00rootroot00000000000000 LXQtCpuLoad CPU load %1% LXQtCpuLoadConfiguration CPU Load Settings General Pagrindinės Show text Rodyti tekstą Update interval: sec Bar orientation: Bar width: Bottom up Top down Left to right Right to left lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_nl.desktop000066400000000000000000000003001261500472700250310ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[nl]=CPU belasting monitor Name[nl]=Cpu belasting lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_nl.ts000066400000000000000000000053601261500472700240210ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Cpu-belasting %1% CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings Instellingen voor CPU-belasting van LXQt CPU Load Settings General Algemeen Show text Tekst weergeven Update interval: Tussenpoze voor bijwerken: sec sec Bar orientation: Balkoriëntatie: Bar width: Bottom up Van beneden naar boven Top down Van boven naar beneden Left to right Van links naar rechts Right to left Van rechts naar links lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_pl_PL.desktop000066400000000000000000000003141261500472700254330ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[pl_PL]=Monitor obciążenia CPU Name[pl_PL]=Obciążenie CPU lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_pl_PL.ts000066400000000000000000000053401261500472700244140ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Obciążenie CPU %1% CPU load %1% Obciążenie procesora %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings Ustawienia LXQt CPU Load CPU Load Settings Obciążenie procesora - ustawienia General Ogólne Show text Pokaż tekst Update interval: Odświeżanie widoku: sec sek Bar orientation: Orientacja paska stanu Bar width: Bottom up Z dołu do góry Top down Z góry na dół Left to right Lewo na prawo Right to left Prawo na lewo lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_pt.desktop000066400000000000000000000002751261500472700250560ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Name[pt]=Carga do CPU Comment[pt]=Monitor de carga do CPU lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_pt.ts000066400000000000000000000053271261500472700240360ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Carga do cpu %1% CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings Definições da Carga do cpu CPU Load Settings General Geral Show text Mostrar texto Update interval: Intervalo: sec seg. Bar orientation: Orientação da barra: Bar width: Bottom up De baixo para cima Top down De cima para baixo Left to right Da esquerda para a direita Right to left Da direita para a esquerda lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_pt_BR.desktop000066400000000000000000000003071261500472700254350ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[pt_BR]=Monitor de carga da CPU Name[pt_BR]=Carga da CPU lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_pt_BR.ts000066400000000000000000000053541261500472700244210ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Carga da Cpu %1% CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings Configurações da Carga Da Cpu CPU Load Settings General Geral Show text Exibir texto Update interval: Intervalo de atualização: sec seg Bar orientation: Orientação da barra: Bar width: Bottom up De baixo para cima Top down De cima para baixo Left to right Da esquerda para a direita Right to left Da direita para a esquerda lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_ro_RO.desktop000066400000000000000000000003711261500472700254500ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[ro_RO]=Monitor de încărcare a procesorului Name[ro_RO]=Afișează gradul de încărcare al procesorului lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_ro_RO.ts000066400000000000000000000054441261500472700244330ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Încărcare procesor %1% CPU load %1% Încărcare procesor LXQtCpuLoadConfiguration LXQt Cpu Load settings Setări încărcare procesor LXQt CPU Load Settings Setări încărcare procesor General General Show text Afișează text Update interval: Interval de actualizare sec sec Bar orientation: Orientare bară: Bar width: Lățime bară: Bottom up De jos în sus Top down De sus în jos Left to right De la stânga la dreapta Right to left De la dreapta la stânga lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_ru.desktop000066400000000000000000000004351261500472700250570ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[ru]=Отображает текущую загрузку процессора. Name[ru]=Монитор загрузки процессора lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_ru.ts000066400000000000000000000050651261500472700240400ustar00rootroot00000000000000 LXQtCpuLoad CPU load %1% Загрузка процессора %1% LXQtCpuLoadConfiguration CPU Load Settings Настройки загрузки процессора General Общие Show text Показать текст Update interval: Интервал обновления: sec сек Bar orientation: Расположение панели: Bar width: Bottom up Снизу вверх Top down Сверху вниз Left to right Слева направо Right to left Справа налево lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_ru_RU.desktop000066400000000000000000000004421261500472700254630ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[ru_RU]=Отображает текущую загрузку процессора. Name[ru_RU]=Монитор загрузки процессора lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_ru_RU.ts000066400000000000000000000050701261500472700244420ustar00rootroot00000000000000 LXQtCpuLoad CPU load %1% Загрузка процессора %1% LXQtCpuLoadConfiguration CPU Load Settings Настройки загрузки процессора General Общие Show text Показать текст Update interval: Интервал обновления: sec сек Bar orientation: Расположение панели: Bar width: Bottom up Снизу вверх Top down Сверху вниз Left to right Слева направо Right to left Справа налево lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_sl.desktop000066400000000000000000000003061261500472700250440ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[sl]=Nadzornik obremenitve CPE Name[sl]=Obremenitev CPE lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_sl.ts000066400000000000000000000053361261500472700240310ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Uporaba CPE: %1 % CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings Nastavitve prikaza uporabe CPE za LXQt CPU Load Settings General Splošno Show text Pokaži besedilo Update interval: Hitrost osveževanja: sec s Bar orientation: Usmerjenost vrstice: Bar width: Bottom up Od spodaj navzgor Top down Od zgoraj navzdol Left to right Iz leve proti desni Right to left Iz desne proti levi lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_th_TH.desktop000066400000000000000000000004261261500472700254370ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[th_TH]=เฝ้าสังเกตการทำงานซีพียู Name[th_TH]=การทำงานซีพียู lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_th_TH.ts000066400000000000000000000055461261500472700244240ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Cpu โหลด %1% CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings ค่าตั้ง Cpu โหลด LXQt CPU Load Settings General ทั่วไป Show text แสดงข้อความ Update interval: ทิ้งระยะการปรับข้อมูล: sec วิ Bar orientation: การจัดเรียง: Bar width: Bottom up ล่างขึ้นบน Top down บนลงล่าง Left to right ซ้ายไปขวา Right to left ขวาไปซ้าย lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_tr.desktop000066400000000000000000000003071261500472700250540ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[tr]=İşlemci Yükü izleyici Name[tr]=İşlemci Yükü lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_tr.ts000066400000000000000000000053121261500472700240320ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% İşlemci yükü %1% CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings LXQt İşlemci Yükü ayarları CPU Load Settings General Genel Show text Metin göster Update interval: Güncelleme aralığı: sec sn Bar orientation: Çubuk yönelimi: Bar width: Bottom up Aşağıdan yukarı Top down Yukarıdan aşağı Left to right Soldan sağa Right to left Sağdan sola lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_uk.desktop000066400000000000000000000003531261500472700250470ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[uk]=Показує поточне навантаження CPU. Name[uk]=Монітор CPU lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_uk.ts000066400000000000000000000055111261500472700240250ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Завантаження Cpu %1% CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings Налаштування завантаження ЦП LXQt CPU Load Settings General Загальне Show text Показувати текст Update interval: Період поновлення: sec сек Bar orientation: Напрямок планки: Bar width: Bottom up Знизу вверх Top down Зверху вниз Left to right Зліва направо Right to left Зправа наліво lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_zh_CN.desktop000066400000000000000000000003011261500472700254220ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[zh_CN]=CPU 负载监视器 Name[zh_CN]=CPU 负载 lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_zh_CN.ts000066400000000000000000000052511261500472700244100ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% Cpu 负载 %1% CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings LXQt Cpu 负载设置 CPU Load Settings General 常规 Show text 显示文本 Update interval: 更新间隔: sec Bar orientation: 状态栏方向: Bar width: Bottom up 自下而上 Top down 自上而下 Left to right 从左到右 Right to left 从右到左 lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_zh_TW.desktop000066400000000000000000000002771261500472700254700ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Cpu monitor Comment=Displays the current CPU load. # Translations Comment[zh_TW]=CPU使用監視器 Name[zh_TW]=CPU使用 lxqt-panel-0.10.0/plugin-cpuload/translations/cpuload_zh_TW.ts000066400000000000000000000052541261500472700244450ustar00rootroot00000000000000 LXQtCpuLoad Cpu load %1% CPU使用率 %1% CPU load %1% LXQtCpuLoadConfiguration LXQt Cpu Load settings LXQtCPU使用率提示設定 CPU Load Settings General 一般 Show text 顯示文字 Update interval: 更新間隔 sec Bar orientation: 進度條方向 Bar width: Bottom up 由下至上 Top down 由上至下 Left to right 由左至右 Right to left 由右至左 lxqt-panel-0.10.0/plugin-desktopswitch/000077500000000000000000000000001261500472700200505ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-desktopswitch/CMakeLists.txt000066400000000000000000000005341261500472700226120ustar00rootroot00000000000000set(PLUGIN "desktopswitch") set(HEADERS desktopswitch.h desktopswitchbutton.h desktopswitchconfiguration.h ) set(SOURCES desktopswitch.cpp desktopswitchbutton.cpp desktopswitchconfiguration.cpp ) set(UIS desktopswitchconfiguration.ui ) set(LIBRARIES ${LIBRARIES} lxqt lxqt-globalkeys) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-desktopswitch/desktopswitch.cpp000066400000000000000000000203241261500472700234500ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Petr Vanek * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include #include #include #include #include #include #include #include #include #include #include "desktopswitch.h" #include "desktopswitchbutton.h" #include "desktopswitchconfiguration.h" static const QString DEFAULT_SHORTCUT_TEMPLATE("Control+F%1"); DesktopSwitch::DesktopSwitch(const ILXQtPanelPluginStartupInfo &startupInfo) : QObject(), ILXQtPanelPlugin(startupInfo), m_pSignalMapper(new QSignalMapper(this)), m_desktopCount(KWindowSystem::numberOfDesktops()), mRows(-1), mDesktops(new NETRootInfo(QX11Info::connection(), NET::NumberOfDesktops | NET::CurrentDesktop | NET::DesktopNames, NET::WM2DesktopLayout)), mLabelType(static_cast(-1)) { m_buttons = new QButtonGroup(this); connect (m_pSignalMapper, SIGNAL(mapped(int)), this, SLOT(setDesktop(int))); mLayout = new LXQt::GridLayout(&mWidget); mWidget.setLayout(mLayout); settingsChanged(); onCurrentDesktopChanged(KWindowSystem::currentDesktop()); QTimer::singleShot(0, this, SLOT(registerShortcuts())); connect(m_buttons, SIGNAL(buttonClicked(int)), this, SLOT(setDesktop(int))); connect(KWindowSystem::self(), SIGNAL(numberOfDesktopsChanged(int)), SLOT(onNumberOfDesktopsChanged(int))); connect(KWindowSystem::self(), SIGNAL(currentDesktopChanged(int)), SLOT(onCurrentDesktopChanged(int))); connect(KWindowSystem::self(), SIGNAL(desktopNamesChanged()), SLOT(onDesktopNamesChanged())); connect(KWindowSystem::self(), static_cast(&KWindowSystem::windowChanged), this, &DesktopSwitch::onWindowChanged); } void DesktopSwitch::registerShortcuts() { // Register shortcuts to change desktop GlobalKeyShortcut::Action * gshortcut; QString path; QString description; for (int i = 0; i < 12; ++i) { path = QString("/panel/%1/desktop_%2").arg(settings()->group()).arg(i + 1); description = tr("Switch to desktop %1").arg(i + 1); gshortcut = GlobalKeyShortcut::Client::instance()->addAction(QString(), path, description, this); if (nullptr != gshortcut) { m_keys << gshortcut; connect(gshortcut, &GlobalKeyShortcut::Action::registrationFinished, this, &DesktopSwitch::shortcutRegistered); connect(gshortcut, SIGNAL(activated()), m_pSignalMapper, SLOT(map())); m_pSignalMapper->setMapping(gshortcut, i); } } } void DesktopSwitch::shortcutRegistered() { GlobalKeyShortcut::Action * const shortcut = qobject_cast(sender()); disconnect(shortcut, &GlobalKeyShortcut::Action::registrationFinished, this, &DesktopSwitch::shortcutRegistered); const int i = m_keys.indexOf(shortcut); Q_ASSERT(-1 != i); if (shortcut->shortcut().isEmpty()) { shortcut->changeShortcut(DEFAULT_SHORTCUT_TEMPLATE.arg(i + 1)); } } void DesktopSwitch::onWindowChanged(WId id, NET::Properties properties, NET::Properties2 properties2) { if (properties.testFlag(NET::WMState)) { KWindowInfo info = KWindowInfo(id, NET::WMDesktop | NET::WMState); int desktop = info.desktop(); if (!info.valid() || info.onAllDesktops()) return; else { DesktopSwitchButton *button = static_cast(m_buttons->button(desktop - 1)); if(button) button->setUrgencyHint(id, info.hasState(NET::DemandsAttention)); } } } void DesktopSwitch::refresh() { QList btns = m_buttons->buttons(); int i = 0; const int current_cnt = btns.count(); const int border = qMin(btns.count(), m_desktopCount); //update existing buttons for ( ; i < border; ++i) { ((DesktopSwitchButton*)m_buttons->button(i))->update(i, mLabelType, KWindowSystem::desktopName(i + 1).isEmpty() ? tr("Desktop %1").arg(i + 1) : KWindowSystem::desktopName(i + 1)); } //create new buttons (if neccessary) QAbstractButton *b; for ( ; i < m_desktopCount; ++i) { b = new DesktopSwitchButton(&mWidget, i, mLabelType, KWindowSystem::desktopName(i+1).isEmpty() ? tr("Desktop %1").arg(i+1) : KWindowSystem::desktopName(i+1)); mWidget.layout()->addWidget(b); m_buttons->addButton(b, i); } //delete unneeded buttons (if neccessary) for ( ; i < current_cnt; ++i) { b = m_buttons->buttons().last(); m_buttons->removeButton(b); mWidget.layout()->removeWidget(b); delete b; } } DesktopSwitch::~DesktopSwitch() { } void DesktopSwitch::setDesktop(int desktop) { KWindowSystem::setCurrentDesktop(desktop + 1); } void DesktopSwitch::onNumberOfDesktopsChanged(int count) { qDebug() << "Desktop count changed from" << m_desktopCount << "to" << count; m_desktopCount = count; refresh(); } void DesktopSwitch::onCurrentDesktopChanged(int current) { QAbstractButton *button = m_buttons->button(current - 1); if (button) button->setChecked(true); } void DesktopSwitch::onDesktopNamesChanged() { refresh(); } void DesktopSwitch::settingsChanged() { int value = settings()->value("rows", 1).toInt(); if (mRows != value) { mRows = value; realign(); } value = settings()->value("labelType", DesktopSwitchButton::LABEL_TYPE_NUMBER).toInt(); if (mLabelType != static_cast(value)) { mLabelType = static_cast(value); refresh(); } } void DesktopSwitch::realign() { int columns = static_cast(ceil(static_cast(m_desktopCount) / mRows)); mLayout->setEnabled(false); if (panel()->isHorizontal()) { mLayout->setRowCount(mRows); mLayout->setColumnCount(0); mDesktops->setDesktopLayout(NET::OrientationHorizontal, columns, mRows, NET::DesktopLayoutCornerTopLeft); } else { mLayout->setColumnCount(mRows); mLayout->setRowCount(0); mDesktops->setDesktopLayout(NET::OrientationHorizontal, mRows, columns, NET::DesktopLayoutCornerTopLeft); } mLayout->setEnabled(true); } QDialog *DesktopSwitch::configureDialog() { return new DesktopSwitchConfiguration(settings()); } DesktopSwitchWidget::DesktopSwitchWidget(): QFrame(), m_mouseWheelThresholdCounter(0) { } void DesktopSwitchWidget::wheelEvent(QWheelEvent *e) { // Without some sort of threshold which has to be passed, scrolling is too sensitive m_mouseWheelThresholdCounter -= e->delta(); // If the user hasn't scrolled far enough in one direction (positive or negative): do nothing if(abs(m_mouseWheelThresholdCounter) < 100) return; int max = KWindowSystem::numberOfDesktops(); int delta = e->delta() < 0 ? 1 : -1; int current = KWindowSystem::currentDesktop() + delta; if (current > max){ current = 1; } else if (current < 1) current = max; m_mouseWheelThresholdCounter = 0; KWindowSystem::setCurrentDesktop(current); } lxqt-panel-0.10.0/plugin-desktopswitch/desktopswitch.h000066400000000000000000000057431261500472700231250ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Petr Vanek * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef DESKTOPSWITCH_H #define DESKTOPSWITCH_H #include "../panel/ilxqtpanelplugin.h" #include #include #include #include "desktopswitchbutton.h" class QSignalMapper; class QButtonGroup; class NETRootInfo; namespace LXQt { class GridLayout; } class DesktopSwitchWidget: public QFrame { Q_OBJECT public: DesktopSwitchWidget(); private: int m_mouseWheelThresholdCounter; protected: void wheelEvent(QWheelEvent* e); }; /** * @brief Desktop switcher. A very simple one... */ class DesktopSwitch : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: DesktopSwitch(const ILXQtPanelPluginStartupInfo &startupInfo); ~DesktopSwitch(); QString themeId() const { return "DesktopSwitch"; } QWidget *widget() { return &mWidget; } bool isSeparate() const { return true; } void realign(); virtual ILXQtPanelPlugin::Flags flags() const { return HaveConfigDialog; } QDialog *configureDialog(); private: QButtonGroup * m_buttons; QList m_keys; QSignalMapper* m_pSignalMapper; int m_desktopCount; DesktopSwitchWidget mWidget; LXQt::GridLayout *mLayout; int mRows; QScopedPointer mDesktops; DesktopSwitchButton::LabelType mLabelType; void refresh(); private slots: void setDesktop(int desktop); void onNumberOfDesktopsChanged(int); void onCurrentDesktopChanged(int); void onDesktopNamesChanged(); virtual void settingsChanged(); void registerShortcuts(); void shortcutRegistered(); void onWindowChanged(WId id, NET::Properties properties, NET::Properties2 properties2); }; class DesktopSwitchPluginLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT // Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new DesktopSwitch(startupInfo);} }; #endif lxqt-panel-0.10.0/plugin-desktopswitch/desktopswitchbutton.cpp000066400000000000000000000042051261500472700247040ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Petr Vanek * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include #include #include #include "desktopswitchbutton.h" DesktopSwitchButton::DesktopSwitchButton(QWidget * parent, int index, LabelType labelType, const QString &title) : QToolButton(parent), mUrgencyHint(false) { update(index, labelType, title); setCheckable(true); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); } void DesktopSwitchButton::update(int index, LabelType labelType, const QString &title) { switch (labelType) { case LABEL_TYPE_NAME: setText(title); break; default: // LABEL_TYPE_NUMBER setText(QString::number(index + 1)); } if (!title.isEmpty()) { setToolTip(title); } } void DesktopSwitchButton::setUrgencyHint(WId id, bool urgent) { if (urgent) mUrgentWIds.insert(id); else mUrgentWIds.remove(id); if (mUrgencyHint != !mUrgentWIds.empty()) { mUrgencyHint = !mUrgentWIds.empty(); setProperty("urgent", mUrgencyHint); style()->unpolish(this); style()->polish(this); QToolButton::update(); } } lxqt-panel-0.10.0/plugin-desktopswitch/desktopswitchbutton.h000066400000000000000000000032001261500472700243430ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Petr Vanek * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef DESKTOPSWITCHBUTTON_H #define DESKTOPSWITCHBUTTON_H #include #include namespace GlobalKeyShortcut { class Action; } class DesktopSwitchButton : public QToolButton { Q_OBJECT public: enum LabelType { // Must match with combobox indexes LABEL_TYPE_NUMBER = 0, LABEL_TYPE_NAME = 1 }; DesktopSwitchButton(QWidget * parent, int index, LabelType labelType, const QString &title=QString()); void update(int index, LabelType labelType, const QString &title); void setUrgencyHint(WId, bool); private: // for urgency hint handling bool mUrgencyHint; QSet mUrgentWIds; }; #endif lxqt-panel-0.10.0/plugin-desktopswitch/desktopswitchconfiguration.cpp000066400000000000000000000061121261500472700262370ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "desktopswitchconfiguration.h" #include "ui_desktopswitchconfiguration.h" #include #include DesktopSwitchConfiguration::DesktopSwitchConfiguration(QSettings *settings, QWidget *parent) : QDialog(parent) , ui(new Ui::DesktopSwitchConfiguration) , mSettings(settings) , mOldSettings(settings) { setAttribute(Qt::WA_DeleteOnClose); setObjectName("DesktopSwitchConfigurationWindow"); ui->setupUi(this); connect(ui->buttons, SIGNAL(clicked(QAbstractButton*)), this, SLOT(dialogButtonsAction(QAbstractButton*))); loadSettings(); connect(ui->rowsSB, SIGNAL(valueChanged(int)), this, SLOT(rowsChanged(int))); connect(ui->labelTypeCB, SIGNAL(currentIndexChanged(int)), this, SLOT(labelTypeChanged(int))); loadDesktopsNames(); } DesktopSwitchConfiguration::~DesktopSwitchConfiguration() { delete ui; } void DesktopSwitchConfiguration::loadSettings() { ui->rowsSB->setValue(mSettings->value("rows", 1).toInt()); ui->labelTypeCB->setCurrentIndex(mSettings->value("labelType", 0).toInt()); } void DesktopSwitchConfiguration::loadDesktopsNames() { int n = KWindowSystem::numberOfDesktops(); for (int i = 1; i <= n; i++) { QLineEdit *edit = new QLineEdit(KWindowSystem::desktopName(i), this); ((QFormLayout *) ui->namesGroupBox->layout())->addRow(QString("Desktop %1:").arg(i), edit); // C++11 rocks! QTimer *timer = new QTimer(this); timer->setInterval(400); timer->setSingleShot(true); connect(timer, &QTimer::timeout, [=] { KWindowSystem::setDesktopName(i, edit->text()); }); connect(edit, &QLineEdit::textEdited, [=] { timer->start(); }); } } void DesktopSwitchConfiguration::rowsChanged(int value) { mSettings->setValue("rows", value); } void DesktopSwitchConfiguration::labelTypeChanged(int type) { mSettings->setValue("labelType", type); } void DesktopSwitchConfiguration::dialogButtonsAction(QAbstractButton *btn) { if (ui->buttons->buttonRole(btn) == QDialogButtonBox::ResetRole) { mOldSettings.loadToSettings(); loadSettings(); } else { close(); } } lxqt-panel-0.10.0/plugin-desktopswitch/desktopswitchconfiguration.h000066400000000000000000000034361261500472700257120ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef DESKTOPSWITCHCERCONFIGURATION_H #define DESKTOPSWITCHCERCONFIGURATION_H #include #include #include #include class QSettings; class QAbstractButton; namespace Ui { class DesktopSwitchConfiguration; } class DesktopSwitchConfiguration : public QDialog { Q_OBJECT public: explicit DesktopSwitchConfiguration(QSettings *settings, QWidget *parent = 0); ~DesktopSwitchConfiguration(); private: Ui::DesktopSwitchConfiguration *ui; QSettings *mSettings; LXQt::SettingsCache mOldSettings; private slots: /* Saves settings in conf file. */ void loadSettings(); void loadDesktopsNames(); void dialogButtonsAction(QAbstractButton *btn); void rowsChanged(int value); void labelTypeChanged(int type); }; #endif // DESKTOPSWITCHCERCONFIGURATION_H lxqt-panel-0.10.0/plugin-desktopswitch/desktopswitchconfiguration.ui000066400000000000000000000044411261500472700260750ustar00rootroot00000000000000 DesktopSwitchConfiguration 0 0 213 207 DesktopSwitch settings Rows 1 40 1 Desktop labels: Number of rows: Numbers Names Desktop names Qt::Horizontal QDialogButtonBox::Close lxqt-panel-0.10.0/plugin-desktopswitch/resources/000077500000000000000000000000001261500472700220625ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-desktopswitch/resources/desktopswitch.desktop.in000066400000000000000000000002761261500472700267620ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. Icon=user-desktop #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-desktopswitch/translations/000077500000000000000000000000001261500472700225715ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch.ts000066400000000000000000000031331261500472700260340ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_ar.desktop000066400000000000000000000005041261500472700275400ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[ar]=السماح بتغيير أسطح المكتب اﻻفتراضيَّة Name[ar]=مفتاح تبديل سطح المكتب lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_ar.ts000066400000000000000000000031341261500472700265170ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 سطح المكتب %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_cs.desktop000066400000000000000000000004201261500472700275400ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[cs]=Povolit přepínání virtuálních ploch Name[cs]=Přepínání ploch lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_cs.ts000066400000000000000000000031171261500472700265230ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Plocha %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_cs_CZ.desktop000066400000000000000000000004561261500472700301450ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[cs_CZ]=Povolit přepínání virtuálních pracovních ploch Name[cs_CZ]=Přepínání pracovních ploch lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_cs_CZ.ts000066400000000000000000000031221261500472700271130ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Plocha %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_da.desktop000066400000000000000000000004221261500472700275210ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[da]=Tillader skift imellem virtuelle skriveborde Name[da]=Skrivebordsskifter lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_da.ts000066400000000000000000000031231261500472700264770ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Skrivebord %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_da_DK.desktop000066400000000000000000000004201261500472700300750ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[da_DK]=Skift imellem virtuelle skriveborde Name[da_DK]=Skrivebords Skifter lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_da_DK.ts000066400000000000000000000031261261500472700270600ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Skrivebord %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_de.desktop000066400000000000000000000001421261500472700275240ustar00rootroot00000000000000Name[de]=Arbeitsflächenumschalter Comment[de]=Zwischen den virtuellen Arbeitsflächen umschalten lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_de.ts000066400000000000000000000037511261500472700265120ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Zu Arbeitsfläche %1 wechseln Desktop %1 Arbeitsfläche %1 DesktopSwitchConfiguration DesktopSwitch settings Arbeitsflächenumschalter - Einstellungen Rows Zeilen Desktop labels: Arbeitsflächenbezeichnungen: Number of rows: Anzahl der Zeilen: Numbers Ziffern Names Namen Desktop names Arbeitsflächenbezeichnungen lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_el.desktop000066400000000000000000000005651261500472700275450ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Name[el]=Εναλλαγή επιφάνειας εργασίας Comment[el]=Επιτρέπει την εναλλαγή των εικονικών επιφανειών εργασίας. lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_el.ts000066400000000000000000000033531261500472700265200ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Εναλλαγή στην επιφάνεια εργασίας %1 Desktop %1 Επιφάνεια εργασίας %1 DesktopSwitchConfiguration DesktopSwitch settings Ρυθμίσεις εναλλαγής επιφάνειας εργασίας Number of rows: Αριθμός γραμμών: Desktop labels: Ετικέτες επιφανειών: Numbers Αριθμοί Names Ονόματα lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_eo.desktop000066400000000000000000000004231261500472700275410ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[eo]=Permesi ŝaltadon de virtualaj labortabloj Name[eo]=Ŝalto de labortabloj lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_eo.ts000066400000000000000000000031231261500472700265160ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Labortablo %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_es.desktop000066400000000000000000000004271261500472700275510ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[es]=Permite cambiar entre escritorios virtuales Name[es]=Cambiador de escritorios lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_es.ts000066400000000000000000000031231261500472700265220ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Escritorio %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_es_UY.ts000066400000000000000000000031261261500472700271420ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Escritorio %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_es_VE.desktop000066400000000000000000000004321261500472700301370ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[es_VE]=Permitir cambiar a escritorios virtuales Name[es_VE]=Cambiador de Escritorios lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_es_VE.ts000066400000000000000000000031261261500472700271170ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Escritorio %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_eu.desktop000066400000000000000000000004611261500472700275510ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[eu]=Mahaigain birtualen artean modu errazean aldatzeko aukera eskaintzen du. Name[eu]=Mahaigain-aldatzailea lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_eu.ts000066400000000000000000000031231261500472700265240ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 %1 mahaigaina DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_fi.desktop000066400000000000000000000004241261500472700275350ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[fi]=Vaihda virtuaalisten työpöytien välillä Name[fi]=Työpöydän vaihtaja lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_fi.ts000066400000000000000000000031241261500472700265120ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Työpöytä %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_fr_FR.desktop000066400000000000000000000004341261500472700301360ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[fr_FR]=Autoriser à basculer entre les bureaux virtuels Name[fr_FR]=Changeur de bureau lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_fr_FR.ts000066400000000000000000000031221261500472700271100ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Bureau %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_hr.ts000066400000000000000000000033101261500472700265220ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Prebaci na radnu površinu %1 Desktop %1 Radna površina %1 DesktopSwitchConfiguration DesktopSwitch settings Postavke prebacivaša radnih površina Number of rows: Broj redaka: Desktop labels: Numbers Brojevi Names Imena lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_hu.desktop000066400000000000000000000004331261500472700275530ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[hu]=Lehetővé teszi a virtuális asztalok közötti váltást Name[hu]=Aszatlváltó lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_hu.ts000066400000000000000000000030771261500472700265370ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 %1. asztalra váltás Desktop %1 %1. asztal DesktopSwitchConfiguration DesktopSwitch settings Asztalváltó beállítás Number of rows: Sorok száma: Desktop labels: Asztalazonosítók: Numbers Számok Names Nevek lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_hu_HU.ts000066400000000000000000000031021261500472700271200ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 %1. asztalra váltás Desktop %1 %1. asztal DesktopSwitchConfiguration DesktopSwitch settings Asztalváltó beállítás Number of rows: Sorok száma: Desktop labels: Asztalazonosítók: Numbers Számok Names Nevek lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_ia.desktop000066400000000000000000000002531261500472700275300ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktopswitch Comment=Allow to switch virtual desktops #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_ia.ts000066400000000000000000000031301261500472700265020ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_id_ID.desktop000066400000000000000000000002531261500472700301070ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktopswitch Comment=Allow to switch virtual desktops #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_id_ID.ts000066400000000000000000000031331261500472700270640ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_it.desktop000066400000000000000000000001221261500472700275460ustar00rootroot00000000000000Comment[it]=Permette di passare ad altri desktop virtuali Name[it]=Cambia desktop lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_it.ts000066400000000000000000000030721261500472700265320ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Cambia al desktop %1 Desktop %1 Desktop %1 DesktopSwitchConfiguration DesktopSwitch settings Preferenze cambia desktop Number of rows: Numero righe: Desktop labels: Etichette desktop: Numbers Numeri Names Nomi lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_ja.desktop000066400000000000000000000004561261500472700275360ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[ja]=仮想デスクトップの切り替えを可能にします Name[ja]=デスクトップ切り替え lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_ja.ts000066400000000000000000000035401261500472700265100ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 デスクトップ%1に切り替える Desktop %1 デスクトップ %1 DesktopSwitchButton Switch to desktop %1 デスクトップ%1に切り替える DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_ko.desktop000066400000000000000000000002531261500472700275500ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktopswitch Comment=Allow to switch virtual desktops #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_ko.ts000066400000000000000000000031301261500472700265220ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_lt.desktop000066400000000000000000000004311261500472700275540ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[lt]=Leidžia judėti tarp virtualių darbalaukių Name[lt]=Darbalaukių perjungimas lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_lt.ts000066400000000000000000000031241261500472700265330ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 %1 darbalaukis DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_nl.desktop000066400000000000000000000004231261500472700275470ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[nl]=Wisselen tussen virtuele-bureaubladen toestaan Name[nl]=Wissel bureaublad lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_nl.ts000066400000000000000000000031231261500472700265240ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Bureaublad %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_pl.desktop000066400000000000000000000004351261500472700275540ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[pl]=Pozwala przełączać się pomiędzy writualnymi pulpitami Name[pl]=Obszary robocze lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_pl_PL.desktop000066400000000000000000000004221261500472700301430ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[pl_PL]=Zezwól na przełączanie między pulpitami Name[pl_PL]=Zmień pulpit lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_pl_PL.ts000066400000000000000000000031221261500472700271200ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Pulpit %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_pt.desktop000066400000000000000000000004351261500472700275640ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Name[pt]=Alternador de áreas de trabalho Comment[pt]=Permite trocar entre as áreas de trabalho lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_pt.ts000066400000000000000000000031321261500472700265360ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Área de trabalho %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_pt_BR.desktop000066400000000000000000000004451261500472700301500ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[pt_BR]=Permite alternar áreas de trabalho virtuais Name[pt_BR]=Alternador de área de trabalho lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_pt_BR.ts000066400000000000000000000031351261500472700271240ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Área de trabalho %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_ro_RO.desktop000066400000000000000000000004341261500472700301600ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[ro_RO]=Permite comutarea între ecranele virtuale Name[ro_RO]=Comutare ecrane virtuale lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_ro_RO.ts000066400000000000000000000032741261500472700271420ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Comutare la ecranul %1 Desktop %1 Ecranul %1 DesktopSwitchConfiguration DesktopSwitch settings Setäri de comutare a ecranului Number of rows: Numărul de rânduri: Desktop labels: Etichetele ecranelor: Numbers Numere Names Nume lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_ru.desktop000066400000000000000000000006051261500472700275660ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[ru]=Позволяет легко переключаться между виртуальными рабочими столами. Name[ru]=Переключение рабочих столов lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_ru.ts000066400000000000000000000036151261500472700265470ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Переключиться на рабочий стол %1 Desktop %1 Рабочий стол %1 DesktopSwitchButton Switch to desktop %1 Переключиться на рабочий стол %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_ru_RU.desktop000066400000000000000000000006131261500472700301730ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[ru_RU]=Позволяет легко переключаться между виртуальными рабочими столами. Name[ru_RU]=Переключение рабочих столов lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_ru_RU.ts000066400000000000000000000036201261500472700271510ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Переключиться на рабочий стол %1 Desktop %1 Рабочий стол %1 DesktopSwitchButton Switch to desktop %1 Переключиться на рабочий стол %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_sk.desktop000066400000000000000000000004271261500472700275570ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[sk]=Umožňuje prepínanie medzi virtuálnymi plochami Name[sk]=Prepínač plôch lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_sk_SK.ts000066400000000000000000000031221261500472700271240ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Plocha %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_sl.desktop000066400000000000000000000004111261500472700275510ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[sl]=Omogoča preklop med navideznimi namizji Name[sl]=Desktopswitch lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_sl.ts000066400000000000000000000031201261500472700265260ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Namizje %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_sr.desktop000066400000000000000000000004511261500472700275630ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[sr]=Пребацујте виртуелне површи Name[sr]=Пребацивач површи lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_sr@ijekavian.desktop000066400000000000000000000002001261500472700315350ustar00rootroot00000000000000Name[sr@ijekavian]=Пребацивач површи Comment[sr@ijekavian]=Пребацујте виртуелне површи lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_sr@ijekavianlatin.desktop000066400000000000000000000001441261500472700325740ustar00rootroot00000000000000Name[sr@ijekavianlatin]=Prebacivač površi Comment[sr@ijekavianlatin]=Prebacujte virtuelne površi lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_sr@latin.desktop000066400000000000000000000004171261500472700307150ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[sr@latin]=Prebacujte virtuelne površi Name[sr@latin]=Prebacivač površi lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_sr@latin.ts000066400000000000000000000031361261500472700276730ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_sr_BA.ts000066400000000000000000000031261261500472700271040ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Површ %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_sr_RS.ts000066400000000000000000000031261261500472700271460ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Површ %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_th_TH.desktop000066400000000000000000000005141261500472700301450ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[th_TH]=อนุญาตให้ทำการสลับพื้นโต๊ะ Name[th_TH]=สลับพื้นโต๊ะ lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_th_TH.ts000066400000000000000000000031441261500472700271240ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 พื้นโต๊ะ %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_tr.desktop000066400000000000000000000004271261500472700275670ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[tr]=Sanal masaüstleri arasında geçiş yapın Name[tr]=Masaüstü değiştirici lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_tr.ts000066400000000000000000000031231261500472700265400ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Masaüstü %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_uk.desktop000066400000000000000000000005441261500472700275610ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[uk]=Дозволяє легко перемикатися між віртуальними стільницями Name[uk]=Перемикач стільниць lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_uk.ts000066400000000000000000000031331261500472700265330ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 Стільниця %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_zh_CN.GB2312.desktop000066400000000000000000000002531261500472700307370ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktopswitch Comment=Allow to switch virtual desktops #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_zh_CN.desktop000066400000000000000000000003761261500472700301460ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[zh_CN]=在虚拟桌面间切换 Name[zh_CN]=桌面切换 lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_zh_CN.ts000066400000000000000000000031221261500472700271130ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 桌面 %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_zh_TW.desktop000066400000000000000000000003761261500472700302000ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Desktop switcher Comment=Allows easy switching between virtual desktops. #TRANSLATIONS_DIR=../translations # Translations Comment[zh_TW]=允許切換虛擬桌面 Name[zh_TW]=桌面切換 lxqt-panel-0.10.0/plugin-desktopswitch/translations/desktopswitch_zh_TW.ts000066400000000000000000000031221261500472700271450ustar00rootroot00000000000000 DesktopSwitch Switch to desktop %1 Desktop %1 桌面 %1 DesktopSwitchConfiguration DesktopSwitch settings Number of rows: Desktop labels: Numbers Names lxqt-panel-0.10.0/plugin-directorymenu/000077500000000000000000000000001261500472700200465ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-directorymenu/CMakeLists.txt000066400000000000000000000005071261500472700226100ustar00rootroot00000000000000set(PLUGIN "directorymenu") set(HEADERS directorymenu.h directorymenuconfiguration.h ) set(SOURCES directorymenu.cpp directorymenuconfiguration.cpp ) set(UIS directorymenuconfiguration.ui ) set(LIBRARIES ${LIBRARIES} Qt5Xdg ) include ("../cmake/BuildPlugin.cmake") BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-directorymenu/directorymenu.cpp000066400000000000000000000120041261500472700234400ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Daniel Drzisga * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is diinstributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include "directorymenu.h" #include #include #include #include #include #include DirectoryMenu::DirectoryMenu(const ILXQtPanelPluginStartupInfo &startupInfo) : QObject(), ILXQtPanelPlugin(startupInfo), mMenu(0), mDefaultIcon(XdgIcon::fromTheme("folder")) { mOpenDirectorySignalMapper = new QSignalMapper(this); mMenuSignalMapper = new QSignalMapper(this); mButton.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); mButton.setIcon(XdgIcon::fromTheme("folder")); connect(&mButton, SIGNAL(clicked()), this, SLOT(showMenu())); connect(mOpenDirectorySignalMapper, SIGNAL(mapped(QString)), this, SLOT(openDirectory(QString))); connect(mMenuSignalMapper, SIGNAL(mapped(QString)), this, SLOT(addMenu(QString))); settingsChanged(); } DirectoryMenu::~DirectoryMenu() { if(mMenu) { delete mMenu; mMenu = 0; } } void DirectoryMenu::showMenu() { if(mBaseDirectory.exists()) { buildMenu(mBaseDirectory.absolutePath()); } else { buildMenu(QDir::homePath()); } int x=0, y=0; switch (panel()->position()) { case ILXQtPanel::PositionTop: x = mButton.mapToGlobal(QPoint(0, 0)).x(); y = panel()->globalGometry().bottom(); break; case ILXQtPanel::PositionBottom: x = mButton.mapToGlobal(QPoint(0, 0)).x(); y = panel()->globalGometry().top() - mMenu->sizeHint().height(); break; case ILXQtPanel::PositionLeft: x = panel()->globalGometry().right(); y = mButton.mapToGlobal(QPoint(0, 0)).y(); break; case ILXQtPanel::PositionRight: x = panel()->globalGometry().left() - mMenu->sizeHint().width(); y = mButton.mapToGlobal(QPoint(0, 0)).y(); break; } // Just using Qt`s activateWindow() won't work on some WMs like Kwin. // Solution is to execute menu 1ms later using timer mButton.activateWindow(); mMenu->exec(QPoint(x, y)); } void DirectoryMenu::buildMenu(const QString& path) { if(mMenu) { delete mMenu; mMenu = 0; } mPathStrings.clear(); mMenu = new QMenu(); addActions(mMenu, path); } void DirectoryMenu::openDirectory(const QString& path) { QDesktopServices::openUrl(QUrl("file://" + QDir::toNativeSeparators(path))); } void DirectoryMenu::addMenu(QString path) { QSignalMapper* sender = (QSignalMapper* )QObject::sender(); QMenu* parentMenu = (QMenu*) sender->mapping(path); if(parentMenu->isEmpty()) { addActions(parentMenu, path); } } void DirectoryMenu::addActions(QMenu* menu, const QString& path) { mPathStrings.push_back(path); QAction* openDirectoryAction = menu->addAction(XdgIcon::fromTheme("folder"), tr("Open")); connect(openDirectoryAction, SIGNAL(triggered()), mOpenDirectorySignalMapper, SLOT(map())); mOpenDirectorySignalMapper->setMapping(openDirectoryAction, mPathStrings.back()); menu->addSeparator(); QDir dir(path); QFileInfoList list = dir.entryInfoList(); foreach (const QFileInfo& entry, list) { if(entry.isDir() && !entry.isHidden()) { mPathStrings.push_back(entry.fileName()); QMenu* subMenu = menu->addMenu(XdgIcon::fromTheme("folder"), mPathStrings.back()); connect(subMenu, SIGNAL(aboutToShow()), mMenuSignalMapper, SLOT(map())); mMenuSignalMapper->setMapping(subMenu, entry.absoluteFilePath()); } } } QDialog* DirectoryMenu::configureDialog() { return new DirectoryMenuConfiguration(*settings()); } void DirectoryMenu::settingsChanged() { mBaseDirectory.setPath(settings()->value("baseDirectory", QDir::homePath()).toString()); QString iconPath = settings()->value("icon", QString()).toString(); QIcon icon = QIcon(iconPath); if(!icon.isNull()) { QIcon buttonIcon = QIcon(icon); if(!buttonIcon.pixmap(QSize(24,24)).isNull()) { mButton.setIcon(buttonIcon); return; } } mButton.setIcon(mDefaultIcon); } lxqt-panel-0.10.0/plugin-directorymenu/directorymenu.h000066400000000000000000000050111261500472700231050ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Daniel Drzisga * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef DIRECTORYMENU_H #define DIRECTORYMENU_H #include "../panel/ilxqtpanelplugin.h" #include "directorymenuconfiguration.h" #include #include #include #include #include #include #include #include class DirectoryMenu : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: DirectoryMenu(const ILXQtPanelPluginStartupInfo &startupInfo); ~DirectoryMenu(); virtual QWidget *widget() { return &mButton; } virtual QString themeId() const { return "DirectoryMenu"; } virtual ILXQtPanelPlugin::Flags flags() const { return HaveConfigDialog; } QDialog *configureDialog(); void settingsChanged(); private slots: void showMenu(); void openDirectory(const QString& path); void addMenu(QString path); protected slots: void buildMenu(const QString& path); private: void addActions(QMenu* menu, const QString& path); QToolButton mButton; QMenu *mMenu; QSignalMapper *mOpenDirectorySignalMapper; QSignalMapper *mMenuSignalMapper; QDir mBaseDirectory; QIcon mDefaultIcon; std::vector mPathStrings; }; class DirectoryMenuLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new DirectoryMenu(startupInfo); } }; #endif lxqt-panel-0.10.0/plugin-directorymenu/directorymenuconfiguration.cpp000066400000000000000000000100301261500472700262250ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Daniel Drzisga * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include #include #include #include #include "directorymenuconfiguration.h" #include "ui_directorymenuconfiguration.h" DirectoryMenuConfiguration::DirectoryMenuConfiguration(QSettings &settings, QWidget *parent) : QDialog(parent), ui(new Ui::DirectoryMenuConfiguration), mSettings(settings), mOldSettings(settings), mBaseDirectory(QDir::homePath()), mDefaultIcon(XdgIcon::fromTheme("folder")) { setAttribute(Qt::WA_DeleteOnClose); setObjectName("DirectoryMenuConfigurationWindow"); ui->setupUi(this); connect(ui->buttons, SIGNAL(clicked(QAbstractButton*)), SLOT(dialogButtonsAction(QAbstractButton*))); loadSettings(); ui->baseDirectoryB->setIcon(mDefaultIcon); connect(ui->baseDirectoryB, SIGNAL(clicked()), SLOT(showDirectoryDialog())); connect(ui->iconB, SIGNAL(clicked()), SLOT(showIconDialog())); } DirectoryMenuConfiguration::~DirectoryMenuConfiguration() { delete ui; } void DirectoryMenuConfiguration::loadSettings() { mBaseDirectory.setPath(mSettings.value("baseDirectory", QDir::homePath()).toString()); ui->baseDirectoryB->setText(mBaseDirectory.dirName()); mIcon = mSettings.value("icon", QString()).toString(); if(!mIcon.isNull()) { QIcon buttonIcon = QIcon(mIcon); if(!buttonIcon.pixmap(QSize(24,24)).isNull()) { ui->iconB->setIcon(buttonIcon); return; } } ui->iconB->setIcon(mDefaultIcon); } void DirectoryMenuConfiguration::saveSettings() { mSettings.setValue("baseDirectory", mBaseDirectory.absolutePath()); mSettings.setValue("icon", mIcon); } void DirectoryMenuConfiguration::dialogButtonsAction(QAbstractButton *btn) { if (ui->buttons->buttonRole(btn) == QDialogButtonBox::ResetRole) { mOldSettings.loadToSettings(); loadSettings(); } else { close(); } } void DirectoryMenuConfiguration::showDirectoryDialog() { QFileDialog d(this, tr("Choose Base Directory"), mBaseDirectory.absolutePath()); d.setFileMode(QFileDialog::Directory); d.setOptions(QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); d.setWindowModality(Qt::WindowModal); if(d.exec() && !d.selectedFiles().isEmpty()) { mBaseDirectory.setPath(d.selectedFiles().front()); ui->baseDirectoryB->setText(mBaseDirectory.dirName()); saveSettings(); } } void DirectoryMenuConfiguration::showIconDialog() { QFileDialog d(this, tr("Choose Icon"), QDir::homePath(), tr("Icons (*.png *.xpm *.jpg)")); d.setWindowModality(Qt::WindowModal); if(d.exec() && !d.selectedFiles().isEmpty()) { QIcon newIcon = QIcon(d.selectedFiles().front()); if(newIcon.pixmap(QSize(24,24)).isNull()) { QMessageBox::warning(this, tr("Directory Menu"), tr("An error occurred while loading the icon.")); return; } ui->iconB->setIcon(newIcon); mIcon = d.selectedFiles().front(); saveSettings(); } } lxqt-panel-0.10.0/plugin-directorymenu/directorymenuconfiguration.h000066400000000000000000000037671261500472700257150ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Daniel Drzisga * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef DIRECTORYMENUCONFIGURATION_H #define DIRECTORYMENUCONFIGURATION_H #include #include #include #include #include #include #include namespace Ui { class DirectoryMenuConfiguration; } class DirectoryMenuConfiguration : public QDialog { Q_OBJECT public: explicit DirectoryMenuConfiguration(QSettings &settings, QWidget *parent = 0); ~DirectoryMenuConfiguration(); private: Ui::DirectoryMenuConfiguration *ui; QSettings &mSettings; LXQt::SettingsCache mOldSettings; QDir mBaseDirectory; QString mIcon; QIcon mDefaultIcon; /* Read settings from conf file and put data into controls. */ void loadSettings(); private slots: /* Saves settings in conf file. */ void saveSettings(); void dialogButtonsAction(QAbstractButton *btn); void showDirectoryDialog(); void showIconDialog(); private: }; #endif // DIRECTORYMENUCONFIGURATION_H lxqt-panel-0.10.0/plugin-directorymenu/directorymenuconfiguration.ui000066400000000000000000000056461261500472700261010ustar00rootroot00000000000000 DirectoryMenuConfiguration 0 0 342 168 Directory Menu Settings Appearance Base directory: 0 0 BaseDirectoryName Icon: 0 0 Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Reset buttons accepted() DirectoryMenuConfiguration accept() 214 350 157 274 buttons rejected() DirectoryMenuConfiguration reject() 214 350 196 274 lxqt-panel-0.10.0/plugin-directorymenu/resources/000077500000000000000000000000001261500472700220605ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-directorymenu/resources/directorymenu.desktop.in000066400000000000000000000002721261500472700267520ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Directory Menu Comment=Displays a menu showing the contents of a directory Icon=folder #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-directorymenu/translations/000077500000000000000000000000001261500472700225675ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-directorymenu/translations/directorymenu.ts000066400000000000000000000045521261500472700260360ustar00rootroot00000000000000 DirectoryMenu Open DirectoryMenuConfiguration Directory Menu Settings Appearance Base directory: BaseDirectoryName Icon: Choose Base Directory Choose Icon Icons (*.png *.xpm *.jpg) Directory Menu An error occurred while loading the icon. lxqt-panel-0.10.0/plugin-directorymenu/translations/directorymenu_de.desktop000066400000000000000000000001211261500472700275150ustar00rootroot00000000000000Name[de]=Ordnermenü Comment[de]=Zeigt ein Menü mit dem Inhalt eines Ordners an lxqt-panel-0.10.0/plugin-directorymenu/translations/directorymenu_de.ts000066400000000000000000000046111261500472700265020ustar00rootroot00000000000000 DirectoryMenu Open Öffnen DirectoryMenuConfiguration Directory Menu Settings Einstellungen des Verzeichnismenüs Appearance Erscheinungsbild Base directory: Basisverzeichnis: BaseDirectoryName BasisVerzeichnisName Icon: Symbol: Choose Base Directory Basisverzeichnis auswählen Choose Icon Symbol auswählen Icons (*.png *.xpm *.jpg) Symbole (*.png *.xpm *.jpg) Directory Menu Verzeichnismenü An error occurred while loading the icon. Beim Laden des Symbols trat ein Fehler auf. lxqt-panel-0.10.0/plugin-directorymenu/translations/directorymenu_el.desktop000066400000000000000000000002251261500472700275320ustar00rootroot00000000000000Name[el]=Μενού καταλόγου Comment[el]=Εμφανίζει ένα μενού με τα περιεχόμενα ενός καταλόγου lxqt-panel-0.10.0/plugin-directorymenu/translations/directorymenu_el.ts000066400000000000000000000051321261500472700265110ustar00rootroot00000000000000 DirectoryMenu Open Άνοιγμα DirectoryMenuConfiguration Directory Menu Settings Ρυθμίσεις μενού καταλόγου Appearance Εμφάνιση Base directory: Βασικός κατάλογος: BaseDirectoryName Όνομα βασικού καταλόγου Icon: Εικονίδιο: Choose Base Directory Επιλέξτε τον βασικό κατάλογο Choose Icon Επιλέξτε το εικονίδιο Icons (*.png *.xpm *.jpg) Εικονίδια (*.png *.xpm *.jpg) Directory Menu Μενού καταλόγου An error occurred while loading the icon. Παρουσιάστηκε ένα σφάλμα κατά την φόρτωση του εικονιδίου. lxqt-panel-0.10.0/plugin-directorymenu/translations/directorymenu_hr.ts000066400000000000000000000051051261500472700265220ustar00rootroot00000000000000 DirectoryMenu Open Otvori DirectoryMenuConfiguration Directory Menu Settings Postavke izbornika direktorija Appearance Izgled Base directory: Osnovni direktorij: BaseDirectoryName Ime osnovnog direktorija Icon: Ikona: Choose Base Directory Izaberite osnovni direktorij Choose Icon Izaberite ikonu Icons (*.png *.xpm *.jpg) Ikone (*.png *.xpm *.jpg) Directory Menu Izbornik direktorija An error occurred while loading the icon. Došlo je do greške pri učitavanju ikone. lxqt-panel-0.10.0/plugin-directorymenu/translations/directorymenu_hu.desktop000066400000000000000000000004141261500472700275460ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Directory Menu Comment=Displays a menu showing the contents of a directory #TRANSLATIONS_DIR=../translations # Translations Comment[hu]=Egy könyvtár tartalmát mutató menü Name[hu]=Könyvtármenü lxqt-panel-0.10.0/plugin-directorymenu/translations/directorymenu_hu.ts000066400000000000000000000045401261500472700265270ustar00rootroot00000000000000 DirectoryMenu Open Nyit DirectoryMenuConfiguration Directory Menu Settings Könyvtármenü beállítás Appearance Kinézet Base directory: Alapkönyvtár: BaseDirectoryName Alapkönyvtárnév Icon: Ikon: Choose Base Directory Aapkönyvtár kijelölés Choose Icon Ikon kijelölés Icons (*.png *.xpm *.jpg) Ikomok (*.png *.xpm *.jpg) Directory Menu Könyvtármenü An error occurred while loading the icon. Az ikon betöltése sikertelen. lxqt-panel-0.10.0/plugin-directorymenu/translations/directorymenu_hu_HU.ts000066400000000000000000000045431261500472700271260ustar00rootroot00000000000000 DirectoryMenu Open Nyit DirectoryMenuConfiguration Directory Menu Settings Könyvtármenü beállítás Appearance Kinézet Base directory: Alapkönyvtár: BaseDirectoryName Alapkönyvtárnév Icon: Ikon: Choose Base Directory Aapkönyvtár kijelölés Choose Icon Ikon kijelölés Icons (*.png *.xpm *.jpg) Ikomok (*.png *.xpm *.jpg) Directory Menu Könyvtármenü An error occurred while loading the icon. Az ikon betöltése sikertelen. lxqt-panel-0.10.0/plugin-directorymenu/translations/directorymenu_it.desktop000066400000000000000000000001101261500472700275370ustar00rootroot00000000000000Name[it]=Menù cartella Comment[it]=Mostra il contenuto di una cartella lxqt-panel-0.10.0/plugin-directorymenu/translations/directorymenu_it.ts000066400000000000000000000045311261500472700265270ustar00rootroot00000000000000 DirectoryMenu Open Apri DirectoryMenuConfiguration Directory Menu Settings Impostazioni del menu Appearance Aspetto Base directory: Cartella mostrata: BaseDirectoryName Nome della cartella Icon: Icona: Choose Base Directory Seleziona cartella mostrata Choose Icon Seleziona icona Icons (*.png *.xpm *.jpg) Icone (*.png .xpm *.jpg) Directory Menu Menu cartella An error occurred while loading the icon. Errore caricando l'icona. lxqt-panel-0.10.0/plugin-directorymenu/translations/directorymenu_ru.desktop000066400000000000000000000002011261500472700275520ustar00rootroot00000000000000Name[ru]=Меню папки Comment[ru]=Показывает меню, отображающее содержимое папки lxqt-panel-0.10.0/plugin-directorymenu/translations/directorymenu_ru.ts000066400000000000000000000044421261500472700265420ustar00rootroot00000000000000 DirectoryMenu Open Открыть DirectoryMenuConfiguration Directory Menu Settings Настройки меню папки Appearance Внешний вид Base directory: Начальная папка: Icon: Значок: Choose Base Directory Выберите начальную папку Choose Icon Выберите значок Icons (*.png *.xpm *.jpg) Значки (*.png *.xpm *.jpg) Directory Menu Меню папки An error occurred while loading the icon. Произошла ошибка при загрузке значка. lxqt-panel-0.10.0/plugin-directorymenu/translations/directorymenu_ru_RU.desktop000066400000000000000000000002071261500472700301660ustar00rootroot00000000000000Name[ru_RU]=Меню папки Comment[ru_RU]=Показывает меню, отображающее содержимое папки lxqt-panel-0.10.0/plugin-directorymenu/translations/directorymenu_ru_RU.ts000066400000000000000000000044451261500472700271530ustar00rootroot00000000000000 DirectoryMenu Open Открыть DirectoryMenuConfiguration Directory Menu Settings Настройки меню папки Appearance Внешний вид Base directory: Начальная папка: Icon: Значок: Choose Base Directory Выберите начальную папку Choose Icon Выберите значок Icons (*.png *.xpm *.jpg) Значки (*.png *.xpm *.jpg) Directory Menu Меню папки An error occurred while loading the icon. Произошла ошибка при загрузке значка. lxqt-panel-0.10.0/plugin-dom/000077500000000000000000000000001261500472700157345ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-dom/CMakeLists.txt000066400000000000000000000003721261500472700204760ustar00rootroot00000000000000set(PLUGIN "dom") set(HEADERS domplugin.h treewindow.h domtreeitem.h ) set(SOURCES domplugin.cpp treewindow.cpp domtreeitem.cpp ) set(UIS treewindow.ui ) set(RESOURCES resources.qrc ) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-dom/domplugin.cpp000066400000000000000000000032431261500472700204400ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "domplugin.h" #include "treewindow.h" #include #include DomPlugin::DomPlugin(const ILXQtPanelPluginStartupInfo &startupInfo): QObject(), ILXQtPanelPlugin(startupInfo) { mButton.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); mButton.setIcon(XdgIcon::fromTheme("preferences-plugin")); connect(&mButton, SIGNAL(clicked()), this, SLOT(showDialog())); } void DomPlugin::showDialog() { TreeWindow *dialog = mButton.findChild(); if (dialog == 0) { dialog = new TreeWindow(&mButton); dialog->setAttribute(Qt::WA_DeleteOnClose); } dialog->show(); dialog->activateWindow(); } lxqt-panel-0.10.0/plugin-dom/domplugin.h000066400000000000000000000035511261500472700201070ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef DOMPLUGIN_H #define DOMPLUGIN_H #include "../panel/ilxqtpanelplugin.h" #include class DomPlugin: public QObject, public ILXQtPanelPlugin { Q_OBJECT public: DomPlugin(const ILXQtPanelPluginStartupInfo &startupInfo); virtual QWidget *widget() { return &mButton; } virtual QString themeId() const { return "Dom"; } virtual ILXQtPanelPlugin::Flags flags() const { return PreferRightAlignment; } private slots: void showDialog(); private: QToolButton mButton; }; class DomPluginLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new DomPlugin(startupInfo); } }; #endif // DOMPLUGIN_H lxqt-panel-0.10.0/plugin-dom/domtreeitem.cpp000066400000000000000000000073071261500472700207650ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "domtreeitem.h" #include #include #include #include DomTreeItem::DomTreeItem(QTreeWidget *view, QWidget *widget): QTreeWidgetItem(view), mWidget(widget) { init(); mWidget->installEventFilter(this); connect(mWidget, SIGNAL(destroyed()), this, SLOT(widgetDestroyed())); } DomTreeItem::DomTreeItem(QTreeWidgetItem *parent, QWidget *widget): QTreeWidgetItem(parent), mWidget(widget) { init(); mWidget->installEventFilter(this); connect(mWidget, SIGNAL(destroyed()), this, SLOT(widgetDestroyed())); } void DomTreeItem::init() { QStringList hierarcy = widgetClassHierarcy(); for (int i=0; iobjectName(); setText(0, QString("%1 (%2)%3").arg( name , widgetClassName(), text)); setText(1, hierarcy.join(" :: ")); fill(); } void DomTreeItem::fill() { QList widgets = mWidget->findChildren(); foreach (QWidget *w, widgets) { if (w->parentWidget() != mWidget) continue; new DomTreeItem(this, w); } } bool DomTreeItem::eventFilter(QObject *watched, QEvent *event) { if (watched == mWidget && event->type() == QEvent::ChildPolished) { QChildEvent *ce = static_cast(event); QWidget *w = qobject_cast(ce->child()); if (w) { for (int i=0; i(child(i)); if (ci->widget() == w) ci->deleteLater(); } new DomTreeItem(this, w); } } return QObject::eventFilter(watched, event); } QString DomTreeItem::widgetObjectName() const { return mWidget->objectName(); } QString DomTreeItem::widgetText() const { QToolButton *toolButton = qobject_cast(mWidget); if (toolButton) return toolButton->text(); return ""; } QString DomTreeItem::widgetClassName() const { return mWidget->metaObject()->className(); } QStringList DomTreeItem::widgetClassHierarcy() const { QStringList hierarcy; const QMetaObject *m = mWidget->metaObject(); while (m) { hierarcy << m->className(); m = m->superClass(); } return hierarcy; } void DomTreeItem::widgetDestroyed() { deleteLater(); } lxqt-panel-0.10.0/plugin-dom/domtreeitem.h000066400000000000000000000032541261500472700204270ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef DOMTREEITEM_H #define DOMTREEITEM_H #include #include class DomTreeItem: public QObject, public QTreeWidgetItem { Q_OBJECT public: explicit DomTreeItem(QTreeWidget *view, QWidget *widget); explicit DomTreeItem(QTreeWidgetItem *parent, QWidget *widget); bool eventFilter(QObject *watched, QEvent *event); QString widgetObjectName() const; QString widgetText() const; QString widgetClassName() const; QStringList widgetClassHierarcy() const; QWidget *widget() const { return mWidget; } private slots: void widgetDestroyed(); private: QWidget *mWidget; void init(); void fill(); }; #endif // DOMTREEITEM_H lxqt-panel-0.10.0/plugin-dom/images/000077500000000000000000000000001261500472700172015ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-dom/images/widgets/000077500000000000000000000000001261500472700206475ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-dom/images/widgets/calendarwidget.png000066400000000000000000000017101261500472700243310ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|dtEXtSoftwarewww.inkscape.org<ZIDAT8˥[kA;4I(Vת}w*=`7 EE-/JmzVSls:gn(̜9;+[RnH/+ H>tg908C?w{ t@b<9U7:7Nɪ;tG-(@Pf,CC;|X K+Wۑ/wJ \.)Q,YI!{<ےYDC㹳X%PM V,f&J≚. sX -1n<}zG̩0{HH>_04ٽg 'JkS9&۶v\d23D$`S#Xe< ^8g(kWQk ˬ7+i+WO$,h~l }{A⇾u55B߾IAWILBhQm"^5 [I0,p.hvZ%鴠DV\q[RTo ͢ HΤ'y{?5Wl+vMx |ol)jM(9_Wh뎹ݞ^wfmm4u7o鷙aNxbt:= 6K{IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/checkbox.png000066400000000000000000000014611261500472700231450ustar00rootroot00000000000000PNG  IHDRĴl;gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATHKSqK4i^ht9o!=4cæm6&EytuPt]|[SaﵳwTPT-aAv]ULƌ;0z%K`N33355==NL&;).N5}L5,rPȣX,T*\.Ik(%xb?c'{vSUtee/WWDDuc1$qQzg]AS,B`q\d2Sa0p8_N/ <^>O:⤉>3@ -/! a>nPdf]©sX"%2~M5:/QOWWWku  6NMIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/columnview.png000066400000000000000000000010061261500472700235420ustar00rootroot00000000000000PNG  IHDRĴl;gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDAT8ŕjP?mPRwȢ|}>K_?o T!ILn7!6 GG3|ctńQ Vj4ɶP4\N\.S^!{jl00a$w]V*0[hZ(l|>ZrdrdJ)xy.0 VV_NM&v.Yk%d2hPbn^:sYJHQ-˺v; ~MvRi~Ư? dV _W?K}.h>z}t]d2InlQ6balFj $lɏfIo}H,IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/combobox.png000066400000000000000000000015251261500472700231700ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|dtEXtSoftwarewww.inkscape.org<IDAT8˥UMOQ=әv mҩ-*5L@bbv7# FtF&JBB`K[kbML^w޹Mt:7::9B RT_ ,2L jm8&Jҹ8dFdmm (q(,666Z `{~}}|LU <0Яr|80eKKP.Iannm I{ _i0QVg)sf(nP=/cy)I'iP]סi'_ ݶ/_*j&mvך:K$5H$8o}“7ē ޼;HDEx"!Cr>.~QSATL2-l`0^;xh'z0RPX`IIa`^I}9n R6,]Lvl|k X70FuOPeq5Z@W SɎY!Gʫc Yȥx[m GsC{{1(02:S{Nq]s10[Hĺ;XhLVKŀSҸ eu %׭9 tT^_p c;<gΰ掏044 )kP~/IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/commandlinkbutton.png000066400000000000000000000022701261500472700251060ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYsbb<tEXtSoftwarewww.inkscape.org<5IDAT8Le};ƉcQcQ[mͱYrs5JXIwC_W0k*Ug$SNttp"_?RVk}{~/1.~{kR7/Ay?T&ihHJJjMLL2 qqqzzxq=݇ C~(ط"u}$#""ӄK?vՆ\*í6tb^'\6td[3<<&h'QK. cpҎ ;ǎvZ Jp-GtDzQݴ3a3.D%bnhE-͗E7awi*`{I$~%Cz.mRU`}#1Jy4jt9%'۫BE0pDVQP{ ])'h9 2tC7.蘊RC%PC_9OFρUtKH)EB_ uax.ɊEp y5(m_Y)A[1 ylJ"NIR}QcC= ʽDB'HS}jndRZޤ<*3OcyQfIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/dateedit.png000066400000000000000000000012401261500472700231350ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8OK[Asgi0.l .vt#.BJhB*R"J"y&);ܹsUo24@x3pќqg:ˑ"̜0GOeY2L^9ysdUŔF1+½aO`Ei̇-vUbr.*/B T|E2!iI3¤BF|ȟ0'' Ԏ q`-",XQ@18EilO Ȑ H7rAg,81i{ 1Q( hU mv*LK9\ "=:5wsURhXJBX47c]k;YjKk@5=.O_1d[ZEq~|񍫥ZjPK**BRa(j̈|J:hsy1^NS6ƀ- eU 8 UYIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/datetimeedit.png000066400000000000000000000021541261500472700240210ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8OlTE?3nw[w%BZ(H\@ j" I HBL Ѥ  ڄ%]I 5aT9G Y@  zi/{w(tuu=XHPMcG ro_ղ1t֛o 1!}1DaCuouυ::P8H4bkW(fbEmVaW< dQ PPŀ,S_Q ͦBc"BcC+OEFFB+dU$kIR(堔Mל<\T:M}C=#3 4*q Þҭ?(&4m$ <8t1_;ڽ{wٗp?v(A*r>=q,dz./P>WW8tfa{k \)55/qG<[OfP{lY%:?X^L!I!cE=# &ؾ&Ʈ]e@r>ŲMjߊXuNhQs ;370 ԉ>kIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/dial.png000066400000000000000000000017221261500472700222700ustar00rootroot00000000000000PNG  IHDRj PLTEpl}EWf9&*{Rz\17&/3":E#\^wOXi6DO-29%}\h}:,3+1at4^r3/4!l~EqN08*0l6&"+DW`p;uLuND6C+6GCTCVGZz2~:9`>AWD1>% KOZh`ngh7E^;_w&<> w O441fM2wƤ*xVabobTe+Nm:fu9a6oV߬Mzs_rƋ_9^QCHdyyt6Γc7YY=uDК;7'纡`B2,Զn݋#"W3s몏zlc iK;c$<Ȁ Z!QT>[nuߒyS_Tp=ڳ1t6 |+jLtK 'A_@eT(xȧ -0HoF$i<.圗"~ìujIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/dialogbuttonbox.png000066400000000000000000000017531261500472700245670ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|dtEXtSoftwarewww.inkscape.org<}IDAT8OKQǿgjwu715.DRF] !FPDTPD/ HˮZVVFnk^\wvfNL3Z=sΜ~g{VTT.JrQ8MyN-ϟǏs+\Hj}Sy<{>cZPE'ZG{]"P\hyAc3c|?. ľuԔ(r`D2T1lK1K[.m$/F_/;8s3+G(h`p0)GS/C䀲g^}m|sV`«HKC^l;w@IfMn8+ @?f)* 6F@}Nvt"2e2B{ދй*TjoGF?c0fǽC0AȲO3t/Y &7~uvBx VW#p2|ȚjyOuLG <4o_5jߵ]^HC˩2Nm6طo/C۶\<5֤ϱJi$r-nk3$Ad󑶞$NScDnTҌMJהԬY9Ț3J6ߛr:Θ,]Zvd#i@(ԟQ7ľkyIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/dockwidget.png000066400000000000000000000011761261500472700235060ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8ՕnP?;$HH,lH bx+bB@<RgҊ![X*Ѩqrmr/Cb+vHT!eHWֱO?{-l"Pڈdqzzx>])캮t;ЫXki۸Kh Ic}NNa-(.yq( MG&ǙL&,3s cLڊB&s<`&g8AF c RJ|C1ZXt  ?)_!t!Hs QJn=.bǶ 9Z縮C,^MS82)RR5,`&)? B4a% |ߧ(~3Of~ AxpDQTm*M)5oTu_=]VV'_mfWz,:Nm*OG( =@ !6h%!*($(JZdNAX {͟e&6.,w=3k-T)"UEUAصή ڜD~n+M`2 "rp rcPU0O>>>xNCabbU30 D}m|'H8p~?clmm.l6䷠.F0 TD8%ܣq}3+KHjI0]XX`iiYDeIrR6SL...I֦kKc#sssh4^#"!"y{{{mIxssZ-zyyAUiZLԸwcVq*jxxx`||-`acci1Ƥۭ{ظC=cUeddվ-mJ0::JXX,υB|>1A="k-Sa6U2h\Q.P6udb[IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/fontcombobox.png000066400000000000000000000017061261500472700240600ustar00rootroot00000000000000PNG  IHDRĴl;IDATx^Mh\Uc>Z4uQmBBG,RUwYA袂2 #R JB@:PNE)ԴĩL23311H;r~?<200!$P(LMLL`L&eY<&'s/& 'q ̴Ӭ};"KAWZ.pI 5tzDT-ej:B*#k៨*9Îcm[Ģ1$zX-uqrZoU^+E Bܬⵛt%|l4{~BclտX*.o^ͳg)}{7x|l$O;p.[HM Vqhy(?p+ܪ'v{N!Rƽ1r\Zöǒ+ E:gTգ={~><<JusܲuIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/frame.png000066400000000000000000000013211261500472700224440ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<NIDAT8Օn@1qJ%&?Rb Oۀ؃X<VXUvП(JR9 77qv]p%/Μg^_+c ֽ;-kc0ưIJ),n8xO\.믉0_:qcL&w0N|zt ˲{BP^16xV'%>;*1z]Kj(w:ukbQy^/Rߜ dl g2*~v-xgHZ<Oh6!m gYYDQKpu] Z`6}"X0lJR6kyl5q_)<2^: f iYm۲'Z\^n7 GQx,x,[E\.)JRqV «J%eF##~S¹\k35aؔWTJ&J) Xߖ8NҀ#gwx/[N?}~+zmLh\JBaYɰi D'-;bIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/graphicsview.png000066400000000000000000000022361261500472700240530ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|dtEXtSoftwarewww.inkscape.org<0IDAT8kLSgqM7˲,qY쪛n&ev#[ A)r)JA:[.ceҖiZ.[@2E`RV2iKoOA,kMsA?|J_yw;Ruo37u3]q$\Hk̍q: ,tuFDeOB0j~hv*G>J] j@<qE%RTFk5xkT>WEyۈ[P*)3[@Q2*'sקg%.^ cp8OaN\.̖P*=]Mؼ_frba겠g|ZZLH$Ӟ?o{CX # }b22$Jqkn6mXb+wMzs&_|CVXdx'B])''[ms?!uXEE1y"![둟ҾۣƜQo@s$ IW9sb1q)¹ ,qipxaB+0)(O5;oci p` u䍶El|9?!_"^? mH€dqgXNn $XQbԱkjY;b^UT0 X̔d`P[ IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/groupboxcollapsible.png000066400000000000000000000012761261500472700254420ustar00rootroot00000000000000PNG  IHDRj 2PLTE===XXX555333}}}RRR&&&>>>DDD葑ضEEEIII՝YYYג䳳XXXfffۣïٹݏAAAeeeOOOBBBڌRRRe$tRNS &M K:G 3%g="=ZČ3L4IDATx^n1@asA3CSEꑟm]ye !4LIe][- Ơr \\gc fr{)Fo9ƯoE8TOT:JX Z=k#26V4m;oۦi5;B82=,BrZW#J\݉+w71P4Utc| ry-+"3*R0&'3ap*I0RKhRCx.P8~ |-5gIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/hscrollbar.png000066400000000000000000000006301261500472700235070ustar00rootroot00000000000000PNG  IHDRĴl;gAMAOX2tEXtSoftwareAdobe ImageReadyqe<*IDATH1K`A.I?P:Aq *A\\榛N. N VhMirp6Ag$eRgˤKPodT%~Iy{%3/(BۆMC{˰kXPTgSqXCC̰wm8P|N=nZHwM[!Cy7BωWv ۗ;ţ9CLsLÎ&~)*aǺ5ip.)R'PZOUҘ#IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/hslider.png000066400000000000000000000013311261500472700230050ustar00rootroot00000000000000PNG  IHDRĴl;gAMAOX2tEXtSoftwareAdobe ImageReadyqe<kIDATHǽkRa_u3*. ˁAEk]t.`-Ԅr0BF!TBơ5lZAȘ Uտyyw`?x> _ .a& +!?<(% EQx`ۗY$,ȫ`0n9̮1`U!FߏٕAQ\tѼ M%vq]b+/uErO]C|q]\TPÏ7'⣄oe񋲂3c?P!>Ftq]]bڈMOŧU]1b'k"]E.>@;{ q=" zD"dYM<9OŇ84TUE>@P@TB(brcY6+},~VPH|0h,sT~"g&7o+9q}BeC^jQܭjblFA8e`TTۍ̔.^~@cn.S̼5R+G"q*kVYEn8%r}i3=k`E8#IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/hsplit.png000066400000000000000000000002441261500472700226600ustar00rootroot00000000000000PNG  IHDRm PLTE~OtRNS@fIIDAT[c`@Ŕ9# j QU"VZ*4:@郙as}0vwIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/label.png000066400000000000000000000016711261500472700224410ustar00rootroot00000000000000PNG  IHDRĴl;gAMAOX2tEXtSoftwareAdobe ImageReadyqe<KIDATHǵmHSaǗX 2SQ$ka~ɲ} ZDQi)&j B/Qh-(**{[ܖjۿl6>t.ws# >Dsrrrj`U*rn5 Jwq$Nq,FwI*{G9,8^gA7 0UT*u(g{b"N 0uf䍴ij3a{]z5(kc@@@6}g1o!'[NX+SS C-a,UzwdM2Cliȃ]STᦿ zzz0<{0u@>5s\"q~J#UZ0^M0h}>ڏ%{g4K].zNK`r(>?iħ|\)܀φS5XI81PUXVnlS|U;A|ΗO{-`9QQ %11t:,6|xzRf{L5NGH dxw}p 9cjJq@d&Bʋ 7D"QF]6:8= 1!LvPx9yV-G占YG ԑX%f D&we\Isr91V^ގjʠtKˉ\b+W'3_O"Y^fy*V-qٲAX+8hb;QKXO!iףB#>ry%qlR~drz-zrJn6^RbG=JW|-e]*촀'GIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/lcdnumber.png000066400000000000000000000010531261500472700233270ustar00rootroot00000000000000PNG  IHDRj PLTE***DgggXXX󐐐sssռ幹ʦ韟ܙፍYYYكtRNS&M % :K "GgZlIDATx^Ueo1 a9633rkˎ~ $;Mm>)os}bN~{g8=]iHO&] *>>j*L^pCM23؜wBL](QDm&)R$^^#d˱F`r*;zu)D/ꪐ3-2ebNhӄ2m:tҥC,x4iӢGE%uS8IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/listbox.png000066400000000000000000000014351261500472700230440ustar00rootroot00000000000000PNG  IHDRĴl;gAMA atEXtSoftwarewww.inkscape.org<IDAT8˥TmOA~z-H~I1~>$G[#B{׻ug{m1t3gyfb|^,.. loo<׿?Eo It:h4 ȣGT|%\'b;W8<4$A"@h;@D"'`eYIPPב!%KE%8¼{Z^^$MNN* HkC\C\DJ}JV=z~L\` cvvV---pj_3R$N".t_"Z`?P(U---IIhfTۛ5P@BPu]knnNH$ttSZ=D c@أ8SSSbvn`^Ex\^^u]e2 )d@ qh0Xǖec:::ޮ.UWW m8T)ѠGqP \zK^[F}qBmnY NS .>ϣ86IGw?d_a}= 9(\Y 8k@r9 u{3pLА 8 8bA5}&@6Pl:(_4x^IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/mdiarea.png000066400000000000000000000012031261500472700227530ustar00rootroot00000000000000PNG  IHDRj PLTElllDDDdddQQQ~~~PPP[[[ZZZ...ن׀ڊډׁ؃^^^~WWW///s؄هܷڌ+++ޗ͹ێ,,,}ߪ`xutRNS M& G:K%"FIDATx^n!F2uw}g)fnzB|J,I^ BЭM\ OlV I#xzm/@)dv;.рjFs7v'b݄>N:4M"+£"qG*\J\\\D8hƲ,lƶmy&ij8.TnAY[[8==eoo z^{Grh4x||@ qyyIym\]]ƯT*auu!̰$!5*vwwiۚW}}}lmmiM_b2? %T$8R(RX$JӃeY$Iɤ6x0niZ"(J)r楔oyJJ\.G]'IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/plugin.png000066400000000000000000000021551261500472700226560ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<IDATxڥKh\U߹wfBlӢ5DGغ)]TntBQW"(Qҕ+|ED)RTcSd&3ws>8383˟s.\bfOAz:Ą&rl**so-J&<`v_uEqFo47_TMi76:\])Hi1kF8^6#h_(ϼ|J 5×'<JXbw߉k}o7{cNEax-P67Lv{H! #'Tw6"^d"&v0H;[‘ sCۑ8X(_\wJ2n7>'#IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/progress.png000066400000000000000000000010571261500472700232240ustar00rootroot00000000000000PNG  IHDRĴl;gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATH?@I&{wsr. V[ڈ"d+XXn-~[Ȗւ`nV&G&yg,pw(ݽ0 /cᱥ_/jv5O*2Ddcb$s`eٌMPD(dҁjs<~~MͳO~&G8Y~A)$w:{Jyc u]}a2^iuпA p8&M{gxluV֭g+ ;j @ 6eJU]B8u㘲ycRt`1r98Iœwi bѣj9乐Q6G 7uۂki+T΃W-|Oe)11IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/pushbutton.png000066400000000000000000000006301261500472700235670ustar00rootroot00000000000000PNG  IHDRngAMAOX2tEXtSoftwareAdobe ImageReadyqe<*IDAT(ϕn0EO' R2+* v,,HR2u`Av!.-l k6܆ ec1[ A6| Tt\cFn@!HJ Ф.x=0!<0 Ǔ~ln6k%"Q@VpI_:K 57=""zDEr/o.s揰ݡ+IVtШ|Bf9zѯ`3E/t=[R@.l1HIf"HW [  [0\IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/radiobutton.png000066400000000000000000000011121261500472700237020ustar00rootroot00000000000000PNG  IHDRngAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDAT(MH Nn6)F1V,Q, 2B((`aul d5"J ꒶KDv)iJ/dEw,:s_bd.\r) V2NvV֚>]J #zsG5e2Ll{R>d2N^/|scZW^r/w:?y[f(3Mۄ;![ #|%%{<2ؾ9f8W_<csUqyeo`gY /Fr S l`WW qw*SI od'A1Ȇ;;Jx= r\c}fc.d8W8QKuAC=.1E.0))*i=Mv8A!uK[T$Cnf\_ n(^)J* _+ /{l8qbIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/scrollarea.png000066400000000000000000000010441261500472700235030ustar00rootroot00000000000000PNG  IHDRĴl;tEXtSoftwareAdobe ImageReadyqe<IDAT8͕MKQD@-DD1$8` ]).f!+&pFg#h"ye/jfp/\f΀(wdrPeF|5CQ Ra|Ιff Lt:b&P(dA$۾Ka6]֋ԛ@9L\.|5MRX*1\.cVVT`yhŔB|Ń)_9% Vq,>x?5zO7n׳FtES6GĎH$eWb3+v|* NRֆIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/spacer.png000066400000000000000000000012561261500472700226360ustar00rootroot00000000000000PNG  IHDRj DPLTE Тp fu|f@oSvO{+LZ 9c{>k-Pd4ZnAT\JJJ444LLL---AAA % ???~~~pYYY⃃333撒`rrrMMMM}j[Aex|||mmm EEEV{xxx>k`xCs666N}1IV:jXXX3^taaaggguuuSSSUUU쑯;.tRNS  MD"3W?(:nu\9t7~={>F,IDATx^еn@Eر^ 330333G)J:Ny?,i^췕;JVƁT2N#f.'^%-,ār2'TZ`6q5c`JgLlMLMb:&X,lT66m bdK?47v7ٝ3g.B/ /"8294vu!l6 iBA$)V+y:js.KH$p`@1,zrtxp~~G6.cesN0` ck&Zt]niN@= JDX,0 ef^l*4S^n{7vBYORn\.T*!/PwRQ^ijBxkj;wx{<2b6ٓ' TUzFT[jJŷ#?ih4|>wvlX(( v-2 j 9c f|F1oWج zohzW$8bb  sinl6(_eiD$+J^_]h79'aIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/tabbar.png000066400000000000000000000011571261500472700226140ustar00rootroot00000000000000PNG  IHDRj 2PLTE%%%}hpjpZx$$$r&&&gMfkqysqc,,,({~-;###uwyeuJcKdOhPiQkRmTnUpVqWsXuYvZwIamh4tRNS &M "D 30:(Q)\^!IDAT!O@kF0ABCzW#84AB&H ,ז]ZLM n fN:(MQO. {'o$EQo1}uESݡQ#lQ{/ e,,̓lm-zDxmƗOYX5 {Ȝ{s6 "_8a gGIxthSw4 l%6HI IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/table.png000066400000000000000000000007431261500472700224500ustar00rootroot00000000000000PNG  IHDRngAMAOX2tEXtSoftwareAdobe ImageReadyqe<uIDAT(?K!$(&NN77D Egp]$?95Txxq}{z& O LC}ڻug8|Uh{$Z %ٰ6'j@NJwT_ HpWP@x:8w OZ;X `|68? [ST!Jpi{]߀f3 1J%H%*@9`(7߰~RHPK$ 4* @-Mքfxz(#.T2ދ>pȍyHǖ- -P4uVG[injM]&f h4R7jIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/tabwidget.png000066400000000000000000000010741261500472700233310ustar00rootroot00000000000000PNG  IHDRĴl;gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATHՕn@r ֑D"ݹ;Jt !% H "EZZR8;-׾5 qG Fxy<0 (m6@0N<)ٌdADz(ZY@n9y H`@|wWc7~ R 1 _?7}D0څVp ywe9@aLE{g/ǫ݉"ziBS= 3𠢰g IP lA"@ҁ}h)jmK~uY\"omrE/MePk&T!Sô{||5eO[ߋLpb>΍+]hh$@&#fpJcϪ/IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/textedit.png000066400000000000000000000014671261500472700232170ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8AKAD<zҠ^DA AЃ_@ E~J(E#I%LeD{q`73oy)xX^^R&1)%RJX}sSJ-d22922D"q/666+"Dhkk{04 )%iR׹Zr}}MR\.S.@JRnnj蔕R knhXQ1Ѡ?1H#&`"JLGKZl]lˏ-tw{7O}8|̙s- Z@_}Aޜ}al/L*_?3]b*aw{n}635Q XՖ|al9v<6>x=>Hg\{,kT5G/a+_rdl<- ovt䞛clɷQi7SgTI711]W=OZ53\0ƖMᅵ ٹc'Ce-oN=v:wQZ^A%qW288kZZJ<5kr뵗l&4(5my򀮃Ao wpW!"XX6%1iݷbtdU--"Tmu12cmnK]L'$1T N\MNݵ0'غR,t : J*'IB\ksBX,o AXx u a%b*"|{ TVcʼn`E0==s)"ϊSkSA)(W*TGLMN\+]ݸ]3V,mG)EF|4Gx6N4#9n2Mⷓjgj^?0Ñk3miI^W}gIe$~k|=w!ۥ =+YӞ5~*&|6VedrC;g>瞐El[74< %Ә qgSYkb F8S66"g@EDL`S6h4ۡVΒJ(j{,RP*Ɓ?>1sd9X\\ "Y i,|drs XDbq;>@4emmmQ(X]}yV3+Thq סa;xB:}xJV @=S;@ WMN 6.133sP۶ l/l"(mƮ>{|~"Vπ9vRS"DN9Bq@ԋXhj\v o_pm `E ?ɽIENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/toolbutton.png000066400000000000000000000022171261500472700235700ustar00rootroot00000000000000PNG  IHDRĴl;VIDATx^UMH\Wޛ޼w 1 q4FmGMLL\Zh.h1]u'qӕlJ (jZBMbt%Fct\[ E>87^s{GC8nbss sKKKXcb[0lF*I5EQ=iCCCa.`bVZUUX,d2y")S4U"RxX1۸x<I111>tu}Buaȡ0XL$22w1;;\Ԃ !XE-`cr%ZZW=ȵFJPUF\ q1#~|0Aj9{Z0̈́ 8z <a~~j$<# pυ Kqzlqq@yy,#}/햱iB؄H3!E%q6 &f[!uvm̜A &r7Kի?]H !22 IL !5 &%ǖ;099ׯƋ/1=+nJwޟ?_}&k! ~vww޽aܼ Mv|=o+`#Uy٤Y[jO ?*ܹ<ҥ%]`ئOȂFʱ[D>2QWWՆ[4MdS:#77+RB#vffOeRHeܸщ ߦD T͚|꺆k׮SRڠd|IBأѺ ي/"m<;]JxL*+8{6pHOq "Hc+dST͛HdbYunjS 矬OZ4~3{s="0D"Y)&((4+1o>|Ts;-eawBD?7 $㡘h.KYMqh!Y.%IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/vline.png000066400000000000000000000004721261500472700224750ustar00rootroot00000000000000PNG  IHDRĴl;gAMA aIDAT8O픱 0FZ;tp(t,E*TpDzfm>pNH"b " nml( $$ #eV JhACqˬZݯX1`8o 2㼀~bKGUU|!L]Rpdp&I2_-~xb`~ qB}y y h4pֶ{o}s6iMpqbgx^ќ{IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/vscrollbar.png000066400000000000000000000006371261500472700235340ustar00rootroot00000000000000PNG  IHDRĴl; pHYs  tIME .A=bKGD,IDAT8c````b  > #@RBX˗r Ϝ9ok0'5eȆȆC]I@ 0a0p(XyX}`c c$qb b5 E lj0/G0`Y =cp$tZ#pܺ:0 2rܿ `f.j*a=dYVN BD"oZ[[ۊ7|{54miG-=~gil9K-=K[z>o墥&=p8س@9p+rOxtgʣ5-iMK%RGOzJH@@@A6TuB1t>ѵQ؋Nwѩ{tBߣ41-#\1@cPm*oFߍnz0&Uz8 FQS5_B#H+:چjbׁPwֹ\/+8,}=@wAuvvf @59nðoPᖖeU>Sar ÖHC{{d\mVFFF2>BJv uࠦ2`v^`OOCAn;js亚~\#IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/vspacer.png000066400000000000000000000012451261500472700230220ustar00rootroot00000000000000PNG  IHDRj DPLTESv fAT\9c{ O{ 4Znpfu|>k-Pd+LZ@oJJJ---444LLLAAA`jpȥ UUU3^tXXXuuuSSSN}YYYaaagggmmmV{}rrr`xxxx~~~ [⊊CsMMM:jAex|||>kM %6661IV333???EEEhT.tRNS MD"3W:(?{t~u=>7n\9F_lIDATx^E{@Ea@\C a=˳ )t!VMrK~p4ì>'g"dQ[=<=ȉ#$3&0W2 ܠ;M<@9!05]O$k!B~mѶN>ݯO5AaFq(co({޳/.Vo_E2b\6IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/widget.png000066400000000000000000000013141261500472700226370ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IIDAT8ՕN@qpP$Ib 8vǪK*@* tP*۩le,:%{|)%qgQwr!%RJ?C~[_>'Q>W?ɲ49<|iyF^JW8-'0r* 6WqEOJ:Z-e$Ic~6q{{[I&l6NGᛛ)yp\]MnUώ^WQ1NYOFFuŽ2&IBnE=jZU0,rM / tv_(4^ >SF˲vW)!nh6`ggW8s Њ9?^67P.yY( |_pV<^" C)%V0 ITT< GGVE_HY>D")S( FZ⿻~ P IENDB`lxqt-panel-0.10.0/plugin-dom/images/widgets/widgetstack.png000066400000000000000000000014741261500472700236740ustar00rootroot00000000000000PNG  IHDRĴl;gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDAT8KKUQk^h)B_ j 8 4"MY(GA i"J5tܮ{&Y$rkڥv}f- HP Dc w]G`HDn\j=o C/$T**Ja'G BijjZP 34mTkRh\zխbu&f> -qi8U\΅Ϟ Eca=UÜ;`vM>w0.󃠓`ׅ|?_wxqOXeQ YNtx `Ǩxs/Ul!cQ* -90V=~:6|6{`~ef&A52SSSϛgq)1t%C}Vqik؆uvs !\JRZ~) ϺW2A!Be`\ Q!dhDDo@I R0)F@d =HIѮ6C|\n D%$%v,^1P ! IbतSqqq2)sƘYIENDB`lxqt-panel-0.10.0/plugin-dom/resources.qrc000066400000000000000000000057741261500472700204720ustar00rootroot00000000000000 images/widgets/plugin.png images/widgets/calendarwidget.png images/widgets/checkbox.png images/widgets/columnview.png images/widgets/combobox.png images/widgets/commandlinkbutton.png images/widgets/dateedit.png images/widgets/datetimeedit.png images/widgets/dialogbuttonbox.png images/widgets/dial.png images/widgets/dockwidget.png images/widgets/doublespinbox.png images/widgets/fontcombobox.png images/widgets/frame.png images/widgets/graphicsview.png images/widgets/groupboxcollapsible.png images/widgets/groupbox.png images/widgets/hscrollbar.png images/widgets/hslider.png images/widgets/hsplit.png images/widgets/label.png images/widgets/lcdnumber.png images/widgets/lineedit.png images/widgets/line.png images/widgets/listbox.png images/widgets/listview.png images/widgets/mdiarea.png images/widgets/plaintextedit.png images/widgets/plugin.png images/widgets/progress.png images/widgets/pushbutton.png images/widgets/radiobutton.png images/widgets/scrollarea.png images/widgets/spacer.png images/widgets/spinbox.png images/widgets/tabbar.png images/widgets/table.png images/widgets/tabwidget.png images/widgets/textedit.png images/widgets/timeedit.png images/widgets/toolbox.png images/widgets/toolbutton.png images/widgets/vline.png images/widgets/vscrollbar.png images/widgets/vslider.png images/widgets/vspacer.png images/widgets/widget.png images/widgets/widgetstack.png images/widgets/wizard.png lxqt-panel-0.10.0/plugin-dom/resources/000077500000000000000000000000001261500472700177465ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-dom/resources/dom.desktop.in000066400000000000000000000002741261500472700225300ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Panel DOM tree Comment=Show a DOM tree of the LXQt panel. Icon=view-web-browser-dom-tree #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-dom/translations/000077500000000000000000000000001261500472700204555ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-dom/translations/dom.ts000066400000000000000000000023361261500472700216100ustar00rootroot00000000000000 TreeWindow Panel DOM tree Property Value All properties Type String value lxqt-panel-0.10.0/plugin-dom/translations/dom_de.desktop000066400000000000000000000001131261500472700232720ustar00rootroot00000000000000Name[de]=Leiste DOM-Baum Comment[de]=Zeigt einen DOM-Baum der LXQt-Leiste. lxqt-panel-0.10.0/plugin-dom/translations/dom_de.ts000066400000000000000000000023101261500472700222500ustar00rootroot00000000000000 TreeWindow Panel DOM tree DOM-Baum der Leiste Property Eigenschaft Value Wert All properties Alle Eigenschaften Type Typ String value Zeichenkettenwert lxqt-panel-0.10.0/plugin-dom/translations/dom_el.desktop000066400000000000000000000001721261500472700233070ustar00rootroot00000000000000Name[el]=Δέντρο πίνακα DOM Comment[el]=Εμφάνιση ενός δέντρου DOM του πίνακα LXQt. lxqt-panel-0.10.0/plugin-dom/translations/dom_el.ts000066400000000000000000000024021261500472700222620ustar00rootroot00000000000000 TreeWindow Panel DOM tree Δέντρο πίνακα DOM Property Ιδιότητα Value Τιμή All properties Όλες οι ιδιότητες Type Τύπος String value Τιμή συμβολοσειράς lxqt-panel-0.10.0/plugin-dom/translations/dom_hu.desktop000066400000000000000000000001221261500472700233160ustar00rootroot00000000000000# Translations Name[hu]=Panel DOM fa Comment[hu]=DOM faszerkezet az LXQt panelen lxqt-panel-0.10.0/plugin-dom/translations/dom_hu.ts000066400000000000000000000023021261500472700222750ustar00rootroot00000000000000 TreeWindow Panel DOM tree DOM panel fa Property Tulajdonság Value Érték All properties Minden tulajdonság Type Típus String value Kifejezés lxqt-panel-0.10.0/plugin-dom/translations/dom_hu_HU.ts000066400000000000000000000023051261500472700226740ustar00rootroot00000000000000 TreeWindow Panel DOM tree DOM panel fa Property Tulajdonság Value Érték All properties Minden tulajdonság Type Típus String value Kifejezés lxqt-panel-0.10.0/plugin-dom/translations/dom_ja.desktop000066400000000000000000000002251261500472700233000ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name[ja]=パネルのDOMツリー Comment[ja]=LXQtパネルのDOMツリーを表示する lxqt-panel-0.10.0/plugin-dom/translations/dom_ja.ts000066400000000000000000000023431261500472700222600ustar00rootroot00000000000000 TreeWindow Panel DOM tree パネルのDOMツリー Property プロパティー Value All properties Type String value lxqt-panel-0.10.0/plugin-dom/translations/dom_pt.desktop000066400000000000000000000001421261500472700233270ustar00rootroot00000000000000# Translations Name[pt]=Árvore do painel DOM Comment[pt]=Mostra a árvore DOM do painel do LXQt. lxqt-panel-0.10.0/plugin-dom/translations/dom_pt.ts000066400000000000000000000023331261500472700223100ustar00rootroot00000000000000 TreeWindow Panel DOM tree Árvore do painel DOM Property Propriedade Value Valor All properties Type String value lxqt-panel-0.10.0/plugin-dom/translations/dom_ru.desktop000066400000000000000000000002441261500472700233350ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name[ru]=Дерево DOM панели. Comment[ru]=Показать дерево DOM панели LXQt. lxqt-panel-0.10.0/plugin-dom/translations/dom_ru.ts000066400000000000000000000023631261500472700223160ustar00rootroot00000000000000 TreeWindow Panel DOM tree Дерево DOM панели Property Свойство Value Значение All properties Type String value lxqt-panel-0.10.0/plugin-dom/translations/dom_ru_RU.desktop000066400000000000000000000002521261500472700237420ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name[ru_RU]=Дерево DOM панели. Comment[ru_RU]=Показать дерево DOM панели LXQt. lxqt-panel-0.10.0/plugin-dom/translations/dom_ru_RU.ts000066400000000000000000000023661261500472700227270ustar00rootroot00000000000000 TreeWindow Panel DOM tree Дерево DOM панели Property Свойство Value Значение All properties Type String value lxqt-panel-0.10.0/plugin-dom/treewindow.cpp000066400000000000000000000124551261500472700206360ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "treewindow.h" #include "ui_treewindow.h" #include "domtreeitem.h" #include #include #include #define PROP_OBJECT_NAME 0 #define PROP_CLASS_NAME 1 #define PROP_TEXT 2 #define PROP_CLASS_HIERARCY 3 TreeWindow::TreeWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::TreeWindow) { mRootWidget = this; while (mRootWidget->parentWidget()) mRootWidget = mRootWidget->parentWidget(); ui->setupUi(this); ui->tree->setStyleSheet( "QTreeView::item { " "padding: 2px;" "}" ); initPropertiesView(); QList widgets = mRootWidget->findChildren(); ui->tree->setRootIsDecorated(false); DomTreeItem *item = new DomTreeItem(ui->tree, mRootWidget); ui->tree->expandItem(item); ui->tree->resizeColumnToContents(0); connect(ui->tree, SIGNAL(itemSelectionChanged()), this, SLOT(updatePropertiesView())); item->setSelected(true); QHeaderView* h = new QHeaderView(Qt::Horizontal); h->setStretchLastSection(true); ui->allPropertiesView->setHorizontalHeader(h); connect(h, &QHeaderView::sectionDoubleClicked, this, &TreeWindow::sectionDoubleClickedSlot); } TreeWindow::~TreeWindow() { delete ui; } void TreeWindow::initPropertiesView() { ui->propertiesView->viewport()->setAutoFillBackground(false); ui->propertiesView->setRowCount(4); ui->propertiesView->setColumnCount(2); QTableWidgetItem *item; item = new QTableWidgetItem("Object name"); ui->propertiesView->setItem(PROP_OBJECT_NAME, 0, item); ui->propertiesView->setItem(PROP_OBJECT_NAME, 1, new QTableWidgetItem()); item = new QTableWidgetItem("Class name"); ui->propertiesView->setItem(PROP_CLASS_NAME, 0, item); ui->propertiesView->setItem(PROP_CLASS_NAME, 1, new QTableWidgetItem()); item = new QTableWidgetItem("Text"); ui->propertiesView->setItem(PROP_TEXT, 0, item); ui->propertiesView->setItem(PROP_TEXT, 1, new QTableWidgetItem()); item = new QTableWidgetItem("Class hierarcy"); ui->propertiesView->setItem(PROP_CLASS_HIERARCY, 0, item); ui->propertiesView->setItem(PROP_CLASS_HIERARCY, 1, new QTableWidgetItem()); } void TreeWindow::updatePropertiesView() { if (ui->tree->selectedItems().isEmpty()) { clearPropertiesView(); return; } QTreeWidgetItem *item = ui->tree->selectedItems().first(); if (!item) { clearPropertiesView(); return; } DomTreeItem *treeItem = static_cast(item); ui->propertiesView->item(PROP_OBJECT_NAME, 1)->setText(treeItem->widgetObjectName()); ui->propertiesView->item(PROP_CLASS_NAME, 1)->setText(treeItem->widgetClassName()); ui->propertiesView->item(PROP_TEXT, 1)->setText(treeItem->widgetText()); ui->propertiesView->item(PROP_CLASS_HIERARCY, 1)->setText(treeItem->widgetClassHierarcy().join(" :: ")); QString s; QDebug out(&s); QMetaObject const * const m = treeItem->widget()->metaObject(); const int curr_cnt = ui->allPropertiesView->rowCount(); ui->allPropertiesView->setRowCount(m->propertyCount()); for (int i = 0, cnt = m->propertyCount(); cnt > i; ++i) { if (curr_cnt <= i) { ui->allPropertiesView->setItem(i, 0, new QTableWidgetItem); ui->allPropertiesView->setItem(i, 1, new QTableWidgetItem); ui->allPropertiesView->setItem(i, 2, new QTableWidgetItem); } QMetaProperty const & prop = m->property(i); ui->allPropertiesView->item(i, 0)->setText(prop.name()); ui->allPropertiesView->item(i, 1)->setText(prop.typeName()); s.clear(); out << prop.read(treeItem->widget()); ui->allPropertiesView->item(i, 2)->setText(s); } for (int i = m->propertyCount(); curr_cnt > i; ++i) ui->allPropertiesView->removeRow(i); } void TreeWindow::clearPropertiesView() { for (int i=0; ipropertiesView->rowCount(); ++i) ui->propertiesView->item(i, 1)->setText(""); for (int i = ui->allPropertiesView->rowCount(); 0 <= i; --i) ui->allPropertiesView->removeRow(i); ui->allPropertiesView->setRowCount(0); } void TreeWindow::sectionDoubleClickedSlot(int column) { ui->allPropertiesView->sortByColumn(column, Qt::AscendingOrder); } lxqt-panel-0.10.0/plugin-dom/treewindow.h000066400000000000000000000030331261500472700202730ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef TREEWINDOW_H #define TREEWINDOW_H #include #include class QTreeWidgetItem; class QTreeWidget; class QEvent; namespace Ui { class TreeWindow; } class TreeWindow : public QMainWindow { Q_OBJECT public: explicit TreeWindow(QWidget *parent = 0); ~TreeWindow(); private slots: void updatePropertiesView(); void clearPropertiesView(); void sectionDoubleClickedSlot(int column); private: Ui::TreeWindow *ui; QWidget *mRootWidget; void initPropertiesView(); }; #endif // TREEWINDOW_H lxqt-panel-0.10.0/plugin-dom/treewindow.ui000066400000000000000000000072671261500472700204760ustar00rootroot00000000000000 TreeWindow 0 0 800 424 Panel DOM tree Qt::Horizontal 1 0 Name 1 0 QFrame::NoFrame Qt::DotLine 1 0 true Property Value All properties 0 0 QFrame::NoFrame Qt::DotLine Property Type String value 0 0 601 21 lxqt-panel-0.10.0/plugin-kbindicator/000077500000000000000000000000001261500472700174465ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-kbindicator/CMakeLists.txt000066400000000000000000000022041261500472700222040ustar00rootroot00000000000000set(PLUGIN "kbindicator") set(HEADERS src/kbdstate.h src/settings.h src/content.h src/kbdlayout.h src/kbdinfo.h src/kbdkeeper.h src/kbdwatcher.h src/controls.h src/kbdstateconfig.h ) set(SOURCES kbindicator-plugin.cpp src/kbdstate.cpp src/settings.cpp src/content.cpp src/kbdkeeper.cpp src/kbdwatcher.cpp src/kbdstateconfig.cpp ) set(UIS src/kbdstateconfig.ui ) set(LIBRARIES ) find_package(PkgConfig REQUIRED) pkg_check_modules(XKB_COMMON REQUIRED xkbcommon) pkg_check_modules(XKB_COMMON_X11 QUIET xkbcommon-x11) if(XKB_COMMON_X11_FOUND) message(STATUS "XkbCommon X11 was found") find_package(Qt5 COMPONENTS X11Extras Xml) pkg_check_modules(XCB_XCB xcb-xkb) set(HEADERS ${HEADERS} src/x11/kbdlayout.h ) set(SOURCES ${SOURCES} src/x11/kbdlayout.cpp ) set(LIBRARIES ${LIBRARIES} ${XKB_COMMON_X11_LIBRARIES} ${XCB_XCB_LIBRARIES} Qt5::Xml ) add_definitions(-DX11_ENABLED) else() message(FATAL_ERROR "No XkbCommon backend(X11) found!") endif() BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-kbindicator/kbindicator-plugin.cpp000066400000000000000000000027571261500472700237520ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * 2007 Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include "src/kbdstate.h" #include "../panel/ilxqtpanelplugin.h" class LXQtKbIndicatorPlugin: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: virtual ~LXQtKbIndicatorPlugin() {} virtual ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new KbdState(startupInfo); } }; #include "kbindicator-plugin.moc" lxqt-panel-0.10.0/plugin-kbindicator/resources/000077500000000000000000000000001261500472700214605ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-kbindicator/resources/kbindicator.desktop.in000066400000000000000000000003061261500472700257500ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Keyboard state indicator Comment=Keyboard state indicator and switcher plugin. Icon=input-keyboard #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-kbindicator/src/000077500000000000000000000000001261500472700202355ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-kbindicator/src/content.cpp000066400000000000000000000106261261500472700224200ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include #include #include #include "kbdstate.h" #include "content.h" Content::Content(bool layoutEnabled): QWidget(), m_layoutEnabled(layoutEnabled) { QBoxLayout *box = new QBoxLayout(QBoxLayout::LeftToRight); box->setContentsMargins(0, 0, 0, 0); box->setSpacing(0); setLayout(box); m_capsLock = new QLabel(tr("C", "Label for CapsLock indicator")); m_capsLock->setObjectName("CapsLockLabel"); m_capsLock->setAlignment(Qt::AlignCenter); m_capsLock->setToolTip(tr("CapsLock", "Tooltip for CapsLock indicator")); m_capsLock->installEventFilter(this); layout()->addWidget(m_capsLock); m_numLock = new QLabel(tr("N", "Label for NumLock indicator")); m_numLock->setObjectName("NumLockLabel"); m_numLock->setToolTip(tr("NumLock", "Tooltip for NumLock indicator")); m_numLock->setAlignment(Qt::AlignCenter); m_numLock->installEventFilter(this); layout()->addWidget(m_numLock); m_scrollLock = new QLabel(tr("S", "Label for ScrollLock indicator")); m_scrollLock->setObjectName("ScrollLockLabel"); m_scrollLock->setToolTip(tr("ScrollLock", "Tooltip for ScrollLock indicator")); m_scrollLock->setAlignment(Qt::AlignCenter); m_scrollLock->installEventFilter(this); layout()->addWidget(m_scrollLock); m_layout = new QLabel; m_layout->setObjectName("LayoutLabel"); m_layout->setAlignment(Qt::AlignCenter); m_layout->installEventFilter(this); layout()->addWidget(m_layout); m_layout->setEnabled(false); } Content::~Content() {} bool Content::setup() { m_capsLock->setVisible(Settings::instance().showCapLock()); m_numLock->setVisible(Settings::instance().showNumLock()); m_scrollLock->setVisible(Settings::instance().showScrollLock()); m_layout->setVisible(m_layoutEnabled && Settings::instance().showLayout()); return true; } void Content::layoutChanged(const QString & sym, const QString & name, const QString & variant) { m_layout->setText(sym.toUpper()); QString txt = QString("\ \ \
%1: %3
%2: %4
").arg(tr("Layout")).arg(tr("Variant")).arg(name).arg(variant); m_layout->setToolTip(txt); } void Content::modifierStateChanged(Controls mod, bool active) { setEnabled(mod, active); } void Content::setEnabled(Controls cnt, bool enabled) { widget(cnt)->setEnabled(enabled); } QWidget* Content::widget(Controls cnt) const { switch(cnt){ case Caps: return m_capsLock; case Num: return m_numLock; case Scroll: return m_scrollLock; case Layout: return m_layout; } return 0; } bool Content::eventFilter(QObject *object, QEvent *event) { if (event->type() == QEvent::QEvent::MouseButtonRelease) { if (object == m_capsLock) emit controlClicked(Controls::Caps); else if (object == m_numLock) emit controlClicked(Controls::Num); else if (object == m_scrollLock) emit controlClicked(Controls::Scroll); else if(object == m_layout){ emit controlClicked(Controls::Layout); } return true; } return QObject::eventFilter(object, event); } void Content::showHorizontal() { qobject_cast(layout())->setDirection(QBoxLayout::LeftToRight); } void Content::showVertical() { qobject_cast(layout())->setDirection(QBoxLayout::TopToBottom); } lxqt-panel-0.10.0/plugin-kbindicator/src/content.h000066400000000000000000000034251261500472700220640ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef _CONTENT_H_ #define _CONTENT_H_ #include #include "controls.h" class QLabel; class Content : public QWidget { Q_OBJECT public: Content(bool layoutEnabled); ~Content(); public: void setEnabled(Controls cnt, bool enabled); QWidget* widget(Controls cnt) const; bool setup(); virtual bool eventFilter(QObject *object, QEvent *event); void showHorizontal(); void showVertical(); public slots: void layoutChanged(const QString & sym, const QString & name, const QString & variant); void modifierStateChanged(Controls mod, bool active); signals: void controlClicked(Controls cnt); private: bool m_layoutEnabled; QLabel *m_capsLock; QLabel *m_numLock; QLabel *m_scrollLock; QLabel *m_layout; }; #endif lxqt-panel-0.10.0/plugin-kbindicator/src/controls.h000066400000000000000000000021331261500472700222500ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef _CONTROLS_H_ #define _CONTROLS_H_ enum Controls { Caps, Num, Scroll, Layout }; #endif lxqt-panel-0.10.0/plugin-kbindicator/src/kbdinfo.h000066400000000000000000000036531261500472700220310ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef _KBDINFO_H_ #define _KBDINFO_H_ #include #include class KbdInfo { public: KbdInfo() {} struct Info { QString sym; QString name; QString variant; }; public: const QString & currentSym() const { return m_keyboardInfo[m_current].sym; } const QString & currentName() const { return m_keyboardInfo[m_current].name; } const QString & currentVariant() const { return m_keyboardInfo[m_current].variant; } int currentGroup() const { return m_current; } void setCurrentGroup(int group) { m_current = group; } uint size() const { return m_keyboardInfo.size(); } const Info & current() const { return m_keyboardInfo[m_current]; } void clear() { m_keyboardInfo.clear(); } void append(const Info & info) { m_keyboardInfo.append(info); } private: QList m_keyboardInfo; int m_current = 0; }; #endif lxqt-panel-0.10.0/plugin-kbindicator/src/kbdkeeper.cpp000066400000000000000000000112351261500472700226770ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include #include #include #include "kbdkeeper.h" //-------------------------------------------------------------------------------------------------- KbdKeeper::KbdKeeper(const KbdLayout & layout, KeeperType type): m_layout(layout), m_type(type) { m_layout.readKbdInfo(m_info); } KbdKeeper::~KbdKeeper() {} bool KbdKeeper::setup() { connect(&m_layout, SIGNAL(keyboardChanged()), SLOT(keyboardChanged())); connect(&m_layout, SIGNAL(layoutChanged(uint)), SLOT(layoutChanged(uint))); connect(&m_layout, SIGNAL(checkState()), SLOT(checkState())); return true; } void KbdKeeper::keyboardChanged() { m_layout.readKbdInfo(m_info); emit changed(); } void KbdKeeper::layoutChanged(uint group) { m_info.setCurrentGroup(group); emit changed(); } void KbdKeeper::checkState() {} void KbdKeeper::switchToNext() { uint index = m_info.currentGroup(); if (index < m_info.size() - 1) ++index; else index = 0; switchToGroup(index); } void KbdKeeper::switchToGroup(uint group) { m_layout.lockGroup(group); emit changed(); } //-------------------------------------------------------------------------------------------------- WinKbdKeeper::WinKbdKeeper(const KbdLayout & layout): KbdKeeper(layout, KeeperType::Window) {} WinKbdKeeper::~WinKbdKeeper() {} void WinKbdKeeper::layoutChanged(uint group) { WId win = KWindowSystem::activeWindow(); if (m_active == win){ m_mapping[win] = group; m_info.setCurrentGroup(group); } else { if (!m_mapping.contains(win)) m_mapping.insert(win, 0); m_layout.lockGroup(m_mapping[win]); m_active = win; m_info.setCurrentGroup(m_mapping[win]); } emit changed(); } void WinKbdKeeper::checkState() { WId win = KWindowSystem::activeWindow(); if (!m_mapping.contains(win)) m_mapping.insert(win, 0); m_layout.lockGroup(m_mapping[win]); m_active = win; m_info.setCurrentGroup(m_mapping[win]); emit changed(); } void WinKbdKeeper::switchToGroup(uint group) { WId win = KWindowSystem::activeWindow(); m_mapping[win] = group; m_layout.lockGroup(group); m_info.setCurrentGroup(group); emit changed(); } //-------------------------------------------------------------------------------------------------- AppKbdKeeper::AppKbdKeeper(const KbdLayout & layout): KbdKeeper(layout, KeeperType::Window) {} AppKbdKeeper::~AppKbdKeeper() {} void AppKbdKeeper::layoutChanged(uint group) { KWindowInfo info = KWindowInfo(KWindowSystem::activeWindow(), 0, NET::WM2WindowClass); QString app = info.windowClassName(); if (m_active == app){ m_mapping[app] = group; m_info.setCurrentGroup(group); } else { if (!m_mapping.contains(app)) m_mapping.insert(app, 0); m_layout.lockGroup(m_mapping[app]); m_active = app; m_info.setCurrentGroup(m_mapping[app]); } emit changed(); } void AppKbdKeeper::checkState() { KWindowInfo info = KWindowInfo(KWindowSystem::activeWindow(), 0, NET::WM2WindowClass); QString app = info.windowClassName(); if (!m_mapping.contains(app)) m_mapping.insert(app, 0); m_layout.lockGroup(m_mapping[app]); m_active = app; m_info.setCurrentGroup(m_mapping[app]); emit changed(); } void AppKbdKeeper::switchToGroup(uint group) { KWindowInfo info = KWindowInfo(KWindowSystem::activeWindow(), 0, NET::WM2WindowClass); QString app = info.windowClassName(); m_mapping[app] = group; m_layout.lockGroup(group); m_info.setCurrentGroup(group); emit changed(); } lxqt-panel-0.10.0/plugin-kbindicator/src/kbdkeeper.h000066400000000000000000000056031261500472700223460ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef _KBDKEEPER_H_ #define _KBDKEEPER_H_ #include #include #include "kbdlayout.h" #include "kbdinfo.h" #include "settings.h" //-------------------------------------------------------------------------------------------------- class KbdKeeper: public QObject { Q_OBJECT public: KbdKeeper(const KbdLayout & layout, KeeperType type = KeeperType::Global); virtual ~KbdKeeper(); virtual bool setup(); const QString & sym() const { return m_info.currentSym(); } const QString & name() const { return m_info.currentName(); } const QString & variant() const { return m_info.currentVariant(); } KeeperType type() const { return m_type; } void switchToNext(); virtual void switchToGroup(uint group); protected slots: virtual void keyboardChanged(); virtual void layoutChanged(uint group); virtual void checkState(); signals: void changed(); protected: const KbdLayout & m_layout; KbdInfo m_info; KeeperType m_type; }; //-------------------------------------------------------------------------------------------------- class WinKbdKeeper: public KbdKeeper { Q_OBJECT public: WinKbdKeeper(const KbdLayout & layout); virtual ~WinKbdKeeper(); virtual void switchToGroup(uint group); protected slots: virtual void layoutChanged(uint group); virtual void checkState(); private: QHash m_mapping; WId m_active; }; //-------------------------------------------------------------------------------------------------- class AppKbdKeeper: public KbdKeeper { Q_OBJECT public: AppKbdKeeper(const KbdLayout & layout); virtual ~AppKbdKeeper(); virtual void switchToGroup(uint group); protected slots: virtual void layoutChanged(uint group); virtual void checkState(); private: QHash m_mapping; QString m_active; }; #endif lxqt-panel-0.10.0/plugin-kbindicator/src/kbdlayout.h000066400000000000000000000021571261500472700224110ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef _KBDLAYOUT_H_ #define _KBDLAYOUT_H_ #ifdef X11_ENABLED #include "x11/kbdlayout.h" typedef X11Kbd KbdLayout; #endif #endif lxqt-panel-0.10.0/plugin-kbindicator/src/kbdstate.cpp000066400000000000000000000041201261500472700225370ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include #include "kbdstate.h" #include "kbdkeeper.h" #include "kbdstateconfig.h" #include KbdState::KbdState(const ILXQtPanelPluginStartupInfo &startupInfo): QObject(), ILXQtPanelPlugin(startupInfo), m_content(m_watcher.isLayoutEnabled()) { Settings::instance().init(settings()); connect(&m_content, &Content::controlClicked, &m_watcher, &KbdWatcher::controlClicked); connect(&m_watcher, &KbdWatcher::layoutChanged, &m_content, &Content::layoutChanged); connect(&m_watcher, &KbdWatcher::modifierStateChanged, &m_content, &Content::modifierStateChanged); settingsChanged(); } KbdState::~KbdState() {} void KbdState::settingsChanged() { m_content.setup(); m_watcher.setup(); } QDialog *KbdState::configureDialog() { return new KbdStateConfig(&m_content); } void KbdState::realign() { if (panel()->isHorizontal()){ m_content.setMinimumSize(0, panel()->iconSize()); m_content.showHorizontal(); } else { m_content.setMinimumSize(panel()->iconSize(), 0); m_content.showVertical(); } } lxqt-panel-0.10.0/plugin-kbindicator/src/kbdstate.h000066400000000000000000000036471261500472700222210ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef _KDBSTATE_H_ #define _KDBSTATE_H_ #include "../panel/ilxqtpanelplugin.h" #include "settings.h" #include "content.h" #include "kbdwatcher.h" class QLabel; class KbdState : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: KbdState(const ILXQtPanelPluginStartupInfo &startupInfo); virtual ~KbdState(); virtual QString themeId() const { return "KbIndicator"; } virtual ILXQtPanelPlugin::Flags flags() const { return PreferRightAlignment | HaveConfigDialog; } virtual bool isSeparate() const { return false; } virtual QWidget *widget() { return &m_content; } QDialog *configureDialog(); virtual void realign(); const Settings & prefs() const { return m_settings; } Settings & prefs() { return m_settings; } protected slots: virtual void settingsChanged(); private: Settings m_settings; KbdWatcher m_watcher; Content m_content; }; #endif lxqt-panel-0.10.0/plugin-kbindicator/src/kbdstateconfig.cpp000066400000000000000000000066521261500472700237410ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include #include "kbdstateconfig.h" #include "ui_kbdstateconfig.h" #include "settings.h" KbdStateConfig::KbdStateConfig(QWidget *parent) : QDialog(parent), m_ui(new Ui::KbdStateConfig) { setAttribute(Qt::WA_DeleteOnClose); m_ui->setupUi(this); connect(m_ui->showCaps, &QCheckBox::clicked, this, &KbdStateConfig::save); connect(m_ui->showNum, &QCheckBox::clicked, this, &KbdStateConfig::save); connect(m_ui->showScroll, &QCheckBox::clicked, this, &KbdStateConfig::save); connect(m_ui->showLayout, &QGroupBox::clicked, this, &KbdStateConfig::save); connect(m_ui->modes, static_cast(&QButtonGroup::buttonClicked), [this](int){ KbdStateConfig::save(); } ); connect(m_ui->btns, &QDialogButtonBox::clicked, [this](QAbstractButton *btn){ if (m_ui->btns->buttonRole(btn) == QDialogButtonBox::ResetRole){ Settings::instance().restore(); load(); } }); connect(m_ui->configureLayouts, &QPushButton::clicked, this, &KbdStateConfig::configureLayouts); load(); } KbdStateConfig::~KbdStateConfig() { delete m_ui; } void KbdStateConfig::load() { Settings & sets = Settings::instance(); m_ui->showCaps->setChecked(sets.showCapLock()); m_ui->showNum->setChecked(sets.showNumLock()); m_ui->showScroll->setChecked(sets.showScrollLock()); m_ui->showLayout->setChecked(sets.showLayout()); switch(sets.keeperType()){ case KeeperType::Global: m_ui->switchGlobal->setChecked(true); break; case KeeperType::Window: m_ui->switchWindow->setChecked(true); break; case KeeperType::Application: m_ui->switchApplication->setChecked(true); break; } } void KbdStateConfig::save() { Settings & sets = Settings::instance(); sets.setShowCapLock(m_ui->showCaps->isChecked()); sets.setShowNumLock(m_ui->showNum->isChecked()); sets.setShowScrollLock(m_ui->showScroll->isChecked()); sets.setShowLayout(m_ui->showLayout->isChecked()); if (m_ui->switchGlobal->isChecked()) sets.setKeeperType(KeeperType::Global); if (m_ui->switchWindow->isChecked()) sets.setKeeperType(KeeperType::Window); if (m_ui->switchApplication->isChecked()) sets.setKeeperType(KeeperType::Application); } void KbdStateConfig::configureLayouts() { QProcess::startDetached(QLatin1String("lxqt-config-input")); } lxqt-panel-0.10.0/plugin-kbindicator/src/kbdstateconfig.h000066400000000000000000000025401261500472700233760ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef _KBDSTATECONFIG_H_ #define _KBDSTATECONFIG_H_ #include namespace Ui { class KbdStateConfig; } class KbdStateConfig : public QDialog { Q_OBJECT public: explicit KbdStateConfig(QWidget *parent = 0); ~KbdStateConfig(); private: void save(); void load(); void configureLayouts(); private: Ui::KbdStateConfig *m_ui; }; #endif lxqt-panel-0.10.0/plugin-kbindicator/src/kbdstateconfig.ui000066400000000000000000000102101261500472700235550ustar00rootroot00000000000000 KbdStateConfig 0 0 249 354 Keyboard state settings Lock Indicators Show Caps Lock Show Num Lock Show Scroll Lock Keyboard Layout Indicator true false Switching policy Global modes Window modes Application modes Configure layouts Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Reset btns accepted() KbdStateConfig accept() 248 254 157 274 btns rejected() KbdStateConfig reject() 316 260 286 274 lxqt-panel-0.10.0/plugin-kbindicator/src/kbdwatcher.cpp000066400000000000000000000047221261500472700230640ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include "kbdwatcher.h" KbdWatcher::KbdWatcher() { connect(&m_layout, SIGNAL(modifierChanged(Controls,bool)), SIGNAL(modifierStateChanged(Controls,bool))); m_layout.init(); } void KbdWatcher::setup() { emit modifierStateChanged(Controls::Caps, m_layout.isModifierLocked(Controls::Caps)); emit modifierStateChanged(Controls::Num, m_layout.isModifierLocked(Controls::Num)); emit modifierStateChanged(Controls::Scroll, m_layout.isModifierLocked(Controls::Scroll)); if (!m_keeper || m_keeper->type() != Settings::instance().keeperType()){ createKeeper(Settings::instance().keeperType()); } } void KbdWatcher::createKeeper(KeeperType type) { switch(type) { case KeeperType::Global: m_keeper.reset(new KbdKeeper(m_layout)); break; case KeeperType::Window: m_keeper.reset(new WinKbdKeeper(m_layout)); break; case KeeperType::Application: m_keeper.reset(new AppKbdKeeper(m_layout)); break; } connect(m_keeper.data(), SIGNAL(changed()), this, SLOT(keeperChanged())); m_keeper->setup(); keeperChanged(); } void KbdWatcher::keeperChanged() { emit layoutChanged(m_keeper->sym(), m_keeper->name(), m_keeper->variant()); } void KbdWatcher::controlClicked(Controls cnt) { switch(cnt){ case Controls::Layout: m_keeper->switchToNext(); break; default: m_layout.lockModifier(cnt, !m_layout.isModifierLocked(cnt)); break; } } lxqt-panel-0.10.0/plugin-kbindicator/src/kbdwatcher.h000066400000000000000000000033521261500472700225270ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef _KBDWATCHER_H_ #define _KBDWATCHER_H_ #include "kbdlayout.h" #include "controls.h" #include "kbdkeeper.h" class KbdKeeper; class KbdWatcher: public QObject { Q_OBJECT public: KbdWatcher(); void setup(); const KbdLayout & kbdLayout() const { return m_layout; } bool isLayoutEnabled() const { return m_layout.isEnabled(); } public slots: void controlClicked(Controls cnt); signals: void layoutChanged(const QString & sym, const QString & name, const QString & variant); void modifierStateChanged(Controls mod, bool active); private: void createKeeper(KeeperType type); private slots: void keeperChanged(); private: KbdLayout m_layout; QScopedPointer m_keeper; }; #endif lxqt-panel-0.10.0/plugin-kbindicator/src/settings.cpp000066400000000000000000000054501261500472700226050ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include "settings.h" Settings::Settings() {} Settings & Settings::instance() { static Settings _instance; return _instance; } void Settings::init(QSettings *settings) { m_settings = settings; m_oldSettings.reset(new LXQt::SettingsCache(settings)); } bool Settings::showCapLock() const { return m_settings->value("show_caps_lock", true).toBool(); } bool Settings::showNumLock() const { return m_settings->value("show_num_lock", true).toBool(); } bool Settings::showScrollLock() const { return m_settings->value("show_scroll_lock", true).toBool(); } bool Settings::showLayout() const { return m_settings->value("show_layout", true).toBool(); } void Settings::setShowCapLock(bool show) { m_settings->setValue("show_caps_lock", show); } void Settings::setShowNumLock(bool show) { m_settings->setValue("show_num_lock", show); } void Settings::setShowScrollLock(bool show) { m_settings->setValue("show_scroll_lock", show); } void Settings::setShowLayout(bool show) { m_settings->setValue("show_layout", show); } KeeperType Settings::keeperType() const { QString type = m_settings->value("keeper_type", "global").toString(); if(type == "global") return KeeperType::Global; if(type == "window") return KeeperType::Window; if(type == "application") return KeeperType::Application; return KeeperType::Application; } void Settings::setKeeperType(KeeperType type) const { switch (type) { case KeeperType::Global: m_settings->setValue("keeper_type", "global"); break; case KeeperType::Window: m_settings->setValue("keeper_type", "window"); break; case KeeperType::Application: m_settings->setValue("keeper_type", "application"); break; } } void Settings::restore() { m_oldSettings->loadToSettings(); } lxqt-panel-0.10.0/plugin-kbindicator/src/settings.h000066400000000000000000000033751261500472700222560ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef _SETTINGS_H_ #define _SETTINGS_H_ #include class QSettings; enum class KeeperType { Global, Window, Application }; class Settings { public: Settings(); static Settings & instance(); void init(QSettings *settings); public: bool showCapLock() const; bool showNumLock() const; bool showScrollLock() const; bool showLayout() const; KeeperType keeperType() const; void restore(); public: void setShowCapLock(bool show); void setShowNumLock(bool show); void setShowScrollLock(bool show); void setShowLayout(bool show); void setKeeperType(KeeperType type) const; private: QSettings *m_settings = 0; QScopedPointer m_oldSettings; }; #endif lxqt-panel-0.10.0/plugin-kbindicator/src/x11/000077500000000000000000000000001261500472700206465ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-kbindicator/src/x11/kbdlayout.cpp000066400000000000000000000246671261500472700233670ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include #include #include #include #include "kbdlayout.h" #include #include #define explicit _explicit #include #include "../kbdinfo.h" #include "../controls.h" namespace pimpl { struct LangInfo { QString name; QString syn; QString variant; }; class X11Kbd: public QAbstractNativeEventFilter { public: X11Kbd(::X11Kbd *pub): m_pub(pub) {} bool init() { m_context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); m_connection = xcb_connect(0, 0); if (!m_connection || xcb_connection_has_error(m_connection)){ qWarning() << "Couldn't connect to X server: error code" << (m_connection ? xcb_connection_has_error(m_connection) : -1); return false; } xkb_x11_setup_xkb_extension(m_connection, XKB_X11_MIN_MAJOR_XKB_VERSION, XKB_X11_MIN_MINOR_XKB_VERSION, XKB_X11_SETUP_XKB_EXTENSION_NO_FLAGS, NULL, NULL, &m_eventType, NULL ); m_deviceId = xkb_x11_get_core_keyboard_device_id(m_connection); qApp->installNativeEventFilter(this); readState(); return true; } virtual ~X11Kbd() { xkb_state_unref(m_state); xkb_keymap_unref(m_keymap); xcb_disconnect(m_connection); xkb_context_unref(m_context); } bool isEnabled() const { return true; } virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *) { if (eventType != "xcb_generic_event_t") return false; xcb_generic_event_t *event = static_cast(message); if ((event->response_type & ~0x80) == m_eventType){ xcb_xkb_state_notify_event_t *sevent = reinterpret_cast(event); switch(sevent->xkbType){ case XCB_XKB_STATE_NOTIFY: xkb_state_update_mask(m_state, sevent->baseMods, sevent->latchedMods, sevent->lockedMods, sevent->baseGroup, sevent->latchedGroup, sevent->lockedGroup ); if(sevent->changed & XCB_XKB_STATE_PART_GROUP_STATE){ emit m_pub->layoutChanged(sevent->group); return true; } if(sevent->changed & XCB_XKB_STATE_PART_MODIFIER_LOCK){ for(Controls cnt: m_modifiers.keys()){ bool oldState = m_modifiers[cnt]; bool newState = xkb_state_led_name_is_active(m_state, modName(cnt)); if(oldState != newState){ m_modifiers[cnt] = newState; emit m_pub->modifierChanged(cnt, newState); } } } break; case XCB_XKB_NEW_KEYBOARD_NOTIFY: readState(); break; } } emit m_pub->checkState(); return false; } void readKbdInfo(KbdInfo & info) const { info.clear(); xkb_layout_index_t count = xkb_keymap_num_layouts(m_keymap); for(xkb_layout_index_t i = 0; i < count; ++i){ QString name = xkb_keymap_layout_get_name(m_keymap, i); const LangInfo & linfo = names(name); info.append({linfo.syn, linfo.name, linfo.variant}); if (xkb_state_layout_index_is_active(m_state, i, XKB_STATE_LAYOUT_EFFECTIVE)) info.setCurrentGroup(i); } } void lockGroup(uint group) { xcb_void_cookie_t cookie = xcb_xkb_latch_lock_state(m_connection, m_deviceId, 0, 0, 1, group, 0, 0, 0); xcb_generic_error_t *error = xcb_request_check(m_connection, cookie); if (error){ qWarning() << "Lock group error: " << error->error_code; } } void lockModifier(Controls cnt, bool locked) { quint8 mask = fetchMask(cnt); quint8 curMask = locked ? mask : 0; xcb_void_cookie_t cookie = xcb_xkb_latch_lock_state(m_connection, m_deviceId, mask, curMask, 0, 0, 0, 0, 0); xcb_generic_error_t *error = xcb_request_check(m_connection, cookie); if (error){ qWarning() << "Lock group error: " << error->error_code; } } bool isModifierLocked(Controls cnt) const { return m_modifiers[cnt]; } private: quint8 fetchMask(Controls cnt) const { static QHash masks; if (masks.contains(cnt)) return masks[cnt]; xkb_mod_index_t index = xkb_keymap_led_get_index(m_keymap, modName(cnt)); xcb_generic_error_t *error = 0; quint8 mask = 0; xcb_xkb_get_indicator_map_cookie_t cookie = xcb_xkb_get_indicator_map(m_connection, m_deviceId, 1 << index); xcb_xkb_get_indicator_map_reply_t *reply = xcb_xkb_get_indicator_map_reply(m_connection, cookie, &error); if (!reply || error){ qWarning() << "Cannot fetch mask " << error->error_code; return mask; } xcb_xkb_indicator_map_t *map = xcb_xkb_get_indicator_map_maps(reply); mask = map->mods; masks[cnt] = mask; free(reply); return mask; } const char * modName(Controls cnt) const { switch(cnt){ case Controls::Caps: return XKB_LED_NAME_CAPS; case Controls::Num: return XKB_LED_NAME_NUM; case Controls::Scroll: return XKB_LED_NAME_SCROLL; default: return 0; } } void readState() { if (m_keymap) xkb_keymap_unref(m_keymap); m_keymap = xkb_x11_keymap_new_from_device(m_context, m_connection, m_deviceId, (xkb_keymap_compile_flags)0); if (m_state) xkb_state_unref(m_state); m_state = xkb_x11_state_new_from_device(m_keymap, m_connection, m_deviceId); for(Controls cnt: m_modifiers.keys()){ m_modifiers[cnt] = xkb_state_led_name_is_active(m_state, modName(cnt)); } emit m_pub->keyboardChanged(); } const LangInfo & names(const QString & langName) const { static LangInfo def{"Unknown", "??", "None"}; static QHash names; if (names.empty()){ if(QFile::exists("/usr/share/X11/xkb/rules/evdev.xml")){ QDomDocument doc; QFile file("/usr/share/X11/xkb/rules/evdev.xml"); if (file.open(QIODevice::ReadOnly)){ if (doc.setContent(&file)) { QDomElement docElem = doc.documentElement(); auto layout= docElem.firstChildElement("layoutList"); for(int i = 0; i < layout.childNodes().count(); ++i){ auto conf = layout.childNodes().at(i).firstChildElement("configItem"); names.insert( conf.firstChildElement("description").firstChild().toText().data(),{ conf.firstChildElement("description").firstChild().toText().data(), conf.firstChildElement("name").firstChild().toText().data(), "None" } ); auto variants = layout.childNodes().at(i).firstChildElement("variantList"); for(int j = 0; j < variants.childNodes().count(); ++j){ auto var = variants.childNodes().at(j).firstChildElement("configItem"); names.insert( var.firstChildElement("description").firstChild().toText().data(), { conf.firstChildElement("description").firstChild().toText().data(), conf.firstChildElement("name").firstChild().toText().data(), var.firstChildElement("name").firstChild().toText().data() } ); } } } file.close(); } } } if (names.contains(langName)) return names[langName]; return def; } private: struct xkb_context *m_context = 0; xcb_connection_t *m_connection = 0; int32_t m_deviceId; uint8_t m_eventType; xkb_state *m_state = 0; xkb_keymap *m_keymap = 0; ::X11Kbd *m_pub; QHash m_modifiers = { {Controls::Caps, false}, {Controls::Num, false}, {Controls::Scroll, false}, }; }; } X11Kbd::X11Kbd(): m_priv(new pimpl::X11Kbd(this)) {} X11Kbd::~X11Kbd() {} bool X11Kbd::init() { return m_priv->init(); } bool X11Kbd::isEnabled() const { return true; } void X11Kbd::readKbdInfo(KbdInfo & info) const { m_priv->readKbdInfo(info); } void X11Kbd::lockGroup(uint layId) const { m_priv->lockGroup(layId); } void X11Kbd::lockModifier(Controls cnt, bool locked) { m_priv->lockModifier(cnt, locked); } bool X11Kbd::isModifierLocked(Controls cnt) const { return m_priv->isModifierLocked(cnt); } lxqt-panel-0.10.0/plugin-kbindicator/src/x11/kbdlayout.h000066400000000000000000000031771261500472700230250ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2015 LXQt team * Authors: * Dmitriy Zhukov * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef _X11KBD_H_ #define _X11KBD_H_ #include #include "../controls.h" class KbdInfo; namespace pimpl { class X11Kbd; } class X11Kbd: public QObject { Q_OBJECT public: X11Kbd(); virtual ~X11Kbd(); bool init(); bool isEnabled() const; void readKbdInfo(KbdInfo & info) const; void lockGroup(uint layId) const; void lockModifier(Controls cnt, bool locked); bool isModifierLocked(Controls cnt) const; signals: void layoutChanged(uint layId); void modifierChanged(Controls cnt, bool locked); void checkState(); void keyboardChanged(); private: QScopedPointer m_priv; }; #endif lxqt-panel-0.10.0/plugin-kbindicator/translations/000077500000000000000000000000001261500472700221675ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-kbindicator/translations/kbindicator.ts000066400000000000000000000101411261500472700250250ustar00rootroot00000000000000 Content C Label for CapsLock indicator CapsLock Tooltip for CapsLock indicator N Label for NumLock indicator NumLock Tooltip for NumLock indicator S Label for ScrollLock indicator ScrollLock Tooltip for ScrollLock indicator Layout Variant KbdStateConfig Keyboard indicator settings LEDs Show Caps Lock Show Num Lock Show Scroll Lock Show keyboard layout Show flags instead labels Layout mode: Global Window Application Configure layouts... lxqt-panel-0.10.0/plugin-kbindicator/translations/kbindicator_de.desktop000066400000000000000000000001541261500472700265230ustar00rootroot00000000000000Name[de]=Tastatur-LED-Anzeige Comment[de]=Plugin zum Anzeigen der Tastatur-LEDs und Umschalten des Layouts. lxqt-panel-0.10.0/plugin-kbindicator/translations/kbindicator_de.ts000066400000000000000000000101171261500472700255000ustar00rootroot00000000000000 Content C Label for CapsLock indicator This capital letter is printed on my keyboard. A CapsLock Tooltip for CapsLock indicator Großbuchstaben N Label for NumLock indicator This digit is printed on my keyboard. 1 NumLock Tooltip for NumLock indicator Ziffern S Label for ScrollLock indicator From the word "Rollen". R ScrollLock Tooltip for ScrollLock indicator Rollen Layout Layout Variant Variante KbdStateConfig Keyboard state settings Tastaturstatus - Einstellungen Lock Indicators Schalteranzeigen Show Caps Lock Feststelltaste anzeigen Show Num Lock NumLock-Taste anzeigen Show Scroll Lock Rollen-Taste anzeigen Keyboard Layout Indicator Tastatur-Layout anzeigen Switching policy Umschaltrichtlinie Configure layouts Layout konfigurieren Global Global Window Fenster Application Anwendung lxqt-panel-0.10.0/plugin-kbindicator/translations/kbindicator_el.desktop000066400000000000000000000003171261500472700265340ustar00rootroot00000000000000Name[el]=Ένδειξη κατάστασης πληκτρολογίου Comment[el]=Πρόσθετο ένδειξης της κατάστασης του πληκτρολογίου και εναλλαγής. lxqt-panel-0.10.0/plugin-kbindicator/translations/kbindicator_el.ts000066400000000000000000000060771261500472700255220ustar00rootroot00000000000000 Content Layout Διάταξη Variant Παραλλαγή KbdStateConfig Dialog Διάλογος Leds Φωτεινοί δίοδοι Show Caps Lock Εμφάνιση του κλειδώματος κεφαλαίων Show Num Lock Εμφάνιση του κλειδώματος του αριθμητικού πληκτρολογίου Show Scroll Lock Εμφάνιση του κλειδώματος της κύλισης Show keyboard layout Εμφάνιση της διάταξης του πληκτρολογίου Show flags instead labels Εμφάνιση της σημαίας αντί της ετικέτας Layout mode: Λειτουργία διάταξης: Global Καθολικό Window Παράθυρο Application Εφαρμογή Configure layouts Διαμόρφωση των διατάξεων lxqt-panel-0.10.0/plugin-kbindicator/translations/kbindicator_it.desktop000066400000000000000000000001371261500472700265500ustar00rootroot00000000000000Name[it]=Disposizione della tastiera Comment[it]=Mostra lo stato e la mappatura della tastiera lxqt-panel-0.10.0/plugin-kbindicator/translations/kbindicator_it.ts000066400000000000000000000016531261500472700255310ustar00rootroot00000000000000 LXQtKbIndicatorConfiguration Keyboard Indicator Settings Indicatori Caps Lock Blocco maiuscolo Num Lock Blocco numeri Scroll Lock Blocco scorrimento lxqt-panel-0.10.0/plugin-mainmenu/000077500000000000000000000000001261500472700167665ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-mainmenu/CMakeLists.txt000066400000000000000000000014431261500472700215300ustar00rootroot00000000000000set(PLUGIN "mainmenu") set(HEADERS lxqtmainmenu.h menustyle.h lxqtmainmenuconfiguration.h ) set(SOURCES lxqtmainmenu.cpp menustyle.cpp lxqtmainmenuconfiguration.cpp ) set(UIS lxqtmainmenuconfiguration.ui ) # optionally use libmenu-cache to generate the application menu find_package(PkgConfig) if(NOT WITHOUT_MENU_CACHE) pkg_check_modules(MENU_CACHE libmenu-cache>=0.3.3 ) endif() if(MENU_CACHE_FOUND) list(APPEND SOURCES xdgcachedmenu.cpp) list(APPEND MOCS xdgcachedmenu.h) include_directories(${MENU_CACHE_INCLUDE_DIRS}) add_definitions(-DHAVE_MENU_CACHE=1) endif() set(LIBRARIES lxqt lxqt-globalkeys lxqt-globalkeys-ui ${MENU_CACHE_LIBRARIES} ) set(QT_USE_QTXML 1) set(QT_USE_QTDBUS 1) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-mainmenu/lxqtmainmenu.cpp000066400000000000000000000230271261500472700222200ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtmainmenu.h" #include "lxqtmainmenuconfiguration.h" #include "../panel/lxqtpanel.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include // for find_if() #include #include #include #include #ifdef HAVE_MENU_CACHE #include "xdgcachedmenu.h" #endif #include #include #include #define DEFAULT_SHORTCUT "Alt+F1" LXQtMainMenu::LXQtMainMenu(const ILXQtPanelPluginStartupInfo &startupInfo): QObject(), ILXQtPanelPlugin(startupInfo), mMenu(0), mShortcut(0) { #ifdef HAVE_MENU_CACHE mMenuCache = NULL; mMenuCacheNotify = 0; #endif mDelayedPopup.setSingleShot(true); mDelayedPopup.setInterval(250); connect(&mDelayedPopup, &QTimer::timeout, this, &LXQtMainMenu::showHideMenu); mHideTimer.setSingleShot(true); mHideTimer.setInterval(250); mButton.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); mButton.installEventFilter(this); connect(&mButton, &QToolButton::clicked, this, &LXQtMainMenu::showHideMenu); settingsChanged(); mShortcut = GlobalKeyShortcut::Client::instance()->addAction(QString{}, QString("/panel/%1/show_hide").arg(settings()->group()), tr("Show/hide main menu"), this); if (mShortcut) { connect(mShortcut, &GlobalKeyShortcut::Action::registrationFinished, [this] { if (mShortcut->shortcut().isEmpty()) mShortcut->changeShortcut(DEFAULT_SHORTCUT); }); connect(mShortcut, &GlobalKeyShortcut::Action::activated, [this] { if (!mHideTimer.isActive()) mDelayedPopup.start(); }); } } /************************************************ ************************************************/ LXQtMainMenu::~LXQtMainMenu() { mButton.removeEventFilter(this); #ifdef HAVE_MENU_CACHE if(mMenuCache) { menu_cache_remove_reload_notify(mMenuCache, mMenuCacheNotify); menu_cache_unref(mMenuCache); } #endif } /************************************************ ************************************************/ void LXQtMainMenu::showHideMenu() { if (mMenu && mMenu->isVisible()) mMenu->hide(); else showMenu(); } /************************************************ ************************************************/ void LXQtMainMenu::showMenu() { if (!mMenu) return; // Just using Qt`s activateWindow() won't work on some WMs like Kwin. // Solution is to execute menu 1ms later using timer mMenu->popup(calculatePopupWindowPos(mMenu->sizeHint()).topLeft()); } #ifdef HAVE_MENU_CACHE // static void LXQtMainMenu::menuCacheReloadNotify(MenuCache* cache, gpointer user_data) { reinterpret_cast(user_data)->buildMenu(); } #endif /************************************************ ************************************************/ void LXQtMainMenu::settingsChanged() { if (settings()->value("showText", false).toBool()) { mButton.setText(settings()->value("text", "Start").toString()); mButton.setToolButtonStyle(Qt::ToolButtonTextBesideIcon); } else { mButton.setText(""); mButton.setToolButtonStyle(Qt::ToolButtonIconOnly); } mLogDir = settings()->value("log_dir", "").toString(); QString menu_file = settings()->value("menu_file", "").toString(); if (menu_file.isEmpty()) menu_file = XdgMenu::getMenuFileName(); if (mMenuFile != menu_file) { mMenuFile = menu_file; #ifdef HAVE_MENU_CACHE menu_cache_init(0); if(mMenuCache) { menu_cache_remove_reload_notify(mMenuCache, mMenuCacheNotify); menu_cache_unref(mMenuCache); } mMenuCache = menu_cache_lookup(mMenuFile.toLocal8Bit()); if (menu_cache_get_root_dir(mMenuCache)) buildMenu(); mMenuCacheNotify = menu_cache_add_reload_notify(mMenuCache, (MenuCacheReloadNotify)menuCacheReloadNotify, this); #else mXdgMenu.setEnvironments(QStringList() << "X-LXQT" << "LXQt"); mXdgMenu.setLogDir(mLogDir); bool res = mXdgMenu.read(mMenuFile); connect(&mXdgMenu, SIGNAL(changed()), this, SLOT(buildMenu())); if (res) { QTimer::singleShot(1000, this, SLOT(buildMenu())); } else { QMessageBox::warning(0, "Parse error", mXdgMenu.errorString()); return; } #endif } setMenuFontSize(); realign(); } /************************************************ ************************************************/ void LXQtMainMenu::buildMenu() { #ifdef HAVE_MENU_CACHE XdgCachedMenu* menu = new XdgCachedMenu(mMenuCache, &mButton); #else XdgMenuWidget *menu = new XdgMenuWidget(mXdgMenu, "", &mButton); #endif menu->setObjectName("TopLevelMainMenu"); menu->setStyle(&mTopMenuStyle); menu->addSeparator(); Q_FOREACH(QAction* action, menu->actions()) { if (action->menu()) action->menu()->installEventFilter(this); } menu->installEventFilter(this); connect(menu, &QMenu::aboutToHide, &mHideTimer, static_cast(&QTimer::start)); connect(menu, &QMenu::aboutToShow, &mHideTimer, &QTimer::stop); // panel notification (needed in case of auto-hide) connect(menu, &QMenu::aboutToHide, dynamic_cast(panel()), &LXQtPanel::hidePanel); QMenu *oldMenu = mMenu; mMenu = menu; if(oldMenu) delete oldMenu; setMenuFontSize(); } /************************************************ ************************************************/ void LXQtMainMenu::setMenuFontSize() { if (!mMenu) return; QFont menuFont = mButton.font(); if(settings()->value("customFont", false).toBool()) { menuFont = mMenu->font(); menuFont.setPointSize(settings()->value("customFontSize").toInt()); } if (mMenu->font() != menuFont) { mMenu->setFont(menuFont); QList subMenuList = mMenu->findChildren(); foreach (QMenu* subMenu, subMenuList) { subMenu->setFont(menuFont); } } //icon size the same as the font height mTopMenuStyle.setIconSize(QFontMetrics(menuFont).height()); } /************************************************ ************************************************/ QDialog *LXQtMainMenu::configureDialog() { return new LXQtMainMenuConfiguration(*settings(), mShortcut, DEFAULT_SHORTCUT); } /************************************************ ************************************************/ // functor used to match a QAction by prefix struct MatchAction { MatchAction(QString key):key_(key) {} bool operator()(QAction* action) { return action->text().startsWith(key_, Qt::CaseInsensitive); } QString key_; }; bool LXQtMainMenu::eventFilter(QObject *obj, QEvent *event) { if(obj == &mButton) { // the application is given a new QStyle if(event->type() == QEvent::StyleChange) { // reset proxy style for the menus so they can apply the new styles mTopMenuStyle.setBaseStyle(NULL); setMenuFontSize(); } } else if(QMenu* menu = qobject_cast(obj)) { if(event->type() == QEvent::KeyPress) { // if our shortcut key is pressed while the menu is open, close the menu QKeyEvent* keyEvent = static_cast(event); if (keyEvent->modifiers() & ~Qt::ShiftModifier) { mHideTimer.start(); mMenu->hide(); // close the app menu return true; } else // go to the menu item starts with the pressed key { QString key = keyEvent->text(); if(key.isEmpty()) return false; QAction* action = menu->activeAction(); QList actions = menu->actions(); QList::iterator it = qFind(actions.begin(), actions.end(), action); it = std::find_if(it + 1, actions.end(), MatchAction(key)); if(it == actions.end()) it = std::find_if(actions.begin(), it, MatchAction(key)); if(it != actions.end()) menu->setActiveAction(*it); } } } return false; } #undef DEFAULT_SHORTCUT lxqt-panel-0.10.0/plugin-mainmenu/lxqtmainmenu.h000066400000000000000000000055461261500472700216730ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQT_MAINMENU_H #define LXQT_MAINMENU_H #include "../panel/ilxqtpanelplugin.h" #include #ifdef HAVE_MENU_CACHE #include #endif #include #include #include #include #include #include #include "menustyle.h" class QMenu; class LXQtBar; namespace LXQt { class PowerManager; class ScreenSaver; } namespace GlobalKeyShortcut { class Action; } class LXQtMainMenu : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: LXQtMainMenu(const ILXQtPanelPluginStartupInfo &startupInfo); ~LXQtMainMenu(); QString themeId() const { return "MainMenu"; } virtual ILXQtPanelPlugin::Flags flags() const { return HaveConfigDialog ; } QWidget *widget() { return &mButton; } QDialog *configureDialog(); bool isSeparate() const { return true; } protected: bool eventFilter(QObject *obj, QEvent *event); private: void setMenuFontSize(); private: QToolButton mButton; QString mLogDir; QMenu* mMenu; GlobalKeyShortcut::Action *mShortcut; MenuStyle mTopMenuStyle; #ifdef HAVE_MENU_CACHE MenuCache* mMenuCache; MenuCacheNotifyId mMenuCacheNotify; static void menuCacheReloadNotify(MenuCache* cache, gpointer user_data); #else XdgMenu mXdgMenu; #endif QTimer mDelayedPopup; QTimer mHideTimer; QString mMenuFile; protected slots: virtual void settingsChanged(); void buildMenu(); private slots: void showMenu(); void showHideMenu(); }; class LXQtMainMenuPluginLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT // Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new LXQtMainMenu(startupInfo);} }; #endif lxqt-panel-0.10.0/plugin-mainmenu/lxqtmainmenuconfiguration.cpp000066400000000000000000000125011261500472700250030ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Maciej Płaza * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtmainmenuconfiguration.h" #include "ui_lxqtmainmenuconfiguration.h" #include #include #include #include LXQtMainMenuConfiguration::LXQtMainMenuConfiguration(QSettings &settings, GlobalKeyShortcut::Action * shortcut, const QString &defaultShortcut, QWidget *parent) : QDialog(parent), ui(new Ui::LXQtMainMenuConfiguration), mSettings(settings), mOldSettings(settings), mDefaultShortcut(defaultShortcut), mShortcut(shortcut) { setAttribute(Qt::WA_DeleteOnClose); setObjectName("MainMenuConfigurationWindow"); ui->setupUi(this); ui->chooseMenuFilePB->setIcon(XdgIcon::fromTheme("folder")); connect(ui->buttons, SIGNAL(clicked(QAbstractButton*)), this, SLOT(dialogButtonsAction(QAbstractButton*))); loadSettings(); connect(ui->showTextCB, SIGNAL(toggled(bool)), this, SLOT(showTextChanged(bool))); connect(ui->textLE, SIGNAL(textEdited(QString)), this, SLOT(textButtonChanged(QString))); connect(ui->chooseMenuFilePB, SIGNAL(clicked()), this, SLOT(chooseMenuFile())); connect(ui->menuFilePathLE, &QLineEdit::textChanged, [this] (QString const & file) { mSettings.setValue(QLatin1String("menu_file"), file); }); connect(ui->shortcutEd, SIGNAL(shortcutGrabbed(QString)), this, SLOT(shortcutChanged(QString))); connect(ui->shortcutEd->addMenuAction(tr("Reset")), SIGNAL(triggered()), this, SLOT(shortcutReset())); connect(ui->customFontCB, SIGNAL(toggled(bool)), this, SLOT(customFontChanged(bool))); connect(ui->customFontSizeSB, SIGNAL(valueChanged(int)), this, SLOT(customFontSizeChanged(int))); connect(mShortcut, &GlobalKeyShortcut::Action::shortcutChanged, this, &LXQtMainMenuConfiguration::globalShortcutChanged); } LXQtMainMenuConfiguration::~LXQtMainMenuConfiguration() { delete ui; } void LXQtMainMenuConfiguration::loadSettings() { ui->showTextCB->setChecked(mSettings.value("showText", false).toBool()); ui->textLE->setText(mSettings.value("text", "").toString()); QString menuFile = mSettings.value("menu_file", "").toString(); if (menuFile.isEmpty()) { menuFile = XdgMenu::getMenuFileName(); } ui->menuFilePathLE->setText(menuFile); ui->shortcutEd->setText(nullptr != mShortcut ? mShortcut->shortcut() : mDefaultShortcut); ui->customFontCB->setChecked(mSettings.value("customFont", false).toBool()); LXQt::Settings lxqtSettings("lxqt"); //load system font size as init value QFont systemFont; lxqtSettings.beginGroup(QLatin1String("Qt")); systemFont.fromString(lxqtSettings.value("font", this->font()).toString()); lxqtSettings.endGroup(); ui->customFontSizeSB->setValue(mSettings.value("customFontSize", systemFont.pointSize()).toInt()); } void LXQtMainMenuConfiguration::textButtonChanged(const QString &value) { mSettings.setValue("text", value); } void LXQtMainMenuConfiguration::showTextChanged(bool value) { mSettings.setValue("showText", value); } void LXQtMainMenuConfiguration::chooseMenuFile() { QFileDialog *d = new QFileDialog(this, tr("Choose menu file"), QLatin1String("/etc/xdg/menus"), tr("Menu files (*.menu)")); d->setWindowModality(Qt::WindowModal); d->setAttribute(Qt::WA_DeleteOnClose); connect(d, &QFileDialog::fileSelected, [&] (const QString &file) { ui->menuFilePathLE->setText(file); }); d->show(); } void LXQtMainMenuConfiguration::globalShortcutChanged(const QString &/*oldShortcut*/, const QString &newShortcut) { ui->shortcutEd->setText(newShortcut); } void LXQtMainMenuConfiguration::shortcutChanged(const QString &value) { if (mShortcut) mShortcut->changeShortcut(value); } void LXQtMainMenuConfiguration::shortcutReset() { shortcutChanged(mDefaultShortcut); } void LXQtMainMenuConfiguration::dialogButtonsAction(QAbstractButton *btn) { if (ui->buttons->buttonRole(btn) == QDialogButtonBox::ResetRole) { mOldSettings.loadToSettings(); loadSettings(); } else { close(); } } void LXQtMainMenuConfiguration::customFontChanged(bool value) { mSettings.setValue("customFont", value); } void LXQtMainMenuConfiguration::customFontSizeChanged(int value) { mSettings.setValue("customFontSize", value); } lxqt-panel-0.10.0/plugin-mainmenu/lxqtmainmenuconfiguration.h000066400000000000000000000043271261500472700244570ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Maciej Płaza * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTMAINMENUCONFIGURATION_H #define LXQTMAINMENUCONFIGURATION_H #include #include class QSettings; class QAbstractButton; namespace Ui { class LXQtMainMenuConfiguration; } namespace GlobalKeyShortcut { class Action; } class LXQtMainMenuConfiguration : public QDialog { Q_OBJECT public: explicit LXQtMainMenuConfiguration(QSettings &settings, GlobalKeyShortcut::Action * shortcut, const QString &defaultShortcut, QWidget *parent = 0); ~LXQtMainMenuConfiguration(); private: Ui::LXQtMainMenuConfiguration *ui; QSettings &mSettings; LXQt::SettingsCache mOldSettings; QString mDefaultShortcut; GlobalKeyShortcut::Action * mShortcut; private slots: void globalShortcutChanged(const QString &oldShortcut, const QString &newShortcut); void shortcutChanged(const QString &value); /* Saves settings in conf file. */ void loadSettings(); void dialogButtonsAction(QAbstractButton *btn); void textButtonChanged(const QString &value); void showTextChanged(bool value); void chooseMenuFile(); void shortcutReset(); void customFontChanged(bool value); void customFontSizeChanged(int value); }; #endif // LXQTMAINMENUCONFIGURATION_H lxqt-panel-0.10.0/plugin-mainmenu/lxqtmainmenuconfiguration.ui000066400000000000000000000120041261500472700246340ustar00rootroot00000000000000 LXQtMainMenuConfiguration 0 0 434 325 Main Menu settings General Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter false false Button text: false true Custom font size: false pt 1 11 true Menu file Menu file: Keyboard Shortcut 200 0 Click the button to record shortcut: Qt::Vertical 20 41 Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Reset ShortcutSelector QToolButton
LXQtGlobalKeysUi/ShortcutSelector
customFontCB toggled(bool) customFontSizeSB setEnabled(bool) 60 249 280 277 showTextCB toggled(bool) textLE setEnabled(bool) 239 39 313 68
lxqt-panel-0.10.0/plugin-mainmenu/menustyle.cpp000066400000000000000000000041421261500472700215200ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "menustyle.h" #include /************************************************ ************************************************/ MenuStyle::MenuStyle(): QProxyStyle() { mIconSize = 16; } /************************************************ ************************************************/ int MenuStyle::pixelMetric(PixelMetric metric, const QStyleOption * option, const QWidget * widget) const { if (metric == QProxyStyle::PM_SmallIconSize) return mIconSize; return QProxyStyle::pixelMetric(metric, option, widget); } /************************************************ ************************************************/ int MenuStyle::styleHint(StyleHint hint, const QStyleOption * option, const QWidget* widget, QStyleHintReturn* returnData) const { // By default, the popup menu will be closed when Alt key // is pressed. If SH_MenuBar_AltKeyNavigation style hint returns // false, this behavior can be supressed so let's do it. if(hint == QStyle::SH_MenuBar_AltKeyNavigation) return 0; return QProxyStyle::styleHint(hint, option, widget, returnData); } lxqt-panel-0.10.0/plugin-mainmenu/menustyle.h000066400000000000000000000030371261500472700211670ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef MENUSTYLE_H #define MENUSTYLE_H #include class MenuStyle : public QProxyStyle { Q_OBJECT public: explicit MenuStyle(); int pixelMetric(PixelMetric metric, const QStyleOption * option = 0, const QWidget * widget = 0 ) const; int styleHint(StyleHint hint, const QStyleOption* option = 0, const QWidget* widget = 0, QStyleHintReturn* returnData = 0) const; int iconSize() const { return mIconSize; } void setIconSize(int value) { mIconSize = value; } private: int mIconSize; }; #endif // MENUSTYLE_H lxqt-panel-0.10.0/plugin-mainmenu/resources/000077500000000000000000000000001261500472700210005ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-mainmenu/resources/mainmenu.desktop.in000066400000000000000000000002621261500472700246110ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. Icon=start-here-lxqt #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-mainmenu/translations/000077500000000000000000000000001261500472700215075ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu.ts000066400000000000000000000056021261500472700236730ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu LXQtMainMenuConfiguration General Main Menu settings Button text: Custom font size: pt Menu file Menu file: ... Keyboard Shortcut Click the button to record shortcut: Reset Choose menu file Menu files (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_ar.desktop000066400000000000000000000004361261500472700254000ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[ar]=بادئ التطبيقات المعتمد على قائمة Name[ar]=قائمة التطبيقات lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_ar.ts000066400000000000000000000070261261500472700243570ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave مغادرة LXQtMainMenuConfiguration LXQt Main Menu settings إعدادات قائمة ريزر الرئيسيَّة General العامّ Show text إظهار النَّصّ Button text نصُّ الزُّرّ Main Menu settings Button text: Custom font size: pt Menu file ملفُّ القائمة Menu file: ... ... Keyboard Shortcut اختصار المفاتيح Click the button to record shortcut: اضغط المفتاح لتسجيل الاختصار Reset Choose menu file اختيار ملفِّ القائمة Menu files (*.menu) ملفَّات القائمة (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_cs.desktop000066400000000000000000000003351261500472700254010ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[cs]=Hlavní nabídka Name[cs]=Nabídka lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_cs.ts000066400000000000000000000066561261500472700243720ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Opustit LXQtMainMenuConfiguration LXQt Main Menu settings Nastavení hlavní nabídky General Obecné Show text Ukázat text Button text Text Main Menu settings Button text: Custom font size: pt Menu file Soubor s nabídkou Menu file: ... ... Keyboard Shortcut Klávesová zkratka Click the button to record shortcut: Klepněte na tlačítko pro nahrání klávesové zkratky: Reset Choose menu file Vybrat soubor s nabídkou Menu files (*.menu) Soubory s nabídkami (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_cs_CZ.desktop000066400000000000000000000004111261500472700257700ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[cs_CZ]=Spouštěč programů založený na nabídce Name[cs_CZ]=Nabídka programů lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_cs_CZ.ts000066400000000000000000000066611261500472700247620ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Opustit LXQtMainMenuConfiguration LXQt Main Menu settings Nastavení hlavní nabídky General Obecné Show text Ukázat text Button text Text Main Menu settings Button text: Custom font size: pt Menu file Soubor s nabídkou Menu file: ... ... Keyboard Shortcut Klávesová zkratka Click the button to record shortcut: Klepněte na tlačítko pro nahrání klávesové zkratky: Reset Choose menu file Vybrat soubor s nabídkou Menu files (*.menu) Soubory s nabídkami (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_da.desktop000066400000000000000000000003521261500472700253570ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[da]=Menubaseret programstarter Name[da]=Programmenu lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_da.ts000066400000000000000000000065661261500472700243510ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Forlad LXQtMainMenuConfiguration LXQt Main Menu settings LXQt Hovedmenu Indstillinger General Generelt Show text Vis tekst Button text Knaptekst Main Menu settings Button text: Custom font size: pt Menu file Menufil Menu file: ... ... Keyboard Shortcut Tastaturgenvej Click the button to record shortcut: Klik på knappen for at optage genvej: Reset Choose menu file Vælg menufil Menu files (*.menu) Menufiler (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_da_DK.desktop000066400000000000000000000003611261500472700257350ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[da_DK]=Menubaseret programstarter Name[da_DK]=Program menu lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_da_DK.ts000066400000000000000000000066341261500472700247230ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Forlad LXQtMainMenuConfiguration LXQt Main Menu settings LXQt Hoved Menu Indstillinger General Generelt Show text Vis tekst Button text Knaptekst Main Menu settings Button text: Custom font size: pt Menu file Menu konfigurationsfil Menu file: ... ... Keyboard Shortcut Tastaturgenveje Click the button to record shortcut: Klik for at optage genvej: Reset Choose menu file Vælg menu konfigurationsfil Menu files (*.menu) Menu konfigurationsfiler (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_de.desktop000066400000000000000000000001061261500472700253600ustar00rootroot00000000000000Name[de]=Anwendungsmenü Comment[de]=Menübasierter Anwendungsstarter lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_de.ts000066400000000000000000000053431261500472700243450ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Hauptmenü anzeigen/verstecken LXQtMainMenuConfiguration Main Menu settings Hauptmenü-Einstellungen General Allgemein Button text: Schaltflächentext: Custom font size: Eigene Schriftgröße: pt pt Menu file Menü-Datei Menu file: Menü-Datei: Keyboard Shortcut Tastenkürzel Click the button to record shortcut: Auf die Schaltfläche klicken, um ein Tastenkürzel aufzunehmen: Reset Zurücksetzen Choose menu file Menü-Datei auswählen Menu files (*.menu) Menü-Dateien (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_el.desktop000066400000000000000000000001671261500472700253770ustar00rootroot00000000000000Name[el]=Μενού εφαρμογών Comment[el]=Ένα μενού για όλες σας τις εφαρμογές. lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_el.ts000066400000000000000000000072571261500472700243630ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Εμφάνιση/απόκρυψη του κύριου μενού Leave Έξοδος LXQtMainMenuConfiguration LXQt Main Menu settings Ρυθμίσεις κυρίως μενού LXQt General Γενικά Show text Εμφάνιση κειμένου Button text Κείμενο κουμπιού Main Menu settings Ρυθμίσεις του κύριου μενού Button text: Κείμενο κουμπιού: Custom font size: Προσαρμοσμένο μέγεθος γραμματοσειράς: pt pt Menu file Αρχείο μενού Menu file: Αρχείο μενού: ... ... Keyboard Shortcut Συντόμευση πληκτρολογίου Click the button to record shortcut: Κλικ στο πλήκτρο για εγγραφή της συντόμευσης: Reset Επαναφορά Choose menu file Επιλογή αρχείου μενού Menu files (*.menu) Αρχεία μενού (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_eo.desktop000066400000000000000000000004021261500472700253720ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[eo]=Lanĉilo de aplikaĵoj baziĝita sur menuo Name[eo]=Menuo de aplikaĵoj lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_eo.ts000066400000000000000000000066431261500472700243640ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Forlasi LXQtMainMenuConfiguration LXQt Main Menu settings Agordoj de ĉefa menuo de LXQt General Ĝenerala Show text Montri tekston Button text Teksto de butonoj Main Menu settings Button text: Custom font size: pt Menu file Menua dosiero Menu file: ... ... Keyboard Shortcut Klavkombinoj Click the button to record shortcut: Alklaku sur la butono por registi klavkombinon: Reset Choose menu file lektu menuan dosieron Menu files (*.menu) Menuaj dosieroj (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_es.desktop000066400000000000000000000003731261500472700254050ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[es]=Lanzador de aplicaciones con menú Name[es]=Menu de Aplicaciones lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_es.ts000066400000000000000000000066721261500472700243720ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Salir LXQtMainMenuConfiguration LXQt Main Menu settings Configuración del menú principal de LXQt General General Show text Mostrar texto Button text Texto de los botones Main Menu settings Button text: Custom font size: pt Menu file Archivo del menú Menu file: ... ... Keyboard Shortcut Atajos del teclado Click the button to record shortcut: Presione el botón para registrar el atajo: Reset Choose menu file Escoger un archivo de menú Menu files (*.menu) Archivos de menú (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_es_UY.ts000066400000000000000000000066431261500472700250050ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Salir LXQtMainMenuConfiguration LXQt Main Menu settings Configuración del Menú Principal LXQt General General Show text Mostrar etiqueta Button text Etiqueta del botón Main Menu settings Button text: Custom font size: pt Menu file Archivo de menú Menu file: ... ... Keyboard Shortcut Click the button to record shortcut: Reset Choose menu file Seleccionar archivo de menú Menu files (*.menu) Archivos de menú (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_es_VE.desktop000066400000000000000000000004241261500472700257740ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[es_VE]=Menu para lanzar las aplicaciones instaladas graficas Name[es_VE]=Menu de aplicaciones lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_es_VE.ts000066400000000000000000000067231261500472700247610ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Salir LXQtMainMenuConfiguration LXQt Main Menu settings Configuración del Menú Principal LXQt General General Show text Mostrar etiqueta Button text Etiqueta del botón Main Menu settings Button text: Custom font size: pt Menu file Archivo de menú alterno Menu file: ... Buscar ... Keyboard Shortcut Tecla de acceso rapido Click the button to record shortcut: Pulsa en el boton para grabar el acceso rapido: Reset Choose menu file Seleccionar archivo de menú Menu files (*.menu) Archivos de menú (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_eu.desktop000066400000000000000000000003651261500472700254100ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[eu]=Menu bidezko aplikazio-abiarazlea Name[eu]=Aplikazio menua lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_eu.ts000066400000000000000000000066411261500472700243700ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Irten LXQtMainMenuConfiguration LXQt Main Menu settings LXQt menu nagusiaren ezarpenak General Orokorra Show text Erakutsi testua Button text Botoi-testua Main Menu settings Button text: Custom font size: pt Menu file Menu fitxategia Menu file: ... ... Keyboard Shortcut Teklatuko lasterbidea Click the button to record shortcut: Klikatu botoia lasterbidea grabatzeko: Reset Choose menu file Aukeratu menu fitxategia Menu files (*.menu) Menu fitxategiak (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_fi.desktop000066400000000000000000000003701261500472700253710ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[fi]=Valikkopohjainen sovelluskäynnistin Name[fi]=Sovellusvalikko lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_fi.ts000066400000000000000000000066451261500472700243610ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Poistu LXQtMainMenuConfiguration LXQt Main Menu settings LXQtin päävalikon asetukset General Yleiset Show text Näytä teksti Button text Painiketeksti Main Menu settings Button text: Custom font size: pt Menu file Valikkotiedosto Menu file: ... ... Keyboard Shortcut Pikanäppäin Click the button to record shortcut: Napsauta painiketta nauhoittaaksesi pikanäppäimen: Reset Choose menu file Valitse valikkotiedosto Menu files (*.menu) Valikkotiedostot (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_fr_FR.desktop000066400000000000000000000004051261500472700257700ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[fr_FR]=Lanceur d'application sous forme de menu Name[fr_FR]=Menu d'application lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_fr_FR.ts000066400000000000000000000067071261500472700247600ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Quitter LXQtMainMenuConfiguration LXQt Main Menu settings Menu principal des paramètres de LXQt General Généraux Show text Montrer le texte Button text Texte des boutons Main Menu settings Button text: Custom font size: pt Menu file Fichier de menu Menu file: ... ... Keyboard Shortcut Raccourcis clavier Click the button to record shortcut: Cliquez sur le bouton pour enregistrer le raccourci : Reset Choose menu file Choisissez un fichier de menu Menu files (*.menu) Fichiers de menu (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_hr.ts000066400000000000000000000055721261500472700243720ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Pokaži/sakrij glavni izbornik LXQtMainMenuConfiguration General Općenito Main Menu settings Postavke glavnoga izbornika Button text: Custom font size: Prilagođena veličina fonta: pt pt Menu file Datoteka izbornika Menu file: Datoteka izbornika: Keyboard Shortcut Kratica tipkovnice Click the button to record shortcut: Reset Choose menu file Izaberite datoteku izbornika Menu files (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_hu.desktop000066400000000000000000000003651261500472700254130ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[hu]=Alkalmazásindító alapú menü Name[hu]=Alkalmazásmenü lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_hu.ts000066400000000000000000000065141261500472700243720ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Menü láttatás/elrejtés Leave Leállítás LXQtMainMenuConfiguration LXQt Main Menu settings LXQt főmenü beállítás General Általános Show text Szöveg megjelenítése Button text Gombszöveg Main Menu settings Menübeállítás Button text: Gombszöveg: Custom font size: Saját betűnagyság: pt .pont Menu file Menüfájl Menu file: Menüfájl: ... Keyboard Shortcut Gyorsbillentyű Click the button to record shortcut: Billentyű nyomása a megjegyzéshez... Reset Visszaállít Choose menu file Menüfájl kiválasztása Menu files (*.menu) Menüfájlok (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_hu_HU.ts000066400000000000000000000065171261500472700247710ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Menü láttatás/elrejtés Leave Leállítás LXQtMainMenuConfiguration LXQt Main Menu settings LXQt főmenü beállítás General Általános Show text Szöveg megjelenítése Button text Gombszöveg Main Menu settings Menübeállítás Button text: Gombszöveg: Custom font size: Saját betűnagyság: pt .pont Menu file Menüfájl Menu file: Menüfájl: ... Keyboard Shortcut Gyorsbillentyű Click the button to record shortcut: Billentyű nyomása a megjegyzéshez... Reset Visszaállít Choose menu file Menüfájl kiválasztása Menu files (*.menu) Menüfájlok (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_ia.desktop000066400000000000000000000002551261500472700253660ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=Menu based application launcher #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_ia.ts000066400000000000000000000055771261500472700243570ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu LXQtMainMenuConfiguration General Main Menu settings Button text: Custom font size: pt Menu file Menu file: ... Keyboard Shortcut Click the button to record shortcut: Reset Choose menu file Menu files (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_id_ID.desktop000066400000000000000000000003671261500472700257510ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[id_ID]=Peluncur aplikasi berbasis menu Name[id_ID]=Menu aplikasi lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_id_ID.ts000066400000000000000000000056021261500472700247230ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu LXQtMainMenuConfiguration General Main Menu settings Button text: Custom font size: pt Menu file Menu file: ... Keyboard Shortcut Click the button to record shortcut: Reset Choose menu file Menu files (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_it.desktop000066400000000000000000000001331261500472700254040ustar00rootroot00000000000000Comment[it]=Avviatore delle applicazioni basato su menù Name[it]=Menù delle applicazioni lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_it.ts000066400000000000000000000067211261500472700243720ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Mostra/nascondi menù principale Leave Esci LXQtMainMenuConfiguration LXQt Main Menu settings Impostazioni del menu principale di LXQt General Generali Show text Mostra testo Button text Testo del pulsante Main Menu settings Impostazioni del menù principale di LXQt Button text: Testo pulsante: Custom font size: Dimensione carattere personalizzato: pt Menu file File del menù Menu file: File del menù: ... ... Keyboard Shortcut Scorciatoia da tastiera Click the button to record shortcut: Fai clic sul pulsante per impostare una scorciatoia: Reset Ripristina Choose menu file Scegli il file del menù Menu files (*.menu) File del menù (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_ja.desktop000066400000000000000000000004611261500472700253660ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[ja]=アプリケーションランチャーを元にしたメニューです Name[ja]=アプリケーションメニュー lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_ja.ts000066400000000000000000000061541261500472700243500ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu メインメニューを表示/隠す Leave 終了 LXQtMainMenuConfiguration General 一般 Main Menu settings メインメニューの設定 Button text: ボタンの文字列: Custom font size: フォントサイズの指定: pt ポイント Menu file メニューファイル Menu file: メニューファイル: ... ... Keyboard Shortcut キーボードショートカット Click the button to record shortcut: ショートカットを記録するにはボタンをクリック: Reset リセット Choose menu file メニューファイルを選択 Menu files (*.menu) メニューファイル(*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_ko.desktop000066400000000000000000000002551261500472700254060ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=Menu based application launcher #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_ko.ts000066400000000000000000000055771261500472700243770ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu LXQtMainMenuConfiguration General Main Menu settings Button text: Custom font size: pt Menu file Menu file: ... Keyboard Shortcut Click the button to record shortcut: Reset Choose menu file Menu files (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_lt.desktop000066400000000000000000000003551261500472700254150ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[lt]=Programų paleidimo meniu Name[lt]=Programų meniu lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_lt.ts000066400000000000000000000066521261500472700244000ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Išeiti LXQtMainMenuConfiguration LXQt Main Menu settings LXQt pagrindinio meniu nuostatos General Pagrindinės Show text Rodyti tekstą Button text Mygtuko tekstas Main Menu settings Button text: Custom font size: pt Menu file Meniu rinkmena Menu file: ... ... Keyboard Shortcut Spartusis klavišas Click the button to record shortcut: Norėdami pakeisti klavišą, spragtelėkite Reset Choose menu file Pasirinkite meniu failą Menu files (*.menu) Meniu failai (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_nl.desktop000066400000000000000000000003671261500472700254120ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[nl]=Menu-gebasseerde applicatie starter Name[nl]=Applicatie menu lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_nl.ts000066400000000000000000000066241261500472700243710ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Verlaten LXQtMainMenuConfiguration LXQt Main Menu settings Instellingen van hoofdmenu van LXQt General Algemeen Show text Tekst weergeven Button text Knoptekst Main Menu settings Button text: Custom font size: pt Menu file Menubestand Menu file: ... ... Keyboard Shortcut Sneltoets Click the button to record shortcut: Klik op de knop om de sneltoets vast te leggen: Reset Choose menu file Kies menubestand Menu files (*.menu) Menubestanden (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_pl.desktop000066400000000000000000000003261261500472700254070ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[pl]=Główne menu Name[pl]=Menu lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_pl_PL.desktop000066400000000000000000000003351261500472700260020ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[pl_PL]=Menu aplikacji Name[pl_PL]=Menu lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_pl_PL.ts000066400000000000000000000065311261500472700247630ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Pokaż/ukryj menu Leave Opuść LXQtMainMenuConfiguration LXQt Main Menu settings Ustawienia menu LXQt General Ogólne Show text Pokaż tekst Button text Tekst Main Menu settings Ustawienia Menu Button text: Tekst przycisku: Custom font size: Własny rozmiar czcionki: pt pt Menu file Plik menu Menu file: Plik menu: ... ... Keyboard Shortcut Skrót klawiatury Click the button to record shortcut: Wciśnij przycisk aby ustawić skrót: Reset Zresetuj Choose menu file Wybierz plik menu Menu files (*.menu) Pliki menu (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_pt.desktop000066400000000000000000000004011261500472700254110ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Name[pt]=Menu de aplicações Comment[pt]=Lançador de aplicações baseado no menu lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_pt.ts000066400000000000000000000066501261500472700244020ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Sair LXQtMainMenuConfiguration LXQt Main Menu settings Definições do menu principal do LXQt General Geral Show text Mostrar texto Button text Texto do botão Main Menu settings Button text: Custom font size: pt Menu file Ficheiro de menu Menu file: ... ... Keyboard Shortcut Atalho de teclado Click the button to record shortcut: Clique no botão para registar o atalho: Reset Choose menu file Escolha o ficheiro de menu Menu files (*.menu) Ficheiros de menu (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_pt_BR.desktop000066400000000000000000000004061261500472700260010ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[pt_BR]=Lançador de aplicativos baseado em menu Name[pt_BR]=Menu de aplicativos lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_pt_BR.ts000066400000000000000000000066471261500472700247730ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Sair LXQtMainMenuConfiguration LXQt Main Menu settings Configurações do menu principal do LXQt General Geral Show text Exibir texto Button text Texto do botão Main Menu settings Button text: Custom font size: pt Menu file Arquvo do menu Menu file: ... ... Keyboard Shortcut Atalho do teclado Click the button to record shortcut: Clique no botão para gravar o atalho: Reset Choose menu file Escolher arquivo do menu Menu files (*.menu) Arquivos do menu (*.menus) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_ro_RO.desktop000066400000000000000000000004021261500472700260070ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[ro_RO]=Lansator de aplicații bazat pe meniuri Name[ro_RO]=Meniu aplicații lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_ro_RO.ts000066400000000000000000000066471261500472700250050ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Părăsește LXQtMainMenuConfiguration LXQt Main Menu settings Setări meniu principal LXQt General General Show text Afișează text Button text Text buton Main Menu settings Button text: Custom font size: pt Menu file Fișier meniu Menu file: ... ... Keyboard Shortcut Tastă rapidă Click the button to record shortcut: Apăsați butonul pentru a memora tasta rapidă: Reset Choose menu file Selectați fișierul meniu Menu files (*.menu) Fișiere meniu (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_ru.desktop000066400000000000000000000004201261500472700254150ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[ru]=Меню всех ваших программ. Name[ru]=Меню приложений lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_ru.ts000066400000000000000000000060071261500472700244010ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Показать/скрыть главное меню LXQtMainMenuConfiguration Main Menu settings Настройки главного меню General Общие Button text: Текст кнопки: Custom font size: Выбрать кегль: pt п Menu file Файл меню Menu file: Файл меню: ... Keyboard Shortcut Сочетание клавиш Click the button to record shortcut: Нажмите на кнопку для записи сочетания клавиш: Reset Сбросить Choose menu file Выбрать файл меню Menu files (*.menu) Файл меню (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_ru_RU.desktop000066400000000000000000000004261261500472700260310ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[ru_RU]=Меню всех ваших программ. Name[ru_RU]=Меню приложений lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_ru_RU.ts000066400000000000000000000060121261500472700250030ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Показать/скрыть главное меню LXQtMainMenuConfiguration Main Menu settings Настройки главного меню General Общие Button text: Текст кнопки: Custom font size: Выбрать кегль: pt п Menu file Файл меню Menu file: Файл меню: ... Keyboard Shortcut Сочетание клавиш Click the button to record shortcut: Нажмите на кнопку для записи сочетания клавиш: Reset Сбросить Choose menu file Выбрать файл меню Menu files (*.menu) Файл меню (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_sk.desktop000066400000000000000000000003641261500472700254130ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[sk]=Spúšťanie aplikácií z menu Name[sk]=Menu aplikácií lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_sk_SK.ts000066400000000000000000000066221261500472700247700ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Opustiť LXQtMainMenuConfiguration LXQt Main Menu settings Nastavenia Hlavného menu prostredia LXQt General Všeobecné Show text Zobraziť text Button text Text tlačidla Main Menu settings Button text: Custom font size: pt Menu file Súbor menu Menu file: ... ... Keyboard Shortcut Click the button to record shortcut: Reset Choose menu file Vybrať súbor menu Menu files (*.menu) Súbory menu (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_sl.desktop000066400000000000000000000003761261500472700254170ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[sl]=Zaganjalnik programov, temelječ na meniju Name[sl]=Programski meni lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_sl.ts000066400000000000000000000066551261500472700244020ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Zapusti LXQtMainMenuConfiguration LXQt Main Menu settings Nastavitve glavnega menija General Splošno Show text Pokaži besedilo Button text Besedilo na gumbih Main Menu settings Button text: Custom font size: pt Menu file Datoteka z menijem Menu file: ... ... Keyboard Shortcut Tipkovna bližnjica Click the button to record shortcut: Kliknite gumb za nastavitev bližnjice: Reset Choose menu file Izberite datoteko z menijem Menu files (*.menu) Datoteke z menijem (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_sr.desktop000066400000000000000000000004121261500472700254140ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[sr]=Мени покретача програма Name[sr]=Мени програма lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_sr@ijekavian.desktop000066400000000000000000000001601261500472700273760ustar00rootroot00000000000000Name[sr@ijekavian]=Мени програма Comment[sr@ijekavian]=Мени покретача програма lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_sr@ijekavianlatin.desktop000066400000000000000000000001321261500472700304250ustar00rootroot00000000000000Name[sr@ijekavianlatin]=Meni programa Comment[sr@ijekavianlatin]=Meni pokretača programa lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_sr@latin.desktop000066400000000000000000000003661261500472700265540ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[sr@latin]=Meni pokretača programa Name[sr@latin]=Meni programa lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_sr@latin.ts000066400000000000000000000056051261500472700255320ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu LXQtMainMenuConfiguration General Main Menu settings Button text: Custom font size: pt Menu file Menu file: ... Keyboard Shortcut Click the button to record shortcut: Reset Choose menu file Menu files (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_sr_BA.ts000066400000000000000000000070451261500472700247440ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Напуштање LXQtMainMenuConfiguration LXQt Main Menu settings Подешавања главног менија General Опште Show text Прикажи текст Button text Текст тастера Main Menu settings Button text: Custom font size: pt Menu file Фајл менија Menu file: ... ... Keyboard Shortcut Пречица тастатуре Click the button to record shortcut: Кликните на тастер да снимите пречицу: Reset Choose menu file Изабери фајл менија Menu files (*.menu) Фајлови менија (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_sr_RS.ts000066400000000000000000000070451261500472700250060ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Напуштање LXQtMainMenuConfiguration LXQt Main Menu settings Подешавања главног менија General Опште Show text Прикажи текст Button text Текст тастера Main Menu settings Button text: Custom font size: pt Menu file Фајл менија Menu file: ... ... Keyboard Shortcut Пречица тастатуре Click the button to record shortcut: Кликните на тастер да снимите пречицу: Reset Choose menu file Изабери фајл менија Menu files (*.menu) Фајлови менија (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_th_TH.desktop000066400000000000000000000005061261500472700260020ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[th_TH]=ปุ่มเรียกโปรแกรมพื้นฐานทางเมนู Name[th_TH]=เมนูโปรแกรม lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_th_TH.ts000066400000000000000000000070741261500472700247660ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave ออก LXQtMainMenuConfiguration LXQt Main Menu settings ค่าตั้งเมนูหลัก LXQt General ทั่วไป Show text แสดงข้อความ Button text ข้อความตรงปุ่ม Main Menu settings Button text: Custom font size: pt Menu file แฟ้มเมนู Menu file: ... ... Keyboard Shortcut ปุ่มลัด Click the button to record shortcut: กดปุ่มที่จะใช้เป็นปุ่มลัด: Reset Choose menu file เลือกแฟ้มเมนู Menu files (*.menu) แฟ้มเมนู (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_tr.desktop000066400000000000000000000003761261500472700254260ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[tr]=Menü temelli uygulama çalıştırıcı Name[tr]=Uygulama menüsü lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_tr.ts000066400000000000000000000066261261500472700244070ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Çık LXQtMainMenuConfiguration LXQt Main Menu settings LXQt Ana Menü ayarları General Genel Show text Metin göster Button text Düğme metni Main Menu settings Button text: Custom font size: pt Menu file Menü dosyası Menu file: ... ... Keyboard Shortcut Klavye Kısayolu Click the button to record shortcut: Kısayolu kaydetmek için düğmeye tıklayın: Reset Choose menu file Menü dosyası seç Menu files (*.menu) Menü dosyaları (*.menü) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_uk.desktop000066400000000000000000000004101261500472700254050ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[uk]=Меню з усіма програмами. Name[uk]=Меню програм lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_uk.ts000066400000000000000000000071121261500472700243700ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave Полишити LXQtMainMenuConfiguration LXQt Main Menu settings Налаштування головного меню LXQt General Загальне Show text Показувати текст Button text Текст кнопки Main Menu settings Button text: Custom font size: pt Menu file Файл меню Menu file: ... ... Keyboard Shortcut Клавіатурне скорочення Click the button to record shortcut: Натисніть кнопку, щоб змінити клавіатурне скорочення: Reset Choose menu file Оберіть файл меню Menu files (*.menu) Файли меню (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_zh_CN.GB2312.desktop000066400000000000000000000002551261500472700265750ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=Menu based application launcher #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_zh_CN.desktop000066400000000000000000000003651261500472700260000ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[zh_CN]=基于菜单的程序启动器 Name[zh_CN]=程序菜单 lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_zh_CN.ts000066400000000000000000000065671261500472700247670ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave 离开 LXQtMainMenuConfiguration LXQt Main Menu settings LXQt主菜单设置 General 常规 Show text 显示文本 Button text 按钮文本 Main Menu settings Button text: Custom font size: pt Menu file 菜单文件 Menu file: ... ... Keyboard Shortcut 键盘快捷键 Click the button to record shortcut: 点击按钮记录快捷键 Reset Choose menu file 选择菜单文件 Menu files (*.menu) 菜单文件 (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_zh_TW.desktop000066400000000000000000000004121261500472700260230ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Application menu Comment=A menu of all your applications. #TRANSLATIONS_DIR=../translations # Translations Comment[zh_TW]=以選單方式呈現的應用程式啟動器 Name[zh_TW]=應用程式選單 lxqt-panel-0.10.0/plugin-mainmenu/translations/mainmenu_zh_TW.ts000066400000000000000000000065721261500472700250150ustar00rootroot00000000000000 LXQtMainMenu Show/hide main menu Leave 離開 LXQtMainMenuConfiguration LXQt Main Menu settings LXQt主選單設定 General 通用 Show text 顯示文件 Button text 按鈕文件 Main Menu settings Button text: Custom font size: pt Menu file 選單文件 Menu file: ... ... Keyboard Shortcut 快捷鍵 Click the button to record shortcut: 按下按鈕並設定為快捷鍵: Reset Choose menu file 選擇選單文件 Menu files (*.menu) 選單文件 (*.menu) lxqt-panel-0.10.0/plugin-mainmenu/xdgcachedmenu.cpp000066400000000000000000000124431261500472700222750ustar00rootroot00000000000000/* * * Copyright (C) 2013 * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ #include "xdgcachedmenu.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include XdgCachedMenuAction::XdgCachedMenuAction(MenuCacheItem* item, QObject* parent): QAction(parent), item_(menu_cache_item_ref(item)) { QString title = QString::fromUtf8(menu_cache_item_get_name(item)); title = title.replace('&', QLatin1String("&&")); // & is reserved for mnemonics setText(title); // Only set tooltips for app items if(menu_cache_item_get_type(item) == MENU_CACHE_TYPE_APP) { QString comment = QString::fromUtf8(menu_cache_item_get_comment(item)); setToolTip(comment); } } XdgCachedMenuAction::~XdgCachedMenuAction() { if(item_) menu_cache_item_unref(item_); } void XdgCachedMenuAction::updateIcon() { if(icon().isNull()) { QIcon icon = XdgIcon::fromTheme(menu_cache_item_get_icon(item_)); setIcon(icon); } } XdgCachedMenu::XdgCachedMenu(QWidget* parent): QMenu(parent) { connect(this, SIGNAL(aboutToShow()), SLOT(onAboutToShow())); } XdgCachedMenu::XdgCachedMenu(MenuCache* menuCache, QWidget* parent): QMenu(parent) { // qDebug() << "CREATE MENU FROM CACHE" << menuCache; MenuCacheDir* dir = menu_cache_get_root_dir(menuCache); addMenuItems(this, dir); connect(this, SIGNAL(aboutToShow()), SLOT(onAboutToShow())); } XdgCachedMenu::~XdgCachedMenu() { } void XdgCachedMenu::addMenuItems(QMenu* menu, MenuCacheDir* dir) { for(GSList* l = menu_cache_dir_get_children(dir); l; l = l->next) { MenuCacheItem* item = (MenuCacheItem*)l->data; MenuCacheType type = menu_cache_item_get_type(item); if(type == MENU_CACHE_TYPE_SEP) { menu->addSeparator(); continue; } else { XdgCachedMenuAction* action = new XdgCachedMenuAction(item, menu); menu->addAction(action); if(type == MENU_CACHE_TYPE_APP) connect(action, SIGNAL(triggered(bool)), SLOT(onItemTrigerred())); else if(type == MENU_CACHE_TYPE_DIR) { XdgCachedMenu* submenu = new XdgCachedMenu(menu); action->setMenu(submenu); addMenuItems(submenu, (MenuCacheDir*)item); } } } } void XdgCachedMenu::onItemTrigerred() { XdgCachedMenuAction* action = static_cast(sender()); XdgDesktopFile df; char* desktop_file = menu_cache_item_get_file_path(action->item()); df.load(desktop_file); g_free(desktop_file); df.startDetached(); } // taken from libqtxdg: XdgMenuWidget bool XdgCachedMenu::event(QEvent* event) { if (event->type() == QEvent::MouseButtonPress) { QMouseEvent *e = static_cast(event); if (e->button() == Qt::LeftButton) mDragStartPosition = e->pos(); } else if (event->type() == QEvent::MouseMove) { QMouseEvent *e = static_cast(event); handleMouseMoveEvent(e); } else if(event->type() == QEvent::ToolTip) { QHelpEvent* helpEvent = static_cast(event); QAction* action = actionAt(helpEvent->pos()); if(action && action->menu() == NULL) QToolTip::showText(helpEvent->globalPos(), action->toolTip(), this); } return QMenu::event(event); } // taken from libqtxdg: XdgMenuWidget void XdgCachedMenu::handleMouseMoveEvent(QMouseEvent *event) { if (!(event->buttons() & Qt::LeftButton)) return; if ((event->pos() - mDragStartPosition).manhattanLength() < QApplication::startDragDistance()) return; XdgCachedMenuAction *a = qobject_cast(actionAt(mDragStartPosition)); if (!a) return; QList urls; char* desktop_file = menu_cache_item_get_file_path(a->item()); urls << QUrl(desktop_file); g_free(desktop_file); QMimeData *mimeData = new QMimeData(); mimeData->setUrls(urls); QDrag *drag = new QDrag(this); drag->setMimeData(mimeData); drag->exec(Qt::CopyAction | Qt::LinkAction); } void XdgCachedMenu::onAboutToShow() { Q_FOREACH(QAction* action, actions()) { if(action->inherits("XdgCachedMenuAction")) { static_cast(action)->updateIcon(); // this seems to cause some incorrect menu behaviour. // qApp->processEvents(); } } } lxqt-panel-0.10.0/plugin-mainmenu/xdgcachedmenu.h000066400000000000000000000034151261500472700217410ustar00rootroot00000000000000/* * * Copyright (C) 2013 * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ #ifndef XDGCACHEDMENU_H #define XDGCACHEDMENU_H #include #include class QEvent; class QMouseEvent; class XdgCachedMenu : public QMenu { Q_OBJECT public: XdgCachedMenu(QWidget* parent = NULL); XdgCachedMenu(MenuCache* menuCache, QWidget* parent); virtual ~XdgCachedMenu(); protected: bool event(QEvent* event); private: void addMenuItems(QMenu* menu, MenuCacheDir* dir); void handleMouseMoveEvent(QMouseEvent *event); private Q_SLOTS: void onItemTrigerred(); void onAboutToShow(); private: QPoint mDragStartPosition; }; class XdgCachedMenuAction: public QAction { Q_OBJECT public: explicit XdgCachedMenuAction(MenuCacheItem* item, QObject* parent = 0); virtual ~XdgCachedMenuAction(); MenuCacheItem* item() const { return item_; } void updateIcon(); private: MenuCacheItem* item_; }; #endif // XDGCACHEDMENU_H lxqt-panel-0.10.0/plugin-mount/000077500000000000000000000000001261500472700163175ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-mount/CMakeLists.txt000066400000000000000000000011541261500472700210600ustar00rootroot00000000000000set(PLUGIN "mount") set(HEADERS lxqtmountplugin.h configuration.h button.h menudiskitem.h popup.h actions/deviceaction.h actions/deviceaction_info.h actions/deviceaction_menu.h actions/deviceaction_nothing.h ) set(SOURCES lxqtmountplugin.cpp configuration.cpp button.cpp menudiskitem.cpp popup.cpp actions/deviceaction.cpp actions/deviceaction_info.cpp actions/deviceaction_menu.cpp actions/deviceaction_nothing.cpp ) set(UIS configuration.ui ) find_package(KF5Solid REQUIRED) set(LIBRARIES Qt5Xdg KF5::Solid) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-mount/actions/000077500000000000000000000000001261500472700177575ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-mount/actions/deviceaction.cpp000066400000000000000000000055101261500472700231210ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "deviceaction.h" #include "deviceaction_info.h" #include "deviceaction_menu.h" #include "deviceaction_nothing.h" #include "../menudiskitem.h" #include "../lxqtmountplugin.h" #include #define ACT_NOTHING "nothing" #define ACT_INFO "showInfo" #define ACT_MENU "showMenu" #define ACT_NOTHING_UPPER QString(ACT_NOTHING).toUpper() #define ACT_INFO_UPPER QString(ACT_INFO).toUpper() #define ACT_MENU_UPPER QString(ACT_MENU).toUpper() DeviceAction::DeviceAction(LXQtMountPlugin *plugin, QObject *parent): mPlugin(plugin) { } DeviceAction::~DeviceAction() { } DeviceAction *DeviceAction::create(ActionId id, LXQtMountPlugin *plugin, QObject *parent) { switch (id) { case ActionNothing: return new DeviceActionNothing(plugin, parent); case ActionInfo: return new DeviceActionInfo(plugin, parent); case ActionMenu: return new DeviceActionMenu(plugin, parent); } return 0; } QString DeviceAction::actionIdToString(DeviceAction::ActionId id) { switch (id) { case ActionNothing: return ACT_NOTHING; case ActionInfo: return ACT_INFO; case ActionMenu: return ACT_MENU; } return ACT_INFO; } void DeviceAction::onDeviceAdded(QString const & udi) { Solid::Device device(udi); if (device.is()) doDeviceAdded(device); } void DeviceAction::onDeviceRemoved(QString const & udi) { Solid::Device device(udi); if (device.is()) doDeviceRemoved(device); } DeviceAction::ActionId DeviceAction::stringToActionId(const QString &string, ActionId defaultValue) { QString s = string.toUpper(); if (s == ACT_NOTHING_UPPER) return ActionNothing; if (s == ACT_INFO_UPPER) return ActionInfo; if (s == ACT_MENU_UPPER) return ActionMenu; return defaultValue; } lxqt-panel-0.10.0/plugin-mount/actions/deviceaction.h000066400000000000000000000037311261500472700225710ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQT_PLUGIN_MOUNT_DEVICEACTION_H #define LXQT_PLUGIN_MOUNT_DEVICEACTION_H #include #include #include class LXQtMountPlugin; class DeviceAction: public QObject { Q_OBJECT public: enum ActionId { ActionNothing, ActionInfo, ActionMenu }; virtual ~DeviceAction(); virtual ActionId Type() const throw () = 0; static DeviceAction *create(ActionId id, LXQtMountPlugin *plugin, QObject *parent = 0); static ActionId stringToActionId(const QString &string, ActionId defaultValue); static QString actionIdToString(ActionId id); public slots: void onDeviceAdded(QString const & udi); void onDeviceRemoved(QString const & udi); protected: explicit DeviceAction(LXQtMountPlugin *plugin, QObject *parent = 0); virtual void doDeviceAdded(Solid::Device device) = 0; virtual void doDeviceRemoved(Solid::Device device) = 0; LXQtMountPlugin *mPlugin; }; #endif // DEVICEACTION_H lxqt-panel-0.10.0/plugin-mount/actions/deviceaction_info.cpp000066400000000000000000000032611261500472700241350ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "../lxqtmountplugin.h" #include "deviceaction_info.h" #include DeviceActionInfo::DeviceActionInfo(LXQtMountPlugin *plugin, QObject *parent): DeviceAction(plugin, parent) { } void DeviceActionInfo::doDeviceAdded(Solid::Device device) { showMessage(tr("The device \"%1\" is connected.").arg(device.description())); } void DeviceActionInfo::doDeviceRemoved(Solid::Device device) { showMessage(tr("The device \"%1\" is removed.").arg(device.description())); } void DeviceActionInfo::showMessage(const QString &text) { LXQt::Notification::notify(tr("Removable media/devices manager"), text, mPlugin->icon().name()); } lxqt-panel-0.10.0/plugin-mount/actions/deviceaction_info.h000066400000000000000000000030621261500472700236010ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQT_PLUGIN_MOUNT_DEVICEACTION_INFO_H #define LXQT_PLUGIN_MOUNT_DEVICEACTION_INFO_H #include "deviceaction.h" #include #include class Popup; class DeviceActionInfo : public DeviceAction { Q_OBJECT public: explicit DeviceActionInfo(LXQtMountPlugin *plugin, QObject *parent = 0); virtual ActionId Type() const throw () { return ActionInfo; } protected: void doDeviceAdded(Solid::Device device); void doDeviceRemoved(Solid::Device device); private: void showMessage(const QString &text); }; #endif // DEVICEACTION_INFO_H lxqt-panel-0.10.0/plugin-mount/actions/deviceaction_menu.cpp000066400000000000000000000030201261500472700241370ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "deviceaction_menu.h" #include "../lxqtmountplugin.h" #include "../popup.h" DeviceActionMenu::DeviceActionMenu(LXQtMountPlugin *plugin, QObject *parent): DeviceAction(plugin, parent) { mPopup = plugin->popup(); mHideTimer.setSingleShot(true); mHideTimer.setInterval(5000); connect(&mHideTimer, &QTimer::timeout, mPopup, &Popup::hide); } void DeviceActionMenu::doDeviceAdded(Solid::Device device) { mHideTimer.start(); mPopup->show(); } void DeviceActionMenu::doDeviceRemoved(Solid::Device device) { } lxqt-panel-0.10.0/plugin-mount/actions/deviceaction_menu.h000066400000000000000000000030601261500472700236100ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQT_PLUGIN_MOUNT_DEVICEACTION_MENU_H #define LXQT_PLUGIN_MOUNT_DEVICEACTION_MENU_H #include "deviceaction.h" #include #include class Popup; class DeviceActionMenu : public DeviceAction { Q_OBJECT public: explicit DeviceActionMenu(LXQtMountPlugin *plugin, QObject *parent = 0); virtual ActionId Type() const throw () { return ActionMenu; } protected: void doDeviceAdded(Solid::Device device); void doDeviceRemoved(Solid::Device device); private: Popup *mPopup; QTimer mHideTimer; }; #endif // DEVICEACTIONMENU_H lxqt-panel-0.10.0/plugin-mount/actions/deviceaction_nothing.cpp000066400000000000000000000024261261500472700246520ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "deviceaction_nothing.h" DeviceActionNothing::DeviceActionNothing(LXQtMountPlugin *plugin, QObject *parent): DeviceAction(plugin, parent) { } void DeviceActionNothing::doDeviceAdded(Solid::Device device) { } void DeviceActionNothing::doDeviceRemoved(Solid::Device device) { } lxqt-panel-0.10.0/plugin-mount/actions/deviceaction_nothing.h000066400000000000000000000027601261500472700243200ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQT_PLUGIN_MOUNT_DEVICEACTION_NOTHING_H #define LXQT_PLUGIN_MOUNT_DEVICEACTION_NOTHING_H #include "deviceaction.h" #include class DeviceActionNothing : public DeviceAction { Q_OBJECT public: explicit DeviceActionNothing(LXQtMountPlugin *plugin, QObject *parent = 0); virtual ActionId Type() const throw () { return ActionNothing; }; protected: void doDeviceAdded(Solid::Device device); void doDeviceRemoved(Solid::Device device); }; #endif // DEVICEACTIONNOTHING_H lxqt-panel-0.10.0/plugin-mount/button.cpp000066400000000000000000000030451261500472700203400ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Petr Vanek * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "button.h" #include Button::Button(QWidget * parent) : QToolButton(parent) { //Note: don't use the QStringLiteral here as it is causing a SEGFAULT in static finalization time //(the string is released upon our *.so removal, but the reference is still in held in libqtxdg...) setIcon(XdgIcon::fromTheme(QLatin1String("drive-removable-media"))); setToolTip(tr("Removable media/devices manager")); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); } Button::~Button() { } lxqt-panel-0.10.0/plugin-mount/button.h000066400000000000000000000023521261500472700200050ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Petr Vanek * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQT_PLUGIN_MOUNT_BUTTON_H #define LXQT_PLUGIN_MOUNT_BUTTON_H #include class Button : public QToolButton { Q_OBJECT public: Button(QWidget *parent = 0); ~Button(); }; #endif lxqt-panel-0.10.0/plugin-mount/configuration.cpp000066400000000000000000000042731261500472700217000ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "configuration.h" #include "ui_configuration.h" #include #include Configuration::Configuration(QSettings &settings, QWidget *parent) : LXQtPanelPluginConfigDialog(settings, parent), ui(new Ui::Configuration) { ui->setupUi(this); ui->devAddedCombo->addItem(tr("Popup menu"), QLatin1String(ACT_SHOW_MENU)); ui->devAddedCombo->addItem(tr("Show info"), QLatin1String(ACT_SHOW_INFO)); ui->devAddedCombo->addItem(tr("Do nothing"), QLatin1String(ACT_NOTHING)); loadSettings(); connect(ui->devAddedCombo, static_cast(&QComboBox::currentIndexChanged), this, &Configuration::devAddedChanged); connect(ui->buttons, &QDialogButtonBox::clicked, this, &Configuration::dialogButtonsAction); } Configuration::~Configuration() { delete ui; } void Configuration::loadSettings() { QVariant value = settings().value(QLatin1String(CFG_KEY_ACTION), QLatin1String(ACT_SHOW_INFO)); setComboboxIndexByData(ui->devAddedCombo, value, 1); } void Configuration::devAddedChanged(int index) { QString s = ui->devAddedCombo->itemData(index).toString(); settings().setValue(QLatin1String(CFG_KEY_ACTION), s); } lxqt-panel-0.10.0/plugin-mount/configuration.h000066400000000000000000000032161261500472700213410ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQT_PLUGIN_MOUNT_CONFIGURATION_H #define LXQT_PLUGIN_MOUNT_CONFIGURATION_H #include "../panel/lxqtpanelpluginconfigdialog.h" #define CFG_KEY_ACTION "newDeviceAction" #define ACT_SHOW_MENU "showMenu" #define ACT_SHOW_INFO "showInfo" #define ACT_NOTHING "nothing" namespace Ui { class Configuration; } class Configuration : public LXQtPanelPluginConfigDialog { Q_OBJECT public: explicit Configuration(QSettings &settings, QWidget *parent = 0); ~Configuration(); protected slots: virtual void loadSettings(); void devAddedChanged(int index); private: Ui::Configuration *ui; }; #endif // LXQTMOUNTCONFIGURATION_H lxqt-panel-0.10.0/plugin-mount/configuration.ui000066400000000000000000000043201261500472700215240ustar00rootroot00000000000000 Configuration 0 0 407 129 Removable Media Settings Behaviour When a device is connected : Qt::Vertical 20 41 Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Reset buttons accepted() Configuration accept() 248 254 157 274 buttons rejected() Configuration reject() 316 260 286 274 lxqt-panel-0.10.0/plugin-mount/lxqtmountplugin.cpp000066400000000000000000000050101261500472700223110ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Petr Vanek * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtmountplugin.h" #include "configuration.h" #include LXQtMountPlugin::LXQtMountPlugin(const ILXQtPanelPluginStartupInfo &startupInfo): QObject(), ILXQtPanelPlugin(startupInfo), mPopup(nullptr), mDeviceAction(nullptr) { mButton = new Button; mPopup = new Popup(this); connect(mButton, &QToolButton::clicked, mPopup, &Popup::showHide); connect(mPopup, &Popup::visibilityChanged, mButton, &QToolButton::setDown); } LXQtMountPlugin::~LXQtMountPlugin() { delete mButton; delete mPopup; } QDialog *LXQtMountPlugin::configureDialog() { if (mPopup) mPopup->hide(); Configuration *configWindow = new Configuration(*settings()); configWindow->setAttribute(Qt::WA_DeleteOnClose, true); return configWindow; } void LXQtMountPlugin::realign() { //nothing to do } void LXQtMountPlugin::settingsChanged() { QString s = settings()->value(QLatin1String(CFG_KEY_ACTION)).toString(); DeviceAction::ActionId actionId = DeviceAction::stringToActionId(s, DeviceAction::ActionMenu); if (mDeviceAction == nullptr || mDeviceAction->Type() != actionId) { delete mDeviceAction; mDeviceAction = DeviceAction::create(actionId, this); connect(Solid::DeviceNotifier::instance(), &Solid::DeviceNotifier::deviceAdded, mDeviceAction, &DeviceAction::onDeviceAdded); connect(Solid::DeviceNotifier::instance(), &Solid::DeviceNotifier::deviceRemoved, mDeviceAction, &DeviceAction::onDeviceRemoved); } } lxqt-panel-0.10.0/plugin-mount/lxqtmountplugin.h000066400000000000000000000044401261500472700217640ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Petr Vanek * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTMOUNTPLUGIN_H #define LXQTMOUNTPLUGIN_H #include "../panel/ilxqtpanelplugin.h" #include "../panel/lxqtpanel.h" #include "button.h" #include "popup.h" #include "actions/deviceaction.h" #include /*! \author Petr Vanek */ class LXQtMountPlugin : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: LXQtMountPlugin(const ILXQtPanelPluginStartupInfo &startupInfo); ~LXQtMountPlugin(); virtual QWidget *widget() { return mButton; } virtual QString themeId() const { return QLatin1String("LXQtMount"); } virtual ILXQtPanelPlugin::Flags flags() const { return PreferRightAlignment | HaveConfigDialog; } Popup *popup() { return mPopup; } QIcon icon() { return mButton->icon(); }; QDialog *configureDialog(); public slots: void realign(); protected slots: virtual void settingsChanged(); private: Button *mButton; Popup *mPopup; DeviceAction *mDeviceAction; }; class LXQtMountPluginLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new LXQtMountPlugin(startupInfo); } }; #endif lxqt-panel-0.10.0/plugin-mount/menudiskitem.cpp000066400000000000000000000131531261500472700215240ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Petr Vanek * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "menudiskitem.h" #include "popup.h" #include #include #include #include #include #include #include #include #include #include MenuDiskItem::MenuDiskItem(Solid::Device device, Popup *popup): QFrame(popup), mPopup(popup), mDevice(device), mDiskButton(nullptr), mEjectButton(nullptr), mDiskButtonClicked(false), mEjectButtonClicked(false) { Solid::StorageAccess * const iface = device.as(); Q_ASSERT(nullptr != iface); mDiskButton = new QToolButton(this); mDiskButton->setObjectName("DiskButton"); mDiskButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); mDiskButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); connect(mDiskButton, &QToolButton::clicked, this, &MenuDiskItem::diskButtonClicked); mEjectButton = new QToolButton(this); mEjectButton->setObjectName("EjectButton"); mEjectButton->setIcon(XdgIcon::fromTheme("media-eject")); connect(mEjectButton, &QToolButton::clicked, this, &MenuDiskItem::ejectButtonClicked); QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(mDiskButton); layout->addWidget(mEjectButton); layout->setMargin(0); layout->setSpacing(0); setLayout(layout); connect(iface, &Solid::StorageAccess::setupDone, this, &MenuDiskItem::onMounted); connect(iface, &Solid::StorageAccess::teardownDone, this, &MenuDiskItem::onUnmounted); connect(iface, &Solid::StorageAccess::accessibilityChanged, [this] (bool accessible, QString const &) { updateMountStatus(); }); updateMountStatus(); } MenuDiskItem::~MenuDiskItem() { } void MenuDiskItem::setMountStatus(bool mounted) { mEjectButton->setEnabled(mounted); } void MenuDiskItem::updateMountStatus() { //Note: don't use the QStringLiteral here as it is causing a SEGFAULT in static finalization time //(the string is released upon our *.so removal, but the reference is still in held in libqtxdg...) static const QIcon icon = XdgIcon::fromTheme(mDevice.icon(), QLatin1String("drive-removable-media")); if (mDevice.isValid()) { mDiskButton->setIcon(icon); mDiskButton->setText(mDevice.description()); setMountStatus(mDevice.as()->isAccessible() || !opticalParent().udi().isEmpty()); } else emit invalid(mDevice.udi()); } Solid::Device MenuDiskItem::opticalParent() const { Solid::Device it; if (mDevice.isValid()) { it = mDevice; // search for parent drive for (; !it.udi().isEmpty(); it = it.parent()) if (it.is()) break; } return it; } void MenuDiskItem::diskButtonClicked() { mDiskButtonClicked = true; Solid::StorageAccess* di = mDevice.as(); if (!di->isAccessible()) di->setup(); else onMounted(Solid::NoError, QString(), mDevice.udi()); mPopup->hide(); } void MenuDiskItem::ejectButtonClicked() { mEjectButtonClicked = true; Solid::StorageAccess* di = mDevice.as(); if (di->isAccessible()) di->teardown(); else onUnmounted(Solid::NoError, QString(), mDevice.udi()); mPopup->hide(); } void MenuDiskItem::onMounted(Solid::ErrorType error, QVariant resultData, const QString &udi) { if (mDiskButtonClicked) { mDiskButtonClicked = false; if (Solid::NoError == error) QDesktopServices::openUrl(QUrl(mDevice.as()->filePath())); else { QString errorMsg = tr("Mounting of \"%1\" failed: %2"); errorMsg = errorMsg.arg(mDevice.description()).arg(resultData.toString()); LXQt::Notification::notify(tr("Removable media/devices manager"), errorMsg, mDevice.icon()); } } } void MenuDiskItem::onUnmounted(Solid::ErrorType error, QVariant resultData, const QString &udi) { if (mEjectButtonClicked) { mEjectButtonClicked = false; if (Solid::NoError == error) { Solid::Device opt_parent = opticalParent(); if (!opt_parent.udi().isEmpty()) opt_parent.as()->eject(); } else { QString errorMsg = tr("Unmounting of \"%1\" failed: %2"); errorMsg = errorMsg.arg(mDevice.description()).arg(resultData.toString()); LXQt::Notification::notify(tr("Removable media/devices manager"), errorMsg, mDevice.icon()); } } } lxqt-panel-0.10.0/plugin-mount/menudiskitem.h000066400000000000000000000040621261500472700211700ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Petr Vanek * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQT_PLUGIN_MOUNT_MENUDISKITEM_H #define LXQT_PLUGIN_MOUNT_MENUDISKITEM_H #include #include #include #include class Popup; class MenuDiskItem : public QFrame { Q_OBJECT public: explicit MenuDiskItem(Solid::Device device, Popup *popup); ~MenuDiskItem(); QString deviceUdi() const { return mDevice.udi(); } void setMountStatus(bool mounted); private: void updateMountStatus(); Solid::Device opticalParent() const; signals: void invalid(QString const & udi); private slots: void diskButtonClicked(); void ejectButtonClicked(); void onMounted(Solid::ErrorType error, QVariant resultData, const QString &udi); void onUnmounted(Solid::ErrorType error, QVariant resultData, const QString &udi); private: Popup *mPopup; Solid::Device mDevice; QToolButton *mDiskButton; QToolButton *mEjectButton; bool mDiskButtonClicked; bool mEjectButtonClicked; }; #endif // MENUDISKITEM_H lxqt-panel-0.10.0/plugin-mount/popup.cpp000066400000000000000000000113711261500472700201710ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011-2013 Razor team * Authors: * Petr Vanek * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "popup.h" #include "../panel/ilxqtpanelplugin.h" #include #include #include #include #include #include // Paulo: I'm not sure what this is for static bool hasRemovableParent(Solid::Device device) { // qDebug() << "acess:" << device.udi(); for ( ; !device.udi().isEmpty(); device = device.parent()) { Solid::StorageDrive* drive = device.as(); if (drive && drive->isRemovable()) { // qDebug() << "removable parent drive:" << device.udi(); return true; } } return false; } Popup::Popup(ILXQtPanelPlugin * plugin, QWidget* parent): QDialog(parent, Qt::Window | Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint | Qt::Popup | Qt::X11BypassWindowManagerHint), mPlugin(plugin), mPlaceholder(nullptr), mDisplayCount(0) { setObjectName("LXQtMountPopup"); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setLayout(new QVBoxLayout(this)); layout()->setMargin(0); setAttribute(Qt::WA_AlwaysShowToolTips); mPlaceholder = new QLabel(tr("No devices are available"), this); mPlaceholder->setObjectName("NoDiskLabel"); layout()->addWidget(mPlaceholder); //Perform the potential long time operation after object construction //Note: can't use QTimer::singleShot with lambda in pre QT 5.4 code QTimer * aux_timer = new QTimer; connect(aux_timer, &QTimer::timeout, [this, aux_timer] { delete aux_timer; //cleanup for (Solid::Device device : Solid::Device::listFromType(Solid::DeviceInterface::StorageAccess)) if (hasRemovableParent(device)) addItem(device); }); aux_timer->setSingleShot(true); aux_timer->start(0); connect(Solid::DeviceNotifier::instance(), &Solid::DeviceNotifier::deviceAdded, this, &Popup::onDeviceAdded); connect(Solid::DeviceNotifier::instance(), &Solid::DeviceNotifier::deviceRemoved, this, &Popup::onDeviceRemoved); } void Popup::showHide() { setVisible(isHidden()); } void Popup::onDeviceAdded(QString const & udi) { Solid::Device device(udi); if (device.is() && hasRemovableParent(device)) addItem(device); } void Popup::onDeviceRemoved(QString const & udi) { MenuDiskItem* item = nullptr; const int size = layout()->count() - 1; for (int i = size; 0 <= i; --i) { QWidget *w = layout()->itemAt(i)->widget(); if (w == mPlaceholder) continue; MenuDiskItem *it = static_cast(w); if (udi == it->deviceUdi()) { item = it; break; } } if (item != nullptr) { layout()->removeWidget(item); item->deleteLater(); --mDisplayCount; if (mDisplayCount == 0) mPlaceholder->show(); } } void Popup::showEvent(QShowEvent *event) { mPlaceholder->setVisible(mDisplayCount == 0); realign(); setFocus(); activateWindow(); QWidget::showEvent(event); emit visibilityChanged(true); } void Popup::hideEvent(QHideEvent *event) { QWidget::hideEvent(event); emit visibilityChanged(false); } void Popup::addItem(Solid::Device device) { MenuDiskItem *item = new MenuDiskItem(device, this); connect(item, &MenuDiskItem::invalid, this, &Popup::onDeviceRemoved); item->setVisible(true); layout()->addWidget(item); mDisplayCount++; if (mDisplayCount != 0) mPlaceholder->hide(); if (isVisible()) realign(); } void Popup::realign() { adjustSize(); setGeometry(mPlugin->calculatePopupWindowPos(sizeHint())); } lxqt-panel-0.10.0/plugin-mount/popup.h000066400000000000000000000034261261500472700176400ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011-2013 Razor team * Authors: * Petr Vanek * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQT_PLUGIN_MOUNT_POPUP_H #define LXQT_PLUGIN_MOUNT_POPUP_H #include "menudiskitem.h" #include #include #include class ILXQtPanelPlugin; class Popup: public QDialog { Q_OBJECT public: explicit Popup(ILXQtPanelPlugin * plugin, QWidget* parent = 0); void realign(); public slots: void showHide(); private slots: void onDeviceAdded(QString const & udi); void onDeviceRemoved(QString const & udi); signals: void visibilityChanged(bool visible); protected: void showEvent(QShowEvent *event); void hideEvent(QHideEvent *event); private: ILXQtPanelPlugin * mPlugin; QLabel *mPlaceholder; int mDisplayCount; void addItem(Solid::Device device); }; #endif // POPUP_H lxqt-panel-0.10.0/plugin-mount/resources/000077500000000000000000000000001261500472700203315ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-mount/resources/mount.desktop.in000066400000000000000000000003161261500472700234730ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. Icon=drive-removable-media #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-mount/translations/000077500000000000000000000000001261500472700210405ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-mount/translations/mount.ts000066400000000000000000000064411261500472700225570ustar00rootroot00000000000000 Button Removable media/devices manager Configuration Removable Media Settings Behaviour When a device is connected : Popup menu Show info Do nothing DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. The device <b><nobr>"%1"</nobr></b> is removed. Removable media/devices manager MenuDiskItem Mounting of <b><nobr>"%1"</nobr></b> failed: %2 Removable media/devices manager Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_ar.desktop000066400000000000000000000005431261500472700242610ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[ar]=معالج الوسائط القابلة للفصل (يو إس بي و أقراص مدمجة...) Name[ar]=الوسائط القابلة للفصل lxqt-panel-0.10.0/plugin-mount/translations/mount_ar.ts000066400000000000000000000117521261500472700232420ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. الجهاز <b><nobr>"%1"</b> موصول. The device <b><nobr>"%1"</nobr></b> is removed. الجهاز <b><nobr>"%1"</b> مفصول. Removable media/devices manager مدير الوسائط واﻷقراص القابلة للفصل LXQtMountConfiguration LXQt Removable media manager settings إعدادات مدير ريزر للوسائط القابلة للفصل Removable Media Settings Behaviour السلوك When a device is connected عند وصل الجهاز Popup menu القائمة اﻵنيَّة Show info إظهار المعلومات Do nothing عدم القيام بأيِّ شيء MenuDiskItem Click to access this device from other applications. اضغط للوصول إلى هذا الجهاز من تطبيقاتٍ أخرى. Click to eject this disc. اضغط ﻹخراج هذا القرص. Removable media/devices manager مدير الوسائط واﻷقراص القابلة للفصل Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager مدير الوسائط واﻷقراص القابلة للفصل The device <b><nobr>"%1"</nobr></b> is connected. الجهاز <b><nobr>"%1"</b> موصول. The device <b><nobr>"%1"</nobr></b> is removed. الجهاز <b><nobr>"%1"</b> مفصول. No devices Available. ﻻ توجد أجهزة. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_cs.desktop000066400000000000000000000004471261500472700242670ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[cs]=Správa odstranitelných zařízení (USB, CD, DVD, ...) Name[cs]=Správce zařízení lxqt-panel-0.10.0/plugin-mount/translations/mount_cs.ts000066400000000000000000000116551261500472700232470ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Zařízení <b><nobr>"%1"</nobr></b> je zapojeno. The device <b><nobr>"%1"</nobr></b> is removed. Zařízení <b><nobr>"%1"</nobr></b> je odstraněno. Removable media/devices manager Správce odstranitelných nosičů/zařízení LXQtMountConfiguration LXQt Removable media manager settings Nastavení správce odstranitelných zařízení Removable Media Settings Behaviour Chování When a device is connected Když je zařízení zapojeno Popup menu Ukázat vyskakovací nabídku Show info Ukázat informace Do nothing Nedělat nic MenuDiskItem Click to access this device from other applications. Klepněte pro přistoupení k tomuto zařízení z jiných aplikací. Click to eject this disc. Klepněte pro vysunutí tohoto disku. Removable media/devices manager Správce odstranitelných nosičů/zařízení Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Správce odstranitelných nosičů/zařízení The device <b><nobr>"%1"</nobr></b> is connected. Zařízení <b><nobr>"%1"</nobr></b> je zapojeno. The device <b><nobr>"%1"</nobr></b> is removed. Zařízení <b><nobr>"%1"</nobr></b> je odstraněno. No devices Available. Nejsou dostupná žádná zařízení. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_cs_CZ.desktop000066400000000000000000000004571261500472700246640ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[cs_CZ]=Zacházení s odstranitelnými médii (USB, CD, DVD, ...) Name[cs_CZ]=Odstranitelná média lxqt-panel-0.10.0/plugin-mount/translations/mount_cs_CZ.ts000066400000000000000000000116601261500472700236370ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Zařízení <b><nobr>"%1"</nobr></b> je zapojeno. The device <b><nobr>"%1"</nobr></b> is removed. Zařízení <b><nobr>"%1"</nobr></b> je odstraněno. Removable media/devices manager Správce odstranitelných nosičů/zařízení LXQtMountConfiguration LXQt Removable media manager settings Nastavení správce odstranitelných zařízení Removable Media Settings Behaviour Chování When a device is connected Když je zařízení zapojeno Popup menu Ukázat vyskakovací nabídku Show info Ukázat informace Do nothing Nedělat nic MenuDiskItem Click to access this device from other applications. Klepněte pro přistoupení k tomuto zařízení z jiných aplikací. Click to eject this disc. Klepněte pro vysunutí tohoto disku. Removable media/devices manager Správce odstranitelných nosičů/zařízení Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Správce odstranitelných nosičů/zařízení The device <b><nobr>"%1"</nobr></b> is connected. Zařízení <b><nobr>"%1"</nobr></b> je zapojeno. The device <b><nobr>"%1"</nobr></b> is removed. Zařízení <b><nobr>"%1"</nobr></b> je odstraněno. No devices Available. Nejsou dostupná žádná zařízení. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_da.desktop000066400000000000000000000004501261500472700242400ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[da]=Håndtering af flytbare enheder og medier (USB, CD, DVD, ...) Name[da]=Flytbare enheder lxqt-panel-0.10.0/plugin-mount/translations/mount_da.ts000066400000000000000000000114341261500472700232210ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Enheden <b><nobr>"%1"</nobr></b> er forbundet. The device <b><nobr>"%1"</nobr></b> is removed. Enheden <b><nobr>"%1"</nobr></b> er fjernet. Removable media/devices manager Håndtering af medier/enheder LXQtMountConfiguration LXQt Removable media manager settings LXQt Indstillinger for flytbare medier Removable Media Settings Behaviour Opførsel When a device is connected Når en enhed forbinder Popup menu Pop op-menu Show info Vis information Do nothing Gør intet MenuDiskItem Click to access this device from other applications. Klik for at tilgå denne enhed fra andre programmer. Click to eject this disc. Klik for at skubbe disken ud. Removable media/devices manager Håndtering af medier/enheder Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Håndtering af medier/enheder The device <b><nobr>"%1"</nobr></b> is connected. Enheden <b><nobr>"%1"</nobr></b> er forbundet. The device <b><nobr>"%1"</nobr></b> is removed. Enheden <b><nobr>"%1"</nobr></b> er fjernet. No devices Available. Ingen tilgængelige enheder. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_da_DK.desktop000066400000000000000000000004441261500472700246210ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[da_DK]=Håndtering af flytbare enheder (USB, CD, DVD, ...) Name[da_DK]=Flytbare enheder lxqt-panel-0.10.0/plugin-mount/translations/mount_da_DK.ts000066400000000000000000000114141261500472700235750ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Enheden <b><nobr>"%1"</nobr></b> er forbundet. The device <b><nobr>"%1"</nobr></b> is removed. Enheden <b><nobr>"%1"</nobr></b> er fjernet. Removable media/devices manager Håndtering af flytbare medier LXQtMountConfiguration LXQt Removable media manager settings Indstillinger til håndtering af flytbare enheder Removable Media Settings Behaviour Adfærd When a device is connected Når en enhed tilsluttes Popup menu Popup menu Show info Vis info Do nothing Gør ingenting MenuDiskItem Click to access this device from other applications. Klik for at give adgang fra andre programmer. Click to eject this disc. Skub ud. Removable media/devices manager Håndtering af flytbare medier Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Håndtering af flytbare medier The device <b><nobr>"%1"</nobr></b> is connected. Enheden <b><nobr>"%1"</nobr></b> er forbundet. The device <b><nobr>"%1"</nobr></b> is removed. Enheden <b><nobr>"%1"</nobr></b> er fjernet. No devices Available. Ingen enheder tilgængelige. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_de.desktop000066400000000000000000000001331261500472700242420ustar00rootroot00000000000000Name[de]=Wechseldatenträger Comment[de]=Wechseldatenträgerverwaltung (USB, CD, DVD, ...) lxqt-panel-0.10.0/plugin-mount/translations/mount_de.ts000066400000000000000000000072301261500472700232240ustar00rootroot00000000000000 Button Removable media/devices manager Entfernbare Medien-/Geräteverwaltung Configuration Removable Media Settings Entfernbare Medien - Einstellungen Behaviour Verhalten When a device is connected : Wenn ein Gerät verbunden ist: Popup menu Aufklapp-Menü Show info Informationen anzeigen Do nothing Nichts tun DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Das Gerät <b><nobr>"%1"</nobr></b> wurde verbunden. The device <b><nobr>"%1"</nobr></b> is removed. Das Gerät <b><nobr>"%1"</nobr></b> wurde entfernt. Removable media/devices manager Entfernbare Medien-/Geräteverwaltung MenuDiskItem Mounting of <b><nobr>"%1"</nobr></b> failed: %2 Das Einbinden von <b><nobr>"%1"</nobr></b> ist fehlgeschlagen: %2 Removable media/devices manager Entfernbare Medien-/Geräteverwaltung Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Das Lösen von <strong><nobr>"%1"</nobr></strong> ist fehlgeschlagen: %2 Popup No devices are available Keine Geräte verfügbar lxqt-panel-0.10.0/plugin-mount/translations/mount_el.desktop000066400000000000000000000002411261500472700242520ustar00rootroot00000000000000Name[el]=Αφαιρούμενα μέσα Comment[el]=Εύκολη προσάρτηση και αποπροσάρτηση USB και οπτικών δίσκων. lxqt-panel-0.10.0/plugin-mount/translations/mount_el.ts000066400000000000000000000126561261500472700232440ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Συνδέθηκε η συσκευή <b><nobr>"%1"</nobr></b>. The device <b><nobr>"%1"</nobr></b> is removed. Αφαιρέθηκε η συσκευή <b><nobr>"%1"</nobr></b>. Removable media/devices manager Διαχειριστής αφαιρούμενων μέσων/συσκευών LXQtMountConfiguration LXQt Removable media manager settings Ρυθμίσεις διαχειριστή αφαιρούμενων μέσων LXQt Removable Media Settings Ρυθμίσεις αφαιρούμενων μέσων Behaviour Συμπεριφορά When a device is connected Όταν μια συσκευή συνδέεται Popup menu Αναδυόμενο μενού Show info Εμφάνιση πληροφοριών Do nothing Καμία ενέργεια MenuDiskItem Click to access this device from other applications. Κλίκ για πρόσβαση σε αυτή τη συσκευή από άλλες εφαρμογές. Click to eject this disc. Κλίκ για εξαγωγή αυτού του δίσκου. Removable media/devices manager Διαχειριστής αφαιρούμενων μέσων/συσκευών Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Η προσάρτηση του <strong><nobr>"%1"</nobr></strong> απέτυχε: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Η αποπροσάρτηση του <strong><nobr>"%1"</nobr></strong> απέτυχε: %2 MountButton Removable media/devices manager Διαχειριστής αφαιρούμενων μέσων/συσκευών The device <b><nobr>"%1"</nobr></b> is connected. Συνδέθηκε η συσκευή <b><nobr>"%1"</nobr></b>. The device <b><nobr>"%1"</nobr></b> is removed. Αφαιρέθηκε η συσκευή <b><nobr>"%1"</nobr></b>. No devices Available. Καμία διαθέσιμη συσκευή. Popup No devices are available Καμία διαθέσιμη συσκευή lxqt-panel-0.10.0/plugin-mount/translations/mount_eo.desktop000066400000000000000000000004441261500472700242620ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[eo]=Traktilo de demeteblaj aparatoj (USB, KD, DVD, ...) Name[eo]=Demetebla datumportilo lxqt-panel-0.10.0/plugin-mount/translations/mount_eo.ts000066400000000000000000000115531261500472700232420ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. La aparato <b><nobr>"%1"</nobr></b> estas konektita. The device <b><nobr>"%1"</nobr></b> is removed. La aparato <b><nobr>"%1"</nobr></b> estas demetita. Removable media/devices manager Mastrumilo de demeteblaj aparatoj LXQtMountConfiguration LXQt Removable media manager settings Agordoj de la mastrumilo de dementeblaj aparatoj de LXQt Removable Media Settings Behaviour Konduto When a device is connected Kiam aparato estas konektita Popup menu Ŝprucfenestra menuo Show info Montri informojn Do nothing Fari nenion MenuDiskItem Click to access this device from other applications. Alklaku por atingi al ĉi tiu aparato el aliaj aplikaĵoj. Click to eject this disc. Alklaku por elĵeti ĉi tiun diskon. Removable media/devices manager Mastrumilo de demeteblaj aparatoj Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Mastrumilo de demeteblaj aparatoj The device <b><nobr>"%1"</nobr></b> is connected. La aparato <b><nobr>"%1"</nobr></b> estas konektita. The device <b><nobr>"%1"</nobr></b> is removed. La aparato <b><nobr>"%1"</nobr></b> estas demetita. No devices Available. Neniu disponebla aparato. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_es.desktop000066400000000000000000000004561261500472700242710ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[es]=Manejador de dispositivos desmontables (USB, CD, DVD, ...) Name[es]=Dispositivos desmontables lxqt-panel-0.10.0/plugin-mount/translations/mount_es.ts000066400000000000000000000116461261500472700232510ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Se conectó el dispositivo <b><nobr>"%1"</nobr></b>. The device <b><nobr>"%1"</nobr></b> is removed. Se expulsó el dispositivo <b><nobr>"%1"</nobr></b>. Removable media/devices manager Gestor de medios y dispositivos extraíbles LXQtMountConfiguration LXQt Removable media manager settings Configuración del gestor de medios extraíbles de LXQt Removable Media Settings Behaviour Comportamiento When a device is connected Cuando un dispositivo se conecte Popup menu Menú contextual Show info Mostrar información Do nothing No hacer nada MenuDiskItem Click to access this device from other applications. Haga clic para acceder a este dispositivo desde otras aplicaciones. Click to eject this disc. Haga clic para expulsar este disco. Removable media/devices manager Gestor de medios y dispositivos extraíbles Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Gestor de medios y dispositivos extraíbles The device <b><nobr>"%1"</nobr></b> is connected. Se conectó el dispositivo <b><nobr>"%1"</nobr></b>. The device <b><nobr>"%1"</nobr></b> is removed. Se expulsó el dispositivo <b><nobr>"%1"</nobr></b>. No devices Available. No hay dispositivos disponibles. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_es_UY.ts000066400000000000000000000116461261500472700236660ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. El dispositivo <b><nobr>"%1"</nobr></b> está conectado. The device <b><nobr>"%1"</nobr></b> is removed. El dispositivo <b><nobr>"%1"</nobr></b> fue quitado. Removable media/devices manager Administrador de dispositivos desmontables LXQtMountConfiguration LXQt Removable media manager settings Configuración de dispositivos desmontables LXQt Removable Media Settings Behaviour Comportamiento When a device is connected Cuando un dispositivo es conectado Popup menu Menú emergente Show info Mostrar información Do nothing No hacer nada MenuDiskItem Click to access this device from other applications. Presione para acceder a este dispositivo desde otras aplicaciones. Click to eject this disc. Presione para expulsar este disco. Removable media/devices manager Administrador de dispositivos desmontables Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Administrador de dispositivos desmontables The device <b><nobr>"%1"</nobr></b> is connected. El dispositivo <b><nobr>"%1"</nobr></b> está conectado. The device <b><nobr>"%1"</nobr></b> is removed. El dispositivo <b><nobr>"%1"</nobr></b> fue quitado. No devices Available. No hay dispositivos disponibles. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_es_VE.desktop000066400000000000000000000004451261500472700246610ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[es_VE]=Manejador de dispositivos removibles (USB, DVD, CAM, ..) Name[es_VE]=Dispositivos lxqt-panel-0.10.0/plugin-mount/translations/mount_es_VE.ts000066400000000000000000000116411261500472700236360ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. El dispositivo <b><nobr>"%1"</nobr></b> está conectado. The device <b><nobr>"%1"</nobr></b> is removed. El dispositivo <b><nobr>"%1"</nobr></b> fue quitado. Removable media/devices manager Administrador de medios y dispositivos LXQtMountConfiguration LXQt Removable media manager settings Configuración de manejador de dispositivos LXQt Removable Media Settings Behaviour Comportamiento When a device is connected Cuando un dispositivo es conectado Popup menu Menú emergente Show info Mostrar información Do nothing No hacer nada MenuDiskItem Click to access this device from other applications. Presione para acceder a este dispositivo desde la palicacion por defecto. Click to eject this disc. Presione para expulsar este disco. Removable media/devices manager Administrador de medios y dispositivos Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Administrador de medios y dispositivos The device <b><nobr>"%1"</nobr></b> is connected. El dispositivo <b><nobr>"%1"</nobr></b> está conectado. The device <b><nobr>"%1"</nobr></b> is removed. El dispositivo <b><nobr>"%1"</nobr></b> fue quitado. No devices Available. No hay dispositivos disponibles. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_eu.desktop000066400000000000000000000004361261500472700242710ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[eu]=Gailu aldagarrien maneiatzailea (USB, CD, DVD, ...) Name[eu]=Gailu aldagarria lxqt-panel-0.10.0/plugin-mount/translations/mount_eu.ts000066400000000000000000000114451261500472700232500ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. <b><nobr>"%1"</nobr></b>gailua konektatuta. The device <b><nobr>"%1"</nobr></b> is removed. <b><nobr>"%1"</nobr></b>gailua kenduta. Removable media/devices manager Eduki/gailu aldagarrien kudeatzailea LXQtMountConfiguration LXQt Removable media manager settings LXQt gailu aldagarrien kudeatzailearen ezarpenak Removable Media Settings Behaviour Portaera When a device is connected Gailu bat konektatzean Popup menu Laster-menua Show info Erakutsi informazioa Do nothing Ez egin ezer MenuDiskItem Click to access this device from other applications. Klikatu gailu hau beste aplikazioetatik atzitzeko. Click to eject this disc. Klikatu diskoa egozteko. Removable media/devices manager Eduki/gailu aldagarrien kudeatzailea Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Eduki/gailu aldagarrien kudeatzailea The device <b><nobr>"%1"</nobr></b> is connected. <b><nobr>"%1"</nobr></b>gailua konektatuta. The device <b><nobr>"%1"</nobr></b> is removed. <b><nobr>"%1"</nobr></b>gailua kenduta. No devices Available. Gailurik ez erabilgarri. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_fi.desktop000066400000000000000000000004771261500472700242630ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[fi]=Irrotettavien laitteiden ja medioiden käsittelijä (USB, CD, DVD...) Name[fi]=Irrotettavat laitteet ja mediat lxqt-panel-0.10.0/plugin-mount/translations/mount_fi.ts000066400000000000000000000115341261500472700232340ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Laite <b><nobr>"%1"</nobr></b> on liitetty. The device <b><nobr>"%1"</nobr></b> is removed. Laite <b><nobr>"%1"</nobr></b> on irrotettu. Removable media/devices manager Irrotettavien laitteiden ja levyjen hallinta LXQtMountConfiguration LXQt Removable media manager settings LXQtin irrotettavien laitteiden asetukset Removable Media Settings Behaviour Toiminta When a device is connected Kun laite liitetään Popup menu Näytä valikko Show info Näytä tiedot Do nothing Älä tee mitään MenuDiskItem Click to access this device from other applications. Napsauta käyttääksesi tätä laitetta muilla sovelluksilla. Click to eject this disc. Napsauta poistaaksesi tämän levyn. Removable media/devices manager Irrotettavien laitteiden ja levyjen hallinta Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Irrotettavien laitteiden ja levyjen hallinta The device <b><nobr>"%1"</nobr></b> is connected. Laite <b><nobr>"%1"</nobr></b> on liitetty. The device <b><nobr>"%1"</nobr></b> is removed. Laite <b><nobr>"%1"</nobr></b> on irrotettu. No devices Available. Ei laitteita saatavilla. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_fr_FR.desktop000066400000000000000000000004451261500472700246560ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[fr_FR]=Gestionnaire de médias amovibles (USB, CD, DVD, ...) Name[fr_FR]=Média amovible lxqt-panel-0.10.0/plugin-mount/translations/mount_fr_FR.ts000066400000000000000000000117241261500472700236350ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Le périphérique <b><nobr>"%1"</nobr></b>est connecté. The device <b><nobr>"%1"</nobr></b> is removed. Le périphérique <b><nobr>"%1"</nobr></b> a été retiré. Removable media/devices manager Gestionnaire de médias/périphériques amovibles LXQtMountConfiguration LXQt Removable media manager settings Paramètres du gestionnaire de médias amovibles Removable Media Settings Behaviour Comportement When a device is connected Quand un périphérique est connecté Popup menu Menu pop-up Show info Montrer les informations Do nothing Ne rien faire MenuDiskItem Click to access this device from other applications. Cliquez pour accéder à ce périphérique depuis d'autres applications. Click to eject this disc. Cliquez pour éjecter ce disque. Removable media/devices manager Gestionnaire de médias/périphériques amovibles Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Gestionnaire de médias/périphériques amovibles The device <b><nobr>"%1"</nobr></b> is connected. Le périphérique <b><nobr>"%1"</nobr></b>est connecté. The device <b><nobr>"%1"</nobr></b> is removed. Le périphérique <b><nobr>"%1"</nobr></b> a été retiré. No devices Available. Aucun périphérique disponible. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_hr.ts000066400000000000000000000075111261500472700232470ustar00rootroot00000000000000 Button Removable media/devices manager Upravitelj uklonjivim medijima/uređajima Configuration Removable Media Settings Postavke uklonjivih medija Behaviour Ponašanje When a device is connected : Popup menu Show info Pokaži info Do nothing Ne čini ništa DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Uređaj <b><nobr>"%1"</nobr></b> je spojen. The device <b><nobr>"%1"</nobr></b> is removed. Uređaj <b><nobr>"%1"</nobr></b> je uklonjen. Removable media/devices manager Upravitelj uklonjivim medijima/uređajima MenuDiskItem Mounting of <b><nobr>"%1"</nobr></b> failed: %2 Montiranje <b><nobr>"%1"</nobr></b> nije uspjelo: %2 Removable media/devices manager Upravitelj uklonjivim medijima/uređajima Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Odmontiranje <strong><nobr>"%1"</nobr></strong> nije uspjelo: %2 Popup No devices are available Nije dostupan nijedan uređaj lxqt-panel-0.10.0/plugin-mount/translations/mount_hu.desktop000066400000000000000000000004361261500472700242740ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[hu]=Cserélhetőeszköz-kezelő (USB, CD, DVD, …) Name[hu]=Cserélhető eszköz lxqt-panel-0.10.0/plugin-mount/translations/mount_hu.ts000066400000000000000000000115401261500472700232470ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. A(z) <b><nobr>„%1”</nobr></b> eszköz csatlakoztatva. The device <b><nobr>"%1"</nobr></b> is removed. A(z) <b><nobr>„%1”</nobr></b> eszköz eltávolítva. Removable media/devices manager Cserélhetőeszköz-kezelő LXQtMountConfiguration LXQt Removable media manager settings A LXQt cserélhetőeszköz-kezelő beállításai Removable Media Settings Cserélhető eszközbeállítás Behaviour Működés When a device is connected Ha az eszköz csatlakoztatva van Popup menu Felugró menü Show info Információ megjelenítése Do nothing Ne tegyen semmit MenuDiskItem Click to access this device from other applications. Kattintson az eszköz más alkalmazásokból való eléréséhez. Click to eject this disc. Kattintson a lemez kiadásához. Removable media/devices manager Cserélhetőeszköz-kezelő Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 A <strong><nobr>"%1"</nobr></strong> csatolása sikertelen: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 A <strong><nobr>"%1"</nobr></strong> lecsatolása sikertelen: %2 MountButton Removable media/devices manager Cserélhetőeszköz-kezelő The device <b><nobr>"%1"</nobr></b> is connected. A(z) <b><nobr>„%1”</nobr></b> eszköz csatlakoztatva. The device <b><nobr>"%1"</nobr></b> is removed. A(z) <b><nobr>„%1”</nobr></b> eszköz eltávolítva. No devices Available. Nem érhetők el eszközök. Popup No devices are available Nincs elérhető eszköz lxqt-panel-0.10.0/plugin-mount/translations/mount_hu_HU.ts000066400000000000000000000115431261500472700236460ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. A(z) <b><nobr>„%1”</nobr></b> eszköz csatlakoztatva. The device <b><nobr>"%1"</nobr></b> is removed. A(z) <b><nobr>„%1”</nobr></b> eszköz eltávolítva. Removable media/devices manager Cserélhetőeszköz-kezelő LXQtMountConfiguration LXQt Removable media manager settings A LXQt cserélhetőeszköz-kezelő beállításai Removable Media Settings Cserélhető eszközbeállítás Behaviour Működés When a device is connected Ha az eszköz csatlakoztatva van Popup menu Felugró menü Show info Információ megjelenítése Do nothing Ne tegyen semmit MenuDiskItem Click to access this device from other applications. Kattintson az eszköz más alkalmazásokból való eléréséhez. Click to eject this disc. Kattintson a lemez kiadásához. Removable media/devices manager Cserélhetőeszköz-kezelő Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 A <strong><nobr>"%1"</nobr></strong> csatolása sikertelen: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 A <strong><nobr>"%1"</nobr></strong> lecsatolása sikertelen: %2 MountButton Removable media/devices manager Cserélhetőeszköz-kezelő The device <b><nobr>"%1"</nobr></b> is connected. A(z) <b><nobr>„%1”</nobr></b> eszköz csatlakoztatva. The device <b><nobr>"%1"</nobr></b> is removed. A(z) <b><nobr>„%1”</nobr></b> eszköz eltávolítva. No devices Available. Nem érhetők el eszközök. Popup No devices are available Nincs elérhető eszköz lxqt-panel-0.10.0/plugin-mount/translations/mount_ia.desktop000066400000000000000000000002701261500472700242450ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Removable media handler (USB, CD, DVD, ...) #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-mount/translations/mount_ia.ts000066400000000000000000000065601261500472700232320ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. The device <b><nobr>"%1"</nobr></b> is removed. Removable media/devices manager LXQtMountConfiguration Removable Media Settings Behaviour When a device is connected Popup menu Show info Do nothing MenuDiskItem Removable media/devices manager Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_id_ID.desktop000066400000000000000000000002701261500472700246240ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Removable media handler (USB, CD, DVD, ...) #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-mount/translations/mount_id_ID.ts000066400000000000000000000073521261500472700236110ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. The device <b><nobr>"%1"</nobr></b> is removed. Removable media/devices manager LXQtMountConfiguration Removable Media Settings Behaviour When a device is connected Popup menu Show info Do nothing MenuDiskItem Click to access this device from other applications. Klik untuk mengakses device ini dari aplikasi lain. Click to eject this disc. Klik untuk mengeluarkan disk ini. Removable media/devices manager Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_it.desktop000066400000000000000000000001431261500472700242670ustar00rootroot00000000000000Name[it]=Dispositivi rimovibili Comment[it]=Gestore dei dispositivi rimovibili (USB, CD, DVD, ...) lxqt-panel-0.10.0/plugin-mount/translations/mount_it.ts000066400000000000000000000120001261500472700232370ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Il dispositivo <b><nobr>"%1"</nobr></b> è connesso. The device <b><nobr>"%1"</nobr></b> is removed. Il dispositivo <b><nobr>"%1"</nobr></b> è stato rimosso. Removable media/devices manager Gestore dei dispositivi rimovibili LXQtMountConfiguration LXQt Removable media manager settings Impostazioni del gestore dei dispositivi rimovibili di LXQt Removable Media Settings Impostazioni dispositivi rimovibili Behaviour Comportamento When a device is connected Quando un dispositivo è connesso Popup menu Menu a comparsa Show info Mostra informazioni Do nothing Non fare nulla MenuDiskItem Click to access this device from other applications. Fai clic per accedere al dispositivo da altre applicazioni. Click to eject this disc. Fai clic per espellere il disco. Removable media/devices manager Gestore dei dispositivi rimovibili Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Montaggio di <strong><nobr>"%1"</nobr></strong> non riuscito: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Smontaggio di <strong><nobr>"%1"</nobr></strong> non riuscito: %2 MountButton Removable media/devices manager Gestore dei dispositivi rimovibili The device <b><nobr>"%1"</nobr></b> is connected. Il dispositivo <b><nobr>"%1"</nobr></b> è connesso. The device <b><nobr>"%1"</nobr></b> is removed. Il dispositivo <b><nobr>"%1"</nobr></b> è stato rimosso. No devices Available. Nessun dispositivo disponibile. Popup No devices are available Nessun dispositivo presente lxqt-panel-0.10.0/plugin-mount/translations/mount_ja.desktop000066400000000000000000000005071261500472700242510ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[ja]=USBや光学ドライブのマウントやアンマウントを容易にします Name[ja]=リムーバルメディア lxqt-panel-0.10.0/plugin-mount/translations/mount_ja.ts000066400000000000000000000073001261500472700232240ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. デバイス <b><nobr>"%1"</nobr></b> は接続されました The device <b><nobr>"%1"</nobr></b> is removed. デバイス <b><nobr>"%1"</nobr></b> は接続解除されました Removable media/devices manager リムーバルメディア/デバイスの管理 LXQtMountConfiguration Removable Media Settings リムーバブルメディアの設定 Behaviour 挙動 When a device is connected デバイスが接続されたとき Popup menu メニューをポップアップ Show info 情報を表示 Do nothing 何もしない MenuDiskItem Removable media/devices manager リムーバルメディア/デバイスの管理 Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager リムーバルメディア/デバイスの管理 Popup No devices are available 接続可能なデバイスはありません lxqt-panel-0.10.0/plugin-mount/translations/mount_ko.desktop000066400000000000000000000002701261500472700242650ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Removable media handler (USB, CD, DVD, ...) #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-mount/translations/mount_ko.ts000066400000000000000000000065601261500472700232520ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. The device <b><nobr>"%1"</nobr></b> is removed. Removable media/devices manager LXQtMountConfiguration Removable Media Settings Behaviour When a device is connected Popup menu Show info Do nothing MenuDiskItem Removable media/devices manager Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_lt.desktop000066400000000000000000000004501261500472700242730ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[lt]=Pašalinimų įrenginių tvarkymas (USB, CD, DVD, ...) Name[lt]=Pašalinami įrenginiai lxqt-panel-0.10.0/plugin-mount/translations/mount_lt.ts000066400000000000000000000115471261500472700232610ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Įrenginys <b><nobr>"%1"</nobr></b> prijungtas. The device <b><nobr>"%1"</nobr></b> is removed. Įrenginys <b><nobr>"%1"</nobr></b> pašalintas Removable media/devices manager Pašalinamų įrenginių tvarkytuvė LXQtMountConfiguration LXQt Removable media manager settings LXQt pašalinamų įrenginių tvarkytuvės nuostatos Removable Media Settings Behaviour Elgsena When a device is connected Prijungus įrenginį Popup menu Iškylantis meniu Show info Rodyti informaciją Do nothing Nieko nedaryti MenuDiskItem Click to access this device from other applications. Norėdami šį įrenginį pasiekti kitomis programomis, spragtelėkite. Click to eject this disc. Norėdami išstumti diską, spragtelėkite. Removable media/devices manager Pašalinamų įrenginių tvarkytuvė Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Pašalinamų įrenginių tvarkytuvė The device <b><nobr>"%1"</nobr></b> is connected. Įrenginys <b><nobr>"%1"</nobr></b> prijungtas. The device <b><nobr>"%1"</nobr></b> is removed. Įrenginys <b><nobr>"%1"</nobr></b> pašalintas No devices Available. Įrenginių nėra Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_nl.desktop000066400000000000000000000004371261500472700242720ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[nl]=Verwijderbare media beheerder (USB, CD, DVD, ...) Name[nl]=Verwijderbare media lxqt-panel-0.10.0/plugin-mount/translations/mount_nl.ts000066400000000000000000000116131261500472700232450ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Het apparaat <b><nobr>"%1"</nobr></b> is verbonden. The device <b><nobr>"%1"</nobr></b> is removed. Het apparaat <b><nobr>"%1"</nobr></b> is verwijderd. Removable media/devices manager Beheerder van verwijderbare media/apparaten LXQtMountConfiguration LXQt Removable media manager settings Instellingen voor beheerder van verwijderbare media in LXQt Removable Media Settings Behaviour Gedrag When a device is connected Wanneer een apparaat wordt verbonden Popup menu Opduikmenu Show info Toon informatie Do nothing Niets doen MenuDiskItem Click to access this device from other applications. Klik om dit apparaat te benaderen vanuit andere toepassingen. Click to eject this disc. Klik om deze schijf uit te werpen. Removable media/devices manager Beheerder van verwijderbare media/apparaten Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Beheerder van verwijderbare media/apparaten The device <b><nobr>"%1"</nobr></b> is connected. Het apparaat <b><nobr>"%1"</nobr></b> is verbonden. The device <b><nobr>"%1"</nobr></b> is removed. Het apparaat <b><nobr>"%1"</nobr></b> is verwijderd. No devices Available. Geen apparaten beschikbaar. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_pl.desktop000066400000000000000000000004271261500472700242730ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[pl]=Menedżer urządzeń (USB, CD, DVD, ...) Name[pl]=Menedżer urządzeń lxqt-panel-0.10.0/plugin-mount/translations/mount_pl_PL.desktop000066400000000000000000000004271261500472700246660ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[pl_PL]=Nośniki wymienne (USB, CD, DVD, ...) Name[pl_PL]=Nośniki wymienne lxqt-panel-0.10.0/plugin-mount/translations/mount_pl_PL.ts000066400000000000000000000114611261500472700236430ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Nośnik <b><nobr>"%1"</nobr></b> jest podłączony. The device <b><nobr>"%1"</nobr></b> is removed. Nośnik <b><nobr>"%1"</nobr></b> jest odłączony. Removable media/devices manager Menedżer nośników wymiennych LXQtMountConfiguration LXQt Removable media manager settings Ustawienia menedżera nośników wymiennych Removable Media Settings Ustawienia nośników wymiennych Behaviour Zachowanie When a device is connected Kiedy nośnik jest podłączony Popup menu Pokaż listę Show info Pokaż informacje Do nothing Nic nierób MenuDiskItem Click to access this device from other applications. Kliknij aby uzyskać dostęp do tego nośnika z innych aplikacji. Click to eject this disc. Kliknij aby wysunąć ten dysk. Removable media/devices manager Menedżer nośników wymiennych Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Menedżer nośników wymiennych The device <b><nobr>"%1"</nobr></b> is connected. Nośnik <b><nobr>"%1"</nobr></b> jest podłączony. The device <b><nobr>"%1"</nobr></b> is removed. Nośnik <b><nobr>"%1"</nobr></b> jest odłączony. No devices Available. Brak nośników. Popup No devices are available Brak dostępnych urządzeń lxqt-panel-0.10.0/plugin-mount/translations/mount_pt.desktop000066400000000000000000000004341261500472700243010ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Name[pt]=Discos amovíveis Comment[pt]=Montar e desmontar discos óticos e unidades USB. lxqt-panel-0.10.0/plugin-mount/translations/mount_pt.ts000066400000000000000000000116011261500472700232540ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. O dispositivo <b><nobr>"%1"</nobr></b> está conectado. The device <b><nobr>"%1"</nobr></b> is removed. O dispositivo <b><nobr>"%1"</nobr></b> foi removido. Removable media/devices manager Gestor de discos e unidades amovíveis LXQtMountConfiguration LXQt Removable media manager settings Definições do gestor de unidades e discos amovíveis do LXQt Removable Media Settings Behaviour Comportamento When a device is connected Ao conectar um dispositivo Popup menu Menu Show info Mostrar informações Do nothing Nada fazer MenuDiskItem Click to access this device from other applications. Clique para aceder a este dispositivo a partir de outras aplicações. Click to eject this disc. Clique para ejetar este disco. Removable media/devices manager Gestor de discos e unidades amovíveis Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Gestor de discos e unidades amovíveis The device <b><nobr>"%1"</nobr></b> is connected. O dispositivo <b><nobr>"%1"</nobr></b> está conectado. The device <b><nobr>"%1"</nobr></b> is removed. O dispositivo <b><nobr>"%1"</nobr></b> foi removido. No devices Available. Nenhum dispositivo. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_pt_BR.desktop000066400000000000000000000004461261500472700246670ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[pt_BR]=Manipulador de mídia removível (USB, CD, DVD, ...) Name[pt_BR]=Mídia removível lxqt-panel-0.10.0/plugin-mount/translations/mount_pt_BR.ts000066400000000000000000000117011261500472700236400ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. O dispositivo <b><nobr>"%1"</nobr></br> está conectado. The device <b><nobr>"%1"</nobr></b> is removed. O dispositivo <b><nobr>"%1"</nobr></br> foi removido. Removable media/devices manager Gerenciador de dispositivos/mídias removíveis LXQtMountConfiguration LXQt Removable media manager settings Configurações do gerenciador de mídia removível do LXQt Removable Media Settings Behaviour Comportamento When a device is connected Quando o dispositivo for conectado Popup menu Menu de contexto Show info Exibir informações Do nothing Não fazer nada MenuDiskItem Click to access this device from other applications. Clique para acessar este dispositivo a partir de outros aplicativos. Click to eject this disc. Clique para ejetar este disco. Removable media/devices manager Gerenciador de dispositivos/mídias removíveis Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Gerenciador de dispositivos/mídias removíveis The device <b><nobr>"%1"</nobr></b> is connected. O dispositivo <b><nobr>"%1"</nobr></br> está conectado. The device <b><nobr>"%1"</nobr></b> is removed. O dispositivo <b><nobr>"%1"</nobr></br> foi removido. No devices Available. Nenhum dispositivo disponível. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_ro_RO.desktop000066400000000000000000000004641261500472700247010ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[ro_RO]=Administrator de dispozitive detașabile (USB, CD, DVD, ...) Name[ro_RO]=Dispozitive detașabile lxqt-panel-0.10.0/plugin-mount/translations/mount_ro_RO.ts000066400000000000000000000116441261500472700236600ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Dispozitivul <b><nobr>"%1"</nobr></b> a fost conectat. The device <b><nobr>"%1"</nobr></b> is removed. Dispozitivul <b><nobr>"%1"</nobr></b> a fost eliminat. Removable media/devices manager Administrator medii/dispozitive detașabile LXQtMountConfiguration LXQt Removable media manager settings Configurație Administrator medii detașabile Removable Media Settings Behaviour Comportament When a device is connected Când este conectat un dispozitiv Popup menu Meniu popup Show info Afișează informații Do nothing Nicio acțiune MenuDiskItem Click to access this device from other applications. Apăsați pentru a accesa acest dispozitiv din alte aplicații. Click to eject this disc. Clic pentru a scoate acest disc. Removable media/devices manager Administrator medii/dispozitive detașabile Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Administrator medii/dispozitive detașabile The device <b><nobr>"%1"</nobr></b> is connected. Dispozitivul <b><nobr>"%1"</nobr></b> a fost conectat. The device <b><nobr>"%1"</nobr></b> is removed. Dispozitivul <b><nobr>"%1"</nobr></b> a fost eliminat. No devices Available. Nu este disponibil nici un dispozitiv. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_ru.desktop000066400000000000000000000005571261500472700243120ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[ru_RU]=Простое подключение и отключение USB и оптических приводов. Name[ru_RU]=Съёмные устройства lxqt-panel-0.10.0/plugin-mount/translations/mount_ru.ts000066400000000000000000000073611261500472700232670ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Устройство <b><nobr>«%1»</nobr></b> подключено. The device <b><nobr>"%1"</nobr></b> is removed. Устройство <b><nobr>«%1»</nobr></b> отключено. Removable media/devices manager Диспетчер отключаемых медиа/устройств LXQtMountConfiguration Removable Media Settings Настройки съёмных устройств Behaviour Поведение When a device is connected Когда устройство подключено Popup menu Всплывающее меню Show info Показать информацию Do nothing Ничего не делать MenuDiskItem Removable media/devices manager Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Диспетчер съёмных медиа/устройств Popup No devices are available Нет доступных устройств lxqt-panel-0.10.0/plugin-mount/translations/mount_ru_RU.desktop000066400000000000000000000005571261500472700247200ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[ru_RU]=Простое подключение и отключение USB и оптических приводов. Name[ru_RU]=Съёмные устройства lxqt-panel-0.10.0/plugin-mount/translations/mount_ru_RU.ts000066400000000000000000000073641261500472700237000ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Устройство <b><nobr>«%1»</nobr></b> подключено. The device <b><nobr>"%1"</nobr></b> is removed. Устройство <b><nobr>«%1»</nobr></b> отключено. Removable media/devices manager Диспетчер отключаемых медиа/устройств LXQtMountConfiguration Removable Media Settings Настройки съёмных устройств Behaviour Поведение When a device is connected Когда устройство подключено Popup menu Всплывающее меню Show info Показать информацию Do nothing Ничего не делать MenuDiskItem Removable media/devices manager Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Диспетчер съёмных медиа/устройств Popup No devices are available Нет доступных устройств lxqt-panel-0.10.0/plugin-mount/translations/mount_sk.desktop000066400000000000000000000004351261500472700242740ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[sk]=Práca s prenosnými médiami (USB, CD, DVD, ...) Name[sk]=Prenosné médiá lxqt-panel-0.10.0/plugin-mount/translations/mount_sk_SK.ts000066400000000000000000000116021261500472700236440ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Zariadenie <b><nobr>„%1“</nobr></b> je zapojené. The device <b><nobr>"%1"</nobr></b> is removed. Zariadenie <b><nobr>„%1“</nobr></b> je odstránené. Removable media/devices manager Správca prenosných médií a zariadení LXQtMountConfiguration LXQt Removable media manager settings Nastavenia správcu prenosných médií prostredia LXQt Removable Media Settings Behaviour Správanie When a device is connected Pri pripojení zariadenia Popup menu Zobraziť menu Show info Zobraziť informácie Do nothing Nerobiť nič MenuDiskItem Click to access this device from other applications. Kliknutím môžete pristupovať na toto zariadenie z iných aplikácií. Click to eject this disc. Kliknutím vysuniete tento disk. Removable media/devices manager Správca prenosných médií a zariadení Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Správca prenosných médií a zariadení The device <b><nobr>"%1"</nobr></b> is connected. Zariadenie <b><nobr>„%1“</nobr></b> je zapojené. The device <b><nobr>"%1"</nobr></b> is removed. Zariadenie <b><nobr>„%1“</nobr></b> je odstránené. No devices Available. Žiadne zariadenia nie sú dostupné. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_sl.desktop000066400000000000000000000004461261500472700242770ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[sl]=Upravljalnik odstranljivih nosilcev (USB, CD, DVD, ...) Name[sl]=Odstranljivi nosilci lxqt-panel-0.10.0/plugin-mount/translations/mount_sl.ts000066400000000000000000000114571261500472700232600ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Naprava <b><nobr>%1</nobr></b> je priključena. The device <b><nobr>"%1"</nobr></b> is removed. Naprava <b><nobr>%1</nobr></b> je odstranjena. Removable media/devices manager Upravljalnik odstranljivih nosilcev/naprav LXQtMountConfiguration LXQt Removable media manager settings Nastavitve upravljalnika odstranljivih nosilcev Removable Media Settings Behaviour Obnašanje When a device is connected Ko se naprava priključi Popup menu Prikaži meni Show info Prikaži podatke Do nothing Ne naredi nič MenuDiskItem Click to access this device from other applications. Kliknite, da omogočite dostop do naprave iz programov. Click to eject this disc. Kliknite za izmet diska. Removable media/devices manager Upravljalnik odstranljivih nosilcev/naprav Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Upravljalnik odstranljivih nosilcev/naprav The device <b><nobr>"%1"</nobr></b> is connected. Naprava <b><nobr>%1</nobr></b> je priključena. The device <b><nobr>"%1"</nobr></b> is removed. Naprava <b><nobr>%1</nobr></b> je odstranjena. No devices Available. Na voljo ni nobene naprave Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_sr.desktop000066400000000000000000000005061261500472700243020ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[sr]=Руковаоц уклоњивим медијима (УСБ, ЦД, ДВД...) Name[sr]=Уклоњиви медији lxqt-panel-0.10.0/plugin-mount/translations/mount_sr@ijekavian.desktop000066400000000000000000000002261261500472700262630ustar00rootroot00000000000000Name[sr@ijekavian]=Уклоњиви медији Comment[sr@ijekavian]=Руковаоц уклоњивим медијима (УСБ, ЦД, ДВД...) lxqt-panel-0.10.0/plugin-mount/translations/mount_sr@ijekavianlatin.desktop000066400000000000000000000001631261500472700273130ustar00rootroot00000000000000Name[sr@ijekavianlatin]=Uklonjivi mediji Comment[sr@ijekavianlatin]=Rukovaoc uklonjivim medijima (USB, CD, DVD...) lxqt-panel-0.10.0/plugin-mount/translations/mount_sr@latin.desktop000066400000000000000000000004451261500472700254340ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[sr@latin]=Rukovaoc uklonjivim medijima (USB, CD, DVD...) Name[sr@latin]=Uklonjivi mediji lxqt-panel-0.10.0/plugin-mount/translations/mount_sr@latin.ts000066400000000000000000000065661261500472700244230ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. The device <b><nobr>"%1"</nobr></b> is removed. Removable media/devices manager LXQtMountConfiguration Removable Media Settings Behaviour When a device is connected Popup menu Show info Do nothing MenuDiskItem Removable media/devices manager Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_sr_BA.ts000066400000000000000000000121231261500472700236170ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Уређај <b><nobr>„%1“</nobr></b> је прикључен. The device <b><nobr>"%1"</nobr></b> is removed. Уређај <b><nobr>„%1“</nobr></b> је уклоњен. Removable media/devices manager Менаџер уклоњивих медија/уређаја LXQtMountConfiguration LXQt Removable media manager settings Подешавање менаџера уклоњивих медија Removable Media Settings Behaviour Понашање When a device is connected Кад је уређај прикључен Popup menu прикажи мени Show info прикажи инфо Do nothing не ради ништа MenuDiskItem Click to access this device from other applications. Кликните да приступате овом уређају из других програма. Click to eject this disc. Кликните да избаците диск. Removable media/devices manager Менаџер уклоњивих медија/уређаја Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Менаџер уклоњивих медија/уређаја The device <b><nobr>"%1"</nobr></b> is connected. Уређај <b><nobr>„%1“</nobr></b> је прикључен. The device <b><nobr>"%1"</nobr></b> is removed. Уређај <b><nobr>„%1“</nobr></b> је уклоњен. No devices Available. Нема доступних уређаја. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_sr_RS.ts000066400000000000000000000121231261500472700236610ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Уређај <b><nobr>„%1“</nobr></b> је прикључен. The device <b><nobr>"%1"</nobr></b> is removed. Уређај <b><nobr>„%1“</nobr></b> је уклоњен. Removable media/devices manager Менаџер уклоњивих медија/уређаја LXQtMountConfiguration LXQt Removable media manager settings Подешавање менаџера уклоњивих медија Removable Media Settings Behaviour Понашање When a device is connected Кад је уређај прикључен Popup menu прикажи мени Show info прикажи инфо Do nothing не ради ништа MenuDiskItem Click to access this device from other applications. Кликните да приступате овом уређају из других програма. Click to eject this disc. Кликните да избаците диск. Removable media/devices manager Менаџер уклоњивих медија/уређаја Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Менаџер уклоњивих медија/уређаја The device <b><nobr>"%1"</nobr></b> is connected. Уређај <b><nobr>„%1“</nobr></b> је прикључен. The device <b><nobr>"%1"</nobr></b> is removed. Уређај <b><nobr>„%1“</nobr></b> је уклоњен. No devices Available. Нема доступних уређаја. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_th_TH.desktop000066400000000000000000000006401261500472700246630ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[th_TH]=ตัวจัดการสื่อที่สามารถถอดเสียบได้ (USB, CD, DVD, ...) Name[th_TH]=สื่อที่สามารถถอดเสียบได้ lxqt-panel-0.10.0/plugin-mount/translations/mount_th_TH.ts000066400000000000000000000127631261500472700236510ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. อุปกรณ์ <b><nobr>"%1"</nobr></b> ถูกเชื่อมต่อแล้ว The device <b><nobr>"%1"</nobr></b> is removed. อุปกรณ์ <b><nobr>"%1"</nobr></b> ถูกถอดออกแล้ว Removable media/devices manager ตัดจัดการสื่อ/อุปกรณ์แบบถอดเสียบ LXQtMountConfiguration LXQt Removable media manager settings ค่าตั้งตัวจัดการสื่อแบบถอดเสียบได้ LXQt Removable Media Settings Behaviour พฤติกรรม When a device is connected เมื่ออุปกรณ์ถูกเชื่อมต่อ Popup menu เมนูผุดขึ้น Show info แสดงข้อมูล Do nothing ไม่ต้องทำอะไร MenuDiskItem Click to access this device from other applications. คลิกเพื่อเข้าใช้อุปกรณ์จากโปรแกรมต่างๆ Click to eject this disc. คลิกเพื่อดันแผ่นดิสก์ออก Removable media/devices manager ตัดจัดการสื่อ/อุปกรณ์แบบถอดเสียบ Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager ตัดจัดการสื่อ/อุปกรณ์แบบถอดเสียบ The device <b><nobr>"%1"</nobr></b> is connected. อุปกรณ์ <b><nobr>"%1"</nobr></b> ถูกเชื่อมต่อแล้ว The device <b><nobr>"%1"</nobr></b> is removed. อุปกรณ์ <b><nobr>"%1"</nobr></b> ถูกถอดออกแล้ว No devices Available. ไม่มีอุปกรณ์ที่ใช้งานได้ Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_tr.desktop000066400000000000000000000004511261500472700243020ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[tr]=Çıkarılabilir aygıt yöneticisi (USB, CD, DVD, ...) Name[tr]=Çıkarılabilir aygıt lxqt-panel-0.10.0/plugin-mount/translations/mount_tr.ts000066400000000000000000000115451261500472700232650ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. <b><nobr>"%1"</nobr></b> aygıtı bağlı. The device <b><nobr>"%1"</nobr></b> is removed. <b><nobr>"%1"</nobr></b> aygıtı çıkarıldı. Removable media/devices manager Çıkarılabilir ortam/aygıt yönetici LXQtMountConfiguration LXQt Removable media manager settings LXQt Çıkarılabilir ortam yönetici ayarları Removable Media Settings Behaviour Davranış When a device is connected Bir aygıt bağlandığında Popup menu Açılır menü Show info Bilgi görüntüle Do nothing Hiç bir şey yapma MenuDiskItem Click to access this device from other applications. Diğer uygulamalardan bu aygıta erişmek için tıklayın Click to eject this disc. Bu diski çıkartmak için tıklayın. Removable media/devices manager Çıkarılabilir ortam/aygıt yönetici Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Çıkarılabilir ortam/aygıt yönetici The device <b><nobr>"%1"</nobr></b> is connected. <b><nobr>"%1"</nobr></b> aygıtı bağlı. The device <b><nobr>"%1"</nobr></b> is removed. <b><nobr>"%1"</nobr></b> aygıtı çıkarıldı. No devices Available. Erişilebilir aygıt yok. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_uk.desktop000066400000000000000000000005071261500472700242760ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[uk]=Легке керування знімними носіями (USB, CD, DVD тощо) Name[uk]=Знімні носії lxqt-panel-0.10.0/plugin-mount/translations/mount_uk.ts000066400000000000000000000121661261500472700232570ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. Пристрій <b><nobr>"%1"</nobr></b> приєднано. The device <b><nobr>"%1"</nobr></b> is removed. Пристрій <b><nobr>"%1"</nobr></b> від’єднано. Removable media/devices manager Керування знімними носіями LXQtMountConfiguration LXQt Removable media manager settings Налаштування знімних носіїв LXQt Removable Media Settings Behaviour Поведінка When a device is connected Коли пристрій приєднано: Popup menu показати спливне меню Show info показати інформацію Do nothing нічого не робити MenuDiskItem Click to access this device from other applications. Натисніть, щоб надати доступ до цього пристрою іншим програмам. Click to eject this disc. Натисніть, щоб витягти диск. Removable media/devices manager Керування знімними носіями Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager Керування знімними носіями The device <b><nobr>"%1"</nobr></b> is connected. Пристрій <b><nobr>"%1"</nobr></b> приєднано. The device <b><nobr>"%1"</nobr></b> is removed. Пристрій <b><nobr>"%1"</nobr></b> від’єднано. No devices Available. Пристрої відсутні. Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_zh_CN.GB2312.desktop000066400000000000000000000002701261500472700254540ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Removable media handler (USB, CD, DVD, ...) #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-mount/translations/mount_zh_CN.desktop000066400000000000000000000004221261500472700246540ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[zh_CN]=移动存储处理(USB, CD, DVD, ...) Name[zh_CN]=移动存储 lxqt-panel-0.10.0/plugin-mount/translations/mount_zh_CN.ts000066400000000000000000000114201261500472700236310ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. 设备 <b><nobr>"%1"</nobr></b> 已连接。 The device <b><nobr>"%1"</nobr></b> is removed. 设备 <b><nobr>"%1"</nobr></b> 已移除。 Removable media/devices manager 可移动存储设备管理器 LXQtMountConfiguration LXQt Removable media manager settings LXQt可移动媒体管理器设置 Removable Media Settings Behaviour 行为 When a device is connected 当一个设备连接时 Popup menu 弹出菜单 Show info 显示信息 Do nothing 什么都不做 MenuDiskItem Click to access this device from other applications. 点击以从其它应用程序访问此设备。 Click to eject this disc. 点击以弹出该存储卷。 Removable media/devices manager 可移动存储设备管理器 Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager 可移动存储设备管理器 The device <b><nobr>"%1"</nobr></b> is connected. 设备 <b><nobr>"%1"</nobr></b> 已连接。 The device <b><nobr>"%1"</nobr></b> is removed. 设备 <b><nobr>"%1"</nobr></b> 已移除。 No devices Available. 没有可用设备。 Popup No devices are available lxqt-panel-0.10.0/plugin-mount/translations/mount_zh_TW.desktop000066400000000000000000000004341261500472700247110ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Removable media Comment=Easy mounting and unmounting of USB and optical drives. #TRANSLATIONS_DIR=../translations # Translations Comment[zh_TW]=可卸除式裝置管理(USB、光碟...) Name[zh_TW]=可卸除式裝置 lxqt-panel-0.10.0/plugin-mount/translations/mount_zh_TW.ts000066400000000000000000000114041261500472700236650ustar00rootroot00000000000000 DeviceActionInfo The device <b><nobr>"%1"</nobr></b> is connected. 裝置 <b><nobr>"%1"</nobr></b> 已連接。 The device <b><nobr>"%1"</nobr></b> is removed. 裝置 <b><nobr>"%1"</nobr></b> 已卸除。 Removable media/devices manager 可卸除式裝置管理員 LXQtMountConfiguration LXQt Removable media manager settings LXQt可卸除式裝置管理員設定 Removable Media Settings Behaviour 行為 When a device is connected 當一個裝置連接時 Popup menu 彈出選單 Show info 顯示訊息 Do nothing 什麼都不做 MenuDiskItem Click to access this device from other applications. 點擊以從其他應用程式讀取此裝置。 Click to eject this disc. 點擊以退出此磁片。 Removable media/devices manager 可卸除式裝置管理員 Mounting of <strong><nobr>"%1"</nobr></strong> failed: %2 Unmounting of <strong><nobr>"%1"</nobr></strong> failed: %2 MountButton Removable media/devices manager 可卸除式裝置管理員 The device <b><nobr>"%1"</nobr></b> is connected. 裝置 <b><nobr>"%1"</nobr></b> 已連接。 The device <b><nobr>"%1"</nobr></b> is removed. 裝置 <b><nobr>"%1"</nobr></b> 已卸除。 No devices Available. 無可用裝置。 Popup No devices are available lxqt-panel-0.10.0/plugin-networkmonitor/000077500000000000000000000000001261500472700202565ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-networkmonitor/CMakeLists.txt000066400000000000000000000006201261500472700230140ustar00rootroot00000000000000set(PLUGIN "networkmonitor") set(HEADERS lxqtnetworkmonitorplugin.h lxqtnetworkmonitor.h lxqtnetworkmonitorconfiguration.h ) set(SOURCES lxqtnetworkmonitorplugin.cpp lxqtnetworkmonitor.cpp lxqtnetworkmonitorconfiguration.cpp ) set(UIS lxqtnetworkmonitorconfiguration.ui ) set(RESOURCES resources.qrc ) set(LIBRARIES ${STATGRAB_LIB}) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-networkmonitor/images/000077500000000000000000000000001261500472700215235ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-modem-error.png000066400000000000000000000017451261500472700255770ustar00rootroot00000000000000PNG  IHDRĴl;sRGBbKGD pHYs  tIME  3SneIDAT8ՕMHg̸ht]lpa׺~JZZFi9z.9PCBԊ@OR(z)%$Hi1$VSSu?ۃut59|[ZFq.'3pp])%Ts/x&+++LOO yChJL$STRs !Tqp]w_]JX-u]AAMc)W*(JdY4t]rU]*( 188)%c)dYHR|>8XbH6\.#DeL&/4Fu}}}Uۋ5BڪMȟmmmB>!jUhllldj/LIJ, @qL0 xmeYI0D<-!fXdnnNhO.c/R tX`h\\\\ T*wes_Ͷi/\ԅUdW$ɞ~Vh8ȯp\W~mJ)?t"ӧ!)1fUGCm238^~jEw*_n75utYpT0͛GOIENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-modem-idle.png000066400000000000000000000011141261500472700253510ustar00rootroot00000000000000PNG  IHDRĴl;IDATxJQNR#uѺj5>B>ElAݹ JLLfnfsZh`6~p߅5EQt:Z"UZKXk1."gggfjU"eeeY{NvMQj+0&DňjxTADc UU8&B( 2Wۛ .-v0 d)A^X~⍥> M;(1]#"?C\1CƹcPj*ϛegI `^n0P73 ("|/M#qJOڍ(^͙&61_wn@HIENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-modem-offline.png000066400000000000000000000012021261500472700260540ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs  tIME 29IDATx풽jA5j-=Bخbծ y.Oϡ& ZɒjfR-1Y% -΅{MRFwY}ّj?f} HIENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-modem-receive.png000066400000000000000000000017251261500472700260660ustar00rootroot00000000000000PNG  IHDRĴl;IDATxՔ_h[U?$u5.Xm>Z'I}++>:8K Q[en`WNAajM:XTZMޛޜCl={8߇J-vwwmD"!q\EeEAe$x\xpX,FYYF6(^Lnt^u;;}CC 3g9['^77Jof[yl6lo3E&̶>AhiFA`nZ, R)XZR),޹e\d̎]bӄpl8σ㰖Ho[܎kj3u/, n5<x8LZ'Himm.VyO̙k4PWh8|zc,es.w\z]566w~%R¤Q^ޔ:ztP\Rنgt'IENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-modem-transmit-receive.png000066400000000000000000000024231261500472700277210ustar00rootroot00000000000000PNG  IHDRĴl;IDATxLu_C$Yȝ" .DҬTG-ҭslcI5lZjs$! irenj`;;8^ޞ=gg SR.NLU1f[nG~i'=~^}EnȩVso^\^GEAQV+ O^x1=i wC~#r ek׮QTT(ޞc>fIܬetA_7߃>L`_;EA@Q477#?"k۪Q DnV fAD0Qxc8k`[ݱV@xnJJƊc* i@7b4QyUdcy p8f ELrAFy&4ZF |x-j'_gZ'n}2lF)c:jU}ߊiT_g::cRٳ"Π z5Π?KK j 460BC;˞ iY-x򏶕%`ʴD:j{غ*`'$ (TSKfz:muuAӇ,Ŏ/r$CdffA@En4733=FCŋq80NDcc#* z>JNfqC'+r=Fe5]$+LJ (س.%6ԯ^*|,@9+{{Ì1/,dAP!Eݺȕfш* ogMކ >Y> |>a+fNWQz4ߨxOĝqmM&~.^!q ?ȄB!2f< r(;],ޞQ3, =k_^jj kBg\ KzN8OeIe w1yh遄D?A?]6jNn62o rw1dı_ctуBe+5^81cwVwNhKrP{8T 7;-:}agʁ-IENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-modem-transmit.png000066400000000000000000000017761261500472700263130ustar00rootroot00000000000000PNG  IHDRĴl;IDATxKe?s sd:dq-2Y,cF0Y4(^75(֋WFgH# u2*6ary{qԶypsq\ח%]]7g ci ic%e\L(D4EJa(,4hzEFo׃ !LDJa\Vw6 Y!i$0[ Jb > iɇGCÿ/GHĢ19*ϷoJ³'n"'s\gNau=5^ұ4X %dVUg9`nGSxcK_ &6_ҽT,T%rMpOJ EHxۍw\_rEQTU%dp ͶYł)%BVVVQt!"ۊk 6μ&vֶ:*++ -AM%֝",r tł*5H$P7sDRY[t4#^nܲb՝>D+,D"l>HɜEh`8g&-1pC<^c8f&(c$2e6*lv{چbC‘4Mch|۪3Dip0Ǭ!4 G¹Xq%H%X 8YIJ$IllމUUONNd2].v~f: PIENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-monitor-error.png000066400000000000000000000025131261500472700261570ustar00rootroot00000000000000PNG  IHDRĴl;sRGBbKGD pHYs  tIME Q(IDAT8˝_kWƟ3gvfgn D!HEP ޅzShBBm)TbDcRc$Mj6slmm¹9DJ+B07v!)%E92JݹrعsUh4>99@ UUy\ׅ뺰, H=x9RpI2!Pa@4!.J B^ Vض )%!T*?_~kk+sxGlq ~]1˲ӧO3tzR?~<?g2 4Q(`&a&2LP(p8L\.ķxms ueYιFFFߢP@sAhJ)/7/x"npd2y7n,|&ދEgGҹOgE [:~fuధ@q- 5[p]LRY)e\UU1J۶ʊѣͭxwn]B:U'yՆLCpAN:tŭ===`0zDQa244#Gܳ<}?ռ8{o`Ň0H I[1@AkD2F)1Buhr[Rp;UWT`B+0P" c^lH{_ rfxS(pCp:efqϗ4l먮T*ye Q|A6 Jr\}q ?e#bqU)otl{{_ʾ1q8 꺮toeeemzzZ,../c_J )%8ÐywEJi Is J)8ZAkKJk9"L>Qx\777y9'B@FdHlpN!AU\q݅ή7o@ϼ;w&<Q[)1c R"d eN*%68xeօ_֞e}{_J;( Bf{{;)RJŃ R*Rx~G/z c~3鳹[L~|J1Y,322,ų3 2ǡa$cJ6uţRHH$bEv7B?UUϯR(dkkKY\\<=44cdYA4///yz}}]^^|^r9/uݰlۆOplpp Mf?i۶G{y\($!D*NGFs\.JތZZҼͫ+-|H$4M QJG(h4:~zλnh+ whZ_)eAIENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-monitor-receive.png000066400000000000000000000021711261500472700264500ustar00rootroot00000000000000PNG  IHDRĴl;@IDATxkTWs{grgUMB#>*U"؅.'Y+vYDEui"X(L&mIIcf8.Ĕf-l>~>86uϟ-OBcB"Ēܹvr|h8f.P@2Pp{e$<4l(wCZC A67 cڂ! Ä:B@mCf рzjeo[@mZ+%< `I0 cͯ*x[nЄrX6dHhĤi1 nc_*}~"B!o[܋eK۵iSʆ]컙Q,)B(Ji5eONuu$P$zSoѰmŒ|e?͍gsH|HD>EhQ FjwԱB ۖdƐڲ^K*n5GKKKlcHMD;S**|wdr]^Zi,[iC{+PJa6q[av+fRJ<@2|n$MBmaa x#O!YrXrŶ%Jf뼜rj5X}}={50p8§ի0ܶLܾrS)m1#R*EI$"mYG:?pqR1[Yk@k>eooR*g6J)&E455uע/`||܌$I&I"("Ix111QBpQV{/A;(rmY=8nY'=~׎x@vҥֽ{m;jaxx苞҇l:hVS=;WW}N2u未1utQIENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-monitor-transmit-receive.png000066400000000000000000000020471261500472700303110ustar00rootroot00000000000000PNG  IHDRĴl;IDATxkTWsͽ3dU&~T*) "E]]"".*nE75`AB)`6icM2̽3ss"Ҍ8g{G%7o; DJK ~/5IJ%ZN ~CJu$$ ~[QQb"7jH{Z}n[෶[MЬBP.Zj#o& T;V˯RFˋ0Ɛdfs̙٩J{|r*ʾR m~Rʙfgg͞* bC&y:0aEX]]嵵pZ4uXo|C~Zc&O={'ѣl#Kw.t~R1ycֻmN:y$JbA~}mkkOq]en\V_=b*n<IENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-monitor-transmit.png000066400000000000000000000022021261500472700266620ustar00rootroot00000000000000PNG  IHDRĴl;IIDATxkTWs{g23di%QBTR J.\_B>teB뢛EAB0UIڨII:3;ws=]H3l^~.^ʜ2[cB"ĒV^?w里7n,\n+{ ndRcuLhZڃ-˒QK MM"hz-Tlrf #Bh-`)%BH7v! uMőH UW:@kg6!e>>kP*™_5YDZJh6.x~D ! !6h@j@IШBP\[[ZS.o>[^^~ ߶ڠ\rykrqgY/l#1dYrܹ]ccgR|Ç_zfooUˆXC^w+PJa6aZu+ʕ+f_RJ2$&K!LGQ,,,VKKK?xbnff'Z-#ձ:HNKLhtR_)>؅f_߱Ky׮MmyަebRc1F*h EFFVu-~9zfxuՃׁ.xaawq-RjxppB>X&  cWw2_|[nr&''?СCJm(}t: _߿ѣGsӻ/`bbŒ:::ȍHA@Emejj*;<}X:>vw *KJŎ:;c b|qTXIENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-network-error.png000066400000000000000000000022541261500472700261630ustar00rootroot00000000000000PNG  IHDRĴl;sRGBbKGD pHYs  tIME  :3,IDAT8oU;sgwXv;t &eik)-jVBi ԗ&FߛhⓉP!&DSjڥ.M[$@?ݹCzr{Ɂqz/>L&H$2MR뺎=@4\Ο?_ wpO[[ۇ u]\0 ,|>χRe[3u_rL*BJa\rP(@4%JY]]u݃uXLڶy5i8 mzzzu@heeYxjJZ%"HZ« v]wӮy*m. uFbD"@ֳ8u]:|)%r9Z[[BEѴZe=t::8/4Mlf||41Mq(> )%Rʧ쯬p…@ !@))_X|]*ͤJCrw.yI˲d2O_[[CJI\8m?X1^Z{Sg+sUg>۶1 c˾8XEWW)gqP5j8-ǻ>@ؾխ4l6KX4M$\H$y[=/"NϚ1iX:~{~~ xn j1iߜkq*ybƚES¸&''''ٿ[ zU%=؈zsj} ю[F7I&f J"F0-/D?uIQ.ϦV&N4S|gIENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-network-idle.png000066400000000000000000000015221261500472700257440ustar00rootroot00000000000000PNG  IHDRĴl;IDATxMlelg;. 60Hl֠?^ODcy*ѤjQ"6+vKl-lnvfwvBPw@x~ygDS3+q~Uhڭ)@ ־l pK $Oᓏ j~S&1Q$c8p)ˣ\n1#WG&oU7AK,?M$ é7l3:w(  9h6=jGPu9/e;2c)kĽN w;xT2Ef&N.'rtzߎoVw?J2vGz"iBٚ"ntf0Cӯ&Xkg?5l֗]OFkBե_ҽL]ƗE;A`ql\~ + TsH  $N]0oIENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-network-offline.png000066400000000000000000000013521261500472700264520ustar00rootroot00000000000000PNG  IHDRĴl;IDATx=KlG8aq,ng!dKjBHO/"$MP נXa6 uq̤7r9c"0 nnn~y1xG#IJ%JZ:N|zzFczzf<EZk.8J|; -H)z C|ߧn1Z \}cc qS9<>6*~P6ۜԮ7MҤIM>tvIJ;pxx1[G;ׯ.\B69`d&1&$00nn%&{]Kٽ|3nE*@ 2Fk)b#id 0 ;NFd b 8ySf[^LtWx8u*7_@twpYjF:47'xT*f5hA'lj N_UYiy.4p:³ah M600Ѝ|n:fƕa&'"UHםN  jabMM2QzcQ&u03 -Z~w|g=91BJV MuO<{) M|g.g@ΥC-VRws}|,Xjc\܍fR weYC{ֲ)Wz8ռ9H)}nS>K=f*ǕSgS2·gc\_>Ǘmﶬ^NvqBD#?`I%CmcX"eD⽖ QuFHMvsǹ&ˇH·rA"uu,Ӑҥ'/* yVU*rD8jn\Q1ҴN_o/=zVE&+JQA$ض,$JlٽM䝝&W}=k>~9vlŋ{ =6սx!,kK9kaB mg]1}VJ۽p|lhkh +Lx=ZVy<*o AIENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-network-transmit-receive.png000066400000000000000000000026111261500472700303100ustar00rootroot00000000000000PNG  IHDRĴl;PIDATxklSezYuldnm VWE`(*3"K/hbA{T x (SuȜ]:cumӞK0Oϓ}xQ\mkl14xc/8a9"z_7x˵$VXQWy[ҘSk)iz+k͵5mΟ%̪As^"~Y^zw * f^mskkή˼eO01) fr3 swhz_m^.^aH!=rtfG3hZX̤֙*KjL'O凿H.@\y)׍@?h e1 DSCK=ۡ L5?3/DsjM!HgI`s33Xٕa/?[Uҟ8L/]R~5iaFrSᢓ>گ8l%vϝ_Ҡa\AIb173qRaQy0.l&=EP~0>B<J!t!gZZx<^xp $7 E5 ]=8sL{6+w$Θ'A_{}G4+HSdaQ tZS:c(9e2uv}=?wE[[n7xX,nkѴi:4na55.Ra _ʰn!V7TUn#cqO‰ĘH" IENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-network-transmit.png000066400000000000000000000022151261500472700266700ustar00rootroot00000000000000PNG  IHDRĴl;TIDATx[lTU}smgZ: \m6XjcP."HŐ A%& orEP b[[2"B0ttbjb⟬익ola۽㵊[,Fk^K.a˵n瞍%`C׼Kx۽0jjjgQT0bQV-;M7Z1Kns yooO_"M]AGk njPcU3fMII1b*w>$M"D*vw?Ԋeś7=)HA A2aP#05aDa?{c*eŹ֖{Yi]w]! w J:AV55%vjF^V3RNnFTQHAHQcn3m,-McہaaE g 7rzUEҍt\`bj˫SNI>q&_no949ɥ%D>b~|l݁>Z-w&y uo$ë^\q(oT4=/M"dͣ2h=B\8y DS1$69s6:sjזO[`EVǷV0͘ǷRx˾E-6L0^7{Yij:uhۗ&gγvex@őU5\R^=*Cc]ng.m,. $)$W:<ۦ{ߵT>ce1""&&`NA1FW_(=8tfU"19XLxFjx&B?>['?H?@<a h /t 9Y|8#}Ĥ(l"z"7|t%<|Oؖ 9ۻ9}-^l'TC(9y[X̘)h sޮ'>@@?jhC(B M\i('6I#|ݡ?`dĈRlMk dhlmC?XTT, Sw= )\A_؇S7^|IENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-wireless-error.png000066400000000000000000000016061261500472700263270ustar00rootroot00000000000000PNG  IHDRĴl;sRGBbKGD pHYs  tIME !t0 IDAT8ՒKOQO;1eb)-S`EAL7UV? K & $q1q„` &#!HZ"OօiB +'w,{HO)7c/xxUEv]C6sdɁ@ |!$rkSG= 7>uݞC&iMRj*>\.DbǾp8&Nn7_SA4MWh$ɵZїH$!b6$!˹ʑR ;$:-b7}){ߥc7n^<"~~5;v } {-͝f{̺ZJW(N(K6+PY0f?uZr<@;zMzYjkAOop>/B`j6fb2c#$ r]7>gzn}V MU3 c$ n%QWW8#LS*J@+J[SSFjd2ZhYiz";#@۠j,53 qEQ08H&5'ξw1y<2c:ja}e4/km,˂eYT60c(I&+P:=ʝ^~"n[4r_*PJ52 !]3n4MiBk m:Gtp#d 1?lfTry 8)8IENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-wireless-idle.png000066400000000000000000000007161261500472700261140ustar00rootroot00000000000000PNG  IHDRĴl;IDATxՒ=KAEOvĸ"(] 6E-Lc! ODMPB:)l4i$Evl\]? o5{ry+Pc<8K8Yeʭ'J.w~C`+f[}Ypzܳ"L9@>* OiGDDm@Ag@8nQr9m(;{{ ỳ;mݺ~Y4B Ae:G|䫔`F c{w* $!PNO)GBY9T>* j|Xl%V0AԦ+!$wOmy"IENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-wireless-offline.png000066400000000000000000000007311261500472700266160ustar00rootroot00000000000000PNG  IHDRĴl;IDATxՒjA:˺0 !+: K؈ X{baaʪqe EDEdu̬"f=7A㔔1'K0%PVEs٤b"RGr~`kژR:m.Rl6z"l>ܙL&\.a:sBz= feYSBHZ|>B'iX|[- !z(u;JC:{ۮK5~$ɘGQ]QEpy0MK)SiZ7 #0@U|ZM^ 9wFX,V4M+ CjOspgZf# np8\Pr)wUᯐ/pDz,K?p i 5IENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-wireless-receive.png000066400000000000000000000020511261500472700266130ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs  tIME "+IDAT8˥ohuƟ~7w״QTVQ`W}Q'E1Xnc/tD}1_:p+{! con0Iu fkr\rwՎ>p}{ `$ !Ea1h(z]}vZN@EQtBArp(*0G5˲m۽o?;UUmD'Ax?Y5qHVm{X,5 :!kcggH0\4m) Pu4?JReYRfh+p(z]e[ F,UU}禧ͤӷȒ4*z^aYVmn ̲K]ey㗈33bg̜:}y?ywPU՟kۤj(ʲ|GU!@Fys|QᚪC$Q%*,B8 $_RSj_ $xS0J-,Hd<8$)eY,Wsnv|<\Fs f);xG*ȸYd(+~u|j B-Ͽ*&&'㉉9-Vy >_@,+h4m!6:Øw M$.岟hR=TFF|o Oc]ib005}˲ eqB~kU& |T'O3ٹ_V8}UWE:6d2WWq…8N7y8Q+K.pJ##:}}3 ɦmx %[@iyMDo"zޭܮ@-s\r42# e4M IIENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-wireless-transmit-receive.png000066400000000000000000000022701261500472700304550ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs  tIME 2K;EIDAT8˕ohvO~?ڋеy)C` :YO`M2 aʞ=B`02t c(NaGVkkuYiK`FNY@+?B)'o%<0LaժRT0 ?OT%IyKYUUEQK+Yu;0/:nذa3 :|^q?ppZӴ۶+bYCnYt:]ssu4+k֬KO>u)TO\%I6 lN:W=TU+˲Ųm`y6SZ;BaXYL1 i0~NBG(as|62ҾlY+A(M=$MUUf[[Jz؇{Gu|7B:V]׽a2Msa KgoVpfp227!;{b1Gx_eE뚦=nW˵gG_fxL?1"a`Fr #Lx/ b1QCWε;!e:hL\HQԉW MӠi,˂eY1}-t) ?'{@P @p#(saelmtrI1T4cG/00}_m.aJuJe._(dvy>җ2Hi;ށ9y\.8:<55PuT8vjtww7=)DɇOԓ?hIENDB`lxqt-panel-0.10.0/plugin-networkmonitor/images/knemo-wireless-transmit.png000066400000000000000000000016151261500472700270370ustar00rootroot00000000000000PNG  IHDRĴl;bKGD pHYs  tIME ْPIDAT8Օke?<;o;3L,+M|P+BFrmAKRPbO""C/9-JAxlb*JnUb|jtˬs}?x> ʶm5,kHR{} ggfrcc0^-)Q3XJ9lb%qnMQ3gj]RwjGP^#`EQ5}ۅOp0] g#{"rټuU * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtnetworkmonitor.h" #include "lxqtnetworkmonitorconfiguration.h" #include "../panel/ilxqtpanelplugin.h" #include #include #include #include #include extern "C" { #include } #ifdef __sg_public // since libstatgrab 0.90 this macro is defined, so we use it for version check #define STATGRAB_NEWER_THAN_0_90 1 #endif LXQtNetworkMonitor::LXQtNetworkMonitor(ILXQtPanelPlugin *plugin, QWidget* parent): QFrame(parent), mPlugin(plugin) { QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(&m_stuff); setLayout(layout); /* Initialise statgrab */ #ifdef STATGRAB_NEWER_THAN_0_90 sg_init(0); #else sg_init(); #endif m_iconList << "modem" << "monitor" << "network" << "wireless"; startTimer(800); settingsChanged(); } LXQtNetworkMonitor::~LXQtNetworkMonitor() { } void LXQtNetworkMonitor::resizeEvent(QResizeEvent *) { m_stuff.setMinimumWidth(m_pic.width() + 2); m_stuff.setMinimumHeight(m_pic.height() + 2); update(); } void LXQtNetworkMonitor::timerEvent(QTimerEvent *event) { bool matched = false; #ifdef STATGRAB_NEWER_THAN_0_90 size_t num_network_stats; size_t x; #else int num_network_stats; int x; #endif sg_network_io_stats *network_stats = sg_get_network_io_stats_diff(&num_network_stats); for (x = 0; x < num_network_stats; x++) { if (m_interface == QString::fromLocal8Bit(network_stats->interface_name)) { if (network_stats->rx != 0 && network_stats->tx != 0) { m_pic.load(iconName("transmit-receive")); } else if (network_stats->rx != 0 && network_stats->tx == 0) { m_pic.load(iconName("receive")); } else if (network_stats->rx == 0 && network_stats->tx != 0) { m_pic.load(iconName("transmit")); } else { m_pic.load(iconName("idle")); } matched = true; break; } network_stats++; } if (!matched) { m_pic.load(iconName("error")); } update(); } void LXQtNetworkMonitor::paintEvent(QPaintEvent *) { QPainter p(this); QRectF r = rect(); int leftOffset = (r.width() - m_pic.width() + 2) / 2; int topOffset = (r.height() - m_pic.height() + 2) / 2; p.drawPixmap(leftOffset, topOffset, m_pic); } bool LXQtNetworkMonitor::event(QEvent *event) { if (event->type() == QEvent::ToolTip) { #ifdef STATGRAB_NEWER_THAN_0_90 size_t num_network_stats; size_t x; #else int num_network_stats; int x; #endif sg_network_io_stats *network_stats = sg_get_network_io_stats(&num_network_stats); for (x = 0; x < num_network_stats; x++) { if (m_interface == QString::fromLocal8Bit(network_stats->interface_name)) { setToolTip(tr("Network interface %1").arg(m_interface) + "
" + tr("Transmitted %1").arg(convertUnits(network_stats->tx)) + "
" + tr("Received %1").arg(convertUnits(network_stats->rx)) ); } network_stats++; } } return QFrame::event(event); } //void LXQtNetworkMonitor::showConfigureDialog() //{ // LXQtNetworkMonitorConfiguration *confWindow = // this->findChild("LXQtNetworkMonitorConfigurationWindow"); // if (!confWindow) // { // confWindow = new LXQtNetworkMonitorConfiguration(settings(), this); // } // confWindow->show(); // confWindow->raise(); // confWindow->activateWindow(); //} void LXQtNetworkMonitor::settingsChanged() { m_iconIndex = mPlugin->settings()->value("icon", 1).toInt(); m_interface = mPlugin->settings()->value("interface").toString(); if (m_interface.isEmpty()) { #ifdef STATGRAB_NEWER_THAN_0_90 size_t count; #else int count; #endif sg_network_iface_stats* stats = sg_get_network_iface_stats(&count); if (count > 0) m_interface = QString(stats[0].interface_name); } m_pic.load(iconName("error")); } QString LXQtNetworkMonitor::convertUnits(double num) { QString unit = tr("B"); QStringList units = QStringList(tr("KiB")) << tr("MiB") << tr("GiB") << tr("TiB") << tr("PiB"); for (QStringListIterator iter(units); num >= 1024 && iter.hasNext();) { num /= 1024; unit = iter.next(); } return QString::number(num, 'f', 2) + " " + unit; } lxqt-panel-0.10.0/plugin-networkmonitor/lxqtnetworkmonitor.h000066400000000000000000000036601261500472700244460ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTNETWORKMONITOR_H #define LXQTNETWORKMONITOR_H #include class ILXQtPanelPlugin; /*! TODO: How to define cable is not connected? */ class LXQtNetworkMonitor: public QFrame { Q_OBJECT public: LXQtNetworkMonitor(ILXQtPanelPlugin *plugin, QWidget* parent = 0); ~LXQtNetworkMonitor(); virtual void settingsChanged(); protected: void virtual timerEvent(QTimerEvent *event); void virtual paintEvent(QPaintEvent * event); void virtual resizeEvent(QResizeEvent *); bool virtual event(QEvent *event); private: static QString convertUnits(double num); QString iconName(const QString& state) const { return QString(":/images/knemo-%1-%2.png") .arg(m_iconList[m_iconIndex], state); } QWidget m_stuff; QStringList m_iconList; int m_iconIndex; QString m_interface; QPixmap m_pic; ILXQtPanelPlugin *mPlugin; }; #endif // LXQTNETWORKMONITOR_H lxqt-panel-0.10.0/plugin-networkmonitor/lxqtnetworkmonitorconfiguration.cpp000066400000000000000000000060761261500472700275750ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Maciej Płaza * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtnetworkmonitorconfiguration.h" #include "ui_lxqtnetworkmonitorconfiguration.h" extern "C" { #include } #ifdef __sg_public // since libstatgrab 0.90 this macro is defined, so we use it for version check #define STATGRAB_NEWER_THAN_0_90 1 #endif LXQtNetworkMonitorConfiguration::LXQtNetworkMonitorConfiguration(QSettings *settings, QWidget *parent) : QDialog(parent), ui(new Ui::LXQtNetworkMonitorConfiguration), mSettings(settings), mOldSettings(settings) { setAttribute(Qt::WA_DeleteOnClose); setObjectName("NetworkMonitorConfigurationWindow"); ui->setupUi(this); connect(ui->buttons, SIGNAL(clicked(QAbstractButton*)), this, SLOT(dialogButtonsAction(QAbstractButton*))); connect(ui->iconCB, SIGNAL(currentIndexChanged(int)), SLOT(saveSettings())); connect(ui->interfaceCB, SIGNAL(currentIndexChanged(int)), SLOT(saveSettings())); loadSettings(); } LXQtNetworkMonitorConfiguration::~LXQtNetworkMonitorConfiguration() { delete ui; } void LXQtNetworkMonitorConfiguration::saveSettings() { mSettings->setValue("icon", ui->iconCB->currentIndex()); mSettings->setValue("interface", ui->interfaceCB->currentText()); } void LXQtNetworkMonitorConfiguration::loadSettings() { ui->iconCB->setCurrentIndex(mSettings->value("icon", 1).toInt()); int count; #ifdef STATGRAB_NEWER_THAN_0_90 size_t ret_count; sg_network_iface_stats* stats = sg_get_network_iface_stats(&ret_count); count = (int)ret_count; #else sg_network_iface_stats* stats = sg_get_network_iface_stats(&count); #endif for (int ix = 0; ix < count; ix++) ui->interfaceCB->addItem(stats[ix].interface_name); QString interface = mSettings->value("interface").toString(); ui->interfaceCB->setCurrentIndex(qMax(qMin(0, count - 1), ui->interfaceCB->findText(interface))); } void LXQtNetworkMonitorConfiguration::dialogButtonsAction(QAbstractButton *btn) { if (ui->buttons->buttonRole(btn) == QDialogButtonBox::ResetRole) { mOldSettings.loadToSettings(); loadSettings(); } else { close(); } } lxqt-panel-0.10.0/plugin-networkmonitor/lxqtnetworkmonitorconfiguration.h000066400000000000000000000033621261500472700272350ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Maciej Płaza * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTNETWORKMONITORCONFIGURATION_H #define LXQTNETWORKMONITORCONFIGURATION_H #include #include class QSettings; class QAbstractButton; namespace Ui { class LXQtNetworkMonitorConfiguration; } class LXQtNetworkMonitorConfiguration : public QDialog { Q_OBJECT public: explicit LXQtNetworkMonitorConfiguration(QSettings *settings, QWidget *parent = 0); ~LXQtNetworkMonitorConfiguration(); private: Ui::LXQtNetworkMonitorConfiguration *ui; QSettings *mSettings; LXQt::SettingsCache mOldSettings; private slots: /* Saves settings in conf file. */ void saveSettings(); void loadSettings(); void dialogButtonsAction(QAbstractButton *btn); }; #endif // LXQTNETWORKMONITORCONFIGURATION_H lxqt-panel-0.10.0/plugin-networkmonitor/lxqtnetworkmonitorconfiguration.ui000066400000000000000000000074141261500472700274250ustar00rootroot00000000000000 LXQtNetworkMonitorConfiguration 0 0 285 191 Network Monitor settings General Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter false false Interface 0 0 true Modem :/images/knemo-modem-idle.png:/images/knemo-modem-idle.png Monitor :/images/knemo-monitor-idle.png:/images/knemo-monitor-idle.png Network :/images/knemo-network-idle.png:/images/knemo-network-idle.png Wireless :/images/knemo-wireless-idle.png:/images/knemo-wireless-idle.png Icon Qt::Vertical 20 41 Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Reset lxqt-panel-0.10.0/plugin-networkmonitor/lxqtnetworkmonitorplugin.cpp000066400000000000000000000032131261500472700262120ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtnetworkmonitorplugin.h" #include "lxqtnetworkmonitor.h" #include "lxqtnetworkmonitorconfiguration.h" LXQtNetworkMonitorPlugin::LXQtNetworkMonitorPlugin(const ILXQtPanelPluginStartupInfo &startupInfo): QObject(), ILXQtPanelPlugin(startupInfo), mWidget(new LXQtNetworkMonitor(this)) { } LXQtNetworkMonitorPlugin::~LXQtNetworkMonitorPlugin() { delete mWidget; } QWidget *LXQtNetworkMonitorPlugin::widget() { return mWidget; } QDialog *LXQtNetworkMonitorPlugin::configureDialog() { return new LXQtNetworkMonitorConfiguration(settings()); } void LXQtNetworkMonitorPlugin::settingsChanged() { mWidget->settingsChanged(); } lxqt-panel-0.10.0/plugin-networkmonitor/lxqtnetworkmonitorplugin.h000066400000000000000000000041741261500472700256660ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTNETWORKMONITORPLUGIN_H #define LXQTNETWORKMONITORPLUGIN_H #include "../panel/ilxqtpanelplugin.h" #include class LXQtNetworkMonitor; class LXQtNetworkMonitorPlugin: public QObject, public ILXQtPanelPlugin { Q_OBJECT public: explicit LXQtNetworkMonitorPlugin(const ILXQtPanelPluginStartupInfo &startupInfo); ~LXQtNetworkMonitorPlugin(); virtual ILXQtPanelPlugin::Flags flags() const { return PreferRightAlignment | HaveConfigDialog; } virtual QWidget *widget(); virtual QString themeId() const { return "NetworkMonitor"; } bool isSeparate() const { return false; } QDialog *configureDialog(); protected: virtual void settingsChanged(); private: LXQtNetworkMonitor *mWidget; }; class LXQtNetworkMonitorPluginLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new LXQtNetworkMonitorPlugin(startupInfo); } }; #endif // LXQTNETWORKMONITORPLUGIN_H lxqt-panel-0.10.0/plugin-networkmonitor/resources.qrc000066400000000000000000000025271261500472700230050ustar00rootroot00000000000000 images/knemo-modem-error.png images/knemo-modem-idle.png images/knemo-modem-offline.png images/knemo-modem-receive.png images/knemo-modem-transmit-receive.png images/knemo-modem-transmit.png images/knemo-monitor-error.png images/knemo-monitor-idle.png images/knemo-monitor-offline.png images/knemo-monitor-receive.png images/knemo-monitor-transmit-receive.png images/knemo-monitor-transmit.png images/knemo-network-error.png images/knemo-network-idle.png images/knemo-network-offline.png images/knemo-network-receive.png images/knemo-network-transmit-receive.png images/knemo-network-transmit.png images/knemo-wireless-error.png images/knemo-wireless-idle.png images/knemo-wireless-offline.png images/knemo-wireless-receive.png images/knemo-wireless-transmit-receive.png images/knemo-wireless-transmit.png lxqt-panel-0.10.0/plugin-networkmonitor/resources/000077500000000000000000000000001261500472700222705ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-networkmonitor/resources/networkmonitor.desktop.in000066400000000000000000000002611261500472700273700ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. #Icon=network-transmit-receive Icon=network-wired lxqt-panel-0.10.0/plugin-networkmonitor/translations/000077500000000000000000000000001261500472700227775ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor.ts000066400000000000000000000066161261500472700264610ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Transmitted %1 Received %1 B KiB MiB GiB TiB PiB LXQtNetworkMonitorConfiguration Network Monitor settings General Interface Modem Monitor Network Wireless Icon lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_cs.desktop000066400000000000000000000003271261500472700301620ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Name[cs]=Monitor sítě Comment[cs]=Zobrazuje stav a aktivity sítě lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_cs.ts000066400000000000000000000066271261500472700271500ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Síťové rozhraní <b>%1</b> Transmitted %1 Přeneseno %1 Received %1 Přijato %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration LXQt Network Monitor settings Nastavení sledování sítě Network Monitor settings General Obecné Interface Rozhraní Modem Modem Monitor Sledování Network Síť Wireless Bezdrátové Icon Ikona lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_da.desktop000066400000000000000000000003231261500472700301350ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Comment[da]=Netværksovervågning Name[da]=Netværksovervågning lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_da.ts000066400000000000000000000066351261500472700271260ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Netværksinterface <b>%1</b> Transmitted %1 Sendt %1 Received %1 Modtaget %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration LXQt Network Monitor settings Indstillinger for LXQt Netværksmonitor Network Monitor settings General Generelt Interface Grænseflade Modem Modem Monitor Monitor Network Netværk Wireless Trådløs Icon Ikon lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_de.desktop000066400000000000000000000001321261500472700301370ustar00rootroot00000000000000Name[de]=Netzwerkmonitor Comment[de]=Informationen zu Status und Aktivität des Netzwerks lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_de.ts000066400000000000000000000064031261500472700271230ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Netzwerkschnittstelle <b>%1</b> Transmitted %1 Gesendet %1 Received %1 Empfangen %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration Network Monitor settings Netzwerkmonitor-Einstellungen General Allgemein Interface Schnittstelle Modem Modem Monitor Bildschirm Network Netzwerk Wireless Drahtlos Icon Symbol lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_el.desktop000066400000000000000000000002411261500472700301500ustar00rootroot00000000000000Name[el]=Επόπτης δικτύου Comment[el]=Εμφάνιση της κατάστασης και της δραστηριότητας του δικτύου lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_el.ts000066400000000000000000000070361261500472700271360ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Διεπαφή δικτύου <b>%1</b> Transmitted %1 Στάλθηκαν %1 Received %1 Λήφθηκαν %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration LXQt Network Monitor settings Ρυθμίσεις επίβλεψης δικτύου LXQt Network Monitor settings Ρυθμίσεις του επόπτη δικτύου General Γενικά Interface Διεπαφή Modem Μόντεμ Monitor Εποπτεία Network Δίκτυο Wireless Ασύρματο Icon Εικονίδιο lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_eo.desktop000066400000000000000000000003261261500472700301570ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Name[eo]=Ret-observilo Comment[eo]=Elmontras ret-staton kaj -aktivecon lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_eo.ts000066400000000000000000000071371261500472700271430ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Reta interfaco <b>%1</b> Transmitted %1 Sendita %1 Received %1 Ricevita %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration Network Monitor settings Agordoj por ret-observilo General Ĝenerala Interface Interfaco Modem Modemo Monitor Observilo Network Reto Wireless Sendrata Icon Bildsimbolo lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_es.desktop000066400000000000000000000003451261500472700301640ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Comment[es]=Despliega el estado y actividades de la red. Name[es]=Monitor de redes lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_es.ts000066400000000000000000000066711261500472700271510ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Interfaz de red <b>%1</b> Transmitted %1 Transmitidos %1 Received %1 Recibidos %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration LXQt Network Monitor settings Configuración del monitor de redes de LXQt Network Monitor settings Configuración del monitor de redes General General Interface Interfaz Modem Módem Monitor Monitor Network Red Wireless Conexión inalámbrica Icon Icono lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_eu.desktop000066400000000000000000000003441261500472700301650ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Comment[eu]=Bistaratu sarearen egoera eta aktibitatea Name[eu]=Sarearen monitorea lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_eu.ts000066400000000000000000000066371261500472700271550ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> <b>%1</b> sareko interfazea Transmitted %1 %1 transmitituta Received %1 %1 jasota B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration LXQt Network Monitor settings LXQt sarearen monitorearen ezarpenak Network Monitor settings General Orokorra Interface Interfazea Modem Modema Monitor Monitorea Network Sarea Wireless Hari gabekoa Icon Ikonoa lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_fi.desktop000066400000000000000000000003051261500472700301470ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Comment[fi]=Verkkoseuranta Name[fi]=Verkkoseuranta lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_fi.ts000066400000000000000000000066431261500472700271370ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Verkkoliitäntä <b>%1</b> Transmitted %1 Siirretty %1 Received %1 Vastaanotettu %1 B t KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration LXQt Network Monitor settings LXQtin verkonhallinnan asetukset Network Monitor settings General Yleiset Interface Liitäntä Modem Modeemi Monitor Network Verkko Wireless Langaton Icon Kuvake lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_fr.desktop000066400000000000000000000001471261500472700301640ustar00rootroot00000000000000# Translations Name[fr_FR]=Moniteur Réseau Comment[fr_FR]=Affiche le statut et l'activité du réseau lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_fr.ts000066400000000000000000000063651261500472700271510ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Interface réseau <b>%1</b> Transmitted %1 Transmis %1 Received %1 Reçu %1 B o KiB Ko MiB Mo GiB Go TiB To PiB Po LXQtNetworkMonitorConfiguration Network Monitor settings Paramètres du moniteur réseau General Généraux Interface Interface Modem Modem Monitor Moniteur Network Réseau Wireless Sans-Fil Icon Icône lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_hr.ts000066400000000000000000000070241261500472700271440ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Mrežno sučelje <b>%1</b> Transmitted %1 Received %1 Primljeno %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration Network Monitor settings Postavke nadzora mreže General Općenito Interface Sučelje Modem Modem Monitor Nadzor Network Mreža Wireless Bežično Icon Ikona lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_hu.desktop000066400000000000000000000003261261500472700301700ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Name[hu]=Alkalmazásindító alapú menü Comment[hu]=Alkalmazásmenü lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_hu.ts000066400000000000000000000064071261500472700271530ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Hálózati eszköz <b>%1</b> Transmitted %1 Küldött %1 Received %1 Fogadott %1 B B KiB KiB MiB MiB GiB GiB TiB Tib PiB Pib LXQtNetworkMonitorConfiguration Network Monitor settings Hálózatfigyelő beállítás General Általános Interface Eszköz Modem Monitor Network Hálózat Wireless Icon Ikon lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_it.desktop000066400000000000000000000003301261500472700301630ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Name[it]=Monitor di rete Comment[it]=Mostra stato e attività della rete lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_it.ts000066400000000000000000000066511261500472700271540ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Interfaccia di rete <b>%1</b> Transmitted %1 Trasmesso %1 Received %1 Ricevuto %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration LXQt Network Monitor settings Impostazioni del monitor di rete di LXQt Network Monitor settings Impostazioni del monitor di rete General Generale Interface Interfaccia Modem Modem Monitor Monitor Network Rete Wireless Wireless Icon Icona lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_ja.desktop000066400000000000000000000004031261500472700301420ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Comment[ja]=ネットワークの状態や動作状況を表示します Name[ja]=ネットワークモニター lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_ja.ts000066400000000000000000000064711261500472700271320ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> ネットワークインターフェース <b>%1</b> Transmitted %1 送信 %1 Received %1 受信 %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration Network Monitor settings ネットワークモニターの設定 General 一般 Interface インターフェース Modem モデム Monitor モニター Network ネットワーク Wireless 無線 Icon アイコン lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_nl.desktop000066400000000000000000000003261261500472700301650ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Name[nl]=Netwerkmonitor Comment[nl]=Toont netwerkstatus en -activiteit lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_nl.ts000066400000000000000000000066471261500472700271560ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Netwerkkaart <b>%1</b> Transmitted %1 Verstuurd %1 Received %1 Ontvangen %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration LXQt Network Monitor settings Instellingen voor Netwerkbewaker van LXQt Network Monitor settings Netwerkmonitorinstellingen General Algemeen Interface Netwerkkaart Modem Modem Monitor Bewaker Network Netwerk Wireless Draadloos Icon Pictogram lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_pl.desktop000066400000000000000000000003251261500472700301660ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Name[pl]=monitor sieci Comment[pl]=pokazuje stan i aktywność sieci. lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_pl.ts000066400000000000000000000066351261500472700271550ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Interfejs sieci <b>%1</b> Transmitted %1 Przesłano %1 Received %1 Otrzymano %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration LXQt Network Monitor settings Ustawienia LXQt Network Monitor Network Monitor settings Ustawienia monitora sieci General Ogólne Interface Interfejs Modem Modem Monitor Monitor Network Sieć Wireless Bezprzewodowe Icon Ikona lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_pt.desktop000066400000000000000000000003261261500472700301770ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Name[pt]=Monitor de rede Comment[pt]=Mostrar estado e atividade da rede lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_pt.ts000066400000000000000000000066351261500472700271650ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Interface de rede <b>%1</b> Transmitted %1 Enviados %1 Received %1 Recebidos %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration LXQt Network Monitor settings Definições do monitor de rede do LXQt Network Monitor settings General Geral Interface Interface Modem Modem Monitor Monitorizar Network Rede Wireless Rede sem fios Icon Ícone lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_pt_BR.desktop000066400000000000000000000003341261500472700305610ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Name[pt_BR]=Monitor de Rede Comment[pt_BR]=Mostra atividade e estado da rede lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_pt_BR.ts000066400000000000000000000066541261500472700275510ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Interface de rede <b>%1</b> Transmitted %1 Transmitido %1 Received %1 Recebido %1 B Byte KiB KByte MiB MByte GiB GByte TiB TByte PiB PByte LXQtNetworkMonitorConfiguration LXQt Network Monitor settings Configurações de Monitoramento de Rede Network Monitor settings General Geral Interface Interface Modem Modem Monitor Monitoramento Network Rede Wireless Sem fio Icon Ícone lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_ro_RO.desktop000066400000000000000000000003461261500472700305760ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Comment[ro_RO]=Afisează starea și activitatea rețelei Name[ro_RO]=Monitor rețea lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_ro_RO.ts000066400000000000000000000066551261500472700275640ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Interfață rețea <b>%1</b> Transmitted %1 Transmis %1 Received %1 Recepționat %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration LXQt Network Monitor settings Setări monitorizare rețea LXQt Network Monitor settings Setări monitorizare rețea General General Interface Interfață Modem Modem Monitor Monitorizare Network Rețea Wireless Wireless Icon Pictogramă lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_ru.desktop000066400000000000000000000004161261500472700302020ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Comment[ru]=Отображает сетевой статус и активность. Name[ru]=Сетевой Мониторlxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_ru.ts000066400000000000000000000065511261500472700271650ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Сетевой интерфейс <b>%1</b> Transmitted %1 Передано %1 Received %1 Получено %1 B Б KiB Кб MiB Мб GiB Гб TiB Тб PiB Пб LXQtNetworkMonitorConfiguration Network Monitor settings Настройки сетевого монитора General Общие Interface Интерфейс Modem Модем Monitor Монитор Network Сеть Wireless Беспроводная сеть Icon Значок lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_sr@latin.desktop000066400000000000000000000003451261500472700313310ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Comment[sr@latin]=Automatsko suspendovanje Name[sr@latin]=Meni pokretača programa lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_th_TH.desktop000066400000000000000000000004411261500472700305600ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Comment[th_TH]=เฝ้าสังเกตเครือข่าย Name[th_TH]=เฝ้าสังเกตเครือข่าย lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_th_TH.ts000066400000000000000000000071451261500472700275450ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> ส่วนติดต่อเครือข่าย <b>%1</b> Transmitted %1 ส่ง %1 Received %1 รับ %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration LXQt Network Monitor settings ค่าตั้งการเฝ้าสังเกตเครือข่าย LXQt Network Monitor settings General ทั่วไป Interface ส่วนติดต่อ Modem โมเด็ม Monitor เฝ้าสังเกต Network เครือข่าย Wireless ไรัสาย Icon ไอคอน lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_tr.desktop000066400000000000000000000003211261500472700301740ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Name[tr]=Ağ izleme Comment[tr]=Ağ iletişimi izleme ve yönetme lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_tr.ts000066400000000000000000000066011261500472700271600ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Ağ arayüzü <b>%1</b> Transmitted %1 Gönderilen %1 Received %1 Alınan %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB PiB LXQtNetworkMonitorConfiguration LXQt Network Monitor settings LXQt Ağ İzleme ayarları Network Monitor settings Ağ İzleme Ayarları General Genel Interface Arayüz Modem Modem Monitor Ekran Network Wireless Kablosuz Icon Simge lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_uk.desktop000066400000000000000000000004031261500472700301670ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Comment[uk]=Показує стан та активність мережі. Name[uk]=Монітор мережі lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_uk.ts000066400000000000000000000070251261500472700271530ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> Мережевий адаптер <b>%1</b> Transmitted %1 Передано %1 Received %1 Прийнято %1 B Б KiB КіБ MiB МіБ GiB ГіБ TiB ТіБ PiB ПіБ LXQtNetworkMonitorConfiguration LXQt Network Monitor settings Налаштування монітору мережі LXQt Network Monitor settings General Загальне Interface Адаптер Modem Модем Monitor Монітор Network Мережевий Wireless Бездротовий Icon Значок lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_zh_CN.desktop000066400000000000000000000003021261500472700305470ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Comment[zh_CN]=qxkb Name[zh_CN]=屏幕记事本 lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_zh_CN.ts000066400000000000000000000066201261500472700275350ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> 网络接口 <b>%1</b> Transmitted %1 已传输 %1 Received %1 已接收 %1 B B KiB KiB MiB MiB GiB GiB TiB TiB PiB TiB LXQtNetworkMonitorConfiguration LXQt Network Monitor settings LXQt 网络监测器设置 Network Monitor settings General 常规 Interface 接口 Modem 调制解调器 Monitor 监测器 Network 网络 Wireless 无线 Icon 图标 lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_zh_TW.desktop000066400000000000000000000003271261500472700306100ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Network monitor Comment=Displays network status and activity. # Translations Comment[zh_TW]=網路監視器 Name[zh_TW]=顯示網路狀態和活動 lxqt-panel-0.10.0/plugin-networkmonitor/translations/networkmonitor_zh_TW.ts000066400000000000000000000065761261500472700276010ustar00rootroot00000000000000 LXQtNetworkMonitor Network interface <b>%1</b> 網路介面 <b>%1</b> Transmitted %1 傳送 %1 Received %1 接收 %1 B B KiB KB MiB MB GiB GB TiB TB PiB PB LXQtNetworkMonitorConfiguration LXQt Network Monitor settings LXQt網路監視器設定 Network Monitor settings General 一般 Interface 介面 Modem 數據機 Monitor 監視器 Network 網路 Wireless 無線 Icon 圖示 lxqt-panel-0.10.0/plugin-quicklaunch/000077500000000000000000000000001261500472700174645ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-quicklaunch/CMakeLists.txt000066400000000000000000000006321261500472700222250ustar00rootroot00000000000000set(PLUGIN "quicklaunch") set(HEADERS lxqtquicklaunchplugin.h lxqtquicklaunch.h quicklaunchbutton.h quicklaunchaction.h ) set(SOURCES lxqtquicklaunchplugin.cpp lxqtquicklaunch.cpp quicklaunchbutton.cpp quicklaunchaction.cpp ) set(LIBRARIES Qt5Xdg ) include_directories( ${LXQT_INCLUDE_DIRS} "${CMAKE_CURRENT_SOURCE_DIR}/../panel" ) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-quicklaunch/lxqtquicklaunch.cpp000066400000000000000000000201301261500472700234040ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2012 Razor team * Authors: * Petr Vanek * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtquicklaunch.h" #include "quicklaunchbutton.h" #include "quicklaunchaction.h" #include "../panel/ilxqtpanelplugin.h" #include #include #include #include #include #include #include #include #include #include #include #include #include LXQtQuickLaunch::LXQtQuickLaunch(ILXQtPanelPlugin *plugin, QWidget* parent) : QFrame(parent), mPlugin(plugin), mPlaceHolder(0) { setAcceptDrops(true); mLayout = new LXQt::GridLayout(this); setLayout(mLayout); QSettings *settings = mPlugin->settings(); int count = settings->beginReadArray("apps"); QString desktop; QString file; QString execname; QString exec; QString icon; for (int i = 0; i < count; ++i) { settings->setArrayIndex(i); desktop = settings->value("desktop", "").toString(); file = settings->value("file", "").toString(); if (! desktop.isEmpty()) { XdgDesktopFile xdg; if (!xdg.load(desktop)) { qDebug() << "XdgDesktopFile" << desktop << "is not valid"; continue; } if (!xdg.isSuitable()) { qDebug() << "XdgDesktopFile" << desktop << "is not applicable"; continue; } addButton(new QuickLaunchAction(&xdg, this)); } else if (! file.isEmpty()) { addButton(new QuickLaunchAction(file, this)); } else { execname = settings->value("name", "").toString(); exec = settings->value("exec", "").toString(); icon = settings->value("icon", "").toString(); if (icon.isNull()) { qDebug() << "Icon" << icon << "is not valid (isNull). Skipped."; continue; } addButton(new QuickLaunchAction(execname, exec, icon, this)); } } // for settings->endArray(); if (mLayout->isEmpty()) showPlaceHolder(); realign(); } LXQtQuickLaunch::~LXQtQuickLaunch() { } int LXQtQuickLaunch::indexOfButton(QuickLaunchButton* button) const { return mLayout->indexOf(button); } int LXQtQuickLaunch::countOfButtons() const { return mLayout->count(); } void LXQtQuickLaunch::realign() { mLayout->setEnabled(false); ILXQtPanel *panel = mPlugin->panel(); if (mPlaceHolder) { mLayout->setColumnCount(1); mLayout->setRowCount(1); } else { if (panel->isHorizontal()) { mLayout->setRowCount(panel->lineCount()); mLayout->setColumnCount(0); } else { mLayout->setColumnCount(panel->lineCount()); mLayout->setRowCount(0); } } mLayout->setEnabled(true); } void LXQtQuickLaunch::addButton(QuickLaunchAction* action) { mLayout->setEnabled(false); QuickLaunchButton* btn = new QuickLaunchButton(action, this); mLayout->addWidget(btn); connect(btn, SIGNAL(switchButtons(QuickLaunchButton*,QuickLaunchButton*)), this, SLOT(switchButtons(QuickLaunchButton*,QuickLaunchButton*))); connect(btn, SIGNAL(buttonDeleted()), this, SLOT(buttonDeleted())); connect(btn, SIGNAL(movedLeft()), this, SLOT(buttonMoveLeft())); connect(btn, SIGNAL(movedRight()), this, SLOT(buttonMoveRight())); mLayout->removeWidget(mPlaceHolder); delete mPlaceHolder; mPlaceHolder = 0; mLayout->setEnabled(true); realign(); } void LXQtQuickLaunch::dragEnterEvent(QDragEnterEvent *e) { // Getting URL from mainmenu... if (e->mimeData()->hasUrls()) { e->acceptProposedAction(); return; } if (e->source() && e->source()->parent() == this) { e->acceptProposedAction(); } } void LXQtQuickLaunch::dropEvent(QDropEvent *e) { const QMimeData *mime = e->mimeData(); foreach (QUrl url, mime->urls().toSet()) { QString fileName(url.isLocalFile() ? url.toLocalFile() : url.url()); QFileInfo fi(fileName); XdgDesktopFile xdg; if (xdg.load(fileName)) { if (xdg.isSuitable()) addButton(new QuickLaunchAction(&xdg, this)); } else if (fi.exists() && fi.isExecutable() && !fi.isDir()) { addButton(new QuickLaunchAction(fileName, fileName, "", this)); } else if (fi.exists()) { addButton(new QuickLaunchAction(fileName, this)); } else { qWarning() << "XdgDesktopFile" << fileName << "is not valid"; QMessageBox::information(this, tr("Drop Error"), tr("File/URL '%1' cannot be embedded into QuickLaunch for now").arg(fileName) ); } } saveSettings(); } void LXQtQuickLaunch::switchButtons(QuickLaunchButton *button1, QuickLaunchButton *button2) { if (button1 == button2) return; int n1 = mLayout->indexOf(button1); int n2 = mLayout->indexOf(button2); int l = qMin(n1, n2); int m = qMax(n1, n2); mLayout->moveItem(l, m); mLayout->moveItem(m-1, l); saveSettings(); } void LXQtQuickLaunch::buttonDeleted() { QuickLaunchButton *btn = qobject_cast(sender()); if (!btn) return; mLayout->removeWidget(btn); btn->deleteLater(); saveSettings(); if (mLayout->isEmpty()) showPlaceHolder(); realign(); } void LXQtQuickLaunch::buttonMoveLeft() { QuickLaunchButton *btn = qobject_cast(sender()); if (!btn) return; int index = indexOfButton(btn); if (index > 0) { mLayout->moveItem(index, index - 1); saveSettings(); } } void LXQtQuickLaunch::buttonMoveRight() { QuickLaunchButton *btn1 = qobject_cast(sender()); if (!btn1) return; int index = indexOfButton(btn1); if (index < countOfButtons() - 1) { mLayout->moveItem(index, index + 1); saveSettings(); } } void LXQtQuickLaunch::saveSettings() { QSettings *settings = mPlugin->settings(); settings->remove("apps"); settings->beginWriteArray("apps"); int i = 0; for(int j=0; jcount(); ++j) { QuickLaunchButton *b = qobject_cast(mLayout->itemAt(j)->widget()); if(!b) continue; settings->setArrayIndex(i); QHashIterator it(b->settingsMap()); while (it.hasNext()) { it.next(); settings->setValue(it.key(), it.value()); } ++i; } settings->endArray(); } void LXQtQuickLaunch::showPlaceHolder() { if (!mPlaceHolder) { mPlaceHolder = new QLabel(this); mPlaceHolder->setAlignment(Qt::AlignCenter); mPlaceHolder->setObjectName("QuickLaunchPlaceHolder"); mPlaceHolder->setText(tr("Drop application\nicons here")); } mLayout->addWidget(mPlaceHolder); } lxqt-panel-0.10.0/plugin-quicklaunch/lxqtquicklaunch.h000066400000000000000000000041741261500472700230630ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2012 Razor team * Authors: * Petr Vanek * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTQUICKLAUNCH_H #define LXQTQUICKLAUNCH_H #include "../panel/lxqtpanel.h" #include #include class XdgDesktopFile; class QuickLaunchAction; class QDragEnterEvent; class QuickLaunchButton; class QSettings; class QLabel; namespace LXQt { class GridLayout; } /*! \brief Loader for "quick launcher" icons in the panel. \author Petr Vanek */ class LXQtQuickLaunch : public QFrame { Q_OBJECT public: LXQtQuickLaunch(ILXQtPanelPlugin *plugin, QWidget* parent = 0); ~LXQtQuickLaunch(); int indexOfButton(QuickLaunchButton* button) const; int countOfButtons() const; void realign(); private: LXQt::GridLayout *mLayout; ILXQtPanelPlugin *mPlugin; QLabel *mPlaceHolder; void dragEnterEvent(QDragEnterEvent *e); void dropEvent(QDropEvent *e); void saveSettings(); void showPlaceHolder(); private slots: void addButton(QuickLaunchAction* action); void switchButtons(QuickLaunchButton *button1, QuickLaunchButton *button2); void buttonDeleted(); void buttonMoveLeft(); void buttonMoveRight(); }; #endif lxqt-panel-0.10.0/plugin-quicklaunch/lxqtquicklaunchplugin.cpp000066400000000000000000000026751261500472700246410ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtquicklaunchplugin.h" #include "lxqtquicklaunch.h" LXQtQuickLaunchPlugin::LXQtQuickLaunchPlugin(const ILXQtPanelPluginStartupInfo &startupInfo): QObject(), ILXQtPanelPlugin(startupInfo), mWidget(new LXQtQuickLaunch(this)) { } LXQtQuickLaunchPlugin::~LXQtQuickLaunchPlugin() { delete mWidget; } QWidget *LXQtQuickLaunchPlugin::widget() { return mWidget; } void LXQtQuickLaunchPlugin::realign() { mWidget->realign(); } lxqt-panel-0.10.0/plugin-quicklaunch/lxqtquicklaunchplugin.h000066400000000000000000000037621261500472700243040ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTQUICKLAUNCHPLUGIN_H #define LXQTQUICKLAUNCHPLUGIN_H #include "../panel/ilxqtpanelplugin.h" #include class LXQtQuickLaunch; class LXQtQuickLaunchPlugin: public QObject, public ILXQtPanelPlugin { Q_OBJECT public: explicit LXQtQuickLaunchPlugin(const ILXQtPanelPluginStartupInfo &startupInfo); ~LXQtQuickLaunchPlugin(); virtual QWidget *widget(); virtual QString themeId() const { return "QuickLaunch"; } virtual Flags flags() const { return NeedsHandle; } void realign(); bool isSeparate() const { return true; } private: LXQtQuickLaunch *mWidget; }; class LXQtQuickLaunchPluginLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT // Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new LXQtQuickLaunchPlugin(startupInfo); } }; #endif // LXQTQUICKLAUNCHPLUGIN_H lxqt-panel-0.10.0/plugin-quicklaunch/quicklaunchaction.cpp000066400000000000000000000067001261500472700237000ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Petr Vanek * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "quicklaunchaction.h" #include #include #include #include #include #include #include #include #include QuickLaunchAction::QuickLaunchAction(const QString & name, const QString & exec, const QString & icon, QWidget * parent) : QAction(name, parent), m_valid(true) { m_type = ActionLegacy; m_settingsMap["name"] = name; m_settingsMap["exec"] = exec; m_settingsMap["icon"] = icon; if (icon == "" || icon.isNull()) setIcon(XdgIcon::defaultApplicationIcon()); else setIcon(QIcon(icon)); setData(exec); connect(this, SIGNAL(triggered()), this, SLOT(execAction())); } QuickLaunchAction::QuickLaunchAction(const XdgDesktopFile * xdg, QWidget * parent) : QAction(parent), m_valid(true) { m_type = ActionXdg; m_settingsMap["desktop"] = xdg->fileName(); QString title(xdg->localizedValue("Name").toString()); QString gn(xdg->localizedValue("GenericName").toString()); if (!gn.isEmpty()) title += " (" + gn + ")"; setText(title); setIcon(xdg->icon(XdgIcon::defaultApplicationIcon())); setData(xdg->fileName()); connect(this, SIGNAL(triggered()), this, SLOT(execAction())); } QuickLaunchAction::QuickLaunchAction(const QString & fileName, QWidget * parent) : QAction(parent), m_valid(true) { m_type = ActionFile; setText(fileName); setData(fileName); m_settingsMap["file"] = fileName; QFileInfo fi(fileName); if (fi.isDir()) { QFileIconProvider ip; setIcon(ip.icon(fi)); } else { QMimeDatabase db; XdgMimeType mi(db.mimeTypeForFile(fi)); setIcon(mi.icon()); } connect(this, SIGNAL(triggered()), this, SLOT(execAction())); } void QuickLaunchAction::execAction() { QString exec(data().toString()); qDebug() << "execAction" << exec; switch (m_type) { case ActionLegacy: QProcess::startDetached(exec); break; case ActionXdg: { XdgDesktopFile xdg; if(xdg.load(exec)) xdg.startDetached(); break; } case ActionFile: QDesktopServices::openUrl(QUrl(exec)); break; } } lxqt-panel-0.10.0/plugin-quicklaunch/quicklaunchaction.h000066400000000000000000000046651261500472700233550ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Petr Vanek * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef QUICKLAUNCHACTION_H #define QUICKLAUNCHACTION_H #include class XdgDesktopFile; /*! \brief Special action representation for LXQtQuickLaunch plugin. It supports XDG desktop files or "legacy" launching of specified apps. All process management is handled internally. \author Petr Vanek */ class QuickLaunchAction : public QAction { Q_OBJECT public: /*! Constructor for "legacy" launchers. \warning The XDG way is preferred this is only for older or non-standard apps \param name a name to display in tooltip \param exec a executable with path \param icon a valid QIcon */ QuickLaunchAction(const QString & name, const QString & exec, const QString & icon, QWidget * parent); /*! Constructor for XDG desktop handlers. */ QuickLaunchAction(const XdgDesktopFile * xdg, QWidget * parent); /*! Constructor for regular files */ QuickLaunchAction(const QString & fileName, QWidget * parent); //! Returns true if the action is valid (contains all required properties). bool isValid() { return m_valid; } QHash settingsMap() { return m_settingsMap; } public slots: void execAction(); private: enum ActionType { ActionLegacy, ActionXdg, ActionFile }; ActionType m_type; QString m_data; bool m_valid; QHash m_settingsMap; }; #endif lxqt-panel-0.10.0/plugin-quicklaunch/quicklaunchbutton.cpp000066400000000000000000000111671261500472700237410ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Petr Vanek * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "quicklaunchbutton.h" #include "lxqtquicklaunch.h" #include #include #include #include #include #include #include #include #define MIMETYPE "x-lxqt/quicklaunch-button" QuickLaunchButton::QuickLaunchButton(QuickLaunchAction * act, QWidget * parent) : QToolButton(parent), mAct(act) { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setAcceptDrops(true); setDefaultAction(mAct); mAct->setParent(this); mMoveLeftAct = new QAction(XdgIcon::fromTheme("go-previous"), tr("Move left"), this); connect(mMoveLeftAct, SIGNAL(triggered()), this, SIGNAL(movedLeft())); mMoveRightAct = new QAction(XdgIcon::fromTheme("go-next"), tr("Move right"), this); connect(mMoveRightAct, SIGNAL(triggered()), this, SIGNAL(movedRight())); mDeleteAct = new QAction(XdgIcon::fromTheme("dialog-close"), tr("Remove from quicklaunch"), this); connect(mDeleteAct, SIGNAL(triggered()), this, SLOT(selfRemove())); addAction(mDeleteAct); mMenu = new QMenu(this); mMenu->addAction(mAct); mMenu->addSeparator(); mMenu->addAction(mMoveLeftAct); mMenu->addAction(mMoveRightAct); mMenu->addSeparator(); mMenu->addAction(mDeleteAct); setContextMenuPolicy(Qt::CustomContextMenu); connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(this_customContextMenuRequested(const QPoint&))); } QuickLaunchButton::~QuickLaunchButton() { //m_act->deleteLater(); } QHash QuickLaunchButton::settingsMap() { Q_ASSERT(mAct); return mAct->settingsMap(); } void QuickLaunchButton::this_customContextMenuRequested(const QPoint & pos) { LXQtQuickLaunch *panel = qobject_cast(parent()); mMoveLeftAct->setEnabled( panel && panel->indexOfButton(this) > 0); mMoveRightAct->setEnabled(panel && panel->indexOfButton(this) < panel->countOfButtons() - 1); mMenu->popup(mapToGlobal(pos)); } void QuickLaunchButton::selfRemove() { emit buttonDeleted(); } void QuickLaunchButton::paintEvent(QPaintEvent *) { // Do not paint that ugly "has menu" arrow QStylePainter p(this); QStyleOptionToolButton opt; initStyleOption(&opt); opt.features &= (~ QStyleOptionToolButton::HasMenu); p.drawComplexControl(QStyle::CC_ToolButton, opt); } void QuickLaunchButton::mousePressEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton && e->modifiers() == Qt::ControlModifier) { mDragStart = e->pos(); return; } QToolButton::mousePressEvent(e); } void QuickLaunchButton::mouseMoveEvent(QMouseEvent *e) { if (!(e->buttons() & Qt::LeftButton)) { return; } if ((e->pos() - mDragStart).manhattanLength() < QApplication::startDragDistance()) { return; } if (e->modifiers() != Qt::ControlModifier) { return; } QDrag *drag = new QDrag(this); ButtonMimeData *mimeData = new ButtonMimeData(); mimeData->setButton(this); drag->setMimeData(mimeData); drag->exec(Qt::MoveAction); // Icon was droped outside the panel, remove button if (!drag->target()) { selfRemove(); } } void QuickLaunchButton::dragMoveEvent(QDragMoveEvent * e) { if (e->mimeData()->hasFormat(MIMETYPE)) e->acceptProposedAction(); else e->ignore(); } void QuickLaunchButton::dragEnterEvent(QDragEnterEvent *e) { const ButtonMimeData *mimeData = qobject_cast(e->mimeData()); if (mimeData && mimeData->button()) { emit switchButtons(mimeData->button(), this); } } lxqt-panel-0.10.0/plugin-quicklaunch/quicklaunchbutton.h000066400000000000000000000045701261500472700234060ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2012 Razor team * Authors: * Petr Vanek * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTQUICKLAUNCHBUTTON_H #define LXQTQUICKLAUNCHBUTTON_H #include "quicklaunchaction.h" #include #include class QuickLaunchButton : public QToolButton { Q_OBJECT public: QuickLaunchButton(QuickLaunchAction * act, QWidget* parent = 0); ~QuickLaunchButton(); QHash settingsMap(); signals: void buttonDeleted(); void switchButtons(QuickLaunchButton *from, QuickLaunchButton *to); void movedLeft(); void movedRight(); protected: //! Disable that annoying small arrow when there is a menu virtual void paintEvent(QPaintEvent *); void mousePressEvent(QMouseEvent *e); void mouseMoveEvent(QMouseEvent *e); void dragEnterEvent(QDragEnterEvent *e); void dragMoveEvent(QDragMoveEvent * e); private: QuickLaunchAction *mAct; QAction *mDeleteAct; QAction *mMoveLeftAct; QAction *mMoveRightAct; QMenu *mMenu; QPoint mDragStart; private slots: void this_customContextMenuRequested(const QPoint & pos); void selfRemove(); }; class ButtonMimeData: public QMimeData { Q_OBJECT public: ButtonMimeData(): QMimeData(), mButton(0) { } QuickLaunchButton *button() const { return mButton; } void setButton(QuickLaunchButton *button) { mButton = button; } private: QuickLaunchButton *mButton; }; #endif lxqt-panel-0.10.0/plugin-quicklaunch/resources/000077500000000000000000000000001261500472700214765ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-quicklaunch/resources/quicklaunch.desktop.in000066400000000000000000000002631261500472700260060ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. Icon=quickopen #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-quicklaunch/translations/000077500000000000000000000000001261500472700222055ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch.ts000066400000000000000000000025661261500472700250750ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error File/URL '%1' cannot be embedded into QuickLaunch for now Drop application icons here QuickLaunchButton Move left Move right Remove from quicklaunch lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_ar.desktop000066400000000000000000000004211261500472700265660ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[ar]=إطلاق تطبيقاتك المفضَّلة Name[ar]=البدء السريع lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_ar.ts000066400000000000000000000030051261500472700255440ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error خطاٌ في النَّقل File/URL '%1' cannot be embedded into QuickLaunch for now ﻻ يمكن تضمين الملف أو الرَّابط %1 في لوحة البدء السَّريع حاليَّاً Drop application icons here QuickLaunchButton Move left إلى اليسار Move right إلى اليمين Remove from quicklaunch إزالة من لوحة البدء السَّريع lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_cs.desktop000066400000000000000000000004041261500472700265720ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[cs]=Spouštěte své oblíbené programy Name[cs]=Rychlé spouštění lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_cs.ts000066400000000000000000000026701261500472700255560ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Problém s upuštěním File/URL '%1' cannot be embedded into QuickLaunch for now Soubor/URL '%1' nyní nelze vložit do rychlého spuštění Drop application icons here QuickLaunchButton Move left Přesunout vlevo Move right Přesunout vpravo Remove from quicklaunch Odstranit z rychlého spuštění lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_cs_CZ.desktop000066400000000000000000000004061261500472700271700ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[cs_CZ]=Spusťte své oblíbené programy Name[cs_CZ]=Rychlé spuštění lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_cs_CZ.ts000066400000000000000000000026731261500472700261550ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Problém s upuštěním File/URL '%1' cannot be embedded into QuickLaunch for now Soubor/URL '%1' nyní nelze vložit do rychlého spuštění Drop application icons here QuickLaunchButton Move left Přesunout vlevo Move right Přesunout vpravo Remove from quicklaunch Odstranit z rychlého spuštění lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_da.desktop000066400000000000000000000003631261500472700265550ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[da]=Start dine favoritprogrammer Name[da]=Quicklaunch lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_da.ts000066400000000000000000000026461261500472700255400ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Slipfejl File/URL '%1' cannot be embedded into QuickLaunch for now Fil/URL '%1' kan ikke indlejres i HurtigStart lige nu Drop application icons here QuickLaunchButton Move left Flyt mod venstre Move right Flyt mod højre Remove from quicklaunch Fjern fra Hurtigstart lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_da_DK.desktop000066400000000000000000000003721261500472700271330ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[da_DK]=Start dine ynglingsprogrammer Name[da_DK]=Hurtigstart lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_da_DK.ts000066400000000000000000000026471261500472700261170ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Træk og slip fejl File/URL '%1' cannot be embedded into QuickLaunch for now Fil/URL '%1' kan ikke blive indlejret i QuickLaunch lige nu Drop application icons here QuickLaunchButton Move left Flyt mod venstre Move right Flyt mod højre Remove from quicklaunch Fjern fra quicklaunch lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_de.desktop000066400000000000000000000001121261500472700265510ustar00rootroot00000000000000Name[de]=Schnellstarter Comment[de]=Starten Sie Ihre Lieblingsanwendungen lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_de.ts000066400000000000000000000027561261500472700255460ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Fehler beim fallen lassen File/URL '%1' cannot be embedded into QuickLaunch for now Datei/URL '%1' kann momentan nicht in die Schnellstartleiste eingebettet werden. Drop application icons here Anwendung/Symbol hier fallen lassen QuickLaunchButton Move left Nach links verschieben Move right Nach rechts verschieben Remove from quicklaunch Aus der Schnellstartleiste entfernen lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_el.desktop000066400000000000000000000002131261500472700265630ustar00rootroot00000000000000Name[el]=Γρήγορη εκκίνηση Comment[el]=Εύκολη πρόσβαση στις αγαπημένες σας εφαρμογές lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_el.ts000066400000000000000000000032131261500472700255430ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Σφάλμα εναπόθεσης File/URL '%1' cannot be embedded into QuickLaunch for now Το αρχείο/η διεύθυνση "%1" δεν μπορεί να ενσωματωθεί για την ώρα στη γρήγορη εκκίνηση Drop application icons here Εναποθέστε εδώ εικονίδια εφαρμογών QuickLaunchButton Move left Μετακίνηση αριστερά Move right Μετακίνηση δεξιά Remove from quicklaunch Αφαίρεση από τη γρήγορη εκκίνηση lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_eo.desktop000066400000000000000000000003731261500472700265750ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[eo]=Lanĉu viajn preferatajn aplikaĵojn Name[eo]=Rapidlanĉo lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_eo.ts000066400000000000000000000026501261500472700255520ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Eraro dum forigado File/URL '%1' cannot be embedded into QuickLaunch for now Dosiero/URL '%1' ne povas esti enkorpigita en rapidlanĉilo nun Drop application icons here QuickLaunchButton Move left Movi maldekstren Move right Movi dekstren Remove from quicklaunch Forigi el rapidlanĉilo lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_es.desktop000066400000000000000000000003741261500472700266020ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[es]=Lanze sus aplicaciones favoritas Name[es]=Lanzador rápido lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_es.ts000066400000000000000000000026631261500472700255620ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Error al soltar File/URL '%1' cannot be embedded into QuickLaunch for now El archivo/URL '%1' por el momento no puede incrustarse en QuickLaunch Drop application icons here QuickLaunchButton Move left Mover a la izquierda Move right Mover a la derecha Remove from quicklaunch Quitar de quicklaunch lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_es_VE.desktop000066400000000000000000000004131261500472700271660ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[es_VE]=Iconos lanzadores de tus aplicaciones favoritas Name[es_VE]=Lanzadores lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_es_VE.ts000066400000000000000000000027101261500472700261450ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Error al remover File/URL '%1' cannot be embedded into QuickLaunch for now Archivo/URL '%1' no puede ser empotrado en la barra de lanzadores por ahora Drop application icons here QuickLaunchButton Move left Mover a la izquierda Move right Mover a la derecha Remove from quicklaunch Remover de la barra de lanzadores lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_eu.desktop000066400000000000000000000004031261500472700265750ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[eu]=Zure gogoko aplikazioetarako sarbide erraza Name[eu]=Abio azkarra lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_eu.ts000066400000000000000000000026471261500472700255660ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Errorea jaregitean File/URL '%1' cannot be embedded into QuickLaunch for now '%1' fitxategia/URLa ezin da QuickLaunch-en txertatu oraingoz Drop application icons here QuickLaunchButton Move left Mugitu ezkerrera Move right Mugitu eskuinera Remove from quicklaunch Kendu abio azkarretik lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_fi.desktop000066400000000000000000000003731261500472700265700ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[fi]=Käynnistä suosikkisovelluksesi Name[fi]=Pikakäynnistys lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_fi.ts000066400000000000000000000026641261500472700255520ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Poistovirhe File/URL '%1' cannot be embedded into QuickLaunch for now Tiedostoa/osoitetta '%1' ei toistaiseksi voi asettaa pikakäynnistykseen Drop application icons here QuickLaunchButton Move left Siirrä vasemmalle Move right Siirrä oikealle Remove from quicklaunch Poista pikakäynnistyksestä lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_fr_FR.desktop000066400000000000000000000004031261500472700271620ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[fr_FR]=Lancer votre application favorite Name[fr_FR]=Lancement rapide lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_fr_FR.ts000066400000000000000000000027651261500472700261540ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Ne pas tenir compte de l'erreur File/URL '%1' cannot be embedded into QuickLaunch for now Le fichier/l'URL '%1' ne peut pas être inclus dans le lancement rapide pour l'instant Drop application icons here QuickLaunchButton Move left Déplacer vers la gauche Move right Déplacer vers la droite Remove from quicklaunch Enlever du lancement rapide lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_hu.desktop000066400000000000000000000003761261500472700266110ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[hu]=A kedvenc alkalmazásainak indítása Name[hu]=Gyorsindító lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_hu.ts000066400000000000000000000026301261500472700255610ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Ejtési hiba File/URL '%1' cannot be embedded into QuickLaunch for now A(z) „%1” fájl vagy URL nem ágyazható be a Gyorsindítóba Drop application icons here Ejts ide indító ikont QuickLaunchButton Move left Balra Move right Jobbra Remove from quicklaunch Eltávolítás a gyorsindítóról lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_hu_HU.ts000066400000000000000000000026331261500472700261600ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Ejtési hiba File/URL '%1' cannot be embedded into QuickLaunch for now A(z) „%1” fájl vagy URL nem ágyazható be a Gyorsindítóba Drop application icons here Ejts ide indító ikont QuickLaunchButton Move left Balra Move right Jobbra Remove from quicklaunch Eltávolítás a gyorsindítóról lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_ia.desktop000066400000000000000000000002521261500472700265570ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quicklaunch Comment=Launch your favorite Applications #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_ia.ts000066400000000000000000000025631261500472700255430ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error File/URL '%1' cannot be embedded into QuickLaunch for now Drop application icons here QuickLaunchButton Move left Move right Remove from quicklaunch lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_id_ID.desktop000066400000000000000000000003741261500472700271430ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[id_ID]=Luncurkan aplikasi favorit anda Name[id_ID]=Quicklaunch lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_id_ID.ts000066400000000000000000000025661261500472700261250ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error File/URL '%1' cannot be embedded into QuickLaunch for now Drop application icons here QuickLaunchButton Move left Move right Remove from quicklaunch lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_it.desktop000066400000000000000000000001031261500472700265750ustar00rootroot00000000000000Comment[it]=Avvia le applicazioni preferite Name[it]=Avvio rapido lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_it.ts000066400000000000000000000027151261500472700255650ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Errore di trascinamento File/URL '%1' cannot be embedded into QuickLaunch for now Il file/URL '%1' in questo momento non può essere inserito in Avvio rapido Drop application icons here Trascina applicazioni dal menù qui QuickLaunchButton Move left Sposta a sinistra Move right Sposta a destra Remove from quicklaunch Rimuovi da Avvio rapido lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_ja.desktop000066400000000000000000000004461261500472700265650ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[ja]=お気に入りのアプリケーションの起動を容易にします Name[ja]=クイック起動 lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_ja.ts000066400000000000000000000027641261500472700255470ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error ドロップエラー File/URL '%1' cannot be embedded into QuickLaunch for now ファイル/URL '%1' は現在、クイック起動に埋め込むことができません Drop application icons here アプリケーションアイコンを ここへドロップ QuickLaunchButton Move left 左に移動 Move right 右に移動 Remove from quicklaunch クイック起動から削除 lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_ko.desktop000066400000000000000000000002521261500472700265770ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quicklaunch Comment=Launch your favorite Applications #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_ko.ts000066400000000000000000000025631261500472700255630ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error File/URL '%1' cannot be embedded into QuickLaunch for now Drop application icons here QuickLaunchButton Move left Move right Remove from quicklaunch lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_lt.desktop000066400000000000000000000004041261500472700266040ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[lt]=Paleiskite savo mėgstamas programas Name[lt]=Greitasis paleidimas lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_lt.ts000066400000000000000000000026351261500472700255710ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Tempimo klaida File/URL '%1' cannot be embedded into QuickLaunch for now Failo/URL „%1“ šiuo metu negalima patalpinti greitajame paleidime Drop application icons here QuickLaunchButton Move left Perkelti į kairę Move right Perkelti į dešinę Remove from quicklaunch Pašalinti lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_nl.desktop000066400000000000000000000003671261500472700266060ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[nl]=Uw favoriete programma's starten Name[nl]=Snelstarter lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_nl.ts000066400000000000000000000026711261500472700255630ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Neerzetfout File/URL '%1' cannot be embedded into QuickLaunch for now Bestand/URL '%1' kan vooralsnog niet worden ingebed in de snelstartbalk Drop application icons here QuickLaunchButton Move left Verplaats naar links Move right Verplaats naar rechts Remove from quicklaunch Verwijder uit snelstartbalk lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_pl.desktop000066400000000000000000000004031261500472700265770ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[pl]=Uruchamiaj Twoje ulubione aplikacje Name[pl]=Szybkie uruchamianie lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_pl.ts000066400000000000000000000025721261500472700255650ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error File/URL '%1' cannot be embedded into QuickLaunch for now Drop application icons here QuickLaunchButton Move left Przesuń w lewo Move right Przesuń w prawo Remove from quicklaunch Usuń z szybkiego uruchamiania lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_pl_PL.desktop000066400000000000000000000004071261500472700271760ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[pl_PL]=Uruchom swoje ulubione aplikacje. Name[pl_PL]=Szybkie uruchamianie lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_pl_PL.ts000066400000000000000000000027201261500472700261530ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Problem dodawania File/URL '%1' cannot be embedded into QuickLaunch for now Plik/URL '%1' nie może zostać umiesczony na pasku szybkiego uruchamiania Drop application icons here Upuść ikonę aplikacji tutaj QuickLaunchButton Move left Przesuń w lewo Move right Przesuń w prawo Remove from quicklaunch Usuń z paska szybkiego uruchamiania lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_pt.desktop000066400000000000000000000004101261500472700266050ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Name[pt]=Inicio rápido Comment[pt]=Acesso rápido as suas aplicações preferidas. lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_pt.ts000066400000000000000000000026721261500472700255760ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Erro ao largar File/URL '%1' cannot be embedded into QuickLaunch for now Neste momento, não pode incluir o ficheiro/url '%1' no inicio rápido. Drop application icons here QuickLaunchButton Move left Mover para a esquerda Move right Mover para a direita Remove from quicklaunch Remover do inicio rápido lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_pt_BR.desktop000066400000000000000000000004031261500472700271720ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[pt_BR]=Lance seus aplicativos favoritos Name[pt_BR]=Lançador rápido lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_pt_BR.ts000066400000000000000000000026721261500472700261610ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Erro de queda File/URL '%1' cannot be embedded into QuickLaunch for now O arquivo/URL '%1' não pôde ser incorporado ao lançador rápido Drop application icons here QuickLaunchButton Move left Mover para a esquerda Move right Mover para a direita Remove from quicklaunch Remover do lançador rápido lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_ro_RO.desktop000066400000000000000000000003441261500472700272100ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[ro_RO]=Lansează aplicațiile favorite lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_ro_RO.ts000066400000000000000000000027321261500472700261700ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error File/URL '%1' cannot be embedded into QuickLaunch for now Fișierul/URL-ul '%1' nu poate fi inclus în lista de lansare rapidă momentan Drop application icons here QuickLaunchButton Move left Mută spre stânga Move right Mută spre dreapta Remove from quicklaunch Îndepărtează din lista pentru lansare rapidă lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_ru.desktop000066400000000000000000000004661261500472700266230ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[ru]=Простой доступ к вашим любимым приложениям. Name[ru]=Быстрый запускlxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_ru.ts000066400000000000000000000031031261500472700255670ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Ошибка бросания File/URL '%1' cannot be embedded into QuickLaunch for now Файл/URL-адрес '%1' не может быть встроен в быстрый запуск сейчас Drop application icons here Бросьте значки приложений сюда QuickLaunchButton Move left Сдвинуть влево Move right Сдвинуть вправо Remove from quicklaunch Удалить из быстрого запуска lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_ru_RU.desktop000066400000000000000000000004741261500472700272300ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[ru_RU]=Простой доступ к вашим любимым приложениям. Name[ru_RU]=Быстрый запускlxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_ru_RU.ts000066400000000000000000000031061261500472700262000ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Ошибка бросания File/URL '%1' cannot be embedded into QuickLaunch for now Файл/URL-адрес '%1' не может быть встроен в быстрый запуск сейчас Drop application icons here Бросьте значки приложений сюда QuickLaunchButton Move left Сдвинуть влево Move right Сдвинуть вправо Remove from quicklaunch Удалить из быстрого запуска lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_sk.desktop000066400000000000000000000004131261500472700266020ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[sk]=Spúšťanie vašich obľúbených aplikácií Name[sk]=Rýchle spustenie lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_sk_SK.ts000066400000000000000000000026651261500472700261670ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error CHyba pri pustení File/URL '%1' cannot be embedded into QuickLaunch for now Súbor/URL „%1“ nateraz nemožno vložiť do rýchleho spustenia Drop application icons here QuickLaunchButton Move left Presunúť vľavo Move right Presunúť vpravo Remove from quicklaunch Odstrániť z rýchleho spustenia lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_sl.desktop000066400000000000000000000003741261500472700266110ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[sl]=Zaženite svoje priljubljene programe Name[sl]=Hitri zagon lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_sl.ts000066400000000000000000000026401261500472700255640ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Napaka spusta File/URL '%1' cannot be embedded into QuickLaunch for now Datoteke/lokacije »%1« trenutno ni bilo moč vstaviti v Hitri zagon Drop application icons here QuickLaunchButton Move left Premakni levo Move right Premakni desno Remove from quicklaunch Odstrani iz hitrega zagona lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_sr.desktop000066400000000000000000000004361261500472700266160ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[sr]=Покреће ваше омиљене програме Name[sr]=Брзо покретање lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_sr@ijekavian.desktop000066400000000000000000000001751261500472700306000ustar00rootroot00000000000000Name[sr@ijekavian]=Брзо покретање Comment[sr@ijekavian]=Покреће ваше омиљене програме lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_sr@ijekavianlatin.desktop000066400000000000000000000001441261500472700316240ustar00rootroot00000000000000Name[sr@ijekavianlatin]=Brzo pokretanje Comment[sr@ijekavianlatin]=Pokreće vaše omiljene programe lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_sr@latin.desktop000066400000000000000000000004071261500472700277440ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[sr@latin]=Pokreće vaše omiljene programe Name[sr@latin]=Brzo pokretanje lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_sr@latin.ts000066400000000000000000000025711261500472700267250ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error File/URL '%1' cannot be embedded into QuickLaunch for now Drop application icons here QuickLaunchButton Move left Move right Remove from quicklaunch lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_sr_BA.ts000066400000000000000000000030111261500472700261250ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Грешка испуштања File/URL '%1' cannot be embedded into QuickLaunch for now Фајл/УРЛ „%1“ не може бити уграђен у Брзо Покретање за сада Drop application icons here QuickLaunchButton Move left Помјери лијево Move right Помјери десно Remove from quicklaunch Уклони са брзог покретања lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_sr_RS.ts000066400000000000000000000030011261500472700261660ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Грешка испуштања File/URL '%1' cannot be embedded into QuickLaunch for now Фајл/УРЛ „%1“ не може бити уграђен у Брзо Покретање за сада Drop application icons here QuickLaunchButton Move left Помери лево Move right Помери десно Remove from quicklaunch Уклони са брзог покретања lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_th_TH.desktop000066400000000000000000000005611261500472700271770ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[th_TH]=เรียกใช้งานโปรแกรมที่ชื่นชอบของคุณ Name[th_TH]=ตัวเรียกโปรแกรมด่วน lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_th_TH.ts000066400000000000000000000032331261500472700261530ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error การหย่อนขัดข้อง File/URL '%1' cannot be embedded into QuickLaunch for now แฟ้ม/URL '%1' ไม่สามารถฝังตัวไปยังตัวเรียกโปรแกรมด่วนได้ในตอนนี้ Drop application icons here QuickLaunchButton Move left ย้ายไปทางซ้าย Move right ย้ายไปทางขวา Remove from quicklaunch ลบออกจากตัวเรียกโปรแกรมด่วน lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_tr.desktop000066400000000000000000000004311261500472700266120ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[tr]=Sık kullanılan uygulamalarınızı çalıştırın Name[tr]=Hızlı çalıştırıcı lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_tr.ts000066400000000000000000000026721261500472700256000ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Bırakma Hatası File/URL '%1' cannot be embedded into QuickLaunch for now Şimdilik '%1' dosyası/bağlantısı Hızlı Başlatıcı' ya eklenemiyor Drop application icons here QuickLaunchButton Move left Sola kaydır Move right Sağa kaydır Remove from quicklaunch Hızlı başlatıcıdan kaldır lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_uk.desktop000066400000000000000000000004561261500472700266130ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[uk]=Простіше запускайте улюблені програми Name[uk]=Швидкий запуск lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_uk.ts000066400000000000000000000030101261500472700255550ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error Збій при розміщенні File/URL '%1' cannot be embedded into QuickLaunch for now Не вдається додати "%1" до швидкого запуску Drop application icons here QuickLaunchButton Move left Посунути ліворуч Move right Посунути враворуч Remove from quicklaunch Вилучити зі швидкого запуску lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_zh_CN.GB2312.desktop000066400000000000000000000002521261500472700277660ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quicklaunch Comment=Launch your favorite Applications #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_zh_CN.desktop000066400000000000000000000003601261500472700271670ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[zh_CN]=启动常用程序 Name[zh_CN]=快速启动 lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_zh_CN.ts000066400000000000000000000026071261500472700261520ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error 出现错误 File/URL '%1' cannot be embedded into QuickLaunch for now 文件/URL '%1' 暂时无法被嵌入到快速启动 Drop application icons here QuickLaunchButton Move left 左移 Move right 右移 Remove from quicklaunch 从快速启动删除 lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_zh_TW.desktop000066400000000000000000000003741261500472700272260ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Quick launch Comment=Easy access to your favourite applications. #TRANSLATIONS_DIR=../translations # Translations Comment[zh_TW]=啟動您最愛的應用程式 Name[zh_TW]=快速啟動 lxqt-panel-0.10.0/plugin-quicklaunch/translations/quicklaunch_zh_TW.ts000066400000000000000000000026151261500472700262030ustar00rootroot00000000000000 LXQtQuickLaunch Drop Error 移入錯誤 File/URL '%1' cannot be embedded into QuickLaunch for now 檔案位址'%1'現在無法嵌入至快速啟動 Drop application icons here QuickLaunchButton Move left 往左移 Move right 往右移 Remove from quicklaunch 從快速啟動中移除 lxqt-panel-0.10.0/plugin-screensaver/000077500000000000000000000000001261500472700174755ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-screensaver/CMakeLists.txt000066400000000000000000000002741261500472700222400ustar00rootroot00000000000000set(PLUGIN "screensaver") set(HEADERS panelscreensaver.h ) set(SOURCES panelscreensaver.cpp ) set(LIBRARIES ${LIBRARIES} lxqt-globalkeys ) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-screensaver/panelscreensaver.cpp000066400000000000000000000045531261500472700235500ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Petr Vanek * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include #include #include #include #include #include "panelscreensaver.h" #define DEFAULT_SHORTCUT "Control+Alt+L" PanelScreenSaver::PanelScreenSaver(const ILXQtPanelPluginStartupInfo &startupInfo) : QObject(), ILXQtPanelPlugin(startupInfo) { mSaver = new LXQt::ScreenSaver(this); QList actions = mSaver->availableActions(); if (!actions.empty()) mButton.setDefaultAction(actions.first()); //mButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); mShortcutKey = GlobalKeyShortcut::Client::instance()->addAction(QString(), QString("/panel/%1/lock").arg(settings()->group()), tr("Lock Screen"), this); if (mShortcutKey) { connect(mShortcutKey, &GlobalKeyShortcut::Action::registrationFinished, this, &PanelScreenSaver::shortcutRegistered); connect(mShortcutKey, SIGNAL(activated()), mSaver, SLOT(lockScreen())); } } void PanelScreenSaver::shortcutRegistered() { if (mShortcutKey->shortcut().isEmpty()) { mShortcutKey->changeShortcut(DEFAULT_SHORTCUT); if (mShortcutKey->shortcut().isEmpty()) { LXQt::Notification::notify(tr("Panel Screensaver: Global shortcut '%1' cannot be registered").arg(DEFAULT_SHORTCUT)); } } } #undef DEFAULT_SHORTCUT lxqt-panel-0.10.0/plugin-screensaver/panelscreensaver.h000066400000000000000000000037441261500472700232160ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Petr Vanek * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef PANELSCREENSAVER_H #define PANELSCREENSAVER_H #include "../panel/ilxqtpanelplugin.h" #include namespace LXQt { class ScreenSaver; } namespace GlobalKeyShortcut { class Action; } class PanelScreenSaver : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: PanelScreenSaver(const ILXQtPanelPluginStartupInfo &startupInfo); virtual QWidget *widget() { return &mButton; } virtual QString themeId() const { return "PanelScreenSaver"; } private slots: void shortcutRegistered(); private: QToolButton mButton; LXQt::ScreenSaver * mSaver; GlobalKeyShortcut::Action * mShortcutKey; }; class PanelScreenSaverLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new PanelScreenSaver(startupInfo); } }; #endif lxqt-panel-0.10.0/plugin-screensaver/resources/000077500000000000000000000000001261500472700215075ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-screensaver/resources/screensaver.desktop.in000066400000000000000000000003041261500472700260240ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen Icon=system-lock-screen #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-screensaver/translations/000077500000000000000000000000001261500472700222165ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver.ts000066400000000000000000000011031261500472700251010ustar00rootroot00000000000000 PanelScreenSaver Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_ar.desktop000066400000000000000000000004611261500472700266140ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[ar]=تفعيل حافظ الشَّاشة و/أو قفل الشَّاشة Name[ar]=حافظ الشَّاشة lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_ar.ts000066400000000000000000000015121261500472700255670ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered ﻻ يمكن تسجيل الاختصار الشَّامل %1 لحافظ الشَّاشة! Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_cs.desktop000066400000000000000000000004301261500472700266130ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[cs]=Zapne šetřič obrazovky a/nebo zamkne obrazovku Name[cs]=Šetřič obrazovky lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_cs.ts000066400000000000000000000014761261500472700256030ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Klávesovou zkratku pro modul Šetřič obrazovky '%1' nelze zapsat Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_cs_CZ.desktop000066400000000000000000000004421261500472700272120ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[cs_CZ]=Zapnout šetřič obrazovky a/nebo zamknout obrazovku Name[cs_CZ]=Šetřič obrazovky lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_cs_CZ.ts000066400000000000000000000015151261500472700261710ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Klávesovou zkratku pro modul "Šetřič obrazovky" '%1' nelze zapsat Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_da.desktop000066400000000000000000000004201261500472700265710ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[da]=Aktiverer en pauseskærm og/eller låser skærmen Name[da]=Pauseskærm lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_da.ts000066400000000000000000000017201261500472700255520ustar00rootroot00000000000000 PanelScreenSaver Global keyboard shortcut Globale tastaturgenveje Panel Screensaver Global shortcut: '%1' cannot be registered Global genvej for skærmskåner : '%1' kan ikke registreres Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_da_DK.desktop000066400000000000000000000004231261500472700271520ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[da_DK]=Aktiverer pauseskærm og/eller låser skærmen Name[da_DK]=Pauseskærm lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_da_DK.ts000066400000000000000000000014701261500472700261320ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Panel Pauseskærm Global genvej: '%1' kan ikke registreres Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_de.desktop000066400000000000000000000001401261500472700265740ustar00rootroot00000000000000Name[de]=Bildschirmschoner Comment[de]=Bildschirmschoner aktivieren und/oder Bildschirm sperren lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_de.ts000066400000000000000000000012171261500472700255570ustar00rootroot00000000000000 PanelScreenSaver Lock Screen Bildschirm sperren Panel Screensaver: Global shortcut '%1' cannot be registered Für den Bildschirmschoner kann das globale Tastenkürzel '%1' nicht registriert werden lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_el.desktop000066400000000000000000000002461261500472700266130ustar00rootroot00000000000000Name[el]=Προφύλαξη οθόνης Comment[el]=Ενεργοποίηση της προφύλαξης οθόνης και/ή κλείδωμα της οθόνης lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_el.ts000066400000000000000000000020331261500472700255640ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Καθολική συντόμευση προφύλαξης οθόνης πίνακα: Η '%1' δεν μπορεί να εγγραφεί Lock Screen Κλείδωμα της οθόνης Panel Screensaver: Global shortcut '%1' cannot be registered Πίνακας προφύλαξης οθόνης: Η καθολική συντόμευση '%1' δεν μπορεί να καταχωρηθεί lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_eo.desktop000066400000000000000000000004201261500472700266100ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[eo]=Enŝalti ekrankurtenon kaj/aŭ ŝlosi la ekranon Name[eo]=Ekrankurteno lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_eo.ts000066400000000000000000000014751261500472700256000ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Ĉiea klavkombino por ekrankurteno de panelo: '%1' ne registreblas Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_es.desktop000066400000000000000000000004221261500472700266160ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[es]=Activa el salvapantallas y/o bloquea la pantalla Name[es]=Salvapantallas lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_es.ts000066400000000000000000000015051261500472700255760ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Atajo global del panel del protector de pantalla: imposible registrar '%1' Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_es_VE.desktop000066400000000000000000000004321261500472700272110ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[es_VE]=Activar el salvapantallas y/o bloquear la pantalla Name[es_VE]=SalvaPantallas lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_es_VE.ts000066400000000000000000000015161261500472700261720ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered El acceso de tecla global '%1' del salva pantallas del panel no pudo registrarse Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_eu.desktop000066400000000000000000000004311261500472700266200ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[eu]=Aktibatu pantaila-babeslea eta/edo blokeatu pantaila Name[eu]=Pantaila-babeslea lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_eu.ts000066400000000000000000000015031261500472700255760ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Pantaila-babesle panelaren lasterbide globala: ezin da '%1' erregistratu Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_fi.desktop000066400000000000000000000004341261500472700266100ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[fi]=Aktivoi näytönsäästäjä ja/tai lukitse näyttö Name[fi]=Näytönsäästäjä lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_fi.ts000066400000000000000000000015051261500472700255650ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Paneelin näytönsäästäjän pikanäppäintä '%1' ei voi rekisteröidä Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_fr_FR.desktop000066400000000000000000000004521261500472700272100ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[fr_FR]=Activer un économiseur d'écran et/ou verrouiller l'écran Name[fr_FR]=Économiseur d'écran lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_fr_FR.ts000066400000000000000000000015351261500472700261700ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Le raccourci clavier global de l'écran de veille : '%1' n'a pas pu être enregistré Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_hu.desktop000066400000000000000000000004441261500472700266270ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[hu]=A képernyővédő aktiválása és/vagy a képernyő zárolása Name[hu]=Képernyővédő lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_hu.ts000066400000000000000000000016251261500472700256060ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered A(z) „%1” gyorsbillentyű a panel képernyővédőjének megjelenítéséhez nem regisztrálható Lock Screen Képernyőzár Panel Screensaver: Global shortcut '%1' cannot be registered A(z) „%1” gyorsbillentyű a panel képernyővédőjének megjelenítéséhez nem regisztrálható lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_hu_HU.ts000066400000000000000000000016301261500472700261760ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered A(z) „%1” gyorsbillentyű a panel képernyővédőjének megjelenítéséhez nem regisztrálható Lock Screen Képernyőzár Panel Screensaver: Global shortcut '%1' cannot be registered A(z) „%1” gyorsbillentyű a panel képernyővédőjének megjelenítéséhez nem regisztrálható lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_ia.desktop000066400000000000000000000002661261500472700266060ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_ia.ts000066400000000000000000000011001261500472700255470ustar00rootroot00000000000000 PanelScreenSaver Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_id_ID.desktop000066400000000000000000000002661261500472700271650ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_id_ID.ts000066400000000000000000000014751261500472700261450ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Shortcut global Panel Screensaver: '%1' tidak dapat didaftarkan Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_it.desktop000066400000000000000000000001201261500472700266160ustar00rootroot00000000000000Comment[it]=Attiva un salvaschermo e/o blocca lo schermo Name[it]=Salvaschermo lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_it.ts000066400000000000000000000016031261500472700256020ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered La scorciatoia globale per lo screensaver: '%1' non può essere registrata Lock Screen Blocca schermo Panel Screensaver: Global shortcut '%1' cannot be registered La scorciatoia globale per lo screensaver: '%1' non può essere registrata lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_ja.desktop000066400000000000000000000005251261500472700266050ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[ja]=スクリーンセーバーを起動したり、スクリーンをロックしたりします Name[ja]=スクリーンセーバーの起動 lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_ja.ts000066400000000000000000000012571261500472700255650ustar00rootroot00000000000000 PanelScreenSaver Lock Screen スクリーンをロック Panel Screensaver: Global shortcut '%1' cannot be registered スクリーンセーバー: グローバルショートカット '%1' を登録することができません lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_ko.desktop000066400000000000000000000002661261500472700266260ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_ko.ts000066400000000000000000000011001261500472700255670ustar00rootroot00000000000000 PanelScreenSaver Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_lt.desktop000066400000000000000000000004331261500472700266300ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[lt]=Aktyvuoja ekrano užsklandą ir/arba užrakina ekraną Name[lt]=Ekrano užsklanda lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_lt.ts000066400000000000000000000014631261500472700256110ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Ekrano užsklandos klavišas: „%1“ negali būti registruojamas Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_nl.desktop000066400000000000000000000004361261500472700266250ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[nl]=Activeer de schermbeveiliging en/of vergrendel het scherm Name[nl]=Schermbeveiliging lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_nl.ts000066400000000000000000000015221261500472700255770ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Schermbeveiliging van paneel: systeembrede sneltoets '%1' kan niet worden geregistreerd Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_pl.desktop000066400000000000000000000004251261500472700266250ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[pl]=Aktywuje wygaszacz ekranu oraz/albo blokuje ekran Name[pl]=Wygaszacz ekranu lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_pl.ts000066400000000000000000000015031261500472700256000ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Ogólny skrót panelu wygaszacza ekranu: „%1” nie może zostać zarejestrowany Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_pl_PL.desktop000066400000000000000000000004421261500472700272170ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[pl_PL]=Włącz wygaszacz ekranu i / lub zablokuj ekran. Name[pl_PL]=Uruchom wygaszacz ekranu lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_pl_PL.ts000066400000000000000000000015301261500472700261730ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Plugin "Wygaszacz ekranu": globalny skrót '%1' nie może zostać zarejestrowany Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_pt.desktop000066400000000000000000000004321261500472700266330ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Name[pt]=Proteção de ecrã Comment[pt]=Ativar uma proteção de ecrã e/ou bloquear o ecrã lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_pt.ts000066400000000000000000000014571261500472700256200ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Tecla de atalho global: '%1' não pode ser registada Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_pt_BR.desktop000066400000000000000000000004301261500472700272140ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[pt_BR]=Ativar o protetor de tela e/ou bloquear a tela Name[pt_BR]=Protetor De Tela lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_pt_BR.ts000066400000000000000000000015111261500472700261720ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Atalho global do painel do protetor de tela: '%1' não pôde ser registrado Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_ro_RO.desktop000066400000000000000000000004431261500472700272320ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[ro_RO]=Activează protecția de ecran și/sau blochează ecranul Name[ro_RO]=Protecție ecran lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_ro_RO.ts000066400000000000000000000013351261500472700262100ustar00rootroot00000000000000 PanelScreenSaver Global keyboard shortcut Tastă rapidă globală Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_ru.desktop000066400000000000000000000005411261500472700266370ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[ru]=Включить хранитель экрана и/или блокировать экран Name[ru]=Запустить хранитель экранаlxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_ru.ts000066400000000000000000000013501261500472700256130ustar00rootroot00000000000000 PanelScreenSaver Lock Screen Блокировать экран Panel Screensaver: Global shortcut '%1' cannot be registered Хранитель экрана панели: глобальное сочетание клавиш '%1' не может быть зарегистрировано lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_ru_RU.desktop000066400000000000000000000005501261500472700272450ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[ru_RU]=Включить хранитель экрана и/или блокировать экран Name[ru_RU]=Запустить хранитель экрана lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_ru_RU.ts000066400000000000000000000013531261500472700262240ustar00rootroot00000000000000 PanelScreenSaver Lock Screen Блокировать экран Panel Screensaver: Global shortcut '%1' cannot be registered Хранитель экрана панели: глобальное сочетание клавиш '%1' не может быть зарегистрировано lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_sk.desktop000066400000000000000000000004371261500472700266320ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[sk]=Aktivovanie šetriča obrazovky alebo zamknutia obrazovky Name[sk]=Šetrič obrazovky lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_sk_SK.ts000066400000000000000000000015041261500472700262000ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Globálna klávesová skratka Panelu šetriča: „%1“ nemožno zaregistrovať Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_sl.desktop000066400000000000000000000004401261500472700266250ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[sl]=Vklopite ohranjevalnik zaslona ali pa zaklenite zaslon. Name[sl]=Ohranjevalnik zaslona lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_sl.ts000066400000000000000000000014721261500472700256100ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Globalna bližnjica za ohranjevalnik zaslona: »%1« ni moč registrirati Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_sr.desktop000066400000000000000000000005051261500472700266350ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[sr]=Активирајте чувара екрана и/или закључајте екран Name[sr]=Чувар екрана lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_sr@ijekavian.desktop000066400000000000000000000002341261500472700306160ustar00rootroot00000000000000Name[sr@ijekavian]=Чувар екрана Comment[sr@ijekavian]=Активирајте чувара екрана и/или закључајте екран lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_sr@ijekavianlatin.desktop000066400000000000000000000001651261500472700316510ustar00rootroot00000000000000Name[sr@ijekavianlatin]=Čuvar ekrana Comment[sr@ijekavianlatin]=Aktivirajte čuvara ekrana i/ili zaključajte ekran lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_sr@latin.desktop000066400000000000000000000004401261500472700277630ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[sr@latin]=Aktivirajte čuvara ekrana i/ili zaključajte ekran Name[sr@latin]=Čuvar ekrana lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_sr@latin.ts000066400000000000000000000011061261500472700267400ustar00rootroot00000000000000 PanelScreenSaver Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_sr_BA.ts000066400000000000000000000020541261500472700261550ustar00rootroot00000000000000 PanelScreenSaver Global keyboard shortcut Глобална пречица тастатуре Panel Screensaver Global shortcut: '%1' cannot be registered Глобална пречица чувара екрана за панел: „%1“ не може бити регистрована Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_sr_RS.ts000066400000000000000000000015671261500472700262270ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Глобална пречица чувара екрана за панел: „%1“ не може бити регистрована Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_th_TH.desktop000066400000000000000000000006241261500472700272210ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[th_TH]=เริ่มงานโปรแกรมรักษาหน้าจอ และ/หรือ ล็อคหน้าจอ Name[th_TH]=โปรแกรมรักษาหน้าจอ lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_th_TH.ts000066400000000000000000000016501261500472700261760ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered โปรแกรมรักษาหน้าจอ: ไม่สารมารถตั้ง '%1' เป็นปุ่มลัดส่วนกลางได้ Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_tr.desktop000066400000000000000000000004311261500472700266340ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[tr]=Bir ekran koruyucu etkinleştir ve/veya ekranı kilitle Name[tr]=Ekran koruyucu lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_tr.ts000066400000000000000000000014641261500472700256200ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Panel Ekran Koruyucu Genel kısayolu: '%1' kaydedilemiyor Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_uk.desktop000066400000000000000000000005171261500472700266330ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[uk]=Активувати зберігач екрану та/чи заблокувати екран Name[uk]=Зберігач екрану lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_uk.ts000066400000000000000000000015661261500472700256150ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered Не вдається встановити '%1' глобальним скороченням зберігача екрану Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_zh_CN.GB2312.desktop000066400000000000000000000002661261500472700300150ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_zh_CN.desktop000066400000000000000000000004071261500472700272130ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[zh_CN]=启用屏幕保护并锁定屏幕 Name[zh_CN]=屏幕保护 lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_zh_CN.ts000066400000000000000000000014741261500472700261750ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered 面板 屏幕保护程序 全局快捷键 '%1' 无法被注册 Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_zh_TW.desktop000066400000000000000000000004271261500472700272470ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Launch screensaver Comment=Activate a screensaver and/or lock the screen #TRANSLATIONS_DIR=../translations # Translations Comment[zh_TW]=啟動螢幕保護程式並/或鎖上螢幕 Name[zh_TW]=螢幕保護程式 lxqt-panel-0.10.0/plugin-screensaver/translations/screensaver_zh_TW.ts000066400000000000000000000014711261500472700262240ustar00rootroot00000000000000 PanelScreenSaver Panel Screensaver Global shortcut: '%1' cannot be registered 螢幕保護程式面板全域快捷鍵:'%1'無法被寫入 Lock Screen Panel Screensaver: Global shortcut '%1' cannot be registered lxqt-panel-0.10.0/plugin-sensors/000077500000000000000000000000001261500472700166515ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-sensors/CMakeLists.txt000066400000000000000000000006101261500472700214060ustar00rootroot00000000000000set(PLUGIN "sensors") set(HEADERS lxqtsensorsplugin.h chip.h feature.h lxqtsensors.h lxqtsensorsconfiguration.h sensors.h ) set(SOURCES lxqtsensorsplugin.cpp chip.cpp feature.cpp lxqtsensors.cpp lxqtsensorsconfiguration.cpp sensors.cpp ) set(UIS lxqtsensorsconfiguration.ui ) set(LIBRARIES ${SENSORS_LIB}) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-sensors/chip.cpp000066400000000000000000000032641261500472700203050ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Łukasz Twarduś * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "chip.h" #include Chip::Chip(const sensors_chip_name* sensorsChipName) : mSensorsChipName(sensorsChipName) { const int BUF_SIZE = 256; char buf[BUF_SIZE]; if (sensors_snprintf_chip_name(buf, BUF_SIZE, mSensorsChipName) > 0) { mName = QString::fromLatin1(buf); } qDebug() << "Detected chip:" << mName; const sensors_feature* feature; int featureNr = 0; while ((feature = sensors_get_features(mSensorsChipName, &featureNr))) { mFeatures.push_back(Feature(mSensorsChipName, feature)); } } const QString& Chip::getName() const { return mName; } const QList& Chip::getFeatures() const { return mFeatures; } lxqt-panel-0.10.0/plugin-sensors/chip.h000066400000000000000000000030701261500472700177450ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Łukasz Twarduś * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef CHIP_H #define CHIP_H #include "feature.h" #include "sensors.h" #include #include /** * @brief Chip class is providing RAII-style for lm_sensors library */ class Chip { public: Chip(const sensors_chip_name*); const QString& getName() const; const QList& getFeatures() const; private: // Do not try to change these chip names, as they point to internal structures of lm_sensors! const sensors_chip_name* mSensorsChipName; // "Printable" chip name QString mName; QList mFeatures; }; #endif // CHIP_H lxqt-panel-0.10.0/plugin-sensors/feature.cpp000066400000000000000000000040231261500472700210070ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Łukasz Twarduś * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "feature.h" #include Feature::Feature(const sensors_chip_name* sensorsChipName, const sensors_feature* sensorsFeature) : mSensorsChipName(sensorsChipName), mSensorsFeature(sensorsFeature) { char *featureLabel = NULL; if ((featureLabel = sensors_get_label(mSensorsChipName, mSensorsFeature))) { mLabel = featureLabel; free(featureLabel); } qDebug() << "Detected feature:" << QString::fromLatin1(sensorsFeature->name) << "(" << mLabel << ")"; } const QString& Feature::getLabel() const { return mLabel; } double Feature::getValue(sensors_subfeature_type subfeature_type) const { double result = 0; const sensors_subfeature *subfeature; // Find feature subfeature = sensors_get_subfeature(mSensorsChipName, mSensorsFeature, subfeature_type); if (subfeature) { sensors_get_value(mSensorsChipName, subfeature->number, &result); } return result; } sensors_feature_type Feature::getType() const { return mSensorsFeature->type; } lxqt-panel-0.10.0/plugin-sensors/feature.h000066400000000000000000000033541261500472700204620ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Łukasz Twarduś * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef FEATURE_H #define FEATURE_H #include #include #include /** * @brief Feature class is providing RAII-style for lm_sensors library */ class Feature { public: Feature(const sensors_chip_name*, const sensors_feature*); const QString& getName() const; const QString& getLabel() const; double getValue(sensors_subfeature_type) const; sensors_feature_type getType() const; private: // Do not try to change these chip names, as they point to internal structures of lm_sensors! const sensors_chip_name* mSensorsChipName; const sensors_feature* mSensorsFeature; // "Printable" feature label QString mLabel; QList mSubFeatures; }; #endif // CHIP_H lxqt-panel-0.10.0/plugin-sensors/lxqtsensors.cpp000066400000000000000000000332021261500472700217620ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Łukasz Twarduś * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtsensors.h" #include "lxqtsensorsconfiguration.h" #include "../panel/ilxqtpanelplugin.h" #include "../panel/ilxqtpanel.h" #include #include #include #include LXQtSensors::LXQtSensors(ILXQtPanelPlugin *plugin, QWidget* parent): QFrame(parent), mPlugin(plugin), mSettings(plugin->settings()) { mDetectedChips = mSensors.getDetectedChips(); /** * We have all needed data to initialize default settings, we have to do it here as later * we are using them. */ initDefaultSettings(); // Add GUI elements ProgressBar* pg = NULL; mLayout = new QBoxLayout(QBoxLayout::LeftToRight, this); mLayout->setSpacing(0); mLayout->setContentsMargins(0, 0, 0, 0); QString chipFeatureLabel; mSettings->beginGroup("chips"); for (int i = 0; i < mDetectedChips.size(); ++i) { mSettings->beginGroup(mDetectedChips[i].getName()); const QList& features = mDetectedChips[i].getFeatures(); for (int j = 0; j < features.size(); ++j) { if (features[j].getType() == SENSORS_FEATURE_TEMP) { chipFeatureLabel = features[j].getLabel(); mSettings->beginGroup(chipFeatureLabel); pg = new ProgressBar(this); pg->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); // Hide progress bar if it is not enabled if (!mSettings->value("enabled").toBool()) { pg->hide(); } pg->setToolTip(chipFeatureLabel); pg->setTextVisible(false); QPalette pal = pg->palette(); QColor color(mSettings->value("color").toString()); pal.setColor(QPalette::Active, QPalette::Highlight, color); pal.setColor(QPalette::Inactive, QPalette::Highlight, color); pg->setPalette(pal); mTemperatureProgressBars.push_back(pg); mLayout->addWidget(pg); mSettings->endGroup(); } } mSettings->endGroup(); } mSettings->endGroup(); // Fit plugin to current panel realign(); // Updated sensors readings to display actual values at start updateSensorReadings(); // Run timer that will be updating sensor readings connect(&mUpdateSensorReadingsTimer, SIGNAL(timeout()), this, SLOT(updateSensorReadings())); mUpdateSensorReadingsTimer.start(mSettings->value("updateInterval").toInt() * 1000); // Run timer that will be showin warning mWarningAboutHighTemperatureTimer.setInterval(500); connect(&mWarningAboutHighTemperatureTimer, SIGNAL(timeout()), this, SLOT(warningAboutHighTemperature())); if (mSettings->value("warningAboutHighTemperature").toBool()) { mWarningAboutHighTemperatureTimer.start(); } } LXQtSensors::~LXQtSensors() { } void LXQtSensors::updateSensorReadings() { QString tooltip; double critTemp = 0; double maxTemp = 0; double minTemp = 0; double curTemp = 0; bool highTemperature = false; // Iterator for temperature progress bars QList::iterator temperatureProgressBarsIt = mTemperatureProgressBars.begin(); for (int i = 0; i < mDetectedChips.size(); ++i) { const QList& features = mDetectedChips[i].getFeatures(); for (int j = 0; j < features.size(); ++j) { if (features[j].getType() == SENSORS_FEATURE_TEMP) { tooltip = features[j].getLabel() + " (" + QChar(0x00B0); if (mSettings->value("useFahrenheitScale").toBool()) { critTemp = celsiusToFahrenheit( features[j].getValue(SENSORS_SUBFEATURE_TEMP_CRIT)); maxTemp = celsiusToFahrenheit( features[j].getValue(SENSORS_SUBFEATURE_TEMP_MAX)); minTemp = celsiusToFahrenheit( features[j].getValue(SENSORS_SUBFEATURE_TEMP_MIN)); curTemp = celsiusToFahrenheit( features[j].getValue(SENSORS_SUBFEATURE_TEMP_INPUT)); tooltip += "F)"; } else { critTemp = features[j].getValue(SENSORS_SUBFEATURE_TEMP_CRIT); maxTemp = features[j].getValue(SENSORS_SUBFEATURE_TEMP_MAX); minTemp = features[j].getValue(SENSORS_SUBFEATURE_TEMP_MIN); curTemp = features[j].getValue(SENSORS_SUBFEATURE_TEMP_INPUT); tooltip += "C)"; } // Check if temperature is too high if (curTemp >= maxTemp) { if (mSettings->value("warningAboutHighTemperature").toBool()) { // Add current progress bar to the "warning container" mHighTemperatureProgressBars.insert(*temperatureProgressBarsIt); } highTemperature = true; } else { mHighTemperatureProgressBars.remove(*temperatureProgressBarsIt); highTemperature = false; } // Set maximum temperature (*temperatureProgressBarsIt)->setMaximum(critTemp); // Set minimum temperature (*temperatureProgressBarsIt)->setMinimum(minTemp); // Set current temperature (*temperatureProgressBarsIt)->setValue(curTemp); tooltip += "

Crit: "; tooltip += QString::number((*temperatureProgressBarsIt)->maximum()); tooltip += "
Max: "; tooltip += QString::number(int(maxTemp)); tooltip += "
Cur: "; // Mark high temperature in the tooltip if (highTemperature) { tooltip += ""; tooltip += QString::number((*temperatureProgressBarsIt)->value()); tooltip += " !"; } else { tooltip += QString::number((*temperatureProgressBarsIt)->value()); } tooltip += "
Min: "; tooltip += QString::number((*temperatureProgressBarsIt)->minimum()); (*temperatureProgressBarsIt)->setToolTip(tooltip); // Go to the next temperature progress bar ++temperatureProgressBarsIt; } } } update(); } void LXQtSensors::warningAboutHighTemperature() { // Iterator for temperature progress bars QSet::iterator temperatureProgressBarsIt = mHighTemperatureProgressBars.begin(); int curValue; int maxValue; for (; temperatureProgressBarsIt != mHighTemperatureProgressBars.end(); ++temperatureProgressBarsIt) { curValue = (*temperatureProgressBarsIt)->value(); maxValue = (*temperatureProgressBarsIt)->maximum(); if (maxValue > curValue) { (*temperatureProgressBarsIt)->setValue(maxValue); } else { (*temperatureProgressBarsIt)->setValue((*temperatureProgressBarsIt)->minimum()); } } update(); } void LXQtSensors::settingsChanged() { mUpdateSensorReadingsTimer.setInterval(mSettings->value("updateInterval").toInt() * 1000); // Iterator for temperature progress bars QList::iterator temperatureProgressBarsIt = mTemperatureProgressBars.begin(); mSettings->beginGroup("chips"); for (int i = 0; i < mDetectedChips.size(); ++i) { mSettings->beginGroup(mDetectedChips[i].getName()); const QList& features = mDetectedChips[i].getFeatures(); for (int j = 0; j < features.size(); ++j) { if (features[j].getType() == SENSORS_FEATURE_TEMP) { mSettings->beginGroup(features[j].getLabel()); if (mSettings->value("enabled").toBool()) { (*temperatureProgressBarsIt)->show(); } else { (*temperatureProgressBarsIt)->hide(); } QPalette pal = (*temperatureProgressBarsIt)->palette(); QColor color(mSettings->value("color").toString()); pal.setColor(QPalette::Active, QPalette::Highlight, color); pal.setColor(QPalette::Inactive, QPalette::Highlight, color); (*temperatureProgressBarsIt)->setPalette(pal); mSettings->endGroup(); // Go to the next temperature progress bar ++temperatureProgressBarsIt; } } mSettings->endGroup(); } mSettings->endGroup(); if (mSettings->value("warningAboutHighTemperature").toBool()) { // Update sensors readings to get the list of high temperature progress bars updateSensorReadings(); if (!mWarningAboutHighTemperatureTimer.isActive()) mWarningAboutHighTemperatureTimer.start(); } else if (mWarningAboutHighTemperatureTimer.isActive()) { mWarningAboutHighTemperatureTimer.stop(); // Update sensors readings to set progress bar values to "normal" height updateSensorReadings(); } realign(); update(); } void LXQtSensors::realign() { // Default values for LXQtPanel::PositionBottom or LXQtPanel::PositionTop Qt::Orientation cur_orient = Qt::Vertical; Qt::LayoutDirection cur_layout_dir = Qt::LeftToRight; if (mPlugin->panel()->isHorizontal()) { mLayout->setDirection(QBoxLayout::LeftToRight); } else { mLayout->setDirection(QBoxLayout::TopToBottom); } switch (mPlugin->panel()->position()) { case ILXQtPanel::PositionLeft: cur_orient = Qt::Horizontal; break; case ILXQtPanel::PositionRight: cur_orient = Qt::Horizontal; cur_layout_dir = Qt::RightToLeft; break; default: break; } for (int i = 0; i < mTemperatureProgressBars.size(); ++i) { mTemperatureProgressBars[i]->setOrientation(cur_orient); mTemperatureProgressBars[i]->setLayoutDirection(cur_layout_dir); if (mPlugin->panel()->isHorizontal()) { mTemperatureProgressBars[i]->setFixedWidth(mPlugin->settings()->value("tempBarWidth").toInt()); mTemperatureProgressBars[i]->setFixedHeight(QWIDGETSIZE_MAX); } else { mTemperatureProgressBars[i]->setFixedHeight(mPlugin->settings()->value("tempBarWidth").toInt()); mTemperatureProgressBars[i]->setFixedWidth(QWIDGETSIZE_MAX); } } } double LXQtSensors::celsiusToFahrenheit(double celsius) { // Fahrenheit = 32 * (9/5) * Celsius return 32 + 1.8 * celsius; } void LXQtSensors::initDefaultSettings() { if (!mSettings->contains("updateInterval")) { mSettings->setValue("updateInterval", 1); } if (!mSettings->contains("tempBarWidth")) { mSettings->setValue("tempBarWidth", 8); } if (!mSettings->contains("useFahrenheitScale")) { mSettings->setValue("useFahrenheitScale", false); } mSettings->beginGroup("chips"); // Initialize default sensors settings for (int i = 0; i < mDetectedChips.size(); ++i) { mSettings->beginGroup(mDetectedChips[i].getName()); const QList& features = mDetectedChips[i].getFeatures(); for (int j = 0; j < features.size(); ++j) { if (features[j].getType() == SENSORS_FEATURE_TEMP) { mSettings->beginGroup(features[j].getLabel()); if (!mSettings->contains("enabled")) { mSettings->setValue("enabled", true); } if (!mSettings->contains("color")) { // This is the default from QtDesigner mSettings->setValue("color", QColor(qRgb(98, 140, 178)).name()); } mSettings->endGroup(); } } mSettings->endGroup(); } mSettings->endGroup(); if (!mSettings->contains("warningAboutHighTemperature")) { mSettings->setValue("warningAboutHighTemperature", true); } } ProgressBar::ProgressBar(QWidget *parent): QProgressBar(parent) { } QSize ProgressBar::sizeHint() const { return QSize(20, 20); } lxqt-panel-0.10.0/plugin-sensors/lxqtsensors.h000066400000000000000000000041141261500472700214270ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Łukasz Twarduś * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTSENSORS_H #define LXQTSENSORS_H #include "sensors.h" #include #include #include #include class ProgressBar: public QProgressBar { Q_OBJECT public: ProgressBar(QWidget *parent = 0); QSize sizeHint() const; }; class QSettings; class ILXQtPanelPlugin; class QBoxLayout; class LXQtSensors : public QFrame { Q_OBJECT public: LXQtSensors(ILXQtPanelPlugin *plugin, QWidget* parent = 0); ~LXQtSensors(); void settingsChanged(); void realign(); public slots: void updateSensorReadings(); void warningAboutHighTemperature(); private: ILXQtPanelPlugin *mPlugin; QBoxLayout *mLayout; QTimer mUpdateSensorReadingsTimer; QTimer mWarningAboutHighTemperatureTimer; Sensors mSensors; QList mDetectedChips; QList mTemperatureProgressBars; // With set we can handle updates in very easy way :) QSet mHighTemperatureProgressBars; double celsiusToFahrenheit(double celsius); void initDefaultSettings(); QSettings *mSettings; }; #endif // LXQTSENSORS_H lxqt-panel-0.10.0/plugin-sensors/lxqtsensorsconfiguration.cpp000066400000000000000000000204361261500472700245570ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Łukasz Twarduś * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtsensorsconfiguration.h" #include "ui_lxqtsensorsconfiguration.h" #include #include #include #include #include LXQtSensorsConfiguration::LXQtSensorsConfiguration(QSettings *settings, QWidget *parent) : QDialog(parent), ui(new Ui::LXQtSensorsConfiguration), mSettings(settings), oldSettings(settings) { setAttribute(Qt::WA_DeleteOnClose); setObjectName("SensorsConfigurationWindow"); ui->setupUi(this); // We load settings here cause we have to set up dynamic widgets loadSettings(); connect(ui->buttons, SIGNAL(clicked(QAbstractButton*)), this, SLOT(dialogButtonsAction(QAbstractButton*))); connect(ui->updateIntervalSB, SIGNAL(valueChanged(int)), this, SLOT(saveSettings())); connect(ui->tempBarWidthSB, SIGNAL(valueChanged(int)), this, SLOT(saveSettings())); connect(ui->detectedChipsCB, SIGNAL(activated(int)), this, SLOT(detectedChipSelected(int))); connect(ui->celsiusTempScaleRB, SIGNAL(toggled(bool)), this, SLOT(saveSettings())); // We don't need signal from the other radio box as celsiusTempScaleRB will send one //connect(ui->fahrenheitTempScaleRB, SIGNAL(toggled(bool)), this, SLOT(saveSettings())); connect(ui->warningAboutHighTemperatureChB, SIGNAL(toggled(bool)), this, SLOT(saveSettings())); /** * Signals for enable/disable and bar color change are set in the loadSettings method because * we are creating them dynamically. */ } LXQtSensorsConfiguration::~LXQtSensorsConfiguration() { delete ui; } void LXQtSensorsConfiguration::loadSettings() { ui->updateIntervalSB->setValue(mSettings->value("updateInterval").toInt()); ui->tempBarWidthSB->setValue(mSettings->value("tempBarWidth").toInt()); if (mSettings->value("useFahrenheitScale").toBool()) { ui->fahrenheitTempScaleRB->setChecked(true); } // In case of reloading settings we have to clear GUI elements ui->detectedChipsCB->clear(); mSettings->beginGroup("chips"); QStringList chipNames = mSettings->childGroups(); for (int i = 0; i < chipNames.size(); ++i) { ui->detectedChipsCB->addItem(chipNames[i]); } mSettings->endGroup(); // Load feature for the first chip if exist if (chipNames.size() > 0) { detectedChipSelected(0); } ui->warningAboutHighTemperatureChB->setChecked( mSettings->value("warningAboutHighTemperature").toBool()); } void LXQtSensorsConfiguration::saveSettings() { mSettings->setValue("updateInterval", ui->updateIntervalSB->value()); mSettings->setValue("tempBarWidth", ui->tempBarWidthSB->value()); if (ui->fahrenheitTempScaleRB->isChecked()) { mSettings->setValue("useFahrenheitScale", true); } else { mSettings->setValue("useFahrenheitScale", false); } mSettings->beginGroup("chips"); QStringList chipNames = mSettings->childGroups(); if (chipNames.size()) { QStringList chipFeatureLabels; QPushButton* colorButton = NULL; QCheckBox* enabledCheckbox = NULL; mSettings->beginGroup(chipNames[ui->detectedChipsCB->currentIndex()]); chipFeatureLabels = mSettings->childGroups(); for (int j = 0; j < chipFeatureLabels.size(); ++j) { mSettings->beginGroup(chipFeatureLabels[j]); enabledCheckbox = qobject_cast(ui->chipFeaturesT->cellWidget(j, 0)); // We know what we are doing so we don't have to check if enabledCheckbox == 0 mSettings->setValue("enabled", enabledCheckbox->isChecked()); colorButton = qobject_cast(ui->chipFeaturesT->cellWidget(j, 2)); // We know what we are doing so we don't have to check if colorButton == 0 mSettings->setValue( "color", colorButton->palette().color(QPalette::Normal, QPalette::Button).name()); mSettings->endGroup(); } mSettings->endGroup(); } mSettings->endGroup(); mSettings->setValue("warningAboutHighTemperature", ui->warningAboutHighTemperatureChB->isChecked()); } void LXQtSensorsConfiguration::dialogButtonsAction(QAbstractButton *btn) { if (ui->buttons->buttonRole(btn) == QDialogButtonBox::ResetRole) { oldSettings.loadToSettings(); loadSettings(); } else { close(); } } void LXQtSensorsConfiguration::changeProgressBarColor() { QAbstractButton* btn = qobject_cast(sender()); if (btn) { QPalette pal = btn->palette(); QColor color = QColorDialog::getColor(pal.color(QPalette::Normal, QPalette::Button), this); if (color.isValid()) { pal.setColor(QPalette::Normal, QPalette::Button, color); btn->setPalette(pal); saveSettings(); } } else { qDebug() << "LXQtSensorsConfiguration::changeProgressBarColor():" << "invalid button cast"; } } void LXQtSensorsConfiguration::detectedChipSelected(int index) { mSettings->beginGroup("chips"); QStringList chipNames = mSettings->childGroups(); QStringList chipFeatureLabels; QPushButton* colorButton = NULL; QCheckBox* enabledCheckbox = NULL; QTableWidgetItem *chipFeatureLabel = NULL; if (index < chipNames.size()) { qDebug() << "Selected chip: " << ui->detectedChipsCB->currentText(); // In case of reloading settings we have to clear GUI elements ui->chipFeaturesT->setRowCount(0); // Add detected chips and features QStringList chipFeaturesLabels; chipFeaturesLabels << tr("Enabled") << tr("Label") << tr("Color"); ui->chipFeaturesT->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui->chipFeaturesT->setHorizontalHeaderLabels(chipFeaturesLabels); mSettings->beginGroup(chipNames[index]); chipFeatureLabels = mSettings->childGroups(); for (int j = 0; j < chipFeatureLabels.size(); ++j) { mSettings->beginGroup(chipFeatureLabels[j]); ui->chipFeaturesT->insertRow(j); enabledCheckbox = new QCheckBox(ui->chipFeaturesT); enabledCheckbox->setChecked(mSettings->value("enabled").toBool()); // Connect here after the setChecked call because we don't want to send signal connect(enabledCheckbox, SIGNAL(stateChanged(int)), this, SLOT(saveSettings())); ui->chipFeaturesT->setCellWidget(j, 0, enabledCheckbox); chipFeatureLabel = new QTableWidgetItem(chipFeatureLabels[j]); chipFeatureLabel->setFlags(Qt::ItemIsEnabled); ui->chipFeaturesT->setItem(j, 1, chipFeatureLabel); colorButton = new QPushButton(ui->chipFeaturesT); connect(colorButton, SIGNAL(clicked()), this, SLOT(changeProgressBarColor())); QPalette pal = colorButton->palette(); pal.setColor(QPalette::Normal, QPalette::Button, QColor(mSettings->value("color").toString())); colorButton->setPalette(pal); ui->chipFeaturesT->setCellWidget(j, 2, colorButton); mSettings->endGroup(); } mSettings->endGroup(); } else { qDebug() << "Invalid chip index: " << index; } mSettings->endGroup(); } lxqt-panel-0.10.0/plugin-sensors/lxqtsensorsconfiguration.h000066400000000000000000000036111261500472700242200ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Maciej Płaza * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTSENSORSCONFIGURATION_H #define LXQTSENSORSCONFIGURATION_H #include #include #include #include #include #include namespace Ui { class LXQtSensorsConfiguration; } class LXQtSensorsConfiguration : public QDialog { Q_OBJECT public: explicit LXQtSensorsConfiguration(QSettings *settings, QWidget *parent = 0); ~LXQtSensorsConfiguration(); private: Ui::LXQtSensorsConfiguration *ui; QSettings *mSettings; LXQt::SettingsCache oldSettings; /* Read settings from conf file and put data into controls. */ void loadSettings(); private slots: /* Saves settings in conf file. */ void saveSettings(); void dialogButtonsAction(QAbstractButton *btn); void changeProgressBarColor(); void detectedChipSelected(int index); }; #endif // LXQTSENSORSCONFIGURATION_H lxqt-panel-0.10.0/plugin-sensors/lxqtsensorsconfiguration.ui000066400000000000000000000153551261500472700244160ustar00rootroot00000000000000 LXQtSensorsConfiguration 0 0 271 284 Sensors Settings QTabWidget::Rounded 0 true Common 0 0 Update interval (seconds) Temperature bar width true 1 300 1 8 Qt::Vertical 20 40 Temperature scale Celsius true Fahrenheit fahrenheitTempScaleRB celsiusTempScaleRB Blink progress bars when the temperature is too high Qt::LeftToRight Warning about high temperature true false Sensors -1 true Detected chips: Chip features: 3 Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Reset buttons accepted() LXQtSensorsConfiguration accept() 248 254 157 274 buttons rejected() LXQtSensorsConfiguration reject() 316 260 286 274 lxqt-panel-0.10.0/plugin-sensors/lxqtsensorsplugin.cpp000066400000000000000000000031731261500472700232050ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtsensorsplugin.h" #include "lxqtsensors.h" #include "lxqtsensorsconfiguration.h" LXQtSensorsPlugin::LXQtSensorsPlugin(const ILXQtPanelPluginStartupInfo &startupInfo): QObject(), ILXQtPanelPlugin(startupInfo), mWidget(new LXQtSensors(this)) { } LXQtSensorsPlugin::~LXQtSensorsPlugin() { delete mWidget; } QWidget *LXQtSensorsPlugin::widget() { return mWidget; } QDialog *LXQtSensorsPlugin::configureDialog() { return new LXQtSensorsConfiguration(settings()); } void LXQtSensorsPlugin::realign() { mWidget->realign(); } void LXQtSensorsPlugin::settingsChanged() { mWidget->settingsChanged(); } lxqt-panel-0.10.0/plugin-sensors/lxqtsensorsplugin.h000066400000000000000000000041031261500472700226440ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTSENSORSPLUGIN_H #define LXQTSENSORSPLUGIN_H #include "../panel/ilxqtpanelplugin.h" #include class LXQtSensors; class LXQtSensorsPlugin: public QObject, public ILXQtPanelPlugin { Q_OBJECT public: explicit LXQtSensorsPlugin(const ILXQtPanelPluginStartupInfo &startupInfo); ~LXQtSensorsPlugin(); virtual ILXQtPanelPlugin::Flags flags() const { return PreferRightAlignment | HaveConfigDialog; } virtual QWidget *widget(); virtual QString themeId() const { return "Sensors"; } bool isSeparate() const { return true; } QDialog *configureDialog(); void realign(); protected: virtual void settingsChanged(); private: LXQtSensors *mWidget; }; class LXQtSensorsPluginLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new LXQtSensorsPlugin(startupInfo); } }; #endif // LXQTSENSORSPLUGIN_H lxqt-panel-0.10.0/plugin-sensors/resources/000077500000000000000000000000001261500472700206635ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-sensors/resources/sensors.desktop.in000066400000000000000000000001651261500472700243610ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. lxqt-panel-0.10.0/plugin-sensors/sensors.cpp000066400000000000000000000040031261500472700210460ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Łukasz Twarduś * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "sensors.h" #include QList Sensors::mDetectedChips = QList(); int Sensors::mInstanceCounter = 0; bool Sensors::mSensorsInitialized = false; Sensors::Sensors() { // Increase instance counter ++mInstanceCounter; if (!mSensorsInitialized && sensors_init(NULL) == 0) { // Sensors initialized mSensorsInitialized = true; sensors_chip_name const * chipName; int chipNr = 0; while ((chipName = sensors_get_detected_chips(NULL, &chipNr)) != NULL) { mDetectedChips.push_back(chipName); } qDebug() << "lm_sensors library initialized"; } } Sensors::~Sensors() { // Decrease instance counter --mInstanceCounter; if (mInstanceCounter == 0 && mSensorsInitialized) { mDetectedChips.clear(); mSensorsInitialized = false; sensors_cleanup(); qDebug() << "lm_sensors library cleanup"; } } const QList& Sensors::getDetectedChips() const { return mDetectedChips; } lxqt-panel-0.10.0/plugin-sensors/sensors.h000066400000000000000000000030621261500472700205170ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Łukasz Twarduś * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef SENSORS_H #define SENSORS_H #include "chip.h" #include #include class Chip; /** * @brief Sensors class is providing RAII-style for lm_sensors library */ class Sensors { public: Sensors(); ~Sensors(); const QList& getDetectedChips() const; private: static QList mDetectedChips; /** * lm_sensors library can be initialized only once so this will tell us when to init * and when to clean up. */ static int mInstanceCounter; static bool mSensorsInitialized; }; #endif // SENSORS_H lxqt-panel-0.10.0/plugin-sensors/translations/000077500000000000000000000000001261500472700213725ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-sensors/translations/sensors.ts000066400000000000000000000060641261500472700234440ustar00rootroot00000000000000 LXQtSensorsConfiguration Sensors Settings Common Update interval (seconds) Temperature bar width Temperature scale Celsius Fahrenheit Blink progress bars when the temperature is too high Warning about high temperature Sensors Detected chips: Chip features: Enabled Label Color lxqt-panel-0.10.0/plugin-sensors/translations/sensors_ar.desktop000066400000000000000000000003651261500472700251470ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[ar]=إستشعار Comment[ar]=عرض قراءة من إستشعار لأجهزة (حاليا lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_ca.desktop000066400000000000000000000003371261500472700251270ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[ca]=Sensors Comment[ca]=Veure dades provinents dels sensors (actualment lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_ca.ts000066400000000000000000000060461261500472700241070ustar00rootroot00000000000000 LXQtSensorsConfiguration Sensors Settings Common Update interval (seconds) Temperature bar width Temperature scale Celsius Fahrenheit Blink progress bars when the temperature is too high Warning about high temperature Sensors Sensors Detected chips: Chip features: Enabled Label Color lxqt-panel-0.10.0/plugin-sensors/translations/sensors_cs.desktop000066400000000000000000000003351261500472700251470ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[cs]=Čidla Comment[cs]=Zobrazit odečty z hardwarových čidel (nyní lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_cs.ts000066400000000000000000000063411261500472700241270ustar00rootroot00000000000000 LXQtSensorsConfiguration LXQt Sensors Settings Nastavení čidel Sensors Settings Common Běžné Update interval (seconds) Obnovovací interval (v sekundách) Temperature bar width Šířka proužku s teplotou Temperature scale Teplotní stupnice Celsius Celsius Fahrenheit Fahrenheit Blink progress bars when the temperature is too high Blikat proužky ukazujícími nárůst teploty, když je teplota příliš vysoká Warning about high temperature Varování při vysoké teplotě Sensors Čidla Detected chips: Zjištěné čipy: Chip features: Vlastnosti čipů: Enabled Povoleno Label Štítek Color Barva lxqt-panel-0.10.0/plugin-sensors/translations/sensors_cs_CZ.desktop000066400000000000000000000003431261500472700255420ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[cs_CZ]=Čidla Comment[cs_CZ]=Zobrazit odečty z hardwarových čidel (nyní lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_cs_CZ.ts000066400000000000000000000063441261500472700245260ustar00rootroot00000000000000 LXQtSensorsConfiguration LXQt Sensors Settings Nastavení čidel Sensors Settings Common Běžné Update interval (seconds) Obnovovací interval (v sekundách) Temperature bar width Šířka proužku s teplotou Temperature scale Teplotní stupnice Celsius Celsius Fahrenheit Fahrenheit Blink progress bars when the temperature is too high Blikat proužky ukazujícími nárůst teploty, když je teplota příliš vysoká Warning about high temperature Varování při vysoké teplotě Sensors Čidla Detected chips: Zjištěné čipy: Chip features: Vlastnosti čipů: Enabled Povoleno Label Štítek Color Barva lxqt-panel-0.10.0/plugin-sensors/translations/sensors_da.desktop000066400000000000000000000003431261500472700251250ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[da]=Sensorer Comment[da]=Vis målinger fra hardware-sensorer (I øjeblikket lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_da_DK.desktop000066400000000000000000000003511261500472700255020ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[da_DK]=Sensorer Comment[da_DK]=Vis målinger fra hardware-sensorer (I øjeblikket lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_da_DK.ts000066400000000000000000000063071261500472700244660ustar00rootroot00000000000000 LXQtSensorsConfiguration LXQt Sensors Settings Indstillinger for LXQt Sensorer Sensors Settings Common Fælles Update interval (seconds) Opdateringsinterval (sekunder) Temperature bar width Temperaturbjælke bredde Temperature scale Temperaturskala Celsius Celsius Fahrenheit Fahrenheit Blink progress bars when the temperature is too high Blink statuslinjer når temperaturen er for høj Warning about high temperature Advarsel om høj temperatur Sensors Sensorer Detected chips: Fundne chipsæt: Chip features: Chipsæt funktioner: Enabled Aktiveret Label Identifikation Color Farve lxqt-panel-0.10.0/plugin-sensors/translations/sensors_de.desktop000066400000000000000000000001101261500472700251210ustar00rootroot00000000000000Name[de]=Sensoren Comment[de]=Messwerte der Hardware-Sensoren anzeigen. lxqt-panel-0.10.0/plugin-sensors/translations/sensors_de.ts000066400000000000000000000060641261500472700241140ustar00rootroot00000000000000 LXQtSensorsConfiguration Sensors Settings Sensor-Einstellungen Common Allgemein Update interval (seconds) Aktualisierungsintervall (Sekunden) Temperature bar width Temperaturbalkenbreite Temperature scale Temperaturskala Celsius Celsius Fahrenheit Fahrenheit Blink progress bars when the temperature is too high Blinken der Verlaufsbalken bei zu hoher Temperatur Warning about high temperature Warnung bei zu hoher Temperatur Sensors Sensoren Detected chips: Erkannte Bausteine: Chip features: Bausteineigenschaften: Enabled Aktiviert Label Bezeichnung Color Farbe lxqt-panel-0.10.0/plugin-sensors/translations/sensors_el.desktop000066400000000000000000000001661261500472700251440ustar00rootroot00000000000000Name[el]=Αισθητήρες Comment[el]=Προβολή ενδείξεων των αισθητήρων υλικού. lxqt-panel-0.10.0/plugin-sensors/translations/sensors_el.ts000066400000000000000000000070511261500472700241210ustar00rootroot00000000000000 LXQtSensorsConfiguration LXQt Sensors Settings Ρυθμίσεις αισθητήρων LXQt Sensors Settings Ρυθμίσεις αισθητήρων Common Κοινές επιλογές Update interval (seconds) Διάστημα ανανέωσης (δευτερόλεπτα) Temperature bar width Πλάτος γραμμής θερμοκρασίας Temperature scale Κλίμακα θερμοκρασίας Celsius Κελσίου Fahrenheit Φαρενάιτ Blink progress bars when the temperature is too high Αναβόσβημα γραμμών προόδου, ​​όταν η θερμοκρασία είναι πολύ υψηλή Warning about high temperature Προειδοποίηση υψηλής θερμοκρασίας Sensors Αισθητήρες Detected chips: Ανιχνευμένα κυκλώματα: Chip features: Χαρακτηριστικά κυκλώματος: Enabled Ενεργοποιημένο Label Ετικέτα Color Χρώμα lxqt-panel-0.10.0/plugin-sensors/translations/sensors_eo.desktop000066400000000000000000000003211261500472700251400ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[eo]=Sentiloj Comment[eo]=Vidi legojn de sentiloj (aktuale lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_es.desktop000066400000000000000000000003511261500472700251470ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[es]=Sensores Comment[es]=Ver las lecturas de los sensores de harware (Actualmente lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_es.ts000066400000000000000000000064001261500472700241250ustar00rootroot00000000000000 LXQtSensorsConfiguration LXQt Sensors Settings Opciones de Sensores de LXQt Sensors Settings Common Común Update interval (seconds) Intervalo de actualización (segundos) Temperature bar width Ancho de la barra de temperatura Temperature scale Escala de temperatura Celsius Celsius Fahrenheit Fahrenheit Blink progress bars when the temperature is too high Parpadeo en las barras de progreso cuando la temperatura es demasiado alta Warning about high temperature Advertencia cuando la temperatura sea alta Sensors Sensores Detected chips: Chips detectado: Chip features: Características del chip: Enabled Habilitado Label Etiqueta Color Color lxqt-panel-0.10.0/plugin-sensors/translations/sensors_es_VE.desktop000066400000000000000000000003471261500472700255460ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[es_VE]=Sensores Comment[es_VE]=Ver las lecturas desde los sensores (actualmente lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_es_VE.ts000066400000000000000000000063521261500472700245250ustar00rootroot00000000000000 LXQtSensorsConfiguration LXQt Sensors Settings preferencias de sensor LXQt Sensors Settings Common Comunes Update interval (seconds) Intervalo de actualizacion (segundos) Temperature bar width Ancho de la barra indicadora Temperature scale Escala de temperatura Celsius Celcios Fahrenheit Fahrenheit Blink progress bars when the temperature is too high parpadear la barra de indicacion cuando la temperatura es alta Warning about high temperature Advertir acerca de altas temperaturas Sensors Sensores Detected chips: Chips detectados Chip features: Chips caracteristicas: Enabled Habilitado Label Etiqueta Color Color lxqt-panel-0.10.0/plugin-sensors/translations/sensors_eu.desktop000066400000000000000000000003371261500472700251550ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[eu]=Sentsoreak Comment[eu]=Ikusi hardware-sentsoreen irakurketak (unean lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_eu.ts000066400000000000000000000063251261500472700241350ustar00rootroot00000000000000 LXQtSensorsConfiguration LXQt Sensors Settings LXQt sentsoreen ezarpenak Sensors Settings Common Komuna Update interval (seconds) Eguneraketa tartea (segundoak) Temperature bar width Tenperatura-barraren zabalera Temperature scale Tenperaturaren eskala Celsius Celsius Fahrenheit Fahrenheit Blink progress bars when the temperature is too high Kliskatu aurrerapen-barrak tenperatura altuegia denean Warning about high temperature Tenperatura altuari buruzko abisua Sensors Sentsoreak Detected chips: Detektatutako txipak Chip features: Txiparen ezaugarriak: Enabled Gaituta Label Etiketa Color Kolorea lxqt-panel-0.10.0/plugin-sensors/translations/sensors_fi.desktop000066400000000000000000000003561261500472700251430ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[fi]=Sensorit Comment[fi]=Katso laitteistosensorien tuottamia lukuja (tällä hetkellä lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_fi.ts000066400000000000000000000060271261500472700241210ustar00rootroot00000000000000 LXQtSensorsConfiguration Sensors Settings Common Update interval (seconds) Päivitysväli (sekunneissa) Temperature bar width Temperature scale Celsius Celsius Fahrenheit Fahrenheit Blink progress bars when the temperature is too high Warning about high temperature Varoitus korkeasta lämpötilasta Sensors Detected chips: Chip features: Enabled Käytössä Label Nimike Color Väri lxqt-panel-0.10.0/plugin-sensors/translations/sensors_fr_FR.desktop000066400000000000000000000003621261500472700255400ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[fr_FR]=Capteurs Comment[fr_FR]=Voir les mesures effectuées par les capteurs (actuellement lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_fr_FR.ts000066400000000000000000000060521261500472700245170ustar00rootroot00000000000000 LXQtSensorsConfiguration Sensors Settings Common Update interval (seconds) Temperature bar width Temperature scale Celsius Fahrenheit Blink progress bars when the temperature is too high Warning about high temperature Sensors Capteurs Detected chips: Chip features: Enabled Label Color lxqt-panel-0.10.0/plugin-sensors/translations/sensors_hu.desktop000066400000000000000000000003411261500472700251530ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[hu]=Érzékelők Comment[hu]=Megjeleníti a gépbe épített érzékelők értékeit. lxqt-panel-0.10.0/plugin-sensors/translations/sensors_hu.ts000066400000000000000000000060501261500472700241330ustar00rootroot00000000000000 LXQtSensorsConfiguration Sensors Settings Érzékelők beállítása Common Általános Update interval (seconds) Frissítési köz (másodperc) Temperature bar width Hősáv szélesség Temperature scale Hőfok skálaérték Celsius Fahrenheit Blink progress bars when the temperature is too high A mutatósáv túl nagy hőfoknál villog Warning about high temperature Nagy hőfoknál figyelmeztetés Sensors Érzékelők Detected chips: Észlelt érzékelők: Chip features: Érzékelő jellemzői: Enabled Engedélyezve Label Felirat Color Szín lxqt-panel-0.10.0/plugin-sensors/translations/sensors_hu_HU.ts000066400000000000000000000060531261500472700245320ustar00rootroot00000000000000 LXQtSensorsConfiguration Sensors Settings Érzékelők beállítása Common Általános Update interval (seconds) Frissítési köz (másodperc) Temperature bar width Hősáv szélesség Temperature scale Hőfok skálaérték Celsius Fahrenheit Blink progress bars when the temperature is too high A mutatósáv túl nagy hőfoknál villog Warning about high temperature Nagy hőfoknál figyelmeztetés Sensors Érzékelők Detected chips: Észlelt érzékelők: Chip features: Érzékelő jellemzői: Enabled Engedélyezve Label Felirat Color Szín lxqt-panel-0.10.0/plugin-sensors/translations/sensors_it.desktop000066400000000000000000000001511261500472700251520ustar00rootroot00000000000000Name[it]=Sensori Comment[it]=Visualizza i valori rilevati dai sensori hardware (attualmente lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_it.ts000066400000000000000000000064061261500472700241400ustar00rootroot00000000000000 LXQtSensorsConfiguration LXQt Sensors Settings Impostazioni dei sensori di LXQt Sensors Settings Impostazioni sensori Common Comune Update interval (seconds) Intervallo di aggiornamento (secondi) Temperature bar width Larghezza della barra della temperatura Temperature scale Scala della temperatura Celsius Celsius Fahrenheit Fahrenheit Blink progress bars when the temperature is too high Barre di avanzamento lampeggianti quando la temperatura è troppo elevata Warning about high temperature Avvertimento per la temperatura elevata Sensors Sensori Detected chips: Chip rilevati: Chip features: Caratteristiche del chip: Enabled Attivato Label Etichetta Color Colore lxqt-panel-0.10.0/plugin-sensors/translations/sensors_ja.desktop000066400000000000000000000003501261500472700251310ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[ja]=センサー Comment[ja]=ハードウェアセンサからの測定値を表示します lxqt-panel-0.10.0/plugin-sensors/translations/sensors_ja.ts000066400000000000000000000060041261500472700241100ustar00rootroot00000000000000 LXQtSensorsConfiguration Sensors Settings センサーウィジェットの設定 Common 共通 Update interval (seconds) 更新頻度(秒) Temperature bar width 温度バーの幅 Temperature scale 温度の単位 Celsius 摂氏 Fahrenheit 華氏 Blink progress bars when the temperature is too high 高温時にバーを点滅 Warning about high temperature 高温時に警告 Sensors センサー Detected chips: 検出されたチップ Chip features: チップの機能: Enabled 有効 Label ラベル Color lxqt-panel-0.10.0/plugin-sensors/translations/sensors_lt.desktop000066400000000000000000000003211261500472700251540ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[lt]=Jutikliai Comment[lt]=Rodo nuskaitymus iš jutiklių (lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_nl.desktop000066400000000000000000000003451261500472700251540ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[nl]=Sensoren Comment[nl]=Bekijk metingen van hardware sensoren (op dit moment lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_pl_PL.desktop000066400000000000000000000003371261500472700255520ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[pl_PL]=Czujniki Comment[pl_PL]=Pokaż wskazania z czujników (aktualnie lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_pl_PL.ts000066400000000000000000000063271261500472700245340ustar00rootroot00000000000000 LXQtSensorsConfiguration LXQt Sensors Settings Ustawienia LXQt Sensors Sensors Settings Common Ogólne Update interval (seconds) Częstotliwość odświeżania (sekundy) Temperature bar width Szerokość paska stanu temperatury Temperature scale Skala temperatury Celsius Celsjusz Fahrenheit Fahrenheit Blink progress bars when the temperature is too high Mruganie pasków stanu kiedy temperatura jest za wysoka Warning about high temperature Ostrzeżenie o wysokiej temperaturze Sensors Sensory Detected chips: Wykryte chipy: Chip features: Cechy chipu: Enabled Włączone Label Etykieta Color Kolor lxqt-panel-0.10.0/plugin-sensors/translations/sensors_pt.desktop000066400000000000000000000003071261500472700251640ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[pt]=Sensores Comment[pt]=Consultar as leituras dos sensores. lxqt-panel-0.10.0/plugin-sensors/translations/sensors_pt.ts000066400000000000000000000063471261500472700241530ustar00rootroot00000000000000 LXQtSensorsConfiguration LXQt Sensors Settings Definições dos sensores do LXQt Sensors Settings Common Geral Update interval (seconds) Intervalo de atualização (segundos) Temperature bar width Largura da barra de temperatura Temperature scale Unidade de medida Celsius Celsius Fahrenheit Fahrenheit Blink progress bars when the temperature is too high Barras de evolução intermitentes se a temperatura for elevada Warning about high temperature Avisar sobre a temperatura elevada Sensors Sensores Detected chips: Circuitos detetados: Chip features: Funcionalidades do circuito: Enabled Ativo Label Texto Color Cor lxqt-panel-0.10.0/plugin-sensors/translations/sensors_pt_BR.desktop000066400000000000000000000003651261500472700255530ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[pt_BR]=Sensores Comment[pt_BR]=Visualizar as leituras dos sensores de hardware (atualmente do lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_pt_BR.ts000066400000000000000000000063431261500472700245320ustar00rootroot00000000000000 LXQtSensorsConfiguration LXQt Sensors Settings Configuraçoes Dos Sensores Sensors Settings Common Comum Update interval (seconds) Intervalo de atualização (segundos) Temperature bar width Temperatura em barra com Temperature scale Temperatura em escala Celsius Celsius Fahrenheit Fahrenheit Blink progress bars when the temperature is too high Piscar a barra de progresso quando a temperatura está muito alta Warning about high temperature Alertar sobre a alta temperatura Sensors Sensores Detected chips: Chips detectados: Chip features: Características do chips: Enabled Habilitado Label Rótulo Color Cor lxqt-panel-0.10.0/plugin-sensors/translations/sensors_ro_RO.desktop000066400000000000000000000003521261500472700255610ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[ro_RO]=Senzori Comment[ro_RO]=Vizualizează citirile senzorilor hardware (momentan lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_ro_RO.ts000066400000000000000000000060211261500472700245350ustar00rootroot00000000000000 LXQtSensorsConfiguration Sensors Settings Common Update interval (seconds) Interval de actualizare (secunde) Temperature bar width Temperature scale Celsius Celsius Fahrenheit Fahrenheit Blink progress bars when the temperature is too high Warning about high temperature Sensors Senzori Detected chips: Chip features: Enabled Label Etichetă Color Culoare lxqt-panel-0.10.0/plugin-sensors/translations/sensors_ru.desktop000066400000000000000000000003651261500472700251730ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[ru]=Сенсоры Comment[ru]=Посмотреть данные с аппаратных сенсоров.lxqt-panel-0.10.0/plugin-sensors/translations/sensors_ru.ts000066400000000000000000000064601261500472700241520ustar00rootroot00000000000000 LXQtSensorsConfiguration Sensors Settings Настройки сенсоров Common Общие Update interval (seconds) Интервал обновления (секунды) Temperature bar width Ширина температурной шкалы Temperature scale Температурная шкала Celsius По Цельсию Fahrenheit По Фаренгейту Blink progress bars when the temperature is too high Мигать индикатором состояния когда температура слишком высока Warning about high temperature Предупреждать о высокой температуре Sensors Сенсоры Detected chips: Обнаруженые чипы: Chip features: Возможности чипов: Enabled Включён Label Метка Color Цвет lxqt-panel-0.10.0/plugin-sensors/translations/sensors_ru_RU.desktop000066400000000000000000000003731261500472700256000ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[ru_RU]=Сенсоры Comment[ru_RU]=Посмотреть данные с аппаратных сенсоров.lxqt-panel-0.10.0/plugin-sensors/translations/sensors_ru_RU.ts000066400000000000000000000064631261500472700245630ustar00rootroot00000000000000 LXQtSensorsConfiguration Sensors Settings Настройки сенсоров Common Общие Update interval (seconds) Интервал обновления (секунды) Temperature bar width Ширина температурной шкалы Temperature scale Температурная шкала Celsius По Цельсию Fahrenheit По Фаренгейту Blink progress bars when the temperature is too high Мигать индикатором состояния когда температура слишком высока Warning about high temperature Предупреждать о высокой температуре Sensors Сенсоры Detected chips: Обнаруженые чипы: Chip features: Возможности чипов: Enabled Включён Label Метка Color Цвет lxqt-panel-0.10.0/plugin-sensors/translations/sensors_sl.desktop000066400000000000000000000003511261500472700251560ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[sl]=Senzorji Comment[sl]=Oglejte si meritve senzorjev za strojno opremo (trenutno lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_th_TH.desktop000066400000000000000000000005371261500472700255540ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[th_TH]=ตัวตรวจจับ Comment[th_TH]=ดูข้อมูลที่ตัวตรวจจับฮาร์ดแวร์อ่านได้ (lm_sensors โดยปัจจุบัน) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_th_TH.ts000066400000000000000000000071371261500472700245340ustar00rootroot00000000000000 LXQtSensorsConfiguration LXQt Sensors Settings ค่าตั้งตัวตรวจจับ LXQt Sensors Settings Common ทั่วไป Update interval (seconds) ทิ้งระยะการปรับข้อมูล (วินาที) Temperature bar width ความกว้างแถบแสดงอุณหภูมิ Temperature scale หน่วยของอุณหภูมิ Celsius เซลเซียส Fahrenheit ฟาห์เรนไฮต์ Blink progress bars when the temperature is too high กระพริบตรงแถบเมื่ออุณหภูมิสูงเกินไป Warning about high temperature การเตือนเกี่ยวกับอุณภูมิที่สูงเกินไป Sensors ตัวตรวจจับ Detected chips: ชิปที่พบ: Chip features: คุณสมบัติชิป: Enabled เปิดใช้ Label ป้าย Color สี lxqt-panel-0.10.0/plugin-sensors/translations/sensors_tr.desktop000066400000000000000000000004121261500472700251630ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[tr]=Algılayıcılar Comment[tr]=Donanım algılayıcılarının okudukları değerleri görüntüleyin (şimdilik lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_uk.desktop000066400000000000000000000003651261500472700251640ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[uk]=Сенсори Comment[uk]=Показати дані апаратних сенсорів (lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_uk.ts000066400000000000000000000067241261500472700241460ustar00rootroot00000000000000 LXQtSensorsConfiguration LXQt Sensors Settings Налаштування сенсорів LXQt Sensors Settings Common Загальне Update interval (seconds) Період поновлення (в секундах) Temperature bar width Ширина планки температури Temperature scale Шкала температури Celsius Цельсія Fahrenheit Фаренгейта Blink progress bars when the temperature is too high Блимати планками прогресу при занадто високій температурі Warning about high temperature Попереджати про високу температуру Sensors Сенсори Detected chips: Виявлені мікросхеми: Chip features: Особливості мікросхеми: Enabled Включено Label Позначка Color Колір lxqt-panel-0.10.0/plugin-sensors/translations/sensors_zh_CN.desktop000066400000000000000000000003351261500472700255430ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[zh_CN]=传感器 Comment[zh_CN]=查看硬件传感器数据(当前是 lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_zh_CN.ts000066400000000000000000000061601261500472700245220ustar00rootroot00000000000000 LXQtSensorsConfiguration LXQt Sensors Settings LXQt 监测器设置 Sensors Settings Common 常规 Update interval (seconds) 更新间隔(秒) Temperature bar width 温度条宽度 Temperature scale 温标 Celsius 摄氏度 Fahrenheit 华氏度 Blink progress bars when the temperature is too high 温度过高时闪动进度条 Warning about high temperature 高温警告 Sensors 监测器 Detected chips: 已测芯片: Chip features: 芯片功能: Enabled 已启用 Label 标注 Color 颜色 lxqt-panel-0.10.0/plugin-sensors/translations/sensors_zh_TW.desktop000066400000000000000000000003351261500472700255750ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Sensors Comment=View readings from hardware sensors. # Translations Name[zh_TW]=感應器 Comment[zh_TW]=從硬體感應器中檢視(現在為 lm_sensors) lxqt-panel-0.10.0/plugin-sensors/translations/sensors_zh_TW.ts000066400000000000000000000061471261500472700245610ustar00rootroot00000000000000 LXQtSensorsConfiguration LXQt Sensors Settings LXQt溫度感應設定 Sensors Settings Common 一般 Update interval (seconds) 更新間隔(秒) Temperature bar width 溫度計寬度 Temperature scale 溫標 Celsius 攝氏 Fahrenheit 華式 Blink progress bars when the temperature is too high 當溫度太高時溫度計閃爍 Warning about high temperature 高溫警告 Sensors 感應器 Detected chips: 偵測晶片: Chip features: 晶片資訊 Enabled 允許 Label 標籤 Color 顏色 lxqt-panel-0.10.0/plugin-showdesktop/000077500000000000000000000000001261500472700175275ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-showdesktop/CMakeLists.txt000066400000000000000000000003221261500472700222640ustar00rootroot00000000000000set(PLUGIN "showdesktop") set(HEADERS showdesktop.h ) set(SOURCES showdesktop.cpp ) set(LIBRARIES ${LIBRARIES} lxqt-globalkeys Qt5Xdg ${XCB_LIBRARIES} ) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-showdesktop/resources/000077500000000000000000000000001261500472700215415ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-showdesktop/resources/showdesktop.desktop.in000066400000000000000000000002641261500472700261150ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop Icon=user-desktop #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-showdesktop/showdesktop.cpp000066400000000000000000000050741261500472700226130ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Petr Vanek * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include #include #include #include #include #include #include #include "showdesktop.h" // Still needed for lxde/lxqt#338 #include #include #define DEFAULT_SHORTCUT "Control+Alt+D" ShowDesktop::ShowDesktop(const ILXQtPanelPluginStartupInfo &startupInfo) : QObject(), ILXQtPanelPlugin(startupInfo) { m_key = GlobalKeyShortcut::Client::instance()->addAction(QString(), QString("/panel/%1/show_hide").arg(settings()->group()), tr("Show desktop"), this); if (m_key) { connect(m_key, &GlobalKeyShortcut::Action::registrationFinished, this, &ShowDesktop::shortcutRegistered); connect(m_key, SIGNAL(activated()), this, SLOT(toggleShowingDesktop())); } QAction * act = new QAction(XdgIcon::fromTheme("user-desktop"), tr("Show Desktop"), this); connect(act, SIGNAL(triggered()), this, SLOT(toggleShowingDesktop())); mButton.setDefaultAction(act); mButton.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); } void ShowDesktop::shortcutRegistered() { if (m_key->shortcut().isEmpty()) { m_key->changeShortcut(DEFAULT_SHORTCUT); if (m_key->shortcut().isEmpty()) { LXQt::Notification::notify(tr("Show Desktop: Global shortcut '%1' cannot be registered").arg(DEFAULT_SHORTCUT)); } } } void ShowDesktop::toggleShowingDesktop() { KWindowSystem::setShowingDesktop(!KWindowSystem::showingDesktop()); } #undef DEFAULT_SHORTCUT lxqt-panel-0.10.0/plugin-showdesktop/showdesktop.h000066400000000000000000000036431261500472700222600ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Petr Vanek * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef SHOWDESKTOP_H #define SHOWDESKTOP_H #include "../panel/ilxqtpanelplugin.h" #include namespace GlobalKeyShortcut { class Action; } class ShowDesktop : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: ShowDesktop(const ILXQtPanelPluginStartupInfo &startupInfo); virtual QWidget *widget() { return &mButton; } virtual QString themeId() const { return "ShowDesktop"; } private: GlobalKeyShortcut::Action * m_key; private slots: void toggleShowingDesktop(); void shortcutRegistered(); private: QToolButton mButton; }; class ShowDesktopLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT // Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new ShowDesktop(startupInfo); } }; #endif lxqt-panel-0.10.0/plugin-showdesktop/translations/000077500000000000000000000000001261500472700222505ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop.ts000066400000000000000000000013451261500472700251750ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Show Desktop lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_ar.desktop000066400000000000000000000004631261500472700267020ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[ar]=تصغير كافَّة النَّوافذ وإظهار سطح المكتب Name[ar]=إظهار سطح المكتب lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_ar.ts000066400000000000000000000015161261500472700256570ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered إظهار سطح المكتب: ﻻ يمكن تسجيل اختصار لوحة المفاتيح العامُّ `%1` Show Desktop إظهار سطح المكتب lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_cs.desktop000066400000000000000000000003771261500472700267110ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[cs]=Zmenšit všechna okna a ukázat plochu Name[cs]=Ukázat plochu lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_cs.ts000066400000000000000000000014221261500472700256560ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Ukázat plochu: Celkovou zkratku '%1' nelze zapsat Show Desktop Ukázat pracovní plochu lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_cs_CZ.desktop000066400000000000000000000004311261500472700272740ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[cs_CZ]=Zmenšit všechna okna a ukázat pracovní plochu Name[cs_CZ]=Ukázat pracovní plochu lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_cs_CZ.ts000066400000000000000000000014251261500472700262550ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Ukázat plochu: Celkovou zkratku '%1' nelze zapsat Show Desktop Ukázat pracovní plochu lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_da.desktop000066400000000000000000000004051261500472700266600ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[da]=Minimerer alle programmer og viser skrivebord Name[da]=Vis Skrivebord lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_da.ts000066400000000000000000000021561261500472700256420ustar00rootroot00000000000000 ShowDesktop Global keyboard shortcut Global tastaturgenvej Panel Show Desktop Global shortcut: '%1' cannot be registered Global genvej for Vis Skrivebord : '%1' kan ikke registreres Show desktop Show Desktop: Global shortcut '%1' cannot be registered Show Desktop Vis skrivebord lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_da_DK.desktop000066400000000000000000000004041261500472700272350ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[da_DK]=Minimer alle vinduer og vis skrivebord Name[da_DK]=Vis Skrivebord lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_da_DK.ts000066400000000000000000000014201261500472700262110ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Vis Skrivebord: Global genvej '%1' kan ikke registreres Show Desktop Vis Skrivebord lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_de.desktop000066400000000000000000000001451261500472700266650ustar00rootroot00000000000000Name[de]=Arbeitsfläche anzeigen Comment[de]=Alle Fenster minimieren und die Arbeitsfläche anzeigen lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_de.ts000066400000000000000000000014761261500472700256520ustar00rootroot00000000000000 ShowDesktop Show desktop Arbeitsfläche anzeigen Show Desktop Arbeitsfläche anzeigen Show Desktop: Global shortcut '%1' cannot be registered Das globale Tastaturkürzel zum Arbeitsfläche anzeigen '%1' kann nicht registriert werden lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_el.desktop000066400000000000000000000003211261500472700266710ustar00rootroot00000000000000Name[el]=Εμφάνιση επιφάνειας εργασίας Comment[el]=Ελαχιστοποίηση όλων των παραθύρων και εμφάνιση της επιφάνειας εργασίας lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_el.ts000066400000000000000000000017061261500472700256560ustar00rootroot00000000000000 ShowDesktop Show desktop Εμφάνιση επιφάνειας εργασίας Show Desktop: Global shortcut '%1' cannot be registered Εμφάνιση επιφάνειας εργασίας: Δεν είναι δυνατή η καταχώριση της καθολικής συντόμευσης "%1" Show Desktop Εμφάνιση επιφάνειας εργασίας lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_eo.desktop000066400000000000000000000004241261500472700267000ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[eo]=Malmaksimigi ĉiujn fenestrojn kaj montri la labortablon Name[eo]=Montri labortablon lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_eo.ts000066400000000000000000000014241261500472700256560ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Montri labortablon: ĉiea klavkombino '%1' ne registreblas Show Desktop Montri labortablon lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_es.desktop000066400000000000000000000004171261500472700267060ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[es]=Minimiza todas las ventanas y muestra el escritorio Name[es]=Mostrar escritorio lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_es.ts000066400000000000000000000014271261500472700256650ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Mostrar Escritorio: Atajo global '%1' no puede ser registrado Show Desktop Mostrar Escritorio lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_es_VE.desktop000066400000000000000000000004261261500472700273000ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[es_VE]=Minimiza todas las ventanas de todos los escritorios Name[es_VE]=Mostrar Escritorio lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_es_VE.ts000066400000000000000000000014431261500472700262550ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Mostrar escritorio: Acceso de teclado global '%1' no puede registrarse Show Desktop Mostrar Escritorio lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_eu.desktop000066400000000000000000000004151261500472700267060ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[eu]=Minimizatu leiho guztiak eta erakutsi mahaigaina Name[eu]=Erakutsi mahaigaina lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_eu.ts000066400000000000000000000014341261500472700256650ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Erakutsi mahaigaina: Ezin da '%1' lasterbide globala erregistratu Show Desktop Erakutsi mahaigaina lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_fi.desktop000066400000000000000000000004141261500472700266720ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[fi]=Pienennä kaikki ikkunat ja näytä työpöytä Name[fi]=Näytä työpöytä lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_fi.ts000066400000000000000000000014451261500472700256540ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Näytä työpöytä: globaalia pikanäppäintä '%1' ei voi rekisteröidä Show Desktop Näytä työpöytä lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_fr_FR.desktop000066400000000000000000000004241261500472700272730ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[fr_FR]=Minimiser toutes les fenêtres et montrer le bureau Name[fr_FR]=Montrer le bureau lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_fr_FR.ts000066400000000000000000000014421261500472700262510ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Montrer le bureau : le raccourci global '%1' ne peut pas être défini Show Desktop Montrer le bureau lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_hu.desktop000066400000000000000000000004401261500472700267070ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[hu]=Minimalizálja az összes ablakot és megjeleníti az asztalt Name[hu]=Az asztal megjelenítése lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_hu.ts000066400000000000000000000014371261500472700256730ustar00rootroot00000000000000 ShowDesktop Show desktop Asztalmegjelenítés Show Desktop: Global shortcut '%1' cannot be registered Asztalmegjelenítés: A '%1' gyorsbillentyű nem regisztrálható Show Desktop Asztalmegjelenítés lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_hu_HU.ts000066400000000000000000000014421261500472700262630ustar00rootroot00000000000000 ShowDesktop Show desktop Asztalmegjelenítés Show Desktop: Global shortcut '%1' cannot be registered Asztalmegjelenítés: A '%1' gyorsbillentyű nem regisztrálható Show Desktop Asztalmegjelenítés lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_ia.desktop000066400000000000000000000002631261500472700266670ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show Desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_ia.ts000066400000000000000000000013421261500472700256430ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Show Desktop lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_id_ID.desktop000066400000000000000000000004171261500472700272470ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[id_ID]=Kecilkan seluruh jendela dan tampilkan desktop Name[id_ID]=Tampilkan Desktop lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_id_ID.ts000066400000000000000000000013441261500472700262240ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Show Desktop Tampilkan Desktop lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_it.desktop000066400000000000000000000001301261500472700267030ustar00rootroot00000000000000Comment[it]=Minimizza tutte le finestre e mostra la scrivania Name[it]=Mostra scrivania lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_it.ts000066400000000000000000000014361261500472700256720ustar00rootroot00000000000000 ShowDesktop Show desktop Mostra scrivania Show Desktop: Global shortcut '%1' cannot be registered Mostra scrivania: la scorciatoia globale '%1' non può essere registrata Show Desktop Mostra scrivania lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_ja.desktop000066400000000000000000000004551261500472700266730ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[ja]=全ウィンドウ最小化やデスクトップ表示を可能にします Name[ja]=デスクトップ表示 lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_ja.ts000066400000000000000000000015051261500472700256450ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered デスクトップの表示: グローバルなショートカット '%1' は登録できません Show Desktop デスクトップを表示 lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_ko.desktop000066400000000000000000000002631261500472700267070ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show Desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_ko.ts000066400000000000000000000013421261500472700256630ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Show Desktop lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_lt.desktop000066400000000000000000000004071261500472700267150ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[lt]=Sumažina visus langus ir rodo darbalaukį Name[lt]=Darbalaukio rodymas lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_lt.ts000066400000000000000000000014351261500472700256740ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Rodyti darbalaukį: globalusis klavišas „%1“ negali būti registruojamas Show Desktop Rodyti darbalaukį lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_nl.desktop000066400000000000000000000004121261500472700267030ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[nl]=Minimaliseer alle vensters en toon het bureaublad Name[nl]=Toon Bureaublad lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_nl.ts000066400000000000000000000014461261500472700256700ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Bureaublad weergeven: systeembrede sneltoets '%1' kan niet worden geregistreerd Show Desktop Toon bureaublad lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_pl.desktop000066400000000000000000000004041261500472700267060ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[pl]=Minimalizuje wszystkie okna i pokazuje pulpit Name[pl]=Pokaż pulpit lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_pl_PL.desktop000066400000000000000000000004071261500472700273040ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[pl_PL]=Minimalizuj wszystkie okna i pokaż pulpit Name[pl_PL]=Pokaż pulpit lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_pl_PL.ts000066400000000000000000000014341261500472700262620ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Pokaż Pulpit: Globalny skrót '%1' nie może zostać zarejestrowany Show Desktop Pokaż pulpit lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_pt.desktop000066400000000000000000000004211261500472700267150ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Name[pt]=Mostrar área de trabalho Comment[pt]=Minimizar janelas e mostrar a área de trabalho lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_pt.ts000066400000000000000000000014251261500472700256770ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Tecla de atalho global: '%1' não pode ser registada Show Desktop Mostrar área de trabalho lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_pt_BR.desktop000066400000000000000000000004411261500472700273020ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[pt_BR]=Minimizar todas as janelas e exibir a área de trabalho Name[pt_BR]=Exibir a área de trabalho lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_pt_BR.ts000066400000000000000000000014511261500472700262610ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Mostrar Área De Trabalho: Atalho Global '%1'não pode se registrado Show Desktop Exibir a área de trabalho lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_ro_RO.desktop000066400000000000000000000004221261500472700273130ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[ro_RO]=Minimizează toate ferestrele și arată desktopul Name[ro_RO]=Arată desktopul lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_ro_RO.ts000066400000000000000000000013471261500472700262770ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Show Desktop Afișează desktopul lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_ru.desktop000066400000000000000000000004761261500472700267320ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[ru]=Свернуть все окна и показать рабочий стол. Name[ru]=Показать рабочий столlxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_ru.ts000066400000000000000000000016431261500472700257040ustar00rootroot00000000000000 ShowDesktop Show desktop Показать рабочий стол Show Desktop: Global shortcut '%1' cannot be registered Показать рабочий стол: глобальное сочетание клавиш '%1' не может быть зарегистрировано Show Desktop Показать рабочий стол lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_ru_RU.desktop000066400000000000000000000005051261500472700273310ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[ru_RU]=Свернуть все окна и показать рабочий стол. Name[ru_RU]=Показать рабочий стол lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_ru_RU.ts000066400000000000000000000016461261500472700263150ustar00rootroot00000000000000 ShowDesktop Show desktop Показать рабочий стол Show Desktop: Global shortcut '%1' cannot be registered Показать рабочий стол: глобальное сочетание клавиш '%1' не может быть зарегистрировано Show Desktop Показать рабочий стол lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_sk.desktop000066400000000000000000000004061261500472700267120ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[sk]=Minimalizuje všetky okná a zobrazí plochu Name[sk]=Zobraziť plochu lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_sk_SK.ts000066400000000000000000000013431261500472700262650ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Show Desktop Zobraziť plochu lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_sl.desktop000066400000000000000000000004051261500472700267120ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[sl]=Pomanjšajte vsa okna, da se pokaže namizje Name[sl]=Pokaži namizje lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_sl.ts000066400000000000000000000014141261500472700256700ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Prikaz namizja: globalne bližnjice »%1« ni moč registrirati Show Desktop Pokaži namizje lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_sr.desktop000066400000000000000000000004631261500472700267240ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[sr]=Минимизуј све прозоре и прикажи радну површ Name[sr]=Приказ површи lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_sr@ijekavian.desktop000066400000000000000000000002241261500472700307010ustar00rootroot00000000000000Name[sr@ijekavian]=Приказ површи Comment[sr@ijekavian]=Минимизуј све прозоре и прикажи радну површ lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_sr@ijekavianlatin.desktop000066400000000000000000000001601261500472700317300ustar00rootroot00000000000000Name[sr@ijekavianlatin]=Prikaz površi Comment[sr@ijekavianlatin]=Minimizuj sve prozore i prikaži radnu površ lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_sr@latin.desktop000066400000000000000000000004211261500472700300460ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[sr@latin]=Minimizuj sve prozore i prikaži radnu površ Name[sr@latin]=Prikaz površi lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_sr@latin.ts000066400000000000000000000013501261500472700270250ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Show Desktop lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_sr_BA.ts000066400000000000000000000023431261500472700262420ustar00rootroot00000000000000 ShowDesktop Global keyboard shortcut Глобална пречица тастатуре Panel Show Desktop Global shortcut: '%1' cannot be registered Глобална пречица приказа површи за панел: „%1“ не може бити регистрована Show desktop Show Desktop: Global shortcut '%1' cannot be registered Show Desktop Прикажи радну површ lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_sr_RS.ts000066400000000000000000000013671261500472700263110ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Show Desktop Прикажи радну површ lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_th_TH.desktop000066400000000000000000000005431261500472700273050ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[th_TH]=ย่อเก็บหน้าต่างทั้งหมดและแสดงพื้นโต๊ะ Name[th_TH]=แสดงพื้นโต๊ะ lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_th_TH.ts000066400000000000000000000016041261500472700262610ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered แสดงพื้นโต๊ะ: ไม่สามารถตั้ง '%1' เป็นปุ่มลัดส่วนกลางได้ Show Desktop แสดงพื้นโต๊ะ lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_tr.desktop000066400000000000000000000004221261500472700267200ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[tr]=Tüm pencereleri küçült ve masaüstünü göster Name[tr]=Masaüstünü Göster lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_tr.ts000066400000000000000000000014271261500472700257030ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Masaüstünü Göster: '%1' genel kısayolu kaydedilemiyor Show Desktop Masaüstünü Göster lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_uk.desktop000066400000000000000000000004701261500472700267150ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[uk]=Згорнути всі вікна та показати стільницю Name[uk]=Показати стільницю lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_uk.ts000066400000000000000000000015531261500472700256750ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered Показати стільницю: Не вдалося зареєструвати глобальне скорочення '%1' Show Desktop Показати стільницю lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_zh_CN.GB2312.desktop000066400000000000000000000002631261500472700300760ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show Desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_zh_CN.desktop000066400000000000000000000004001261500472700272700ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[zh_CN]=最小化所有窗口并显示桌面 Name[zh_CN]=显示桌面 lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_zh_CN.ts000066400000000000000000000014051261500472700262530ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered 显示桌面:无法注册全局快捷键'%1' Show Desktop 显示桌面 lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_zh_TW.desktop000066400000000000000000000004061261500472700273300ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Show desktop Comment=Minimize all windows and show the desktop #TRANSLATIONS_DIR=../translations # Translations Comment[zh_TW]=將所有視窗縮到最小並顯示桌面 Name[zh_TW]=顯示桌面 lxqt-panel-0.10.0/plugin-showdesktop/translations/showdesktop_zh_TW.ts000066400000000000000000000014061261500472700263060ustar00rootroot00000000000000 ShowDesktop Show desktop Show Desktop: Global shortcut '%1' cannot be registered 顯示桌面:全域快捷鍵'%1'無法被註冊 Show Desktop 顯示桌面 lxqt-panel-0.10.0/plugin-spacer/000077500000000000000000000000001261500472700164325ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-spacer/CMakeLists.txt000066400000000000000000000003111261500472700211650ustar00rootroot00000000000000set(PLUGIN "spacer") set(HEADERS spacer.h spacerconfiguration.h ) set(SOURCES spacer.cpp spacerconfiguration.cpp ) set(UIS spacerconfiguration.ui ) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-spacer/resources/000077500000000000000000000000001261500472700204445ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-spacer/resources/spacer.desktop.in000066400000000000000000000002321261500472700237160ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Spacer Comment=Space between widgets Icon=bookmark-new #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-spacer/spacer.cpp000066400000000000000000000056761261500472700204310ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "spacer.h" #include "spacerconfiguration.h" #include void SpacerWidget::setType(QString const & type) { if (type != mType) { mType = type; style()->unpolish(this); style()->polish(this); } } void SpacerWidget::setOrientation(QString const & orientation) { if (orientation != mOrientation) { mOrientation = orientation; style()->unpolish(this); style()->polish(this); } } /************************************************ ************************************************/ Spacer::Spacer(const ILXQtPanelPluginStartupInfo &startupInfo) : QObject() , ILXQtPanelPlugin(startupInfo) , mSize(8) { settingsChanged(); } /************************************************ ************************************************/ void Spacer::settingsChanged() { mSize = settings()->value("size", 8).toInt(); mSpacer.setType(settings()->value("spaceType", SpacerConfiguration::msTypes[0]).toString()); setSizes(); } /************************************************ ************************************************/ QDialog *Spacer::configureDialog() { return new SpacerConfiguration(settings()); } /************************************************ ************************************************/ void Spacer::setSizes() { if (panel()->isHorizontal()) { mSpacer.setOrientation("horizontal"); mSpacer.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); mSpacer.setFixedWidth(mSize); mSpacer.setMinimumHeight(0); mSpacer.setMaximumHeight(QWIDGETSIZE_MAX); } else { mSpacer.setOrientation("vertical"); mSpacer.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); mSpacer.setFixedHeight(mSize); mSpacer.setMinimumWidth(0); mSpacer.setMaximumWidth(QWIDGETSIZE_MAX); } } /************************************************ ************************************************/ void Spacer::realign() { setSizes(); } lxqt-panel-0.10.0/plugin-spacer/spacer.h000066400000000000000000000045611261500472700200660ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef SPACER_H #define SPACER_H #include "../panel/ilxqtpanelplugin.h" #include class SpacerWidget : public QFrame { Q_OBJECT Q_PROPERTY(QString type READ getType) Q_PROPERTY(QString orientation READ getOrientation) public: const QString& getType() const throw () { return mType; } void setType(QString const & type); const QString& getOrientation() const throw () { return mOrientation; } void setOrientation(QString const & orientation); private: QString mType; QString mOrientation; }; class Spacer : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: Spacer(const ILXQtPanelPluginStartupInfo &startupInfo); virtual QWidget *widget() { return &mSpacer; } virtual QString themeId() const { return "Spacer"; } bool isSeparate() const { return true; } virtual ILXQtPanelPlugin::Flags flags() const { return HaveConfigDialog; } QDialog *configureDialog(); virtual void realign(); private slots: virtual void settingsChanged(); private: void setSizes(); private: SpacerWidget mSpacer; int mSize; }; class SpacerPluginLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT // Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new Spacer(startupInfo);} }; #endif lxqt-panel-0.10.0/plugin-spacer/spacerconfiguration.cpp000066400000000000000000000051451261500472700232100ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "spacerconfiguration.h" #include "ui_spacerconfiguration.h" //Note: strings can't actually be translated here (in static initialization time) // the QT_TR_NOOP here is just for qt translate tools to get the strings for translation const QStringList SpacerConfiguration::msTypes = { QLatin1String(QT_TR_NOOP("lined")) , QLatin1String(QT_TR_NOOP("dotted")) , QLatin1String(QT_TR_NOOP("invisible")) }; SpacerConfiguration::SpacerConfiguration(QSettings *settings, QWidget *parent) : QDialog(parent) , ui(new Ui::SpacerConfiguration) , mSettings(settings) { setAttribute(Qt::WA_DeleteOnClose); setObjectName("SpacerConfigurationWindow"); ui->setupUi(this); //Note: translation is needed here in runtime (translator is attached already) for (auto const & type : msTypes) ui->typeCB->addItem(tr(type.toStdString().c_str()), type); loadSettings(); connect(ui->sizeSB, static_cast(&QSpinBox::valueChanged), this, &SpacerConfiguration::sizeChanged); connect(ui->typeCB, static_cast(&QComboBox::currentIndexChanged), this, &SpacerConfiguration::typeChanged); } SpacerConfiguration::~SpacerConfiguration() { delete ui; } void SpacerConfiguration::loadSettings() { ui->sizeSB->setValue(mSettings->value("size", 8).toInt()); ui->typeCB->setCurrentIndex(ui->typeCB->findData(mSettings->value("spaceType", msTypes[0]).toString())); } void SpacerConfiguration::sizeChanged(int value) { mSettings->setValue("size", value); } void SpacerConfiguration::typeChanged(int index) { mSettings->setValue("spaceType", ui->typeCB->itemData(index, Qt::UserRole)); } lxqt-panel-0.10.0/plugin-spacer/spacerconfiguration.h000066400000000000000000000031441261500472700226520ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef SPACERCONFIGURATION_H #define SPACERCONFIGURATION_H #include #include class QSettings; class QAbstractButton; namespace Ui { class SpacerConfiguration; } class SpacerConfiguration : public QDialog { Q_OBJECT public: explicit SpacerConfiguration(QSettings *settings, QWidget *parent = 0); ~SpacerConfiguration(); public: static const QStringList msTypes; private: Ui::SpacerConfiguration *ui; QSettings *mSettings; private slots: /* Saves settings in conf file. */ void loadSettings(); void sizeChanged(int value); void typeChanged(int index); }; #endif // SPACERCONFIGURATION_H lxqt-panel-0.10.0/plugin-spacer/spacerconfiguration.ui000066400000000000000000000033471261500472700230450ustar00rootroot00000000000000 SpacerConfiguration 0 0 Spacer Settings Space width: 4 2048 8 Space type: false Qt::Horizontal QDialogButtonBox::Close buttons clicked(QAbstractButton*) SpacerConfiguration close() lxqt-panel-0.10.0/plugin-spacer/translations/000077500000000000000000000000001261500472700211535ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-spacer/translations/spacer.ts000066400000000000000000000023451261500472700230040ustar00rootroot00000000000000 SpacerConfiguration Spacer Settings Space width: Space type: lined dotted invisible lxqt-panel-0.10.0/plugin-spacer/translations/spacer_de.desktop000066400000000000000000000001101261500472700244630ustar00rootroot00000000000000Name[de]=Spacer Comment[de]=Stellt den Abstand zwischen den Widgets ein lxqt-panel-0.10.0/plugin-spacer/translations/spacer_de.ts000066400000000000000000000023221261500472700234470ustar00rootroot00000000000000 SpacerConfiguration Spacer Settings Leerraum Einstellungen Space width: Leerraumbreite: Space type: Leerraumtyp: lined liniert dotted punktiert invisible unsichtbar lxqt-panel-0.10.0/plugin-spacer/translations/spacer_el.desktop000066400000000000000000000001611261500472700245010ustar00rootroot00000000000000Name[el]=Διάστημα Comment[el]=Διάστημα μεταξύ των γραφικών συστατικών lxqt-panel-0.10.0/plugin-spacer/translations/spacer_el.ts000066400000000000000000000024471261500472700234670ustar00rootroot00000000000000 SpacerConfiguration Spacer Settings Ρυθμίσεις διαστήματος Space width: Πλάτος διαστήματος: Space type: Τύπος διαστήματος: lined με γραμμές dotted διάστικτο invisible αόρατο lxqt-panel-0.10.0/plugin-spacer/translations/spacer_hu.desktop000066400000000000000000000001021261500472700245100ustar00rootroot00000000000000Name[hu]=Távtartó Comment[hu]=Elemek közötti távolságtartó lxqt-panel-0.10.0/plugin-spacer/translations/spacer_hu.ts000066400000000000000000000013031261500472700234710ustar00rootroot00000000000000 SpacerConfiguration Spacer Settings Távtartóbeállítás Space width: Távolság: Space type: Táv típus: lxqt-panel-0.10.0/plugin-spacer/translations/spacer_hu_HU.ts000066400000000000000000000013061261500472700240700ustar00rootroot00000000000000 SpacerConfiguration Spacer Settings Távtartóbeállítás Space width: Távolság: Space type: Táv típus: lxqt-panel-0.10.0/plugin-spacer/translations/spacer_it.desktop000066400000000000000000000001051261500472700245130ustar00rootroot00000000000000Name[it]=Spaziatore Comment[it]=Aggiunge uno spazio fra gli elementi lxqt-panel-0.10.0/plugin-spacer/translations/spacer_it.ts000066400000000000000000000013201261500472700234700ustar00rootroot00000000000000 SpacerConfiguration Spacer Settings Impostazioni spaziatore Space width: Larghezza: Space type: Tipo: lxqt-panel-0.10.0/plugin-spacer/translations/spacer_ru.desktop000066400000000000000000000001371261500472700245320ustar00rootroot00000000000000Name[ru]=Разделитель Comment[ru]=Промежуток между виджетами lxqt-panel-0.10.0/plugin-spacer/translations/spacer_ru.ts000066400000000000000000000014011261500472700235020ustar00rootroot00000000000000 SpacerConfiguration Spacer Settings Настройки разделителя Space width: Ширина разделителя: Space type: Тип разделителя: lxqt-panel-0.10.0/plugin-spacer/translations/spacer_ru_RU.desktop000066400000000000000000000001451261500472700251370ustar00rootroot00000000000000Name[ru_RU]=Разделитель Comment[ru_RU]=Промежуток между виджетами lxqt-panel-0.10.0/plugin-spacer/translations/spacer_ru_RU.ts000066400000000000000000000014041261500472700241130ustar00rootroot00000000000000 SpacerConfiguration Spacer Settings Настройки разделителя Space width: Ширина разделителя: Space type: Тип разделителя: lxqt-panel-0.10.0/plugin-spacer/translations/spacer_sk.ts000066400000000000000000000023211261500472700234730ustar00rootroot00000000000000 SpacerConfiguration Spacer Settings Nastavenia medzery Space width: Šírka medzery: Space type: Typ medzery: lined plná čiara dotted bodkovaná čiara invisible neviditeľná lxqt-panel-0.10.0/plugin-statusnotifier/000077500000000000000000000000001261500472700202405ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-statusnotifier/CMakeLists.txt000066400000000000000000000012041261500472700227750ustar00rootroot00000000000000set(PLUGIN "statusnotifier") find_package(dbusmenu-qt5 REQUIRED) set(HEADERS statusnotifier.h dbustypes.h statusnotifierbutton.h statusnotifieriteminterface.h statusnotifierwatcher.h statusnotifierwidget.h sniasync.h ) set(SOURCES statusnotifier.cpp dbustypes.cpp statusnotifierbutton.cpp statusnotifieriteminterface.cpp statusnotifierwatcher.cpp statusnotifierwidget.cpp sniasync.cpp ) qt5_add_dbus_adaptor(SOURCES org.kde.StatusNotifierItem.xml statusnotifieriteminterface.h StatusNotifierItemInterface ) set(LIBRARIES dbusmenu-qt5 ) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-statusnotifier/dbustypes.cpp000066400000000000000000000045271261500472700227760ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Balázs Béla * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "dbustypes.h" // Marshall the IconPixmap data into a D-Bus argument QDBusArgument &operator<<(QDBusArgument &argument, const IconPixmap &icon) { argument.beginStructure(); argument << icon.width; argument << icon.height; argument << icon.bytes; argument.endStructure(); return argument; } // Retrieve the ImageStruct data from the D-Bus argument const QDBusArgument &operator>>(const QDBusArgument &argument, IconPixmap &icon) { argument.beginStructure(); argument >> icon.width; argument >> icon.height; argument >> icon.bytes; argument.endStructure(); return argument; } // Marshall the ToolTip data into a D-Bus argument QDBusArgument &operator<<(QDBusArgument &argument, const ToolTip &toolTip) { argument.beginStructure(); argument << toolTip.iconName; argument << toolTip.iconPixmap; argument << toolTip.title; argument << toolTip.description; argument.endStructure(); return argument; } // Retrieve the ToolTip data from the D-Bus argument const QDBusArgument &operator>>(const QDBusArgument &argument, ToolTip &toolTip) { argument.beginStructure(); argument >> toolTip.iconName; argument >> toolTip.iconPixmap; argument >> toolTip.title; argument >> toolTip.description; argument.endStructure(); return argument; } lxqt-panel-0.10.0/plugin-statusnotifier/dbustypes.h000066400000000000000000000033371261500472700224410ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Balázs Béla * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #ifndef DBUSTYPES_H #define DBUSTYPES_H struct IconPixmap { int width; int height; QByteArray bytes; }; typedef QList IconPixmapList; struct ToolTip { QString iconName; QList iconPixmap; QString title; QString description; }; QDBusArgument &operator<<(QDBusArgument &argument, const IconPixmap &icon); const QDBusArgument &operator>>(const QDBusArgument &argument, IconPixmap &icon); QDBusArgument &operator<<(QDBusArgument &argument, const ToolTip &toolTip); const QDBusArgument &operator>>(const QDBusArgument &argument, ToolTip &toolTip); Q_DECLARE_METATYPE(IconPixmap) Q_DECLARE_METATYPE(ToolTip) #endif // DBUSTYPES_H lxqt-panel-0.10.0/plugin-statusnotifier/org.kde.StatusNotifierItem.xml000066400000000000000000000046171261500472700261240ustar00rootroot00000000000000 lxqt-panel-0.10.0/plugin-statusnotifier/resources/000077500000000000000000000000001261500472700222525ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-statusnotifier/resources/statusnotifier.desktop.in000066400000000000000000000002051261500472700273320ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Status Notifier Plugin Comment=Status Notifier Plugin Icon=go-bottom lxqt-panel-0.10.0/plugin-statusnotifier/sniasync.cpp000066400000000000000000000041251261500472700225750ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXQt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Palo Kisa * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "sniasync.h" SniAsync::SniAsync(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent/* = 0*/) : QObject(parent) , mSni{service, path, connection} { //forward StatusNotifierItem signals connect(&mSni, &org::kde::StatusNotifierItem::NewAttentionIcon, this, &SniAsync::NewAttentionIcon); connect(&mSni, &org::kde::StatusNotifierItem::NewIcon, this, &SniAsync::NewIcon); connect(&mSni, &org::kde::StatusNotifierItem::NewOverlayIcon, this, &SniAsync::NewOverlayIcon); connect(&mSni, &org::kde::StatusNotifierItem::NewStatus, this, &SniAsync::NewStatus); connect(&mSni, &org::kde::StatusNotifierItem::NewTitle, this, &SniAsync::NewTitle); connect(&mSni, &org::kde::StatusNotifierItem::NewToolTip, this, &SniAsync::NewToolTip); } QDBusPendingReply SniAsync::asyncPropGet(QString const & property) { QDBusMessage msg = QDBusMessage::createMethodCall(mSni.service(), mSni.path(), QLatin1String("org.freedesktop.DBus.Properties"), QLatin1String("Get")); msg << mSni.interface() << property; return mSni.connection().asyncCall(msg); } lxqt-panel-0.10.0/plugin-statusnotifier/sniasync.h000066400000000000000000000106061261500472700222430ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXQt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Palo Kisa * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #if !defined(SNIASYNC_H) #define SNIASYNC_H #include #include "statusnotifieriteminterface.h" template struct remove_class_type { using type = void; }; // bluff template struct remove_class_type { using type = R(ArgTypes...); }; template struct remove_class_type { using type = R(ArgTypes...); }; template class call_sig_helper { template static decltype(&L1::operator()) test(int); template static void test(...); //bluff public: using type = decltype(test(0)); }; template struct call_signature : public remove_class_type::type> {}; template struct call_signature { using type = R (ArgTypes...); }; template struct call_signature { using type = R (ArgTypes...); }; template struct call_signature { using type = R (ArgTypes...); }; template struct call_signature { using type = R(ArgTypes...); }; template struct is_valid_signature : public std::false_type {}; template struct is_valid_signature : public std::true_type {}; class SniAsync : public QObject { Q_OBJECT public: SniAsync(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); template inline void propertyGetAsync(QString const &name, F finished) { static_assert(is_valid_signature::type>::value, "need callable (lambda, *function, callable obj) (Arg) -> void"); connect(new QDBusPendingCallWatcher{asyncPropGet(name), this}, &QDBusPendingCallWatcher::finished, [this, finished, name] (QDBusPendingCallWatcher * call) { QDBusPendingReply reply = *call; if (reply.isError()) qDebug() << "Error on DBus request:" << reply.error(); finished(qdbus_cast::type>::argument_type>(reply.value())); call->deleteLater(); } ); } //exposed methods from org::kde::StatusNotifierItem inline QString service() const { return mSni.service(); } public slots: //Forwarded slots from org::kde::StatusNotifierItem inline QDBusPendingReply<> Activate(int x, int y) { return mSni.Activate(x, y); } inline QDBusPendingReply<> ContextMenu(int x, int y) { return mSni.ContextMenu(x, y); } inline QDBusPendingReply<> Scroll(int delta, const QString &orientation) { return mSni.Scroll(delta, orientation); } inline QDBusPendingReply<> SecondaryActivate(int x, int y) { return mSni.SecondaryActivate(x, y); } signals: //Forwarded signals from org::kde::StatusNotifierItem void NewAttentionIcon(); void NewIcon(); void NewOverlayIcon(); void NewStatus(const QString &status); void NewTitle(); void NewToolTip(); private: QDBusPendingReply asyncPropGet(QString const & property); private: org::kde::StatusNotifierItem mSni; }; #endif lxqt-panel-0.10.0/plugin-statusnotifier/statusnotifier.cpp000066400000000000000000000024521261500472700240320ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Balázs Béla * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "statusnotifier.h" StatusNotifier::StatusNotifier(const ILXQtPanelPluginStartupInfo &startupInfo) : QObject(), ILXQtPanelPlugin(startupInfo) { m_widget = new StatusNotifierWidget(this); } void StatusNotifier::realign() { m_widget->realign(); } lxqt-panel-0.10.0/plugin-statusnotifier/statusnotifier.h000066400000000000000000000037541261500472700235050ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Balázs Béla * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef STATUSNOTIFIER_PLUGIN_H #define STATUSNOTIFIER_PLUGIN_H #include "../panel/ilxqtpanelplugin.h" #include "statusnotifierwidget.h" class StatusNotifier : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: StatusNotifier(const ILXQtPanelPluginStartupInfo &startupInfo); bool isSeparate() const { return true; } void realign(); QString themeId() const { return "StatusNotifier"; } virtual Flags flags() const { return SingleInstance | NeedsHandle; } QWidget *widget() { return m_widget; } private: StatusNotifierWidget *m_widget; }; class StatusNotifierLibrary : public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT // Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new StatusNotifier(startupInfo); } }; #endif // STATUSNOTIFIER_PLUGIN_H lxqt-panel-0.10.0/plugin-statusnotifier/statusnotifierbutton.cpp000066400000000000000000000222011261500472700252600ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Balázs Béla * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "statusnotifierbutton.h" #include #include #include #include "../panel/ilxqtpanelplugin.h" #include "sniasync.h" StatusNotifierButton::StatusNotifierButton(QString service, QString objectPath, ILXQtPanelPlugin* plugin, QWidget *parent) : QToolButton(parent), mMenu(nullptr), mStatus(Passive), mFallbackIcon(QIcon::fromTheme("application-x-executable")), mPlugin(plugin) { interface = new SniAsync(service, objectPath, QDBusConnection::sessionBus(), this); connect(interface, &SniAsync::NewIcon, this, &StatusNotifierButton::newIcon); connect(interface, &SniAsync::NewOverlayIcon, this, &StatusNotifierButton::newOverlayIcon); connect(interface, &SniAsync::NewAttentionIcon, this, &StatusNotifierButton::newAttentionIcon); connect(interface, &SniAsync::NewToolTip, this, &StatusNotifierButton::newToolTip); connect(interface, &SniAsync::NewStatus, this, &StatusNotifierButton::newStatus); interface->propertyGetAsync(QLatin1String("Menu"), [this] (QDBusObjectPath path) { if (!path.path().isEmpty()) { mMenu = (new DBusMenuImporter(interface->service(), path.path(), this))->menu(); dynamic_cast(*mMenu).setParent(this); mMenu->setObjectName(QLatin1String("StatusNotifierMenu")); } }); interface->propertyGetAsync(QLatin1String("Status"), [this] (QString status) { newStatus(status); }); interface->propertyGetAsync(QLatin1String("IconThemePath"), [this] (QString value) { mThemePath = value; //do the logic of icons after we've got the theme path refetchIcon(Active); refetchIcon(Passive); refetchIcon(NeedsAttention); }); newToolTip(); } StatusNotifierButton::~StatusNotifierButton() { delete interface; } void StatusNotifierButton::newIcon() { refetchIcon(Passive); } void StatusNotifierButton::newOverlayIcon() { refetchIcon(Active); } void StatusNotifierButton::newAttentionIcon() { refetchIcon(NeedsAttention); } void StatusNotifierButton::refetchIcon(Status status) { QString nameProperty, pixmapProperty; if (status == Active) { nameProperty = QLatin1String("OverlayIconName"); pixmapProperty = QLatin1String("OverlayIconPixmap"); } else if (status == NeedsAttention) { nameProperty = QLatin1String("AttentionIconName"); pixmapProperty = QLatin1String("AttentionIconPixmap"); } else // status == Passive { nameProperty = QLatin1String("IconName"); pixmapProperty = QLatin1String("IconPixmap"); } interface->propertyGetAsync(nameProperty, [this, status, pixmapProperty] (QString iconName) { QIcon nextIcon; if (!iconName.isEmpty()) { if (QIcon::hasThemeIcon(iconName)) nextIcon = QIcon::fromTheme(iconName); else { QDir themeDir(mThemePath); if (themeDir.exists()) { if (themeDir.exists(iconName + ".png")) nextIcon.addFile(themeDir.filePath(iconName + ".png")); if (themeDir.cd("hicolor") || (themeDir.cd("icons") && themeDir.cd("hicolor"))) { QStringList sizes = themeDir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot); foreach (QString dir, sizes) { QStringList dirs = QDir(themeDir.filePath(dir)).entryList(QDir::AllDirs | QDir::NoDotAndDotDot); foreach (QString innerDir, dirs) { QString file = themeDir.absolutePath() + "/" + dir + "/" + innerDir + "/" + iconName + ".png"; if (QFile::exists(file)) nextIcon.addFile(file); } } } } } switch (status) { case Active: mOverlayIcon = nextIcon; break; case NeedsAttention: mAttentionIcon = nextIcon; break; case Passive: mIcon = nextIcon; break; } resetIcon(); } else { interface->propertyGetAsync(pixmapProperty, [this, status, pixmapProperty] (IconPixmapList iconPixmaps) { if (iconPixmaps.empty()) return; QIcon nextIcon; for (IconPixmap iconPixmap: iconPixmaps) { if (!iconPixmap.bytes.isNull()) { QImage image((uchar*) iconPixmap.bytes.data(), iconPixmap.width, iconPixmap.height, QImage::Format_ARGB32); const uchar *end = image.constBits() + image.byteCount(); uchar *dest = reinterpret_cast(iconPixmap.bytes.data()); for (const uchar *src = image.constBits(); src < end; src += 4, dest += 4) qToUnaligned(qToBigEndian(qFromUnaligned(src)), dest); nextIcon.addPixmap(QPixmap::fromImage(image)); } } switch (status) { case Active: mOverlayIcon = nextIcon; break; case NeedsAttention: mAttentionIcon = nextIcon; break; case Passive: mIcon = nextIcon; break; } resetIcon(); }); } }); } void StatusNotifierButton::newToolTip() { interface->propertyGetAsync(QLatin1String("ToolTip"), [this] (ToolTip tooltip) { QString toolTipTitle = tooltip.title; if (!toolTipTitle.isEmpty()) setToolTip(toolTipTitle); else interface->propertyGetAsync(QLatin1String("Title"), [this] (QString title) { // we should get here only in case the ToolTip.title was empty if (!title.isEmpty()) setToolTip(title); }); }); } void StatusNotifierButton::newStatus(QString status) { Status newStatus; if (status == QLatin1String("Passive")) newStatus = Passive; else if (status == QLatin1String("Active")) newStatus = Active; else newStatus = NeedsAttention; if (mStatus == newStatus) return; mStatus = newStatus; resetIcon(); } void StatusNotifierButton::contextMenuEvent(QContextMenuEvent* event) { //XXX: avoid showing of parent's context menu, we are (optionaly) providing context menu on mouseReleaseEvent //QWidget::contextMenuEvent(event); } void StatusNotifierButton::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) interface->Activate(QCursor::pos().x(), QCursor::pos().y()); else if (event->button() == Qt::MidButton) interface->SecondaryActivate(QCursor::pos().x(), QCursor::pos().y()); else if (Qt::RightButton == event->button()) { if (mMenu) mMenu->popup(QCursor::pos()); else interface->ContextMenu(QCursor::pos().x(), QCursor::pos().y()); } QToolButton::mouseReleaseEvent(event); } void StatusNotifierButton::wheelEvent(QWheelEvent *event) { interface->Scroll(event->delta(), "vertical"); } void StatusNotifierButton::resetIcon() { if (mStatus == Active && !mOverlayIcon.isNull()) setIcon(mOverlayIcon); else if (mStatus == NeedsAttention && !mAttentionIcon.isNull()) setIcon(mAttentionIcon); else if (!mIcon.isNull()) // mStatus == Passive setIcon(mIcon); else if (!mOverlayIcon.isNull()) setIcon(mOverlayIcon); else if (!mAttentionIcon.isNull()) setIcon(mAttentionIcon); else setIcon(mFallbackIcon); } lxqt-panel-0.10.0/plugin-statusnotifier/statusnotifierbutton.h000066400000000000000000000045461261500472700247410ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Balázs Béla * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef STATUSNOTIFIERBUTTON_H #define STATUSNOTIFIERBUTTON_H #include #include #include #include #include #include #include #if QT_VERSION < QT_VERSION_CHECK(5, 5, 0) template inline T qFromUnaligned(const uchar *src) { T dest; const size_t size = sizeof(T); memcpy(&dest, src, size); return dest; } #endif class ILXQtPanelPlugin; class SniAsync; class StatusNotifierButton : public QToolButton { Q_OBJECT public: StatusNotifierButton(QString service, QString objectPath, ILXQtPanelPlugin* plugin, QWidget *parent = 0); ~StatusNotifierButton(); enum Status { Passive, Active, NeedsAttention }; public slots: void newIcon(); void newAttentionIcon(); void newOverlayIcon(); void newToolTip(); void newStatus(QString status); private: SniAsync *interface; QMenu *mMenu; Status mStatus; QString mThemePath; QIcon mIcon, mOverlayIcon, mAttentionIcon, mFallbackIcon; ILXQtPanelPlugin* mPlugin; protected: void contextMenuEvent(QContextMenuEvent * event); void mouseReleaseEvent(QMouseEvent *event); void wheelEvent(QWheelEvent *event); void refetchIcon(Status status); void resetIcon(); }; #endif // STATUSNOTIFIERBUTTON_H lxqt-panel-0.10.0/plugin-statusnotifier/statusnotifieriteminterface.cpp000066400000000000000000000035411261500472700265720ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Balázs Béla * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp -c StatusNotifierItemInterface -p statusnotifieriteminterface -i dbustypes.h dbus-ifaces/org.kde.StatusNotifierItem.xml * * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. * * This is an auto-generated file. * This file may have been hand-edited. Look for HAND-EDIT comments * before re-generating it. */ #include "statusnotifieriteminterface.h" /* * Implementation of interface class StatusNotifierItemInterface */ StatusNotifierItemInterface::StatusNotifierItemInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) { } StatusNotifierItemInterface::~StatusNotifierItemInterface() { } lxqt-panel-0.10.0/plugin-statusnotifier/statusnotifieriteminterface.h000066400000000000000000000137361261500472700262460ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Balázs Béla * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp -c StatusNotifierItemInterface -p statusnotifieriteminterface -i dbustypes.h dbus-ifaces/org.kde.StatusNotifierItem.xml * * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd. * * This is an auto-generated file. * Do not edit! All changes made to it will be lost. */ #ifndef STATUSNOTIFIERITEMINTERFACE_H #define STATUSNOTIFIERITEMINTERFACE_H #include #include #include #include #include #include #include #include #include "dbustypes.h" /* * Proxy class for interface org.kde.StatusNotifierItem */ class StatusNotifierItemInterface: public QDBusAbstractInterface { Q_OBJECT public: static inline const char *staticInterfaceName() { return "org.kde.StatusNotifierItem"; } public: StatusNotifierItemInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); ~StatusNotifierItemInterface(); Q_PROPERTY(QString AttentionIconName READ attentionIconName) inline QString attentionIconName() const { return qvariant_cast< QString >(property("AttentionIconName")); } Q_PROPERTY(IconPixmapList AttentionIconPixmap READ attentionIconPixmap) inline IconPixmapList attentionIconPixmap() const { return qvariant_cast< IconPixmapList >(property("AttentionIconPixmap")); } Q_PROPERTY(QString AttentionMovieName READ attentionMovieName) inline QString attentionMovieName() const { return qvariant_cast< QString >(property("AttentionMovieName")); } Q_PROPERTY(QString Category READ category) inline QString category() const { return qvariant_cast< QString >(property("Category")); } Q_PROPERTY(QString IconName READ iconName) inline QString iconName() const { return qvariant_cast< QString >(property("IconName")); } Q_PROPERTY(IconPixmapList IconPixmap READ iconPixmap) inline IconPixmapList iconPixmap() const { return qvariant_cast< IconPixmapList >(property("IconPixmap")); } Q_PROPERTY(QString IconThemePath READ iconThemePath) inline QString iconThemePath() const { return qvariant_cast< QString >(property("IconThemePath")); } Q_PROPERTY(QString Id READ id) inline QString id() const { return qvariant_cast< QString >(property("Id")); } Q_PROPERTY(bool ItemIsMenu READ itemIsMenu) inline bool itemIsMenu() const { return qvariant_cast< bool >(property("ItemIsMenu")); } Q_PROPERTY(QDBusObjectPath Menu READ menu) inline QDBusObjectPath menu() const { return qvariant_cast< QDBusObjectPath >(property("Menu")); } Q_PROPERTY(QString OverlayIconName READ overlayIconName) inline QString overlayIconName() const { return qvariant_cast< QString >(property("OverlayIconName")); } Q_PROPERTY(IconPixmapList OverlayIconPixmap READ overlayIconPixmap) inline IconPixmapList overlayIconPixmap() const { return qvariant_cast< IconPixmapList >(property("OverlayIconPixmap")); } Q_PROPERTY(QString Status READ status) inline QString status() const { return qvariant_cast< QString >(property("Status")); } Q_PROPERTY(QString Title READ title) inline QString title() const { return qvariant_cast< QString >(property("Title")); } Q_PROPERTY(ToolTip ToolTip READ toolTip) inline ToolTip toolTip() const { return qvariant_cast< ToolTip >(property("ToolTip")); } Q_PROPERTY(int WindowId READ windowId) inline int windowId() const { return qvariant_cast< int >(property("WindowId")); } public Q_SLOTS: // METHODS inline QDBusPendingReply<> Activate(int x, int y) { QList argumentList; argumentList << QVariant::fromValue(x) << QVariant::fromValue(y); return asyncCallWithArgumentList(QLatin1String("Activate"), argumentList); } inline QDBusPendingReply<> ContextMenu(int x, int y) { QList argumentList; argumentList << QVariant::fromValue(x) << QVariant::fromValue(y); return asyncCallWithArgumentList(QLatin1String("ContextMenu"), argumentList); } inline QDBusPendingReply<> Scroll(int delta, const QString &orientation) { QList argumentList; argumentList << QVariant::fromValue(delta) << QVariant::fromValue(orientation); return asyncCallWithArgumentList(QLatin1String("Scroll"), argumentList); } inline QDBusPendingReply<> SecondaryActivate(int x, int y) { QList argumentList; argumentList << QVariant::fromValue(x) << QVariant::fromValue(y); return asyncCallWithArgumentList(QLatin1String("SecondaryActivate"), argumentList); } Q_SIGNALS: // SIGNALS void NewAttentionIcon(); void NewIcon(); void NewOverlayIcon(); void NewStatus(const QString &status); void NewTitle(); void NewToolTip(); }; namespace org { namespace kde { typedef ::StatusNotifierItemInterface StatusNotifierItem; } } #endif lxqt-panel-0.10.0/plugin-statusnotifier/statusnotifierwatcher.cpp000066400000000000000000000072551261500472700254160ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Balázs Béla * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "statusnotifierwatcher.h" #include #include StatusNotifierWatcher::StatusNotifierWatcher(QObject *parent) : QObject(parent) { qRegisterMetaType("IconPixmap"); qDBusRegisterMetaType(); qRegisterMetaType("IconPixmapList"); qDBusRegisterMetaType(); qRegisterMetaType("ToolTip"); qDBusRegisterMetaType(); QDBusConnection dbus = QDBusConnection::sessionBus(); if (!dbus.registerService("org.kde.StatusNotifierWatcher")) qDebug() << QDBusConnection::sessionBus().lastError().message(); if (!dbus.registerObject("/StatusNotifierWatcher", this, QDBusConnection::ExportScriptableContents)) qDebug() << QDBusConnection::sessionBus().lastError().message(); mWatcher = new QDBusServiceWatcher(this); mWatcher->setConnection(dbus); mWatcher->setWatchMode(QDBusServiceWatcher::WatchForUnregistration); connect(mWatcher, &QDBusServiceWatcher::serviceUnregistered, this, &StatusNotifierWatcher::serviceUnregistered); } StatusNotifierWatcher::~StatusNotifierWatcher() { QDBusConnection::sessionBus().unregisterService("org.kde.StatusNotifierWatcher"); } void StatusNotifierWatcher::RegisterStatusNotifierItem(const QString &serviceOrPath) { QString service = serviceOrPath; QString path = "/StatusNotifierItem"; // workaround for sni-qt if (service.startsWith('/')) { path = service; service = message().service(); } QString notifierItemId = service + path; if (QDBusConnection::sessionBus().interface()->isServiceRegistered(service).value() && !mServices.contains(notifierItemId)) { mServices << notifierItemId; mWatcher->addWatchedService(service); emit StatusNotifierItemRegistered(notifierItemId); } } void StatusNotifierWatcher::RegisterStatusNotifierHost(const QString &service) { if (!mHosts.contains(service)) { mHosts.append(service); mWatcher->addWatchedService(service); } } void StatusNotifierWatcher::serviceUnregistered(const QString &service) { qDebug() << "Service" << service << "unregistered"; mWatcher->removeWatchedService(service); if (mHosts.contains(service)) { mHosts.removeAll(service); return; } QString match = service + '/'; QStringList::Iterator it = mServices.begin(); while (it != mServices.end()) { if (it->startsWith(match)) { QString name = *it; it = mServices.erase(it); emit StatusNotifierItemUnregistered(name); } else ++it; } } lxqt-panel-0.10.0/plugin-statusnotifier/statusnotifierwatcher.h000066400000000000000000000050111261500472700250470ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Balázs Béla * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef STATUSNOTIFIERWATCHER_H #define STATUSNOTIFIERWATCHER_H #include #include #include #include #include #include "dbustypes.h" class StatusNotifierWatcher : public QObject, protected QDBusContext { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.kde.StatusNotifierWatcher") Q_SCRIPTABLE Q_PROPERTY(bool IsStatusNotifierHostRegistered READ isStatusNotifierHostRegistered) Q_SCRIPTABLE Q_PROPERTY(int ProtocolVersion READ protocolVersion) Q_SCRIPTABLE Q_PROPERTY(QStringList RegisteredStatusNotifierItems READ RegisteredStatusNotifierItems) public: explicit StatusNotifierWatcher(QObject *parent = 0); ~StatusNotifierWatcher(); bool isStatusNotifierHostRegistered() { return mHosts.count() > 0; } int protocolVersion() const { return 0; } QStringList RegisteredStatusNotifierItems() const { return mServices; } signals: Q_SCRIPTABLE void StatusNotifierItemRegistered(const QString &service); Q_SCRIPTABLE void StatusNotifierItemUnregistered(const QString &service); Q_SCRIPTABLE void StatusNotifierHostRegistered(); public slots: Q_SCRIPTABLE void RegisterStatusNotifierItem(const QString &serviceOrPath); Q_SCRIPTABLE void RegisterStatusNotifierHost(const QString &service); void serviceUnregistered(const QString &service); private: QStringList mServices; QStringList mHosts; QDBusServiceWatcher *mWatcher; }; #endif // STATUSNOTIFIERWATCHER_H lxqt-panel-0.10.0/plugin-statusnotifier/statusnotifierwidget.cpp000066400000000000000000000062421261500472700252370ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Balázs Béla * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "statusnotifierwidget.h" #include #include "../panel/ilxqtpanelplugin.h" StatusNotifierWidget::StatusNotifierWidget(ILXQtPanelPlugin *plugin, QWidget *parent) : QWidget(parent), mPlugin(plugin) { QString dbusName = QString("org.kde.StatusNotifierHost-%1-%2").arg(QApplication::applicationPid()).arg(1); if (!QDBusConnection::sessionBus().registerService(dbusName)) qDebug() << QDBusConnection::sessionBus().lastError().message(); mWatcher = new StatusNotifierWatcher; mWatcher->RegisterStatusNotifierHost(dbusName); connect(mWatcher, &StatusNotifierWatcher::StatusNotifierItemRegistered, this, &StatusNotifierWidget::itemAdded); connect(mWatcher, &StatusNotifierWatcher::StatusNotifierItemUnregistered, this, &StatusNotifierWidget::itemRemoved); setLayout(new LXQt::GridLayout(this)); realign(); qDebug() << mWatcher->RegisteredStatusNotifierItems(); } StatusNotifierWidget::~StatusNotifierWidget() { delete mWatcher; } void StatusNotifierWidget::itemAdded(QString serviceAndPath) { int slash = serviceAndPath.indexOf('/'); QString serv = serviceAndPath.left(slash); QString path = serviceAndPath.mid(slash); StatusNotifierButton *button = new StatusNotifierButton(serv, path, mPlugin, this); mServices.insert(serviceAndPath, button); layout()->addWidget(button); layout()->setAlignment(button, Qt::AlignCenter); button->show(); } void StatusNotifierWidget::itemRemoved(const QString &serviceAndPath) { StatusNotifierButton *button = mServices.value(serviceAndPath, NULL); if (button) { button->deleteLater(); layout()->removeWidget(button); } } void StatusNotifierWidget::realign() { LXQt::GridLayout *layout = qobject_cast(this->layout()); layout->setEnabled(false); ILXQtPanel *panel = mPlugin->panel(); if (panel->isHorizontal()) { layout->setRowCount(panel->lineCount()); layout->setColumnCount(0); } else { layout->setColumnCount(panel->lineCount()); layout->setRowCount(0); } layout->setEnabled(true); } lxqt-panel-0.10.0/plugin-statusnotifier/statusnotifierwidget.h000066400000000000000000000032571261500472700247070ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2015 LXQt team * Authors: * Balázs Béla * Paulo Lieuthier * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef STATUSNOTIFIERWIDGET_H #define STATUSNOTIFIERWIDGET_H #include #include #include "statusnotifierbutton.h" #include "statusnotifierwatcher.h" class StatusNotifierWidget : public QWidget { Q_OBJECT public: StatusNotifierWidget(ILXQtPanelPlugin *plugin, QWidget *parent = 0); ~StatusNotifierWidget(); signals: public slots: void itemAdded(QString serviceAndPath); void itemRemoved(const QString &serviceAndPath); void realign(); private: ILXQtPanelPlugin *mPlugin; StatusNotifierWatcher *mWatcher; QHash mServices; }; #endif // STATUSNOTIFIERWIDGET_H lxqt-panel-0.10.0/plugin-statusnotifier/translations/000077500000000000000000000000001261500472700227615ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-statusnotifier/translations/statusnotifier.ts000066400000000000000000000001161261500472700264120ustar00rootroot00000000000000 lxqt-panel-0.10.0/plugin-statusnotifier/translations/statusnotifier_de.desktop000066400000000000000000000001231261500472700301030ustar00rootroot00000000000000Name[de]=Statusbenachrichtigungen Comment[de]=Plugin für Statusbenachrichtigungen lxqt-panel-0.10.0/plugin-statusnotifier/translations/statusnotifier_el.desktop000066400000000000000000000002201261500472700301110ustar00rootroot00000000000000Name[el]=Πρόσθετο ειδοποίησης κατάστασης Comment[el]=Πρόσθετο ειδοποίησης κατάστασης lxqt-panel-0.10.0/plugin-statusnotifier/translations/statusnotifier_it.desktop000066400000000000000000000001061261500472700301300ustar00rootroot00000000000000Name[it]=Notificatore Comment[it]=Mostra lo status delle applicazioni lxqt-panel-0.10.0/plugin-statusnotifier/translations/statusnotifier_ru.desktop000066400000000000000000000001351261500472700301440ustar00rootroot00000000000000Name[ru]=Плагин уведомлений Comment[ru]=Плагин уведомлений lxqt-panel-0.10.0/plugin-statusnotifier/translations/statusnotifier_ru_RU.desktop000066400000000000000000000001431261500472700305510ustar00rootroot00000000000000Name[ru_RU]=Плагин уведомлений Comment[ru_RU]=Плагин уведомлений lxqt-panel-0.10.0/plugin-sysstat/000077500000000000000000000000001261500472700166675ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-sysstat/CMakeLists.txt000066400000000000000000000006411261500472700214300ustar00rootroot00000000000000set(PLUGIN "sysstat") find_package(SysStat-Qt5 REQUIRED) set(HEADERS lxqtsysstat.h lxqtsysstatconfiguration.h lxqtsysstatcolours.h lxqtsysstatutils.h ) set(SOURCES lxqtsysstat.cpp lxqtsysstatconfiguration.cpp lxqtsysstatcolours.cpp lxqtsysstatutils.cpp ) set(UIS lxqtsysstatconfiguration.ui lxqtsysstatcolours.ui ) set(LIBRARIES sysstat-qt5) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-sysstat/lxqtsysstat.cpp000066400000000000000000000512171261500472700220240ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtsysstat.h" #include "lxqtsysstatutils.h" #include #include #include #include #include #include #include #include #include LXQtSysStat::LXQtSysStat(const ILXQtPanelPluginStartupInfo &startupInfo): QObject(), ILXQtPanelPlugin(startupInfo), mWidget(new QWidget()), mFakeTitle(new LXQtSysStatTitle(mWidget)), mContent(new LXQtSysStatContent(this, mWidget)) { QVBoxLayout *borderLayout = new QVBoxLayout(mWidget); borderLayout->setContentsMargins(0, 0, 0, 0); borderLayout->setSpacing(0); borderLayout->addWidget(mContent); borderLayout->setStretchFactor(mContent, 1); mContent->setMinimumSize(2, 2); // qproperty of font type doesn't work with qss, so fake QLabel is used instead connect(mFakeTitle, SIGNAL(fontChanged(QFont)), mContent, SLOT(setTitleFont(QFont))); // has to be postponed to update the size first QTimer::singleShot(0, this, SLOT(lateInit())); } LXQtSysStat::~LXQtSysStat() { delete mWidget; } void LXQtSysStat::lateInit() { settingsChanged(); mContent->setTitleFont(mFakeTitle->font()); mSize = mContent->size(); } QDialog *LXQtSysStat::configureDialog() { return new LXQtSysStatConfiguration(settings(), mWidget); } void LXQtSysStat::realign() { QSize newSize = mContent->size(); if (mSize != newSize) { mContent->reset(); mSize = newSize; } } void LXQtSysStat::settingsChanged() { mContent->updateSettings(settings()); } LXQtSysStatTitle::LXQtSysStatTitle(QWidget *parent): QLabel(parent) { } LXQtSysStatTitle::~LXQtSysStatTitle() { } bool LXQtSysStatTitle::event(QEvent *e) { if (e->type() == QEvent::FontChange) emit fontChanged(font()); return QLabel::event(e); } LXQtSysStatContent::LXQtSysStatContent(ILXQtPanelPlugin *plugin, QWidget *parent): QWidget(parent), mPlugin(plugin), mStat(NULL), mUpdateInterval(0), mMinimalSize(0), mTitleFontPixelHeight(0), mUseThemeColours(true), mHistoryOffset(0) { setObjectName("SysStat_Graph"); } LXQtSysStatContent::~LXQtSysStatContent() { } // I don't like macros very much, but writing dozen similar functions is much much worse. #undef QSS_GET_COLOUR #define QSS_GET_COLOUR(GETNAME) \ QColor LXQtSysStatContent::GETNAME##Colour() const \ { \ return mThemeColours.GETNAME##Colour; \ } #undef QSS_COLOUR #define QSS_COLOUR(GETNAME, SETNAME) \ QSS_GET_COLOUR(GETNAME) \ void LXQtSysStatContent::SETNAME##Colour(QColor value) \ { \ mThemeColours.GETNAME##Colour = value; \ if (mUseThemeColours) \ mColours.GETNAME##Colour = mThemeColours.GETNAME##Colour; \ } #undef QSS_NET_COLOUR #define QSS_NET_COLOUR(GETNAME, SETNAME) \ QSS_GET_COLOUR(GETNAME) \ void LXQtSysStatContent::SETNAME##Colour(QColor value) \ { \ mThemeColours.GETNAME##Colour = value; \ if (mUseThemeColours) \ { \ mColours.GETNAME##Colour = mThemeColours.GETNAME##Colour; \ mixNetColours(); \ } \ } QSS_COLOUR(grid, setGrid) QSS_COLOUR(title, setTitle) QSS_COLOUR(cpuSystem, setCpuSystem) QSS_COLOUR(cpuUser, setCpuUser) QSS_COLOUR(cpuNice, setCpuNice) QSS_COLOUR(cpuOther, setCpuOther) QSS_COLOUR(frequency, setFrequency) QSS_COLOUR(memApps, setMemApps) QSS_COLOUR(memBuffers,setMemBuffers) QSS_COLOUR(memCached, setMemCached) QSS_COLOUR(swapUsed, setSwapUsed) QSS_NET_COLOUR(netReceived, setNetReceived) QSS_NET_COLOUR(netTransmitted, setNetTransmitted) #undef QSS_NET_COLOUR #undef QSS_COLOUR #undef QSS_GET_COLOUR void LXQtSysStatContent::mixNetColours() { QColor netReceivedColour_hsv = mColours.netReceivedColour.toHsv(); QColor netTransmittedColour_hsv = mColours.netTransmittedColour.toHsv(); qreal hue = (netReceivedColour_hsv.hueF() + netTransmittedColour_hsv.hueF()) / 2; if (qAbs(netReceivedColour_hsv.hueF() - netTransmittedColour_hsv.hueF()) > 0.5) hue += 0.5; mNetBothColour.setHsvF( hue, (netReceivedColour_hsv.saturationF() + netTransmittedColour_hsv.saturationF()) / 2, (netReceivedColour_hsv.valueF() + netTransmittedColour_hsv.valueF() ) / 2 ); } void LXQtSysStatContent::setTitleFont(QFont value) { mTitleFont = value; updateTitleFontPixelHeight(); update(); } void LXQtSysStatContent::updateTitleFontPixelHeight() { if (mTitleLabel.isEmpty()) mTitleFontPixelHeight = 0; else { QFontMetrics fm(mTitleFont); mTitleFontPixelHeight = fm.height() - 1; } } void LXQtSysStatContent::updateSettings(const QSettings *settings) { double old_updateInterval = mUpdateInterval; int old_minimalSize = mMinimalSize; QString old_dataType = mDataType; QString old_dataSource = mDataSource; bool old_useFrequency = mUseFrequency; bool old_logarithmicScale = mLogarithmicScale; int old_logScaleSteps = mLogScaleSteps; mUseThemeColours = settings->value("graph/useThemeColours", true).toBool(); mUpdateInterval = settings->value("graph/updateInterval", 1.0).toDouble(); mMinimalSize = settings->value("graph/minimalSize", 30).toInt(); mGridLines = settings->value("grid/lines", 1).toInt(); mTitleLabel = settings->value("title/label", QString()).toString(); // default to CPU monitoring mDataType = settings->value("data/type", LXQtSysStatConfiguration::msStatTypes[0]).toString(); mDataSource = settings->value("data/source", QString("cpu")).toString(); mUseFrequency = settings->value("cpu/useFrequency", true).toBool(); mNetMaximumSpeed = PluginSysStat::netSpeedFromString(settings->value("net/maximumSpeed", "1 MB/s").toString()); mLogarithmicScale = settings->value("net/logarithmicScale", true).toBool(); mLogScaleSteps = settings->value("net/logarithmicScaleSteps", 4).toInt(); mLogScaleMax = static_cast(static_cast(1) << mLogScaleSteps); mNetRealMaximumSpeed = static_cast(static_cast(1) << mNetMaximumSpeed); mSettingsColours.gridColour = QColor(settings->value("grid/colour", "#c0c0c0").toString()); mSettingsColours.titleColour = QColor(settings->value("title/colour", "#ffffff").toString()); mSettingsColours.cpuSystemColour = QColor(settings->value("cpu/systemColour", "#800000").toString()); mSettingsColours.cpuUserColour = QColor(settings->value("cpu/userColour", "#000080").toString()); mSettingsColours.cpuNiceColour = QColor(settings->value("cpu/niceColour", "#008000").toString()); mSettingsColours.cpuOtherColour = QColor(settings->value("cpu/otherColour", "#808000").toString()); mSettingsColours.frequencyColour = QColor(settings->value("cpu/frequencyColour", "#808080").toString()); mSettingsColours.memAppsColour = QColor(settings->value("mem/appsColour", "#000080").toString()); mSettingsColours.memBuffersColour = QColor(settings->value("mem/buffersColour", "#008000").toString()); mSettingsColours.memCachedColour = QColor(settings->value("mem/cachedColour", "#808000").toString()); mSettingsColours.swapUsedColour = QColor(settings->value("mem/swapColour", "#800000").toString()); mSettingsColours.netReceivedColour = QColor(settings->value("net/receivedColour", "#000080").toString()); mSettingsColours.netTransmittedColour = QColor(settings->value("net/transmittedColour", "#808000").toString()); if (mUseThemeColours) mColours = mThemeColours; else mColours = mSettingsColours; mixNetColours(); updateTitleFontPixelHeight(); bool minimalSizeChanged = old_minimalSize != mMinimalSize; bool updateIntervalChanged = old_updateInterval != mUpdateInterval; bool dataTypeChanged = old_dataType != mDataType; bool dataSourceChanged = old_dataSource != mDataSource; bool useFrequencyChanged = old_useFrequency != mUseFrequency; bool logScaleStepsChanged = old_logScaleSteps != mLogScaleSteps; bool logarithmicScaleChanged = old_logarithmicScale != mLogarithmicScale; bool needReconnecting = dataTypeChanged || dataSourceChanged || useFrequencyChanged; bool needTimerRestarting = needReconnecting || updateIntervalChanged; bool needFullReset = needTimerRestarting || minimalSizeChanged || logScaleStepsChanged || logarithmicScaleChanged; if (mStat) { if (needTimerRestarting) mStat->stopUpdating(); if (needReconnecting) mStat->disconnect(this); } if (dataTypeChanged) { if (mStat) { mStat->deleteLater(); mStat = nullptr; } if (mDataType == "CPU") mStat = new SysStat::CpuStat(this); else if (mDataType == "Memory") mStat = new SysStat::MemStat(this); else if (mDataType == "Network") mStat = new SysStat::NetStat(this); } if (mStat) { if (needReconnecting) { if (mDataType == "CPU") { if (mUseFrequency) { qobject_cast(mStat)->setMonitoring(SysStat::CpuStat::LoadAndFrequency); connect(qobject_cast(mStat), SIGNAL(update(float, float, float, float, float, uint)), this, SLOT(cpuUpdate(float, float, float, float, float, uint))); } else { qobject_cast(mStat)->setMonitoring(SysStat::CpuStat::LoadOnly); connect(qobject_cast(mStat), SIGNAL(update(float, float, float, float)), this, SLOT(cpuUpdate(float, float, float, float))); } } else if (mDataType == "Memory") { if (mDataSource == "memory") connect(qobject_cast(mStat), SIGNAL(memoryUpdate(float, float, float)), this, SLOT(memoryUpdate(float, float, float))); else connect(qobject_cast(mStat), SIGNAL(swapUpdate(float)), this, SLOT(swapUpdate(float))); } else if (mDataType == "Network") { connect(qobject_cast(mStat), SIGNAL(update(unsigned, unsigned)), this, SLOT(networkUpdate(unsigned, unsigned))); } mStat->setMonitoredSource(mDataSource); } if (needTimerRestarting) mStat->setUpdateInterval(static_cast(mUpdateInterval * 1000.0)); } if (needFullReset) reset(); else update(); } void LXQtSysStatContent::resizeEvent(QResizeEvent * /*event*/) { reset(); } void LXQtSysStatContent::reset() { setMinimumSize(mPlugin->panel()->isHorizontal() ? mMinimalSize : 2, mPlugin->panel()->isHorizontal() ? 2 : mMinimalSize); mHistoryOffset = 0; mHistoryImage = QImage(width(), 100, QImage::Format_ARGB32); mHistoryImage.fill(Qt::transparent); update(); } template T clamp(const T &value, const T &min, const T &max) { return qMin(qMax(value, min), max); } // QPainter.drawLine with pen set to Qt::transparent doesn't clear anything void LXQtSysStatContent::clearLine() { QRgb bg = QColor(Qt::transparent).rgba(); for (int i = 0; i < 100; ++i) reinterpret_cast(mHistoryImage.scanLine(i))[mHistoryOffset] = bg; } void LXQtSysStatContent::cpuUpdate(float user, float nice, float system, float other, float frequencyRate, uint) { int y_system = static_cast(system * 100.0 * frequencyRate); int y_user = static_cast(user * 100.0 * frequencyRate); int y_nice = static_cast(nice * 100.0 * frequencyRate); int y_other = static_cast(other * 100.0 * frequencyRate); int y_freq = static_cast( 100.0 * frequencyRate); toolTipInfo(tr("system: %1%
user: %2%
nice: %3%
other: %4%
freq: %5%", "CPU tooltip information") .arg(y_system).arg(y_user).arg(y_nice).arg(y_other).arg(y_freq)); y_system = clamp(y_system, 0, 99); y_user = clamp(y_user + y_system, 0, 99); y_nice = clamp(y_nice + y_user , 0, 99); y_other = clamp(y_other, 0, 99); y_freq = clamp(y_freq, 0, 99); clearLine(); QPainter painter(&mHistoryImage); if (y_system != 0) { painter.setPen(mColours.cpuSystemColour); painter.drawLine(mHistoryOffset, y_system, mHistoryOffset, 0); } if (y_user != y_system) { painter.setPen(mColours.cpuUserColour); painter.drawLine(mHistoryOffset, y_user, mHistoryOffset, y_system); } if (y_nice != y_user) { painter.setPen(mColours.cpuNiceColour); painter.drawLine(mHistoryOffset, y_nice, mHistoryOffset, y_user); } if (y_other != y_nice) { painter.setPen(mColours.cpuOtherColour); painter.drawLine(mHistoryOffset, y_other, mHistoryOffset, y_nice); } if (y_freq != y_other) { painter.setPen(mColours.frequencyColour); painter.drawLine(mHistoryOffset, y_freq, mHistoryOffset, y_other); } mHistoryOffset = (mHistoryOffset + 1) % width(); update(0, mTitleFontPixelHeight, width(), height() - mTitleFontPixelHeight); } void LXQtSysStatContent::cpuUpdate(float user, float nice, float system, float other) { int y_system = static_cast(system * 100.0); int y_user = static_cast(user * 100.0); int y_nice = static_cast(nice * 100.0); int y_other = static_cast(other * 100.0); toolTipInfo(tr("system: %1%
user: %2%
nice: %3%
other: %4%
freq: n/a", "CPU tooltip information") .arg(y_system).arg(y_user).arg(y_nice).arg(y_other)); y_system = clamp(y_system, 0, 99); y_user = clamp(y_user + y_system, 0, 99); y_nice = clamp(y_nice + y_user, 0, 99); y_other = clamp(y_other + y_nice, 0, 99); clearLine(); QPainter painter(&mHistoryImage); if (y_system != 0) { painter.setPen(mColours.cpuSystemColour); painter.drawLine(mHistoryOffset, y_system, mHistoryOffset, 0); } if (y_user != y_system) { painter.setPen(mColours.cpuUserColour); painter.drawLine(mHistoryOffset, y_user, mHistoryOffset, y_system); } if (y_nice != y_user) { painter.setPen(mColours.cpuNiceColour); painter.drawLine(mHistoryOffset, y_nice, mHistoryOffset, y_user); } if (y_other != y_nice) { painter.setPen(mColours.cpuOtherColour); painter.drawLine(mHistoryOffset, y_other, mHistoryOffset, y_nice); } mHistoryOffset = (mHistoryOffset + 1) % width(); update(0, mTitleFontPixelHeight, width(), height() - mTitleFontPixelHeight); } void LXQtSysStatContent::memoryUpdate(float apps, float buffers, float cached) { int y_apps = static_cast(apps * 100.0); int y_buffers = static_cast(buffers * 100.0); int y_cached = static_cast(cached * 100.0); toolTipInfo(tr("apps: %1%
buffers: %2%
cached: %3%", "Memory tooltip information") .arg(y_apps).arg(y_buffers).arg(y_cached)); y_apps = clamp(y_apps, 0, 99); y_buffers = clamp(y_buffers + y_apps, 0, 99); y_cached = clamp(y_cached + y_buffers, 0, 99); clearLine(); QPainter painter(&mHistoryImage); if (y_apps != 0) { painter.setPen(mColours.memAppsColour); painter.drawLine(mHistoryOffset, y_apps, mHistoryOffset, 0); } if (y_buffers != y_apps) { painter.setPen(mColours.memBuffersColour); painter.drawLine(mHistoryOffset, y_buffers, mHistoryOffset, y_apps); } if (y_cached != y_buffers) { painter.setPen(mColours.memCachedColour); painter.drawLine(mHistoryOffset, y_cached, mHistoryOffset, y_buffers); } mHistoryOffset = (mHistoryOffset + 1) % width(); update(0, mTitleFontPixelHeight, width(), height() - mTitleFontPixelHeight); } void LXQtSysStatContent::swapUpdate(float used) { int y_used = static_cast(used * 100.0); toolTipInfo(tr("used: %1%", "Swap tooltip information").arg(y_used)); y_used = clamp(y_used, 0, 99); clearLine(); QPainter painter(&mHistoryImage); if (y_used != 0) { painter.setPen(mColours.swapUsedColour); painter.drawLine(mHistoryOffset, y_used, mHistoryOffset, 0); } mHistoryOffset = (mHistoryOffset + 1) % width(); update(0, mTitleFontPixelHeight, width(), height() - mTitleFontPixelHeight); } void LXQtSysStatContent::networkUpdate(unsigned received, unsigned transmitted) { qreal min_value = qMin(qMax(static_cast(qMin(received, transmitted)) / mNetRealMaximumSpeed, static_cast(0.0)), static_cast(1.0)); qreal max_value = qMin(qMax(static_cast(qMax(received, transmitted)) / mNetRealMaximumSpeed, static_cast(0.0)), static_cast(1.0)); if (mLogarithmicScale) { min_value = qLn(min_value * (mLogScaleMax - 1.0) + 1.0) / qLn(2.0) / static_cast(mLogScaleSteps); max_value = qLn(max_value * (mLogScaleMax - 1.0) + 1.0) / qLn(2.0) / static_cast(mLogScaleSteps); } int y_min_value = static_cast(min_value * 100.0); int y_max_value = static_cast(max_value * 100.0); toolTipInfo(tr("min: %1%
max: %2%", "Network tooltip information").arg(y_min_value).arg(y_max_value)); y_min_value = clamp(y_min_value, 0, 99); y_max_value = clamp(y_max_value + y_min_value, 0, 99); clearLine(); QPainter painter(&mHistoryImage); if (y_min_value != 0) { painter.setPen(mNetBothColour); painter.drawLine(mHistoryOffset, y_min_value, mHistoryOffset, 0); } if (y_max_value != y_min_value) { painter.setPen((received > transmitted) ? mColours.netReceivedColour : mColours.netTransmittedColour); painter.drawLine(mHistoryOffset, y_max_value, mHistoryOffset, y_min_value); } mHistoryOffset = (mHistoryOffset + 1) % width(); update(0, mTitleFontPixelHeight, width(), height() - mTitleFontPixelHeight); } void LXQtSysStatContent::paintEvent(QPaintEvent *event) { QPainter p(this); qreal graphTop = 0; qreal graphHeight = height(); bool hasTitle = !mTitleLabel.isEmpty(); if (hasTitle) { graphTop = mTitleFontPixelHeight; graphHeight -= graphTop; if (event->region().intersects(QRect(0, 0, width(), graphTop))) { p.setPen(mColours.titleColour); p.setFont(mTitleFont); p.drawText(QRectF(0, 0, width(), graphTop), Qt::AlignHCenter | Qt::AlignVCenter, mTitleLabel); } } if (graphHeight < 1) graphHeight = 1; p.scale(1.0, -1.0); p.drawImage(QRect(0, -height(), width() - mHistoryOffset, graphHeight), mHistoryImage, QRect(mHistoryOffset, 0, width() - mHistoryOffset, 100)); if (mHistoryOffset) p.drawImage(QRect(width() - mHistoryOffset, -height(), mHistoryOffset, graphHeight), mHistoryImage, QRect(0, 0, mHistoryOffset, 100)); p.resetTransform(); p.setRenderHint(QPainter::Antialiasing); p.setPen(mColours.gridColour); qreal w = static_cast(width()); if (hasTitle) p.drawLine(QPointF(0.0, graphTop + 0.5), QPointF(w, graphTop + 0.5)); // 0.5 looks better with antialiasing for (int l = 0; l < mGridLines; ++l) { qreal y = graphTop + static_cast(l + 1) * graphHeight / (static_cast(mGridLines + 1)); p.drawLine(QPointF(0.0, y), QPointF(w, y)); } } void LXQtSysStatContent::toolTipInfo(QString const & tooltip) { setToolTip(QString("%1(%2)
%3") .arg(QCoreApplication::translate("LXQtSysStatConfiguration", mDataType.toStdString().c_str())) .arg(QCoreApplication::translate("LXQtSysStatConfiguration", mDataSource.toStdString().c_str())) .arg(tooltip)); } lxqt-panel-0.10.0/plugin-sysstat/lxqtsysstat.h000066400000000000000000000145331261500472700214710ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTPANELSYSSTAT_H #define LXQTPANELSYSSTAT_H #include "../panel/ilxqtpanelplugin.h" #include "lxqtsysstatconfiguration.h" #include class LXQtSysStatTitle; class LXQtSysStatContent; class LXQtPanel; namespace SysStat { class BaseStat; } class LXQtSysStat : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: LXQtSysStat(const ILXQtPanelPluginStartupInfo &startupInfo); ~LXQtSysStat(); virtual QWidget *widget() { return mWidget; } virtual QString themeId() const { return "SysStat"; } virtual ILXQtPanelPlugin::Flags flags() const { return PreferRightAlignment | HaveConfigDialog; } virtual bool isSeparate() const { return true; } QDialog *configureDialog(); void realign(); protected slots: virtual void lateInit(); virtual void settingsChanged(); private: QWidget *mWidget; LXQtSysStatTitle *mFakeTitle; LXQtSysStatContent *mContent; QSize mSize; }; class LXQtSysStatTitle : public QLabel { Q_OBJECT public: LXQtSysStatTitle(QWidget *parent = NULL); ~LXQtSysStatTitle(); protected: bool event(QEvent *e); signals: void fontChanged(QFont); }; class LXQtSysStatContent : public QWidget { Q_OBJECT Q_PROPERTY(QColor gridColor READ gridColour WRITE setGridColour) Q_PROPERTY(QColor titleColor READ titleColour WRITE setTitleColour) Q_PROPERTY(QColor cpuSystemColor READ cpuSystemColour WRITE setCpuSystemColour) Q_PROPERTY(QColor cpuUserColor READ cpuUserColour WRITE setCpuUserColour) Q_PROPERTY(QColor cpuNiceColor READ cpuNiceColour WRITE setCpuNiceColour) Q_PROPERTY(QColor cpuOtherColor READ cpuOtherColour WRITE setCpuOtherColour) Q_PROPERTY(QColor frequencyColor READ frequencyColour WRITE setFrequencyColour) Q_PROPERTY(QColor memAppsColor READ memAppsColour WRITE setMemAppsColour) Q_PROPERTY(QColor memBuffersColor READ memBuffersColour WRITE setMemBuffersColour) Q_PROPERTY(QColor memCachedColor READ memCachedColour WRITE setMemCachedColour) Q_PROPERTY(QColor swapUsedColor READ swapUsedColour WRITE setSwapUsedColour) Q_PROPERTY(QColor netReceivedColor READ netReceivedColour WRITE setNetReceivedColour) Q_PROPERTY(QColor netTransmittedColor READ netTransmittedColour WRITE setNetTransmittedColour) public: LXQtSysStatContent(ILXQtPanelPlugin *plugin, QWidget *parent = NULL); ~LXQtSysStatContent(); void updateSettings(const QSettings *); #undef QSS_COLOUR #define QSS_COLOUR(GETNAME, SETNAME) \ QColor GETNAME##Colour() const; \ void SETNAME##Colour(QColor value); QSS_COLOUR(grid, setGrid) QSS_COLOUR(title, setTitle) QSS_COLOUR(cpuSystem, setCpuSystem) QSS_COLOUR(cpuUser, setCpuUser) QSS_COLOUR(cpuNice, setCpuNice) QSS_COLOUR(cpuOther, setCpuOther) QSS_COLOUR(frequency, setFrequency) QSS_COLOUR(memApps, setMemApps) QSS_COLOUR(memBuffers, setMemBuffers) QSS_COLOUR(memCached, setMemCached) QSS_COLOUR(swapUsed, setSwapUsed) QSS_COLOUR(netReceived, setNetReceived) QSS_COLOUR(netTransmitted, setNetTransmitted) #undef QSS_COLOUR public slots: void setTitleFont(QFont value); void reset(); protected: void paintEvent(QPaintEvent *); void resizeEvent(QResizeEvent *); protected slots: void cpuUpdate(float user, float nice, float system, float other, float frequencyRate, uint frequency); void cpuUpdate(float user, float nice, float system, float other); void memoryUpdate(float apps, float buffers, float cached); void swapUpdate(float used); void networkUpdate(unsigned received, unsigned transmitted); private: void toolTipInfo(QString const & tooltip); private: ILXQtPanelPlugin *mPlugin; SysStat::BaseStat *mStat; typedef struct ColourPalette { QColor gridColour; QColor titleColour; QColor cpuSystemColour; QColor cpuUserColour; QColor cpuNiceColour; QColor cpuOtherColour; QColor frequencyColour; QColor memAppsColour; QColor memBuffersColour; QColor memCachedColour; QColor swapUsedColour; QColor netReceivedColour; QColor netTransmittedColour; } ColourPalette; double mUpdateInterval; int mMinimalSize; int mGridLines; QString mTitleLabel; QFont mTitleFont; int mTitleFontPixelHeight; QString mDataType; QString mDataSource; bool mUseFrequency; int mNetMaximumSpeed; qreal mNetRealMaximumSpeed; bool mLogarithmicScale; int mLogScaleSteps; qreal mLogScaleMax; bool mUseThemeColours; ColourPalette mThemeColours; ColourPalette mSettingsColours; ColourPalette mColours; QColor mNetBothColour; int mHistoryOffset; QImage mHistoryImage; void clearLine(); void mixNetColours(); void updateTitleFontPixelHeight(); }; class LXQtSysStatLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new LXQtSysStat(startupInfo); } }; #endif // LXQTPANELSYSSTAT_H lxqt-panel-0.10.0/plugin-sysstat/lxqtsysstatcolours.cpp000066400000000000000000000124661261500472700234360ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtsysstatcolours.h" #include "ui_lxqtsysstatcolours.h" #include #include LXQtSysStatColours::LXQtSysStatColours(QWidget *parent) : QDialog(parent), ui(new Ui::LXQtSysStatColours), mSelectColourMapper(new QSignalMapper(this)) { setWindowModality(Qt::WindowModal); ui->setupUi(this); mDefaultColours["grid"] = QColor("#808080"); mDefaultColours["title"] = QColor("#000000"); mDefaultColours["cpuSystem"] = QColor("#800000"); mDefaultColours["cpuUser"] = QColor("#000080"); mDefaultColours["cpuNice"] = QColor("#008000"); mDefaultColours["cpuOther"] = QColor("#808000"); mDefaultColours["cpuFrequency"] = QColor("#808080"); mDefaultColours["memApps"] = QColor("#000080"); mDefaultColours["memBuffers"] = QColor("#008000"); mDefaultColours["memCached"] = QColor("#808000"); mDefaultColours["memSwap"] = QColor("#800000"); mDefaultColours["netReceived"] = QColor("#000080"); mDefaultColours["netTransmitted"] = QColor("#808000"); #undef CONNECT_SELECT_COLOUR #define CONNECT_SELECT_COLOUR(VAR) \ connect(ui-> VAR ## B, SIGNAL(clicked()), mSelectColourMapper, SLOT(map())); \ mSelectColourMapper->setMapping(ui-> VAR ## B, QString( #VAR )); \ mShowColourMap[QString( #VAR )] = ui-> VAR ## B; CONNECT_SELECT_COLOUR(grid) CONNECT_SELECT_COLOUR(title) CONNECT_SELECT_COLOUR(cpuSystem) CONNECT_SELECT_COLOUR(cpuUser) CONNECT_SELECT_COLOUR(cpuNice) CONNECT_SELECT_COLOUR(cpuOther) CONNECT_SELECT_COLOUR(cpuFrequency) CONNECT_SELECT_COLOUR(memApps) CONNECT_SELECT_COLOUR(memBuffers) CONNECT_SELECT_COLOUR(memCached) CONNECT_SELECT_COLOUR(memSwap) CONNECT_SELECT_COLOUR(netReceived) CONNECT_SELECT_COLOUR(netTransmitted) #undef CONNECT_SELECT_COLOUR connect(mSelectColourMapper, SIGNAL(mapped(const QString &)), SLOT(selectColour(const QString &))); } LXQtSysStatColours::~LXQtSysStatColours() { delete ui; } void LXQtSysStatColours::selectColour(const QString &name) { QColor color = QColorDialog::getColor(mColours[name], this); if (color.isValid()) { mColours[name] = color; mShowColourMap[name]->setStyleSheet(QString("background-color: %1;\ncolor: %2;").arg(color.name()).arg((color.toHsl().lightnessF() > 0.5) ? "black" : "white")); ui->buttons->button(QDialogButtonBox::Apply)->setEnabled(true); } } void LXQtSysStatColours::setColours(const Colours &colours) { mInitialColours = colours; mColours = colours; applyColoursToButtons(); ui->buttons->button(QDialogButtonBox::Apply)->setEnabled(false); } void LXQtSysStatColours::applyColoursToButtons() { Colours::ConstIterator M = mColours.constEnd(); for (Colours::ConstIterator I = mColours.constBegin(); I != M; ++I) { const QColor &color = I.value(); mShowColourMap[I.key()]->setStyleSheet(QString("background-color: %1;\ncolor: %2;").arg(color.name()).arg((color.toHsl().lightnessF() > 0.5) ? "black" : "white")); } } void LXQtSysStatColours::on_buttons_clicked(QAbstractButton *button) { switch (ui->buttons->standardButton(button)) { case QDialogButtonBox::RestoreDefaults: restoreDefaults(); break; case QDialogButtonBox::Reset: reset(); break; case QDialogButtonBox::Ok: apply(); accept(); break; case QDialogButtonBox::Apply: apply(); break; case QDialogButtonBox::Cancel: reset(); reject(); break; default:; } } void LXQtSysStatColours::restoreDefaults() { bool wereTheSame = mColours == mDefaultColours; mColours = mDefaultColours; applyColoursToButtons(); ui->buttons->button(QDialogButtonBox::Apply)->setEnabled(!wereTheSame); } void LXQtSysStatColours::reset() { bool wereTheSame = mColours == mInitialColours; mColours = mInitialColours; applyColoursToButtons(); ui->buttons->button(QDialogButtonBox::Apply)->setEnabled(!wereTheSame); } void LXQtSysStatColours::apply() { emit coloursChanged(); ui->buttons->button(QDialogButtonBox::Apply)->setEnabled(false); } LXQtSysStatColours::Colours LXQtSysStatColours::colours() const { return mColours; } LXQtSysStatColours::Colours LXQtSysStatColours::defaultColours() const { return mDefaultColours; } lxqt-panel-0.10.0/plugin-sysstat/lxqtsysstatcolours.h000066400000000000000000000037771261500472700231100ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTSYSSTATCOLOURS_HPP #define LXQTSYSSTATCOLOURS_HPP #include #include #include #include namespace Ui { class LXQtSysStatColours; } class QSignalMapper; class QAbstractButton; class QPushButton; class LXQtSysStatColours : public QDialog { Q_OBJECT public: explicit LXQtSysStatColours(QWidget *parent = NULL); ~LXQtSysStatColours(); typedef QMap Colours; void setColours(const Colours&); Colours colours() const; Colours defaultColours() const; signals: void coloursChanged(); public slots: void on_buttons_clicked(QAbstractButton*); void selectColour(const QString &); void restoreDefaults(); void reset(); void apply(); private: Ui::LXQtSysStatColours *ui; QSignalMapper *mSelectColourMapper; QMap mShowColourMap; Colours mDefaultColours; Colours mInitialColours; Colours mColours; void applyColoursToButtons(); }; #endif // LXQTSYSSTATCOLOURS_HPP lxqt-panel-0.10.0/plugin-sysstat/lxqtsysstatcolours.ui000066400000000000000000000245351261500472700232710ustar00rootroot00000000000000 LXQtSysStatColours 0 0 519 328 System Statistics Colors Graph &Grid gridB Change ... T&itle titleB Change ... CPU Change ... &Nice cpuNiceB Change ... Ot&her cpuOtherB &Frequency cpuFrequencyB Change ... S&ystem cpuSystemB &User cpuUserB Change ... Change ... Qt::Vertical Memory Change ... Cache&d memCachedB S&wap memSwapB Change ... &Applications memAppsB &Buffers memBuffersB Change ... Change ... Network &Received netReceivedB Change ... &Transmitted netTransmittedB Change ... Qt::Vertical Qt::Horizontal Qt::Horizontal QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Reset|QDialogButtonBox::RestoreDefaults gridB titleB cpuSystemB cpuUserB cpuNiceB cpuOtherB cpuFrequencyB memAppsB memBuffersB memCachedB memSwapB netReceivedB netTransmittedB buttons on_buttons_clicked(QAbstractButton*) lxqt-panel-0.10.0/plugin-sysstat/lxqtsysstatconfiguration.cpp000066400000000000000000000303241261500472700246100ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtsysstatconfiguration.h" #include "ui_lxqtsysstatconfiguration.h" #include "lxqtsysstatutils.h" #include "lxqtsysstatcolours.h" #include #include #include //Note: strings can't actually be translated here (in static initialization time) // the QT_TR_NOOP here is just for qt translate tools to get the strings for translation const QStringList LXQtSysStatConfiguration::msStatTypes = { QLatin1String(QT_TR_NOOP("CPU")) , QLatin1String(QT_TR_NOOP("Memory")) , QLatin1String(QT_TR_NOOP("Network")) }; namespace { //Note: workaround for making source strings translatable // (no need to ever call this function) void localizationWorkaround(); auto t = localizationWorkaround;//avoid unused function warning void localizationWorkaround() { const char * loc; loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu0"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu1"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu2"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu3"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu4"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu5"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu6"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu7"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu8"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu9"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu10"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu11"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu12"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu13"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu14"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu15"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu16"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu17"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu18"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu19"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu20"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu21"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu22"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "cpu23"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "memory"); loc = QT_TRANSLATE_NOOP("LXQtSysStatConfiguration", "swap"); static_cast(t);//avoid unused variable warning } } LXQtSysStatConfiguration::LXQtSysStatConfiguration(QSettings *settings, QWidget *parent) : QDialog(parent), ui(new Ui::LXQtSysStatConfiguration), mSettings(settings), oldSettings(settings), mStat(NULL), mColoursDialog(NULL) { setAttribute(Qt::WA_DeleteOnClose); setObjectName("SysStatConfigurationWindow"); ui->setupUi(this); //Note: translation is needed here in runtime (translator is attached already) for (auto const & type : msStatTypes) ui->typeCOB->addItem(tr(type.toStdString().c_str()), type); loadSettings(); connect(ui->typeCOB, static_cast(&QComboBox::currentIndexChanged), this, &LXQtSysStatConfiguration::saveSettings); connect(ui->intervalSB, static_cast(&QDoubleSpinBox::valueChanged), this, &LXQtSysStatConfiguration::saveSettings); connect(ui->sizeSB, static_cast(&QSpinBox::valueChanged), this, &LXQtSysStatConfiguration::saveSettings); connect(ui->linesSB, static_cast(&QSpinBox::valueChanged), this, &LXQtSysStatConfiguration::saveSettings); connect(ui->titleLE, &QLineEdit::editingFinished, this, &LXQtSysStatConfiguration::saveSettings); connect(ui->useFrequencyCB, &QCheckBox::toggled, this, &LXQtSysStatConfiguration::saveSettings); connect(ui->logarithmicCB, &QCheckBox::toggled, this, &LXQtSysStatConfiguration::saveSettings); connect(ui->sourceCOB, static_cast(&QComboBox::currentIndexChanged), this, &LXQtSysStatConfiguration::saveSettings); connect(ui->useThemeColoursRB, &QRadioButton::toggled, this, &LXQtSysStatConfiguration::saveSettings); } LXQtSysStatConfiguration::~LXQtSysStatConfiguration() { delete ui; } void LXQtSysStatConfiguration::loadSettings() { ui->intervalSB->setValue(mSettings->value("graph/updateInterval", 1.0).toDouble()); ui->sizeSB->setValue(mSettings->value("graph/minimalSize", 30).toInt()); ui->linesSB->setValue(mSettings->value("grid/lines", 1).toInt()); ui->titleLE->setText(mSettings->value("title/label", QString()).toString()); int typeIndex = ui->typeCOB->findData(mSettings->value("data/type", msStatTypes[0])); ui->typeCOB->setCurrentIndex((typeIndex >= 0) ? typeIndex : 0); on_typeCOB_currentIndexChanged(ui->typeCOB->currentIndex()); int sourceIndex = ui->sourceCOB->findData(mSettings->value("data/source", QString())); ui->sourceCOB->setCurrentIndex((sourceIndex >= 0) ? sourceIndex : 0); ui->useFrequencyCB->setChecked(mSettings->value("cpu/useFrequency", true).toBool()); ui->maximumHS->setValue(PluginSysStat::netSpeedFromString(mSettings->value("net/maximumSpeed", "1 MB/s").toString())); on_maximumHS_valueChanged(ui->maximumHS->value()); ui->logarithmicCB->setChecked(mSettings->value("net/logarithmicScale", true).toBool()); ui->logScaleSB->setValue(mSettings->value("net/logarithmicScaleSteps", 4).toInt()); bool useThemeColours = mSettings->value("graph/useThemeColours", true).toBool(); ui->useThemeColoursRB->setChecked(useThemeColours); ui->useCustomColoursRB->setChecked(!useThemeColours); ui->customColoursB->setEnabled(!useThemeColours); } void LXQtSysStatConfiguration::saveSettings() { mSettings->setValue("graph/useThemeColours", ui->useThemeColoursRB->isChecked()); mSettings->setValue("graph/updateInterval", ui->intervalSB->value()); mSettings->setValue("graph/minimalSize", ui->sizeSB->value()); mSettings->setValue("grid/lines", ui->linesSB->value()); mSettings->setValue("title/label", ui->titleLE->text()); //Note: // need to make a realy deep copy of the msStatTypes[x] because of SEGFAULTs // occuring in static finalization time (don't know the real reason...maybe ordering of static finalizers/destructors) QString type = ui->typeCOB->itemData(ui->typeCOB->currentIndex(), Qt::UserRole).toString().toStdString().c_str(); mSettings->setValue("data/type", type); mSettings->setValue("data/source", ui->sourceCOB->itemData(ui->sourceCOB->currentIndex(), Qt::UserRole)); mSettings->setValue("cpu/useFrequency", ui->useFrequencyCB->isChecked()); mSettings->setValue("net/maximumSpeed", PluginSysStat::netSpeedToString(ui->maximumHS->value())); mSettings->setValue("net/logarithmicScale", ui->logarithmicCB->isChecked()); mSettings->setValue("net/logarithmicScaleSteps", ui->logScaleSB->value()); } void LXQtSysStatConfiguration::on_buttons_clicked(QAbstractButton *btn) { if (ui->buttons->buttonRole(btn) == QDialogButtonBox::ResetRole) { oldSettings.loadToSettings(); loadSettings(); } else close(); } void LXQtSysStatConfiguration::on_typeCOB_currentIndexChanged(int index) { if (mStat) mStat->deleteLater(); switch (index) { case 0: mStat = new SysStat::CpuStat(this); break; case 1: mStat = new SysStat::MemStat(this); break; case 2: mStat = new SysStat::NetStat(this); break; } ui->sourceCOB->blockSignals(true); ui->sourceCOB->clear(); for (auto const & s : mStat->sources()) ui->sourceCOB->addItem(tr(s.toStdString().c_str()), s); ui->sourceCOB->blockSignals(false); ui->sourceCOB->setCurrentIndex(0); } void LXQtSysStatConfiguration::on_maximumHS_valueChanged(int value) { ui->maximumValueL->setText(PluginSysStat::netSpeedToString(value)); } void LXQtSysStatConfiguration::coloursChanged() { const LXQtSysStatColours::Colours &colours = mColoursDialog->colours(); mSettings->setValue("grid/colour", colours["grid"].name()); mSettings->setValue("title/colour", colours["title"].name()); mSettings->setValue("cpu/systemColour", colours["cpuSystem"].name()); mSettings->setValue("cpu/userColour", colours["cpuUser"].name()); mSettings->setValue("cpu/niceColour", colours["cpuNice"].name()); mSettings->setValue("cpu/otherColour", colours["cpuOther"].name()); mSettings->setValue("cpu/frequencyColour", colours["cpuFrequency"].name()); mSettings->setValue("mem/appsColour", colours["memApps"].name()); mSettings->setValue("mem/buffersColour", colours["memBuffers"].name()); mSettings->setValue("mem/cachedColour", colours["memCached"].name()); mSettings->setValue("mem/swapColour", colours["memSwap"].name()); mSettings->setValue("net/receivedColour", colours["netReceived"].name()); mSettings->setValue("net/transmittedColour", colours["netTransmitted"].name()); } void LXQtSysStatConfiguration::on_customColoursB_clicked() { if (!mColoursDialog) { mColoursDialog = new LXQtSysStatColours(this); connect(mColoursDialog, SIGNAL(coloursChanged()), SLOT(coloursChanged())); } LXQtSysStatColours::Colours colours; const LXQtSysStatColours::Colours &defaultColours = mColoursDialog->defaultColours(); colours["grid"] = QColor(mSettings->value("grid/colour", defaultColours["grid"] .name()).toString()); colours["title"] = QColor(mSettings->value("title/colour", defaultColours["title"].name()).toString()); colours["cpuSystem"] = QColor(mSettings->value("cpu/systemColour", defaultColours["cpuSystem"] .name()).toString()); colours["cpuUser"] = QColor(mSettings->value("cpu/userColour", defaultColours["cpuUser"] .name()).toString()); colours["cpuNice"] = QColor(mSettings->value("cpu/niceColour", defaultColours["cpuNice"] .name()).toString()); colours["cpuOther"] = QColor(mSettings->value("cpu/otherColour", defaultColours["cpuOther"] .name()).toString()); colours["cpuFrequency"] = QColor(mSettings->value("cpu/frequencyColour", defaultColours["cpuFrequency"].name()).toString()); colours["memApps"] = QColor(mSettings->value("mem/appsColour", defaultColours["memApps"] .name()).toString()); colours["memBuffers"] = QColor(mSettings->value("mem/buffersColour", defaultColours["memBuffers"].name()).toString()); colours["memCached"] = QColor(mSettings->value("mem/cachedColour", defaultColours["memCached"] .name()).toString()); colours["memSwap"] = QColor(mSettings->value("mem/swapColour", defaultColours["memSwap"] .name()).toString()); colours["netReceived"] = QColor(mSettings->value("net/receivedColour", defaultColours["netReceived"] .name()).toString()); colours["netTransmitted"] = QColor(mSettings->value("net/transmittedColour", defaultColours["netTransmitted"].name()).toString()); mColoursDialog->setColours(colours); mColoursDialog->exec(); } lxqt-panel-0.10.0/plugin-sysstat/lxqtsysstatconfiguration.h000066400000000000000000000040331261500472700242530ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTSYSSTATCONFIGURATION_H #define LXQTSYSSTATCONFIGURATION_H #include #include #include #include namespace Ui { class LXQtSysStatConfiguration; } namespace SysStat { class BaseStat; } class LXQtSysStatColours; class LXQtSysStatConfiguration : public QDialog { Q_OBJECT public: explicit LXQtSysStatConfiguration(QSettings *settings, QWidget *parent = 0); ~LXQtSysStatConfiguration(); public slots: void saveSettings(); void on_typeCOB_currentIndexChanged(int); void on_maximumHS_valueChanged(int); void on_customColoursB_clicked(); void on_buttons_clicked(QAbstractButton *); void coloursChanged(); public: static const QStringList msStatTypes; signals: void maximumNetSpeedChanged(QString); private: Ui::LXQtSysStatConfiguration *ui; QSettings *mSettings; LXQt::SettingsCache oldSettings; void loadSettings(); SysStat::BaseStat *mStat; LXQtSysStatColours *mColoursDialog; }; #endif // LXQTSYSSTATCONFIGURATION_H lxqt-panel-0.10.0/plugin-sysstat/lxqtsysstatconfiguration.ui000066400000000000000000000333441261500472700244500ustar00rootroot00000000000000 LXQtSysStatConfiguration 0 0 399 438 System Statistics Settings Graph 4 4 &Minimal size sizeSB Update &interval intervalSB &Title titleLE &Grid lines linesSB <html><head/><body><p>Minimal width if the panel is horizontal.</p><p>Minimal height is the panel is vertical.</p></body></html> px 2 500 30 s 1 0.100000000000000 60.000000000000000 0.250000000000000 1.000000000000000 Data 4 4 0 0 0 Use &frequency Qt::Vertical 0 0 0 0 Qt::Vertical 0 0 0 0 4 Ma&ximum maximumHS 4 XXX KBs 39 Qt::Horizontal Lo&garithmic scale steps 1 64 4 Qt::Vertical 0 0 &Source sourceCOB T&ype typeCOB Colours 4 5 4 Use t&heme colours true Use c&ustom colours Custom colour ... Qt::Vertical 0 0 Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Reset intervalSB sizeSB linesSB titleLE typeCOB sourceCOB useFrequencyCB maximumHS logarithmicCB logScaleSB useThemeColoursRB useCustomColoursRB customColoursB buttons buttons accepted() LXQtSysStatConfiguration accept() 95 433 97 295 buttons rejected() LXQtSysStatConfiguration reject() 76 433 62 296 typeCOB currentIndexChanged(int) dataSW setCurrentIndex(int) 386 203 342 264 useCustomColoursRB toggled(bool) customColoursB setEnabled(bool) 132 366 240 365 lxqt-panel-0.10.0/plugin-sysstat/lxqtsysstatutils.cpp000066400000000000000000000034361261500472700231050ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include #include "lxqtsysstatutils.h" namespace PluginSysStat { QString netSpeedToString(int value) { QString prefix; static const char prefixes[] = "kMG"; if (value / 10) prefix = QChar(prefixes[value / 10 - 1]); return QString("%1 %2B/s").arg(1 << (value % 10)).arg(prefix); } int netSpeedFromString(QString value) { QRegExp re("^(\\d+) ([kMG])B/s$"); if (re.exactMatch(value)) { int shift = 0; switch (re.cap(2)[0].toLatin1()) { case 'k': shift = 10; break; case 'M': shift = 20; break; case 'G': shift = 30; break; } return qCeil(qLn(re.cap(1).toInt()) / qLn(2.)) + shift; } return 0; } } lxqt-panel-0.10.0/plugin-sysstat/lxqtsysstatutils.h000066400000000000000000000023111261500472700225410ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTSYSSTATUTILS_HPP #define LXQTSYSSTATUTILS_HPP #include namespace PluginSysStat { QString netSpeedToString(int value); int netSpeedFromString(QString value); } #endif // LXQTSYSSTATUTILS_HPP lxqt-panel-0.10.0/plugin-sysstat/resources/000077500000000000000000000000001261500472700207015ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-sysstat/resources/sysstat.desktop.in000066400000000000000000000002651261500472700244160ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System Statistics Comment=System Statistics plugin. Icon=utilities-system-monitor #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-sysstat/translations/000077500000000000000000000000001261500472700214105ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat.ts000066400000000000000000000367171261500472700235100ustar00rootroot00000000000000 LXQtSysStatColours System Statistics Colors Graph &Grid Change ... T&itle CPU &Nice Ot&her &Frequency S&ystem &User Memory Cache&d S&wap &Applications &Buffers Network &Received &Transmitted LXQtSysStatConfiguration System Statistics Settings Graph &Minimal size Update &interval &Title &Grid lines <html><head/><body><p>Minimal width if the panel is horizontal.</p><p>Minimal height is the panel is vertical.</p></body></html> px s Data Use &frequency Ma&ximum XXX KBs Lo&garithmic scale steps &Source T&ype Colours Use t&heme colours Use c&ustom colours Custom colour ... CPU Memory Network cpu cpu0 cpu1 cpu2 cpu3 cpu4 cpu5 cpu6 cpu7 cpu8 cpu9 cpu10 cpu11 cpu12 cpu13 cpu14 cpu15 cpu16 cpu17 cpu18 cpu19 cpu20 cpu21 cpu22 cpu23 memory swap LXQtSysStatContent system: %1%<br>user: %2%<br>nice: %3%<br>other: %4%<br>freq: %5% CPU tooltip information system: %1%<br>user: %2%<br>nice: %3%<br>other: %4%<br>freq: n/a CPU tooltip information apps: %1%<br>buffers: %2%<br>cached: %3% Memory tooltip information used: %1% Swap tooltip information min: %1%<br>max: %2% Network tooltip information lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_de.desktop000066400000000000000000000001211261500472700251570ustar00rootroot00000000000000Name[de]=Systemstatistiken Comment[de]=Plugin zum Anzeigen von Systemstatistiken lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_de.ts000066400000000000000000000364041261500472700241510ustar00rootroot00000000000000 LXQtSysStatColours System Statistics Colors Systemstatistik-Farben Graph Graph &Grid &Raster Change ... ändern... T&itle T&itel CPU Prozessor &Nice &Priorität Ot&her A&ndere &Frequency &Frequenz S&ystem S&ystem &User Ben&utzer Memory Speicher Cache&d Zwischenspei&cher S&wap Ausge&lagert &Applications &Anwendungen &Buffers Puff&er Network Netzwerk &Received E&mpfangen &Transmitted &Gesendet LXQtSysStatConfiguration System Statistics Settings Systemstatistik - Einstellungen Graph Graph &Minimal size &Mindestgröße Update &interval Aktualisierungs&intervall &Title &Titel &Grid lines &Rasterlinien <html><head/><body><p>Minimal width if the panel is horizontal.</p><p>Minimal height is the panel is vertical.</p></body></html> <html><head/><body><p>Mindestbreite bei horizontalem Panel.</p><p>Mindesthöhe bei vertikalem Panel.</p></body></html> px px s s Data Daten Use &frequency &Frequenz nutzen Ma&ximum Ma&ximum XXX KBs XXX KB/s Lo&garithmic scale Lo&garithmische Skala steps Schritte &Source &Quelle T&ype T&yp Colours Farben Use t&heme colours Farben des Farbsc&hemas Use c&ustom colours &Eigene Farben Custom colour ... auswählen... CPU Prozessor Memory Speicher Network Netzwerk cpu CPU cpu0 CPU0 cpu1 CPU1 cpu2 CPU2 cpu3 CPU3 cpu4 CPU4 cpu5 CPU5 cpu6 CPU6 cpu7 CPU7 cpu8 CPU8 cpu9 CPU9 cpu10 CPU10 cpu11 CPU11 cpu12 CPU12 cpu13 CPU13 cpu14 CPU14 cpu15 CPU15 cpu16 CPU16 cpu17 CPU17 cpu18 CPU18 cpu19 CPU19 cpu20 CPU20 cpu21 CPU21 cpu22 CPU22 cpu23 CPU23 memory Speicher swap Ausgelagert LXQtSysStatContent system: %1%<br>user: %2%<br>nice: %3%<br>other: %4%<br>freq: %5% CPU tooltip information System: %1%<br>Nutzer: %2%<br>Priorität: %3%<br>Andere: %4%<br>Freq: %5% system: %1%<br>user: %2%<br>nice: %3%<br>other: %4%<br>freq: n/a CPU tooltip information System: %1%<br>Nutzer: %2%<br>Priorität: %3%<br>Andere: %4%<br>Freq: n/a apps: %1%<br>buffers: %2%<br>cached: %3% Memory tooltip information Anwendungen: %1%<br>Puffer: %2%<br>Cache: %3% used: %1% Swap tooltip information Benutzt: %1% min: %1%<br>max: %2% Network tooltip information Min: %1%<br>Max: %2% lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_el.desktop000066400000000000000000000002041261500472700251710ustar00rootroot00000000000000Name[el]=Στατιστικά συστήματος Comment[el]=Πρόσθετο στατιστικών του συστήματος. lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_el.ts000066400000000000000000000234441261500472700241610ustar00rootroot00000000000000 LXQtSysStatColours System Statistics Colors Χρώματα στατιστικών του συστήματος Graph Γράφημα &Grid &Κάνναβος Change ... Αλλαγή... T&itle Τ&ίτλος CPU Επεξεργαστής &Nice &Προτεραιότητα Ot&her Ά&λλο &Frequency &Συχνότητα S&ystem Σύστη&μα &User &Χρήστης Memory Μνήμη Cache&d Αποθηκευμένη προσ&ωρινά S&wap Ανταλλαγής &δεδομένων &Applications Ε&φαρμογές &Buffers &Ενδιάμεση Network Δίκτυο &Received Ειλ&ημμένα &Transmitted &Απεσταλμένα LXQtSysStatConfiguration Graph Γράφημα px εικ s δ Data Δεδομένα System Statistics Settings Ρυθμίσεις στατιστικών του συστήματος &Minimal size Ελάχιστο μέ&γεθος Update &interval Χρονικό &διάστημα ενημέρωσης &Title &Τίτλος &Grid lines &Γραμμές καννάβου <html><head/><body><p>Minimal width if the panel is horizontal.</p><p>Minimal height is the panel is vertical.</p></body></html> <html><head/><body><p>Το ελάχιστο μέγεθος αν ο πίνακας είναι τοποθετημένος οριζόντια.</p><p>Το ελάχιστο ύψος αν ι πίνακας είναι τοποθετημένος κάθετα.</p></body></html> Use &frequency Χρήση της συ&χνότητας Ma&ximum Μέγισ&το Lo&garithmic scale Λογαρι&θμική κλίμακα CPU Επεξεργαστής Memory Μνήμη Network Δίκτυο &Source &Πηγή T&ype &Τύπος Colours Χρώματα Use t&heme colours Χρήση των χρωμάτων του &θέματος Use c&ustom colours Χρήση &προσαρμοσμένων χρωμάτων Custom colour ... Προσαρμοσμένα χρώματα... XXX KBs XXX KBs steps βήματα lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_hu.desktop000066400000000000000000000001241261500472700252060ustar00rootroot00000000000000#TRANSLATIONS Name[hu]=Rendszerstatisztika Comment[pt]=Infó a rendszerállapotról lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_hu.ts000066400000000000000000000221761261500472700241760ustar00rootroot00000000000000 LXQtSysStatColours System Statistics Colors Rendszerstatisztikai színek Graph Grafikon &Grid &Rács Change ... Változtat... T&itle Fel&irat CPU Processzor &Nice Ot&her &Egyéb &Frequency &Frekvencia S&ystem Rend&szer &User &Használó Memory Memória Cache&d &Gyorsított S&wap &Lapozó &Applications &Alkalmazások &Buffers &Pufferek Network Hálózat &Received &Fogadott &Transmitted &Küldött LXQtSysStatConfiguration Graph Grafikon px pixel s mp Data Adatok System Statistics Settings Rendszerstatisztika beállítás &Minimal size Legkisebb &méret Update &interval Fr&issítési köz &Title Felira&t &Grid lines &Rácsvonalak <html><head/><body><p>Minimal width if the panel is horizontal.</p><p>Minimal height is the panel is vertical.</p></body></html> <html><head/><body><p>Vízszintes panelnál szélesség.</p><p>Függőleges panelnál magaság.</p></body></html> Use &frequency &Frekvencia használat Ma&ximum Ma&ximális Lo&garithmic scale Lo&garitmikus skála CPU Processzor Memory Memória Network Hálózat &Source Forrá&s T&ype &Típus Colours Színek Use t&heme colours &Rendszertémáé Use c&ustom colours &Egyéni Custom colour ... Egyéni színek... XXX KBs steps lépés lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_hu_HU.ts000066400000000000000000000222011261500472700245570ustar00rootroot00000000000000 LXQtSysStatColours System Statistics Colors Rendszerstatisztikai színek Graph Grafikon &Grid &Rács Change ... Változtat... T&itle Fel&irat CPU Processzor &Nice Ot&her &Egyéb &Frequency &Frekvencia S&ystem Rend&szer &User &Használó Memory Memória Cache&d &Gyorsított S&wap &Lapozó &Applications &Alkalmazások &Buffers &Pufferek Network Hálózat &Received &Fogadott &Transmitted &Küldött LXQtSysStatConfiguration Graph Grafikon px pixel s mp Data Adatok System Statistics Settings Rendszerstatisztika beállítás &Minimal size Legkisebb &méret Update &interval Fr&issítési köz &Title Felira&t &Grid lines &Rácsvonalak <html><head/><body><p>Minimal width if the panel is horizontal.</p><p>Minimal height is the panel is vertical.</p></body></html> <html><head/><body><p>Vízszintes panelnál szélesség.</p><p>Függőleges panelnál magaság.</p></body></html> Use &frequency &Frekvencia használat Ma&ximum Ma&ximális Lo&garithmic scale Lo&garitmikus skála CPU Processzor Memory Memória Network Hálózat &Source Forrá&s T&ype &Típus Colours Színek Use t&heme colours &Rendszertémáé Use c&ustom colours &Egyéni Custom colour ... Egyéni színek... XXX KBs steps lépés lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_it.desktop000066400000000000000000000001321261500472700252050ustar00rootroot00000000000000Name[it]=Statistiche del sistema Comment[it]=Mostra statistiche configurabili del sistema lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_it.ts000066400000000000000000000220751261500472700241740ustar00rootroot00000000000000 LXQtSysStatColours System Statistics Colors Colori delle statistiche Graph Grafico &Grid &Griglia Change ... Cambia ... T&itle &Titolo CPU &Nice Ot&her &Altro &Frequency &Frequenza S&ystem &Sistema &User &Utente Memory Memoria Cache&d &Cache S&wap &Swap &Applications &Applicazioni &Buffers Network Rete &Received &Ricevuti &Transmitted &Trasmessi LXQtSysStatConfiguration Graph Grafico px s Data System Statistics Settings Impostazioni statistiche del sistema &Minimal size &Grandezza minimale Update &interval &Intervallo di aggiornamento &Title &Titolo &Grid lines &Linee griglia <html><head/><body><p>Minimal width if the panel is horizontal.</p><p>Minimal height is the panel is vertical.</p></body></html> <html><head/><body><p>Larghezza minimale se il pannello è orizzontale.</p><p>Altezza minimale se il pannello è verticale.</p></body></html> Use &frequency Usa &frequenza Ma&ximum &Massimo Lo&garithmic scale Scala &logaritmica CPU Memory Memoria Network Rete &Source &Sorgente T&ype &Tipo Colours Colori Use t&heme colours Usa colori del &tema Use c&ustom colours Colori &personalizzati Custom colour ... Colore personalizzato ... XXX KBs steps intervalli lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_ja.desktop000066400000000000000000000002541261500472700251700ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name[ja]=システム統計 Comment[ja]=システム統計のプラグイン #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_ja.ts000066400000000000000000000224441261500472700241520ustar00rootroot00000000000000 LXQtSysStatColours System Statistics Colors システム統計の色 Graph グラフ &Grid グリッド(&G) Change ... 変更する T&itle タイトル(&T) CPU CPU &Nice Nice(&N) Ot&her その他(&H) &Frequency 周波数(&F) S&ystem システム(&Y) &User ユーザー(&U) Memory メモリー Cache&d キャッシュ(&D) S&wap スワップ(&W) &Applications アプリケーション(&A) &Buffers バッファー(&B) Network ネットワーク &Received 受信(&R) &Transmitted 送信(&T) LXQtSysStatConfiguration Graph グラフ px ピクセル s Data データー System Statistics Settings システム統計の設定 &Minimal size サイズの最小値(&M) Update &interval 更新頻度(&I) &Title タイトル(&T) &Grid lines グリッド線の数(&G) <html><head/><body><p>Minimal width if the panel is horizontal.</p><p>Minimal height is the panel is vertical.</p></body></html> <html><head/><body><p>水平なパネルでは幅の最小値、</p><p>垂直なパネルでは高さの最小値です</p></body></html> Use &frequency 周波数をグラフ表示(&F) Ma&ximum 最大(&X) Lo&garithmic scale 対数スケール(&G) CPU CPU Memory メモリー Network ネットワーク &Source 情報元(&S) T&ype 種類(&Y) Colours Use t&heme colours テーマの色を使用(&H) Use c&ustom colours 色を指定(&U) Custom colour ... 色を指定する XXX KBs XXX KB steps ステップ lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_pt.desktop000066400000000000000000000001371261500472700252210ustar00rootroot00000000000000#TRANSLATIONS Name[pt]=Estatísticas do sistema Comment[pt]=Mostra as estatísticas do sistema lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_pt.ts000066400000000000000000000322441261500472700242020ustar00rootroot00000000000000 LXQtSysStatColours System Statistics Colors Cores das estatísticas do sistema Graph Gráfico &Grid &Grelha Change ... Mudar... T&itle Tí&tulo CPU CPU &Nice A&ceitável Ot&her O&utras &Frequency &Frequência S&ystem S&istema &User &Utilizador Memory Memória Cache&d Cac&he S&wap S&wap &Applications &Aplicações &Buffers &Buffers Network Rede &Received &Recebido &Transmitted &Enviado LXQtSysStatConfiguration LXQt SysStat Settings Definições do LXQt SysStat Graph Gráfico Update interval Intervalo de atualização Minimal size Tamanho mínimo px px s s Grid Grelha Lines Linhas Colour Cor Change ... Mudar... Title Título Label Etiqueta Font Tipo de letra Data Dados Type Tipo System Statistics Settings Defiições das estatísticas do sistema &Minimal size Tamanho &mínimo Update &interval &Intervalo de atualização &Title &Título &Grid lines Linhas da &grelha <html><head/><body><p>Minimal width if the panel is horizontal.</p><p>Minimal height is the panel is vertical.</p></body></html> <html><head/><body><p>Lagura mínima se o painelestiver na horizontal.</p><p>Altura mínima se o painel estiver na vertical.</p></body></html> Use &frequency Utilizar &frequência Ma&ximum Má&ximo Lo&garithmic scale Escala lo&garítmica CPU CPU Memory Memória Network Rede &Source &Fonte T&ype T&ipo Colours Cores Use t&heme colours Utili&zar cores do tema Use c&ustom colours &Utilizar cores personalizadas Custom colour ... Cor personalizada... Source Fonte System Sistema User Utilizador Nice Aceitável Other Outras Use Frequency Utilizar frequência Frequency Frequência Applications Aplicações Buffers Buffers Cached Cache Used Utilizado Received Recebido Transmitted Enviado Maximum Máximo XXX KBs XXX KBs Logarithmic scale Escala logarítmica steps etapas Ultra light Ultra claro Light Claro Ultra black Ultra escuro Black Escuro Bold Negrito Demi bold Semi-negrito Italic Itálico lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_ru.desktop000066400000000000000000000003211261500472700252170ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name[ru]=Системная статистика Comment[ru]=Плагин системной статистики. #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_ru.ts000066400000000000000000000231201261500472700241760ustar00rootroot00000000000000 LXQtSysStatColours System Statistics Colors Цвета статистических данных системы Graph График &Grid &Сетка Change ... Изменить… T&itle &Название CPU ЦПУ &Nice Ot&her &Прочее &Frequency &Частота S&ystem &Система &User &Пользователь Memory Память Cache&d &Кэшировано S&wap &Подкачка &Applications &Приложения &Buffers &Буферы Network Сеть &Received &Получено &Transmitted &Передано LXQtSysStatConfiguration System Statistics Settings Настройки статистических данных системы Graph График &Minimal size &Минимальный размер Update &interval И&нтервал обновления &Title &Название &Grid lines &Линий сетки <html><head/><body><p>Minimal width if the panel is horizontal.</p><p>Minimal height is the panel is vertical.</p></body></html> <html><head/><body><p>Минимальная ширина для горизонтальной панели.</p><p>Минимальная высота для вертикальной панели.</p></body></html> px пикс s с Data Данные Use &frequency Использовать &частоту Ma&ximum Ма&ксимум XXX KBs XXX Кб Lo&garithmic scale Ло&гарифмическая шкала steps шаги CPU ЦПУ Memory Память Network Сеть &Source &Источник T&ype &Тип Colours Цвета Use t&heme colours Использовать цвета &темы Use c&ustom colours Использовать с&вои цвета Custom colour ... Свои цвета… lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_ru_RU.desktop000066400000000000000000000003271261500472700256330ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name[ru_RU]=Системная статистика Comment[ru_RU]=Плагин системной статистики. #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-sysstat/translations/sysstat_ru_RU.ts000066400000000000000000000231231261500472700246070ustar00rootroot00000000000000 LXQtSysStatColours System Statistics Colors Цвета статистических данных системы Graph График &Grid &Сетка Change ... Изменить… T&itle &Название CPU ЦПУ &Nice Ot&her &Прочее &Frequency &Частота S&ystem &Система &User &Пользователь Memory Память Cache&d &Кэшировано S&wap &Подкачка &Applications &Приложения &Buffers &Буферы Network Сеть &Received &Получено &Transmitted &Передано LXQtSysStatConfiguration System Statistics Settings Настройки статистических данных системы Graph График &Minimal size &Минимальный размер Update &interval И&нтервал обновления &Title &Название &Grid lines &Линий сетки <html><head/><body><p>Minimal width if the panel is horizontal.</p><p>Minimal height is the panel is vertical.</p></body></html> <html><head/><body><p>Минимальная ширина для горизонтальной панели.</p><p>Минимальная высота для вертикальной панели.</p></body></html> px пикс s с Data Данные Use &frequency Использовать &частоту Ma&ximum Ма&ксимум XXX KBs XXX Кб Lo&garithmic scale Ло&гарифмическая шкала steps шаги CPU ЦПУ Memory Память Network Сеть &Source &Источник T&ype &Тип Colours Цвета Use t&heme colours Использовать цвета &темы Use c&ustom colours Использовать с&вои цвета Custom colour ... Свои цвета… lxqt-panel-0.10.0/plugin-taskbar/000077500000000000000000000000001261500472700166045ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-taskbar/CMakeLists.txt000066400000000000000000000006741261500472700213530ustar00rootroot00000000000000set(PLUGIN "taskbar") set(HEADERS lxqttaskbar.h lxqttaskbutton.h lxqttaskbarconfiguration.h lxqttaskbarplugin.h lxqttaskgroup.h lxqtgrouppopup.h ) set(SOURCES lxqttaskbar.cpp lxqttaskbutton.cpp lxqttaskbarconfiguration.cpp lxqttaskbarplugin.cpp lxqttaskgroup.cpp lxqtgrouppopup.cpp ) set(UIS lxqttaskbarconfiguration.ui ) set(LIBRARIES lxqt Qt5Xdg ) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-taskbar/lxqtgrouppopup.cpp000066400000000000000000000111721261500472700224430ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * http://lxqt.org * * Copyright: 2011 Razor team * 2014 LXQt team * Authors: * Alexander Sokoloff * Maciej Płaza * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtgrouppopup.h" #include #include #include #include #include /************************************************ this class is just a container of window buttons the main purpose is showing window buttons in vertical layout and drag&drop feature inside group ************************************************/ LXQtGroupPopup::LXQtGroupPopup(LXQtTaskGroup *group): QFrame(group), mGroup(group) { Q_ASSERT(group); setAcceptDrops(true); setWindowFlags(Qt::FramelessWindowHint | Qt::ToolTip); setAttribute(Qt::WA_AlwaysShowToolTips); setLayout(new QVBoxLayout); layout()->setSpacing(3); layout()->setMargin(3); connect(&mCloseTimer, &QTimer::timeout, this, &LXQtGroupPopup::closeTimerSlot); mCloseTimer.setSingleShot(true); mCloseTimer.setInterval(400); } LXQtGroupPopup::~LXQtGroupPopup() { } void LXQtGroupPopup::dropEvent(QDropEvent *event) { qlonglong temp; QDataStream stream(event->mimeData()->data(LXQtTaskButton::mimeDataFormat())); stream >> temp; WId window = (WId) temp; LXQtTaskButton *button = nullptr; int oldIndex(0); // get current position of the button being dragged for (int i = 0; i < layout()->count(); i++) { LXQtTaskButton *b = qobject_cast(layout()->itemAt(i)->widget()); if (b && b->windowId() == window) { button = b; oldIndex = i; break; } } if (button == nullptr) return; int newIndex = -1; // find the new position to place it in for (int i = 0; i < oldIndex && newIndex == -1; i++) { QWidget *w = layout()->itemAt(i)->widget(); if (w && w->pos().y() + w->height() / 2 > event->pos().y()) newIndex = i; } const int size = layout()->count(); for (int i = size - 1; i > oldIndex && newIndex == -1; i--) { QWidget *w = layout()->itemAt(i)->widget(); if (w && w->pos().y() + w->height() / 2 < event->pos().y()) newIndex = i; } if (newIndex == -1 || newIndex == oldIndex) return; QVBoxLayout * l = qobject_cast(layout()); l->takeAt(oldIndex); l->insertWidget(newIndex, button); l->invalidate(); } void LXQtGroupPopup::dragEnterEvent(QDragEnterEvent *event) { event->accept(); QWidget::dragEnterEvent(event); } void LXQtGroupPopup::dragLeaveEvent(QDragLeaveEvent *event) { hide(false/*not fast*/); QFrame::dragLeaveEvent(event); } /************************************************ * ************************************************/ void LXQtGroupPopup::leaveEvent(QEvent *event) { mCloseTimer.start(); } /************************************************ * ************************************************/ void LXQtGroupPopup::enterEvent(QEvent *event) { mCloseTimer.stop(); } void LXQtGroupPopup::hide(bool fast) { if (fast) close(); else mCloseTimer.start(); } void LXQtGroupPopup::show() { mCloseTimer.stop(); QFrame::show(); } void LXQtGroupPopup::closeTimerSlot() { bool button_has_dnd_hover = false; QLayout* l = layout(); for (int i = 0; l->count() > i; ++i) { LXQtTaskButton const * const button = dynamic_cast(l->itemAt(i)->widget()); if (0 != button && button->hasDragAndDropHover()) { button_has_dnd_hover = true; break; } } if (!button_has_dnd_hover) close(); } lxqt-panel-0.10.0/plugin-taskbar/lxqtgrouppopup.h000066400000000000000000000043651261500472700221160ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * http://lxqt.org * * Copyright: 2011 Razor team * 2014 LXQt team * Authors: * Alexander Sokoloff * Maciej Płaza * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTTASKPOPUP_H #define LXQTTASKPOPUP_H #include #include #include #include #include #include "lxqttaskbutton.h" #include "lxqttaskgroup.h" #include "lxqttaskbar.h" class LXQtGroupPopup: public QFrame { Q_OBJECT public: LXQtGroupPopup(LXQtTaskGroup *group); ~LXQtGroupPopup(); void hide(bool fast = false); void show(); // Layout int indexOf(LXQtTaskButton *button) { return layout()->indexOf(button); } int count() { return layout()->count(); } QLayoutItem * itemAt(int i) { return layout()->itemAt(i); } int spacing() { return layout()->spacing(); } void addButton(LXQtTaskButton* button) { layout()->addWidget(button); } void removeWidget(QWidget *button) { layout()->removeWidget(button); } protected: void dragEnterEvent(QDragEnterEvent * event); void dragLeaveEvent(QDragLeaveEvent *event); void dropEvent(QDropEvent * event); void leaveEvent(QEvent * event); void enterEvent(QEvent * event); void closeTimerSlot(); private: LXQtTaskGroup *mGroup; QTimer mCloseTimer; }; #endif // LXQTTASKPOPUP_H lxqt-panel-0.10.0/plugin-taskbar/lxqttaskbar.cpp000066400000000000000000000425421261500472700216570ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * http://lxqt.org * * Copyright: 2011 Razor team * 2014 LXQt team * Authors: * Alexander Sokoloff * Maciej Płaza * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "lxqttaskbar.h" #include "lxqttaskgroup.h" using namespace LXQt; /************************************************ ************************************************/ LXQtTaskBar::LXQtTaskBar(ILXQtPanelPlugin *plugin, QWidget *parent) : QFrame(parent), mButtonStyle(Qt::ToolButtonTextBesideIcon), mCloseOnMiddleClick(true), mRaiseOnCurrentDesktop(true), mShowOnlyOneDesktopTasks(false), mShowDesktopNum(0), mShowOnlyCurrentScreenTasks(false), mShowOnlyMinimizedTasks(false), mAutoRotate(true), mShowGroupOnHover(true), mPlugin(plugin), mPlaceHolder(new QWidget(this)), mStyle(new LeftAlignedTextStyle()) { setStyle(mStyle); mLayout = new LXQt::GridLayout(this); setLayout(mLayout); mLayout->setMargin(0); mLayout->setStretch(LXQt::GridLayout::StretchHorizontal | LXQt::GridLayout::StretchVertical); realign(); mPlaceHolder->setMinimumSize(1, 1); mPlaceHolder->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); mPlaceHolder->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); mLayout->addWidget(mPlaceHolder); QTimer::singleShot(0, this, SLOT(settingsChanged())); setAcceptDrops(true); connect(KWindowSystem::self(), SIGNAL(stackingOrderChanged()), SLOT(refreshTaskList())); connect(KWindowSystem::self(), static_cast(&KWindowSystem::windowChanged) , this, &LXQtTaskBar::onWindowChanged); } /************************************************ ************************************************/ LXQtTaskBar::~LXQtTaskBar() { delete mStyle; } /************************************************ ************************************************/ bool LXQtTaskBar::acceptWindow(WId window) const { QFlags ignoreList; ignoreList |= NET::DesktopMask; ignoreList |= NET::DockMask; ignoreList |= NET::SplashMask; ignoreList |= NET::ToolbarMask; ignoreList |= NET::MenuMask; ignoreList |= NET::PopupMenuMask; ignoreList |= NET::NotificationMask; KWindowInfo info(window, NET::WMWindowType | NET::WMState, NET::WM2TransientFor); if (!info.valid()) return false; if (NET::typeMatchesMask(info.windowType(NET::AllTypesMask), ignoreList)) return false; if (info.state() & NET::SkipTaskbar) return false; // WM_TRANSIENT_FOR hint not set - normal window WId transFor = info.transientFor(); if (transFor == 0 || transFor == window || transFor == (WId) QX11Info::appRootWindow()) return true; info = KWindowInfo(transFor, NET::WMWindowType); QFlags normalFlag; normalFlag |= NET::NormalMask; normalFlag |= NET::DialogMask; normalFlag |= NET::UtilityMask; return !NET::typeMatchesMask(info.windowType(NET::AllTypesMask), normalFlag); } /************************************************ ************************************************/ void LXQtTaskBar::dragEnterEvent(QDragEnterEvent* event) { if (event->mimeData()->hasFormat(LXQtTaskGroup::mimeDataFormat())) { event->acceptProposedAction(); buttonMove(nullptr, qobject_cast(event->source()), event->pos()); } else event->ignore(); QWidget::dragEnterEvent(event); } /************************************************ ************************************************/ void LXQtTaskBar::dragMoveEvent(QDragMoveEvent * event) { //we don't get any dragMoveEvents if dragEnter wasn't accepted buttonMove(nullptr, qobject_cast(event->source()), event->pos()); QWidget::dragMoveEvent(event); } /************************************************ ************************************************/ void LXQtTaskBar::buttonMove(LXQtTaskGroup * dst, LXQtTaskGroup * src, QPoint const & pos) { int src_index; if (!src || -1 == (src_index = mLayout->indexOf(src))) { qDebug() << "Dropped invalid"; return; } const int size = mLayout->count(); Q_ASSERT(0 < size); //dst is nullptr in case the drop occured on empty space in taskbar int dst_index; if (nullptr == dst) { //moving based on taskbar (not signaled by button) QRect occupied = mLayout->occupiedGeometry(); QRect last_empty_row{occupied}; if (mPlugin->panel()->isHorizontal()) { last_empty_row.setTopLeft(mLayout->itemAt(size - 1)->geometry().topRight()); } else { last_empty_row.setTopLeft(mLayout->itemAt(size - 1)->geometry().bottomLeft()); } if (occupied.contains(pos) && !last_empty_row.contains(pos)) return; dst_index = size; } else { //moving based on signal from child button dst_index = mLayout->indexOf(dst); if (mPlugin->panel()->isHorizontal()) { if (dst->rect().center().x() < pos.x()) ++dst_index; } else { if (dst->rect().center().y() < pos.y()) ++dst_index; } } //moving lower index to higher one => consider as the QList::move => insert(to, takeAt(from)) if (src_index < dst_index) --dst_index; if (dst_index == src_index) return; mLayout->moveItem(src_index, dst_index, true); } /************************************************ ************************************************/ void LXQtTaskBar::groupBecomeEmptySlot() { //group now contains no buttons - clean up in hash and delete the group LXQtTaskGroup *group = qobject_cast(sender()); Q_ASSERT(group); mGroupsHash.erase(mGroupsHash.find(group->groupName())); group->deleteLater(); } /************************************************ ************************************************/ void LXQtTaskBar::addWindow(WId window, QString const & groupId) { LXQtTaskGroup *group = mGroupsHash.value(groupId); if (!group) { group = new LXQtTaskGroup(groupId, KWindowSystem::icon(window), mPlugin, this); connect(group, SIGNAL(groupBecomeEmpty(QString)), this, SLOT(groupBecomeEmptySlot())); connect(group, SIGNAL(visibilityChanged(bool)), this, SLOT(refreshPlaceholderVisibility())); connect(group, &LXQtTaskGroup::popupShown, this, &LXQtTaskBar::groupPopupShown); connect(group, SIGNAL(windowDisowned(WId)), this, SLOT(refreshTaskList())); connect(group, &LXQtTaskButton::dragging, this, [this] (QObject * dragSource, QPoint const & pos) { buttonMove(qobject_cast(sender()), qobject_cast(dragSource), pos); }); mLayout->addWidget(group); mGroupsHash.insert(groupId, group); group->setToolButtonsStyle(mButtonStyle); } group->addWindow(window); } /************************************************ ************************************************/ void LXQtTaskBar::refreshTaskList() { // Just add new windows to groups, deleting is up to the groups QList tmp = KWindowSystem::stackingOrder(); Q_FOREACH (WId wnd, tmp) { if (acceptWindow(wnd)) { // If grouping disabled group behaves like regular button QString id = mGroupingEnabled ? KWindowInfo(wnd, 0, NET::WM2WindowClass).windowClassClass() : QString("%1").arg(wnd); addWindow(wnd, id); } } refreshPlaceholderVisibility(); } /************************************************ ************************************************/ void LXQtTaskBar::onWindowChanged(WId window, NET::Properties prop, NET::Properties2 prop2) { // If grouping disabled group behaves like regular button QString id = mGroupingEnabled ? KWindowInfo(window, 0, NET::WM2WindowClass).windowClassClass() : QString("%1").arg(window); LXQtTaskGroup *group = mGroupsHash.value(id); bool consumed{false}; if (nullptr != group) { consumed = group->onWindowChanged(window, prop, prop2); } if (!consumed && acceptWindow(window)) addWindow(window, id); } /************************************************ ************************************************/ void LXQtTaskBar::refreshButtonRotation() { bool autoRotate = mAutoRotate && (mButtonStyle != Qt::ToolButtonIconOnly); ILXQtPanel::Position panelPosition = mPlugin->panel()->position(); QHashIterator j(mGroupsHash); while(j.hasNext()) { j.next(); j.value()->setAutoRotation(autoRotate,panelPosition); } } /************************************************ ************************************************/ void LXQtTaskBar::refreshPlaceholderVisibility() { // if no visible group button show placeholder widget bool haveVisibleWindow = false; QHashIterator j(mGroupsHash); while (j.hasNext()) { j.next(); if (j.value()->isVisible()) haveVisibleWindow = true; } mPlaceHolder->setVisible(!haveVisibleWindow); if (haveVisibleWindow) mPlaceHolder->setFixedSize(0, 0); else { mPlaceHolder->setMinimumSize(1, 1); mPlaceHolder->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); } } /************************************************ ************************************************/ void LXQtTaskBar::refreshIconGeometry() { QHashIterator i(mGroupsHash); while (i.hasNext()) { i.next(); i.value()->refreshIconsGeometry(); } } /************************************************ ************************************************/ void LXQtTaskBar::setButtonStyle(Qt::ToolButtonStyle buttonStyle) { mButtonStyle = buttonStyle; QHashIterator i(mGroupsHash); while (i.hasNext()) { i.next(); i.value()->setToolButtonsStyle(buttonStyle); } } /************************************************ ************************************************/ void LXQtTaskBar::settingsChanged() { bool groupingEnabledOld = mGroupingEnabled; bool showOnlyOneDesktopTasksOld = mShowOnlyOneDesktopTasks; const int showDesktopNumOld = mShowDesktopNum; bool showOnlyCurrentScreenTasksOld = mShowOnlyCurrentScreenTasks; bool showOnlyMinimizedTasksOld = mShowOnlyMinimizedTasks; mButtonWidth = mPlugin->settings()->value("buttonWidth", 400).toInt(); mButtonHeight = mPlugin->settings()->value("buttonHeight", 100).toInt(); QString s = mPlugin->settings()->value("buttonStyle").toString().toUpper(); if (s == "ICON") setButtonStyle(Qt::ToolButtonIconOnly); else if (s == "TEXT") setButtonStyle(Qt::ToolButtonTextOnly); else setButtonStyle(Qt::ToolButtonTextBesideIcon); mShowOnlyOneDesktopTasks = mPlugin->settings()->value("showOnlyOneDesktopTasks", mShowOnlyOneDesktopTasks).toBool(); mShowDesktopNum = mPlugin->settings()->value("showDesktopNum", mShowDesktopNum).toInt(); mShowOnlyCurrentScreenTasks = mPlugin->settings()->value("showOnlyCurrentScreenTasks", mShowOnlyCurrentScreenTasks).toBool(); mShowOnlyMinimizedTasks = mPlugin->settings()->value("showOnlyMinimizedTasks", mShowOnlyMinimizedTasks).toBool(); mAutoRotate = mPlugin->settings()->value("autoRotate", true).toBool(); mCloseOnMiddleClick = mPlugin->settings()->value("closeOnMiddleClick", true).toBool(); mRaiseOnCurrentDesktop = mPlugin->settings()->value("raiseOnCurrentDesktop", false).toBool(); mGroupingEnabled = mPlugin->settings()->value("groupingEnabled",true).toBool(); mShowGroupOnHover = mPlugin->settings()->value("showGroupOnHover",true).toBool(); // Delete all groups if grouping feature toggled and start over if (groupingEnabledOld != mGroupingEnabled) { Q_FOREACH (LXQtTaskGroup *group, mGroupsHash.values()) { mLayout->removeWidget(group); group->deleteLater(); } mGroupsHash.clear(); } if (showOnlyOneDesktopTasksOld != mShowOnlyOneDesktopTasks || (mShowOnlyOneDesktopTasks && showDesktopNumOld != mShowDesktopNum) || showOnlyCurrentScreenTasksOld != mShowOnlyCurrentScreenTasks || showOnlyMinimizedTasksOld != mShowOnlyMinimizedTasks ) Q_FOREACH (LXQtTaskGroup *group, mGroupsHash) group->showOnlySettingChanged(); refreshTaskList(); } /************************************************ ************************************************/ void LXQtTaskBar::realign() { mLayout->setEnabled(false); refreshButtonRotation(); ILXQtPanel *panel = mPlugin->panel(); QSize maxSize = QSize(mButtonWidth, mButtonHeight); QSize minSize = QSize(0, 0); bool rotated = false; if (panel->isHorizontal()) { mLayout->setRowCount(panel->lineCount()); mLayout->setColumnCount(0); } else { mLayout->setRowCount(0); if (mButtonStyle == Qt::ToolButtonIconOnly) { // Vertical + Icons mLayout->setColumnCount(panel->lineCount()); } else { rotated = mAutoRotate && (panel->position() == ILXQtPanel::PositionLeft || panel->position() == ILXQtPanel::PositionRight); // Vertical + Text if (rotated) { maxSize.rwidth() = mButtonHeight; maxSize.rheight() = mButtonWidth; mLayout->setColumnCount(panel->lineCount()); } else { mLayout->setColumnCount(1); } } } mLayout->setCellMinimumSize(minSize); mLayout->setCellMaximumSize(maxSize); mLayout->setDirection(rotated ? LXQt::GridLayout::TopToBottom : LXQt::GridLayout::LeftToRight); mLayout->setEnabled(true); //our placement on screen could have been changed Q_FOREACH (LXQtTaskGroup *group, mGroupsHash) group->showOnlySettingChanged(); refreshIconGeometry(); } /************************************************ ************************************************/ void LXQtTaskBar::wheelEvent(QWheelEvent* event) { static int threshold = 0; threshold += abs(event->delta()); if (threshold < 300) return; else threshold = 0; int delta = event->delta() < 0 ? 1 : -1; // create temporary list of visible groups in the same order like on the layout QList list; LXQtTaskGroup *group = NULL; for (int i = 0; i < mLayout->count(); i++) { QWidget * o = mLayout->itemAt(i)->widget(); LXQtTaskGroup * g = qobject_cast(o); if (!g) continue; if (g->isVisible()) list.append(g); if (g->isChecked()) group = g; } if (list.isEmpty()) return; if (!group) group = list.at(0); LXQtTaskButton *button = NULL; // switching between groups from temporary list in modulo addressing while (!button) { button = group->getNextPrevChildButton(delta == 1, !(list.count() - 1)); if (button) button->raiseApplication(); int idx = (list.indexOf(group) + delta + list.count()) % list.count(); group = list.at(idx); } } /************************************************ ************************************************/ void LXQtTaskBar::resizeEvent(QResizeEvent* event) { refreshIconGeometry(); return QWidget::resizeEvent(event); } /************************************************ ************************************************/ void LXQtTaskBar::changeEvent(QEvent* event) { // if current style is changed, reset the base style of the proxy style // so we can apply the new style correctly to task buttons. if(event->type() == QEvent::StyleChange) mStyle->setBaseStyle(NULL); QFrame::changeEvent(event); } void LXQtTaskBar::groupPopupShown(LXQtTaskGroup * const sender) { //close all popups (should they be visible because of close delay) for (auto group : mGroupsHash) { if (group->isVisible() && sender != group) group->setPopupVisible(false, true/*fast*/); } } lxqt-panel-0.10.0/plugin-taskbar/lxqttaskbar.h000066400000000000000000000077621261500472700213310ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * http://lxqt.org * * Copyright: 2011 Razor team * 2014 LXQt team * Authors: * Alexander Sokoloff * Maciej Płaza * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTTASKBAR_H #define LXQTTASKBAR_H #include "../panel/ilxqtpanel.h" #include "../panel/ilxqtpanelplugin.h" #include "lxqttaskbarconfiguration.h" #include "lxqttaskgroup.h" #include "lxqttaskbutton.h" #include #include #include #include "../panel/ilxqtpanel.h" #include #include #include class LXQtTaskButton; class ElidedButtonStyle; namespace LXQt { class GridLayout; } class LXQtTaskBar : public QFrame { Q_OBJECT public: explicit LXQtTaskBar(ILXQtPanelPlugin *plugin, QWidget* parent = 0); virtual ~LXQtTaskBar(); void realign(); Qt::ToolButtonStyle buttonStyle() const { return mButtonStyle; } int buttonWidth() const { return mButtonWidth; } bool closeOnMiddleClick() const { return mCloseOnMiddleClick; } bool raiseOnCurrentDesktop() const { return mRaiseOnCurrentDesktop; } bool isShowOnlyOneDesktopTasks() const { return mShowOnlyOneDesktopTasks; } int showDesktopNum() const { return mShowDesktopNum; } bool isShowOnlyCurrentScreenTasks() const { return mShowOnlyCurrentScreenTasks; } bool isShowOnlyMinimizedTasks() const { return mShowOnlyMinimizedTasks; } bool isAutoRotate() const { return mAutoRotate; } bool isGroupingEnabled() const { return mGroupingEnabled; } bool isShowGroupOnHover() const { return mShowGroupOnHover; } ILXQtPanel * panel() const { return mPlugin->panel(); } public slots: void settingsChanged(); protected: virtual void dragEnterEvent(QDragEnterEvent * event); virtual void dragMoveEvent(QDragMoveEvent * event); private slots: void refreshIconGeometry(); void refreshTaskList(); void refreshButtonRotation(); void refreshPlaceholderVisibility(); void groupBecomeEmptySlot(); void groupPopupShown(LXQtTaskGroup * const sender); void onWindowChanged(WId window, NET::Properties prop, NET::Properties2 prop2); private: void addWindow(WId window, QString const & groupId); void buttonMove(LXQtTaskGroup * dst, LXQtTaskGroup * src, QPoint const & pos); private: QHash mGroupsHash; LXQt::GridLayout *mLayout; // Settings Qt::ToolButtonStyle mButtonStyle; int mButtonWidth; int mButtonHeight; bool mCloseOnMiddleClick; bool mRaiseOnCurrentDesktop; bool mShowOnlyOneDesktopTasks; int mShowDesktopNum; bool mShowOnlyCurrentScreenTasks; bool mShowOnlyMinimizedTasks; bool mAutoRotate; bool mGroupingEnabled; bool mShowGroupOnHover; bool acceptWindow(WId window) const; void setButtonStyle(Qt::ToolButtonStyle buttonStyle); void wheelEvent(QWheelEvent* event); void changeEvent(QEvent* event); void resizeEvent(QResizeEvent *event); ILXQtPanelPlugin *mPlugin; QWidget *mPlaceHolder; LeftAlignedTextStyle *mStyle; }; #endif // LXQTTASKBAR_H lxqt-panel-0.10.0/plugin-taskbar/lxqttaskbarconfiguration.cpp000066400000000000000000000144201261500472700244410ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * http://lxqt.org * * Copyright: 2011 Razor team * 2014 LXQt team * Authors: * Maciej Płaza * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqttaskbarconfiguration.h" #include "ui_lxqttaskbarconfiguration.h" #include LXQtTaskbarConfiguration::LXQtTaskbarConfiguration(QSettings &settings, QWidget *parent): QDialog(parent), ui(new Ui::LXQtTaskbarConfiguration), mSettings(settings), oldSettings(settings) { setAttribute(Qt::WA_DeleteOnClose); setObjectName("TaskbarConfigurationWindow"); ui->setupUi(this); connect(ui->buttons, SIGNAL(clicked(QAbstractButton*)), this, SLOT(dialogButtonsAction(QAbstractButton*))); ui->buttonStyleCB->addItem(tr("Icon and text"), "IconText"); ui->buttonStyleCB->addItem(tr("Only icon"), "Icon"); ui->buttonStyleCB->addItem(tr("Only text"), "Text"); ui->showDesktopNumCB->addItem(tr("Current"), 0); //Note: in KWindowSystem desktops are numbered from 1..N const int desk_cnt = KWindowSystem::numberOfDesktops(); for (int i = 1; desk_cnt >= i; ++i) ui->showDesktopNumCB->addItem(QString("%1 - %2").arg(i).arg(KWindowSystem::desktopName(i)), i); loadSettings(); /* We use clicked() and activated(int) because these signals aren't emitting after programmaticaly change of state */ connect(ui->limitByDesktopCB, SIGNAL(clicked()), this, SLOT(saveSettings())); connect(ui->limitByDesktopCB, &QCheckBox::stateChanged, ui->showDesktopNumCB, &QWidget::setEnabled); connect(ui->showDesktopNumCB, SIGNAL(activated(int)), this, SLOT(saveSettings())); connect(ui->limitByScreenCB, SIGNAL(clicked()), this, SLOT(saveSettings())); connect(ui->limitByMinimizedCB, SIGNAL(clicked()), this, SLOT(saveSettings())); connect(ui->raiseOnCurrentDesktopCB, SIGNAL(clicked()), this, SLOT(saveSettings())); connect(ui->buttonStyleCB, SIGNAL(activated(int)), this, SLOT(saveSettings())); connect(ui->buttonWidthSB, SIGNAL(valueChanged(int)), this, SLOT(saveSettings())); connect(ui->buttonHeightSB, SIGNAL(valueChanged(int)), this, SLOT(saveSettings())); connect(ui->autoRotateCB, SIGNAL(clicked()), this, SLOT(saveSettings())); connect(ui->middleClickCB, SIGNAL(clicked()), this, SLOT(saveSettings())); connect(ui->groupingGB, SIGNAL(clicked()), this, SLOT(saveSettings())); connect(ui->showGroupOnHoverCB, SIGNAL(clicked()), this, SLOT(saveSettings())); } LXQtTaskbarConfiguration::~LXQtTaskbarConfiguration() { delete ui; } void LXQtTaskbarConfiguration::loadSettings() { const bool showOnlyOneDesktopTasks = mSettings.value("showOnlyOneDesktopTasks", false).toBool(); ui->limitByDesktopCB->setChecked(showOnlyOneDesktopTasks); ui->showDesktopNumCB->setCurrentIndex(ui->showDesktopNumCB->findData(mSettings.value("showDesktopNum", 0).toInt())); ui->showDesktopNumCB->setEnabled(showOnlyOneDesktopTasks); ui->limitByScreenCB->setChecked(mSettings.value("showOnlyCurrentScreenTasks", false).toBool()); ui->limitByMinimizedCB->setChecked(mSettings.value("showOnlyMinimizedTasks", false).toBool()); ui->autoRotateCB->setChecked(mSettings.value("autoRotate", true).toBool()); ui->middleClickCB->setChecked(mSettings.value("closeOnMiddleClick", true).toBool()); ui->raiseOnCurrentDesktopCB->setChecked(mSettings.value("raiseOnCurrentDesktop", false).toBool()); ui->buttonStyleCB->setCurrentIndex(ui->buttonStyleCB->findData(mSettings.value("buttonStyle", "IconText"))); ui->buttonWidthSB->setValue(mSettings.value("buttonWidth", 400).toInt()); ui->buttonHeightSB->setValue(mSettings.value("buttonHeight", 100).toInt()); ui->groupingGB->setChecked(mSettings.value("groupingEnabled",true).toBool()); ui->showGroupOnHoverCB->setChecked(mSettings.value("showGroupOnHover",true).toBool()); } void LXQtTaskbarConfiguration::saveSettings() { mSettings.setValue("showOnlyOneDesktopTasks", ui->limitByDesktopCB->isChecked()); mSettings.setValue("showDesktopNum", ui->showDesktopNumCB->itemData(ui->showDesktopNumCB->currentIndex())); mSettings.setValue("showOnlyCurrentScreenTasks", ui->limitByScreenCB->isChecked()); mSettings.setValue("showOnlyMinimizedTasks", ui->limitByMinimizedCB->isChecked()); mSettings.setValue("buttonStyle", ui->buttonStyleCB->itemData(ui->buttonStyleCB->currentIndex())); mSettings.setValue("buttonWidth", ui->buttonWidthSB->value()); mSettings.setValue("buttonHeight", ui->buttonHeightSB->value()); mSettings.setValue("autoRotate", ui->autoRotateCB->isChecked()); mSettings.setValue("closeOnMiddleClick", ui->middleClickCB->isChecked()); mSettings.setValue("raiseOnCurrentDesktop", ui->raiseOnCurrentDesktopCB->isChecked()); mSettings.setValue("groupingEnabled",ui->groupingGB->isChecked()); mSettings.setValue("showGroupOnHover",ui->showGroupOnHoverCB->isChecked()); } void LXQtTaskbarConfiguration::dialogButtonsAction(QAbstractButton *btn) { if (ui->buttons->buttonRole(btn) == QDialogButtonBox::ResetRole) { /* We have to disable signals for buttonWidthSB to prevent errors. Otherwise not all data could be restored */ ui->buttonWidthSB->blockSignals(true); ui->buttonHeightSB->blockSignals(true); oldSettings.loadToSettings(); loadSettings(); ui->buttonWidthSB->blockSignals(false); ui->buttonHeightSB->blockSignals(false); } else close(); } lxqt-panel-0.10.0/plugin-taskbar/lxqttaskbarconfiguration.h000066400000000000000000000033131261500472700241050ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Maciej Płaza * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTTASKBARCONFIGURATION_H #define LXQTTASKBARCONFIGURATION_H #include #include #include namespace Ui { class LXQtTaskbarConfiguration; } class LXQtTaskbarConfiguration : public QDialog { Q_OBJECT public: explicit LXQtTaskbarConfiguration(QSettings &settings, QWidget *parent = 0); ~LXQtTaskbarConfiguration(); private: Ui::LXQtTaskbarConfiguration *ui; QSettings &mSettings; LXQt::SettingsCache oldSettings; /* Read settings from conf file and put data into controls. */ void loadSettings(); private slots: void saveSettings(); void dialogButtonsAction(QAbstractButton *btn); }; #endif // LXQTTASKBARCONFIGURATION_H lxqt-panel-0.10.0/plugin-taskbar/lxqttaskbarconfiguration.ui000066400000000000000000000145251261500472700243020ustar00rootroot00000000000000 LXQtTaskbarConfiguration 0 0 401 484 Task Manager Settings General 0 0 Show only windows from desktop Show only windows from &panel's screen Show only minimized windows Raise minimized windows on current desktop Close on middle-click Window &grouping true Show popup on mouse hover Appearance QFormLayout::AllNonFixedFieldsGrow Button style Maximum button width 0 0 px 1 500 Maximum button height 0 0 px 1 500 Auto&rotate buttons when the panel is vertical Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Reset buttons accepted() LXQtTaskbarConfiguration accept() 262 496 157 274 buttons rejected() LXQtTaskbarConfiguration reject() 330 496 286 274 lxqt-panel-0.10.0/plugin-taskbar/lxqttaskbarplugin.cpp000066400000000000000000000026641261500472700230770ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqttaskbarplugin.h" LXQtTaskBarPlugin::LXQtTaskBarPlugin(const ILXQtPanelPluginStartupInfo &startupInfo): QObject(), ILXQtPanelPlugin(startupInfo) { mTaskBar = new LXQtTaskBar(this); } LXQtTaskBarPlugin::~LXQtTaskBarPlugin() { delete mTaskBar; } QDialog *LXQtTaskBarPlugin::configureDialog() { return new LXQtTaskbarConfiguration(*(settings())); } void LXQtTaskBarPlugin::realign() { mTaskBar->realign(); } lxqt-panel-0.10.0/plugin-taskbar/lxqttaskbarplugin.h000066400000000000000000000042101261500472700225310ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTTASKBARPLUGIN_H #define LXQTTASKBARPLUGIN_H #include "../panel/ilxqtpanel.h" #include "../panel/ilxqtpanelplugin.h" #include "lxqttaskbar.h" #include class LXQtTaskBar; class LXQtTaskBarPlugin : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: LXQtTaskBarPlugin(const ILXQtPanelPluginStartupInfo &startupInfo); ~LXQtTaskBarPlugin(); QString themeId() const { return "TaskBar"; } virtual Flags flags() const { return HaveConfigDialog | NeedsHandle; } QWidget *widget() { return mTaskBar; } QDialog *configureDialog(); void settingsChanged() { mTaskBar->settingsChanged(); } void realign(); bool isSeparate() const { return true; } bool isExpandable() const { return true; } private: LXQtTaskBar *mTaskBar; }; class LXQtTaskBarPluginLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT // Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new LXQtTaskBarPlugin(startupInfo);} }; #endif // LXQTTASKBARPLUGIN_H lxqt-panel-0.10.0/plugin-taskbar/lxqttaskbutton.cpp000066400000000000000000000517071261500472700224310ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * http://lxqt.org * * Copyright: 2011 Razor team * 2014 LXQt team * Authors: * Alexander Sokoloff * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqttaskbutton.h" #include "lxqttaskgroup.h" #include "lxqttaskbar.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "lxqttaskbutton.h" #include "lxqttaskgroup.h" #include "lxqttaskbar.h" #include // Necessary for closeApplication() #include #include bool LXQtTaskButton::sDraggging = false; /************************************************ ************************************************/ void LeftAlignedTextStyle::drawItemText(QPainter * painter, const QRect & rect, int flags , const QPalette & pal, bool enabled, const QString & text , QPalette::ColorRole textRole) const { return QProxyStyle::drawItemText(painter, rect, (flags & ~Qt::AlignHCenter) | Qt::AlignLeft, pal, enabled, text, textRole); } /************************************************ ************************************************/ LXQtTaskButton::LXQtTaskButton(const WId window, LXQtTaskBar * taskbar, QWidget *parent) : QToolButton(parent), mWindow(window), mUrgencyHint(false), mOrigin(Qt::TopLeftCorner), mDrawPixmap(false), mParentTaskBar(taskbar), mDNDTimer(new QTimer(this)) { Q_ASSERT(taskbar); setCheckable(true); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setMinimumWidth(1); setMinimumHeight(1); setToolButtonStyle(Qt::ToolButtonTextBesideIcon); setAcceptDrops(true); updateText(); updateIcon(); mDNDTimer->setSingleShot(true); mDNDTimer->setInterval(700); connect(mDNDTimer, SIGNAL(timeout()), this, SLOT(activateWithDraggable())); } /************************************************ ************************************************/ LXQtTaskButton::~LXQtTaskButton() { } /************************************************ ************************************************/ void LXQtTaskButton::updateText() { KWindowInfo info(mWindow, NET::WMVisibleName | NET::WMName); QString title = info.visibleName().isEmpty() ? info.name() : info.visibleName(); setText(title.replace("&", "&&")); setToolTip(title); } /************************************************ ************************************************/ void LXQtTaskButton::updateIcon() { QIcon ico; QPixmap pix = KWindowSystem::icon(mWindow); ico.addPixmap(pix); setIcon(!pix.isNull() ? ico : XdgIcon::defaultApplicationIcon()); } /************************************************ ************************************************/ void LXQtTaskButton::refreshIconGeometry(QRect const & geom) { NETWinInfo info(QX11Info::connection(), windowId(), (WId) QX11Info::appRootWindow(), NET::WMIconGeometry, 0); NETRect const curr = info.iconGeometry(); if (curr.pos.x != geom.x() || curr.pos.y != geom.y() || curr.size.width != geom.width() || curr.size.height != geom.height()) { NETRect nrect; nrect.pos.x = geom.x(); nrect.pos.y = geom.y(); nrect.size.height = geom.height(); nrect.size.width = geom.width(); info.setIconGeometry(nrect); } } /************************************************ ************************************************/ void LXQtTaskButton::dragEnterEvent(QDragEnterEvent *event) { // It must be here otherwise dragLeaveEvent and dragMoveEvent won't be called // on the other hand drop and dragmove events of parent widget won't be called event->acceptProposedAction(); if (event->mimeData()->hasFormat(mimeDataFormat())) { emit dragging(event->source(), event->pos()); setAttribute(Qt::WA_UnderMouse, false); } else { mDNDTimer->start(); } QToolButton::dragEnterEvent(event); } void LXQtTaskButton::dragMoveEvent(QDragMoveEvent * event) { if (event->mimeData()->hasFormat(mimeDataFormat())) { emit dragging(event->source(), event->pos()); setAttribute(Qt::WA_UnderMouse, false); } } void LXQtTaskButton::dragLeaveEvent(QDragLeaveEvent *event) { mDNDTimer->stop(); QToolButton::dragLeaveEvent(event); } void LXQtTaskButton::dropEvent(QDropEvent *event) { mDNDTimer->stop(); if (event->mimeData()->hasFormat(mimeDataFormat())) { emit dropped(event->source(), event->pos()); setAttribute(Qt::WA_UnderMouse, false); } QToolButton::dropEvent(event); } /************************************************ ************************************************/ void LXQtTaskButton::mousePressEvent(QMouseEvent* event) { const Qt::MouseButton b = event->button(); if (Qt::LeftButton == b) mDragStartPosition = event->pos(); else if (Qt::MidButton == b && parentTaskBar()->closeOnMiddleClick()) closeApplication(); QToolButton::mousePressEvent(event); } /************************************************ ************************************************/ void LXQtTaskButton::mouseReleaseEvent(QMouseEvent* event) { if (event->button() == Qt::LeftButton) { if (isChecked()) minimizeApplication(); else raiseApplication(); } QToolButton::mouseReleaseEvent(event); } /************************************************ ************************************************/ QMimeData * LXQtTaskButton::mimeData() { QMimeData *mimedata = new QMimeData; QByteArray ba; QDataStream stream(&ba,QIODevice::WriteOnly); stream << (qlonglong)(mWindow); mimedata->setData(mimeDataFormat(), ba); return mimedata; } /************************************************ ************************************************/ void LXQtTaskButton::mouseMoveEvent(QMouseEvent* event) { if (!(event->buttons() & Qt::LeftButton)) return; if ((event->pos() - mDragStartPosition).manhattanLength() < QApplication::startDragDistance()) return; QDrag *drag = new QDrag(this); drag->setMimeData(mimeData()); QIcon ico = icon(); QPixmap img = ico.pixmap(ico.actualSize({32, 32})); drag->setPixmap(img); switch (parentTaskBar()->panel()->position()) { case ILXQtPanel::PositionLeft: case ILXQtPanel::PositionTop: drag->setHotSpot({0, 0}); break; case ILXQtPanel::PositionRight: case ILXQtPanel::PositionBottom: drag->setHotSpot(img.rect().bottomRight()); break; } sDraggging = true; drag->exec(); // if button is dropped out of panel (e.g. on desktop) // it is not deleted automatically by Qt drag->deleteLater(); sDraggging = false; QAbstractButton::mouseMoveEvent(event); } /************************************************ ************************************************/ bool LXQtTaskButton::isApplicationHidden() const { KWindowInfo info(mWindow, NET::WMState); return (info.state() & NET::Hidden); } /************************************************ ************************************************/ bool LXQtTaskButton::isApplicationActive() const { return KWindowSystem::activeWindow() == mWindow; } /************************************************ ************************************************/ void LXQtTaskButton::activateWithDraggable() { // raise app in any time when there is a drag // in progress to allow drop it into an app raiseApplication(); KWindowSystem::forceActiveWindow(mWindow); } /************************************************ ************************************************/ void LXQtTaskButton::raiseApplication() { KWindowInfo info(mWindow, NET::WMDesktop | NET::WMState | NET::XAWMState); if (parentTaskBar()->raiseOnCurrentDesktop() && info.isMinimized()) { KWindowSystem::setOnDesktop(mWindow, KWindowSystem::currentDesktop()); } else { int winDesktop = info.desktop(); if (KWindowSystem::currentDesktop() != winDesktop) KWindowSystem::setCurrentDesktop(winDesktop); } KWindowSystem::activateWindow(mWindow); setUrgencyHint(false); } /************************************************ ************************************************/ void LXQtTaskButton::minimizeApplication() { KWindowSystem::minimizeWindow(mWindow); } /************************************************ ************************************************/ void LXQtTaskButton::maximizeApplication() { QAction* act = qobject_cast(sender()); if (!act) return; int state = act->data().toInt(); switch (state) { case NET::MaxHoriz: KWindowSystem::setState(mWindow, NET::MaxHoriz); break; case NET::MaxVert: KWindowSystem::setState(mWindow, NET::MaxVert); break; default: KWindowSystem::setState(mWindow, NET::Max); break; } if (!isApplicationActive()) raiseApplication(); } /************************************************ ************************************************/ void LXQtTaskButton::deMaximizeApplication() { KWindowSystem::clearState(mWindow, NET::Max); if (!isApplicationActive()) raiseApplication(); } /************************************************ ************************************************/ void LXQtTaskButton::shadeApplication() { KWindowSystem::setState(mWindow, NET::Shaded); } /************************************************ ************************************************/ void LXQtTaskButton::unShadeApplication() { KWindowSystem::clearState(mWindow, NET::Shaded); } /************************************************ ************************************************/ void LXQtTaskButton::closeApplication() { // FIXME: Why there is no such thing in KWindowSystem?? NETRootInfo(QX11Info::connection(), NET::CloseWindow).closeWindowRequest(mWindow); } /************************************************ ************************************************/ void LXQtTaskButton::setApplicationLayer() { QAction* act = qobject_cast(sender()); if (!act) return; int layer = act->data().toInt(); switch(layer) { case NET::KeepAbove: KWindowSystem::clearState(mWindow, NET::KeepBelow); KWindowSystem::setState(mWindow, NET::KeepAbove); break; case NET::KeepBelow: KWindowSystem::clearState(mWindow, NET::KeepAbove); KWindowSystem::setState(mWindow, NET::KeepBelow); break; default: KWindowSystem::clearState(mWindow, NET::KeepBelow); KWindowSystem::clearState(mWindow, NET::KeepAbove); break; } } /************************************************ ************************************************/ void LXQtTaskButton::moveApplicationToDesktop() { QAction* act = qobject_cast(sender()); if (!act) return; bool ok; int desk = act->data().toInt(&ok); if (!ok) return; KWindowSystem::setOnDesktop(mWindow, desk); } /************************************************ ************************************************/ void LXQtTaskButton::contextMenuEvent(QContextMenuEvent* event) { if (event->modifiers().testFlag(Qt::ControlModifier)) { event->ignore(); return; } KWindowInfo info(mWindow, 0, NET::WM2AllowedActions); unsigned long state = KWindowInfo(mWindow, NET::WMState).state(); QMenu * menu = new QMenu(tr("Application")); menu->setAttribute(Qt::WA_DeleteOnClose); QAction* a; /* KDE menu ******* + To &Desktop > + &All Desktops + --- + &1 Desktop 1 + &2 Desktop 2 + &To Current Desktop &Move Re&size + Mi&nimize + Ma&ximize + &Shade Ad&vanced > Keep &Above Others Keep &Below Others Fill screen &Layer > Always on &top &Normal Always on &bottom --- + &Close */ /********** Desktop menu **********/ int deskNum = KWindowSystem::numberOfDesktops(); if (deskNum > 1) { int winDesk = KWindowInfo(mWindow, NET::WMDesktop).desktop(); QMenu* deskMenu = menu->addMenu(tr("To &Desktop")); a = deskMenu->addAction(tr("&All Desktops")); a->setData(NET::OnAllDesktops); a->setEnabled(winDesk != NET::OnAllDesktops); connect(a, SIGNAL(triggered(bool)), this, SLOT(moveApplicationToDesktop())); deskMenu->addSeparator(); for (int i = 0; i < deskNum; ++i) { a = deskMenu->addAction(tr("Desktop &%1").arg(i + 1)); a->setData(i + 1); a->setEnabled(i + 1 != winDesk); connect(a, SIGNAL(triggered(bool)), this, SLOT(moveApplicationToDesktop())); } int curDesk = KWindowSystem::currentDesktop(); a = menu->addAction(tr("&To Current Desktop")); a->setData(curDesk); a->setEnabled(curDesk != winDesk); connect(a, SIGNAL(triggered(bool)), this, SLOT(moveApplicationToDesktop())); } /********** State menu **********/ menu->addSeparator(); a = menu->addAction(tr("Ma&ximize")); a->setEnabled(info.actionSupported(NET::ActionMax) && (!(state & NET::Max) || (state & NET::Hidden))); a->setData(NET::Max); connect(a, SIGNAL(triggered(bool)), this, SLOT(maximizeApplication())); if (event->modifiers() & Qt::ShiftModifier) { a = menu->addAction(tr("Maximize vertically")); a->setEnabled(info.actionSupported(NET::ActionMaxVert) && !((state & NET::MaxVert) || (state & NET::Hidden))); a->setData(NET::MaxVert); connect(a, SIGNAL(triggered(bool)), this, SLOT(maximizeApplication())); a = menu->addAction(tr("Maximize horizontally")); a->setEnabled(info.actionSupported(NET::ActionMaxHoriz) && !((state & NET::MaxHoriz) || (state & NET::Hidden))); a->setData(NET::MaxHoriz); connect(a, SIGNAL(triggered(bool)), this, SLOT(maximizeApplication())); } a = menu->addAction(tr("&Restore")); a->setEnabled((state & NET::Hidden) || (state & NET::Max) || (state & NET::MaxHoriz) || (state & NET::MaxVert)); connect(a, SIGNAL(triggered(bool)), this, SLOT(deMaximizeApplication())); a = menu->addAction(tr("Mi&nimize")); a->setEnabled(info.actionSupported(NET::ActionMinimize) && !(state & NET::Hidden)); connect(a, SIGNAL(triggered(bool)), this, SLOT(minimizeApplication())); if (state & NET::Shaded) { a = menu->addAction(tr("Roll down")); a->setEnabled(info.actionSupported(NET::ActionShade) && !(state & NET::Hidden)); connect(a, SIGNAL(triggered(bool)), this, SLOT(unShadeApplication())); } else { a = menu->addAction(tr("Roll up")); a->setEnabled(info.actionSupported(NET::ActionShade) && !(state & NET::Hidden)); connect(a, SIGNAL(triggered(bool)), this, SLOT(shadeApplication())); } /********** Layer menu **********/ menu->addSeparator(); QMenu* layerMenu = menu->addMenu(tr("&Layer")); a = layerMenu->addAction(tr("Always on &top")); // FIXME: There is no info.actionSupported(NET::ActionKeepAbove) a->setEnabled(!(state & NET::KeepAbove)); a->setData(NET::KeepAbove); connect(a, SIGNAL(triggered(bool)), this, SLOT(setApplicationLayer())); a = layerMenu->addAction(tr("&Normal")); a->setEnabled((state & NET::KeepAbove) || (state & NET::KeepBelow)); // FIXME: There is no NET::KeepNormal, so passing 0 a->setData(0); connect(a, SIGNAL(triggered(bool)), this, SLOT(setApplicationLayer())); a = layerMenu->addAction(tr("Always on &bottom")); // FIXME: There is no info.actionSupported(NET::ActionKeepBelow) a->setEnabled(!(state & NET::KeepBelow)); a->setData(NET::KeepBelow); connect(a, SIGNAL(triggered(bool)), this, SLOT(setApplicationLayer())); /********** Kill menu **********/ menu->addSeparator(); a = menu->addAction(XdgIcon::fromTheme("process-stop"), tr("&Close")); connect(a, SIGNAL(triggered(bool)), this, SLOT(closeApplication())); menu->setGeometry(mParentTaskBar->panel()->calculatePopupWindowPos(mapToGlobal(event->pos()), menu->sizeHint())); menu->show(); } /************************************************ ************************************************/ void LXQtTaskButton::setUrgencyHint(bool set) { if (mUrgencyHint == set) return; if (!set) KWindowSystem::demandAttention(mWindow, false); mUrgencyHint = set; setProperty("urgent", set); style()->unpolish(this); style()->polish(this); update(); } /************************************************ ************************************************/ bool LXQtTaskButton::isOnDesktop(int desktop) const { return KWindowInfo(mWindow, NET::WMDesktop).isOnDesktop(desktop); } bool LXQtTaskButton::isOnCurrentScreen() const { return QApplication::desktop()->screenGeometry(parentTaskBar()).intersects(KWindowInfo(mWindow, NET::WMFrameExtents).frameGeometry()); } bool LXQtTaskButton::isMinimized() const { return KWindowInfo(mWindow,NET::WMState | NET::XAWMState).isMinimized(); } Qt::Corner LXQtTaskButton::origin() const { return mOrigin; } void LXQtTaskButton::setOrigin(Qt::Corner newOrigin) { if (mOrigin != newOrigin) { mOrigin = newOrigin; update(); } } void LXQtTaskButton::setAutoRotation(bool value, ILXQtPanel::Position position) { if (value) { switch (position) { case ILXQtPanel::PositionTop: case ILXQtPanel::PositionBottom: setOrigin(Qt::TopLeftCorner); break; case ILXQtPanel::PositionLeft: setOrigin(Qt::BottomLeftCorner); break; case ILXQtPanel::PositionRight: setOrigin(Qt::TopRightCorner); break; } } else setOrigin(Qt::TopLeftCorner); } void LXQtTaskButton::paintEvent(QPaintEvent *event) { if (mOrigin == Qt::TopLeftCorner) { QToolButton::paintEvent(event); return; } QSize sz = size(); QSize adjSz = sz; QTransform transform; QPoint originPoint; switch (mOrigin) { case Qt::TopLeftCorner: transform.rotate(0.0); originPoint = QPoint(0.0, 0.0); break; case Qt::TopRightCorner: transform.rotate(90.0); originPoint = QPoint(0.0, -sz.width()); adjSz.transpose(); break; case Qt::BottomRightCorner: transform.rotate(180.0); originPoint = QPoint(-sz.width(), -sz.height()); break; case Qt::BottomLeftCorner: transform.rotate(270.0); originPoint = QPoint(-sz.height(), 0.0); adjSz.transpose(); break; } bool drawPixmapNextTime = false; if (!mDrawPixmap) { mPixmap = QPixmap(adjSz); mPixmap.fill(QColor(0, 0, 0, 0)); if (adjSz != sz) resize(adjSz); // this causes paint event to be repeated - next time we'll paint the pixmap to the widget surface. // copied from QToolButton::paintEvent { QStylePainter painter(&mPixmap, this); QStyleOptionToolButton opt; initStyleOption(&opt); painter.drawComplexControl(QStyle::CC_ToolButton, opt); // } if (adjSz != sz) { resize(sz); drawPixmapNextTime = true; } else mDrawPixmap = true; // transfer the pixmap to the widget now! } if (mDrawPixmap) { QPainter painter(this); painter.setTransform(transform); painter.drawPixmap(originPoint, mPixmap); drawPixmapNextTime = false; } mDrawPixmap = drawPixmapNextTime; } bool LXQtTaskButton::hasDragAndDropHover() const { return mDNDTimer->isActive(); } lxqt-panel-0.10.0/plugin-taskbar/lxqttaskbutton.h000066400000000000000000000105221261500472700220640ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * http://lxqt.org * * Copyright: 2011 Razor team * 2014 LXQt team * Authors: * Alexander Sokoloff * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTTASKBUTTON_H #define LXQTTASKBUTTON_H #include #include #include "../panel/ilxqtpanel.h" class QPainter; class QPalette; class QMimeData; class LXQtTaskGroup; class LXQtTaskBar; class LeftAlignedTextStyle : public QProxyStyle { using QProxyStyle::QProxyStyle; public: virtual void drawItemText(QPainter * painter, const QRect & rect, int flags , const QPalette & pal, bool enabled, const QString & text , QPalette::ColorRole textRole = QPalette::NoRole) const override; }; class LXQtTaskButton : public QToolButton { Q_OBJECT Q_PROPERTY(Qt::Corner origin READ origin WRITE setOrigin) public: explicit LXQtTaskButton(const WId window, LXQtTaskBar * taskBar, QWidget *parent = 0); virtual ~LXQtTaskButton(); bool isApplicationHidden() const; bool isApplicationActive() const; WId windowId() const { return mWindow; } bool hasUrgencyHint() const { return mUrgencyHint; } void setUrgencyHint(bool set); bool isOnDesktop(int desktop) const; bool isOnCurrentScreen() const; bool isMinimized() const; void updateText(); void updateIcon(); Qt::Corner origin() const; virtual void setAutoRotation(bool value, ILXQtPanel::Position position); LXQtTaskGroup * parentGroup(void) const {return mParentGroup;} void setParentGroup(LXQtTaskGroup * group) {mParentGroup = group;} LXQtTaskBar * parentTaskBar() const {return mParentTaskBar;} void refreshIconGeometry(QRect const & geom); static QString mimeDataFormat() { return QLatin1String("lxqt/lxqttaskbutton"); } /*! \return true if this buttom received DragEnter event (and no DragLeave event yet) * */ bool hasDragAndDropHover() const; public slots: void raiseApplication(); void minimizeApplication(); void maximizeApplication(); void deMaximizeApplication(); void shadeApplication(); void unShadeApplication(); void closeApplication(); void moveApplicationToDesktop(); void setApplicationLayer(); void setOrigin(Qt::Corner); protected: virtual void dragEnterEvent(QDragEnterEvent *event); virtual void dragMoveEvent(QDragMoveEvent * event); virtual void dragLeaveEvent(QDragLeaveEvent *event); virtual void dropEvent(QDropEvent *event); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); virtual void contextMenuEvent(QContextMenuEvent *event); void paintEvent(QPaintEvent *); void setWindowId(WId wid) {mWindow = wid;} virtual QMimeData * mimeData(); static bool sDraggging; private: WId mWindow; bool mUrgencyHint; QPoint mDragStartPosition; Qt::Corner mOrigin; QPixmap mPixmap; bool mDrawPixmap; LXQtTaskGroup * mParentGroup; LXQtTaskBar * mParentTaskBar; // Timer for when draggind something into a button (the button's window // must be activated so that the use can continue dragging to the window QTimer * mDNDTimer; private slots: void activateWithDraggable(); signals: void dropped(QObject * dragSource, QPoint const & pos); void dragging(QObject * dragSource, QPoint const & pos); }; typedef QHash LXQtTaskButtonHash; #endif // LXQTTASKBUTTON_H lxqt-panel-0.10.0/plugin-taskbar/lxqttaskgroup.cpp000066400000000000000000000440531261500472700222460ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * http://lxqt.org * * Copyright: 2011 Razor team * 2014 LXQt team * Authors: * Alexander Sokoloff * Maciej Płaza * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqttaskgroup.h" #include "lxqttaskbar.h" #include #include #include #include #include #include #include #include /************************************************ ************************************************/ LXQtTaskGroup::LXQtTaskGroup(const QString &groupName, QIcon icon, ILXQtPanelPlugin * plugin, LXQtTaskBar *parent) : LXQtTaskButton(0, parent, parent), mGroupName(groupName), mPopup(new LXQtGroupPopup(this)), mPlugin(plugin), mPreventPopup(false) { Q_ASSERT(parent); setObjectName(groupName); setText(groupName); setIcon(icon); connect(this, SIGNAL(clicked(bool)), this, SLOT(onClicked(bool))); connect(KWindowSystem::self(), SIGNAL(currentDesktopChanged(int)), this, SLOT(onDesktopChanged(int))); connect(KWindowSystem::self(), SIGNAL(windowRemoved(WId)), this, SLOT(onWindowRemoved(WId))); connect(KWindowSystem::self(), SIGNAL(activeWindowChanged(WId)), this, SLOT(onActiveWindowChanged(WId))); } /************************************************ ************************************************/ void LXQtTaskGroup::contextMenuEvent(QContextMenuEvent *event) { setPopupVisible(false, true); mPreventPopup = true; if (windowId()) { LXQtTaskButton::contextMenuEvent(event); return; } QMenu * menu = new QMenu(tr("Group")); menu->setAttribute(Qt::WA_DeleteOnClose); QAction *a = menu->addAction(XdgIcon::fromTheme("process-stop"), tr("Close group")); connect(a, SIGNAL(triggered()), this, SLOT(closeGroup())); connect(menu, &QMenu::aboutToHide, [this] { mPreventPopup = false; }); menu->setGeometry(mPlugin->panel()->calculatePopupWindowPos(mapToGlobal(event->pos()), menu->sizeHint())); menu->show(); } /************************************************ ************************************************/ void LXQtTaskGroup::closeGroup() { foreach (LXQtTaskButton * button, mButtonHash.values()) if (button->isOnDesktop(KWindowSystem::currentDesktop())) button->closeApplication(); } /************************************************ ************************************************/ LXQtTaskButton * LXQtTaskGroup::addWindow(WId id) { if (mButtonHash.contains(id)) return mButtonHash.value(id); LXQtTaskButton *btn = new LXQtTaskButton(id, parentTaskBar(), mPopup); btn->setToolButtonStyle(toolButtonStyle()); if (btn->isApplicationActive()) { btn->setChecked(true); setChecked(true); } btn->setParentGroup(this); mButtonHash.insert(id, btn); mPopup->addButton(btn); connect(btn, SIGNAL(clicked()), this, SLOT(onChildButtonClicked())); refreshVisibility(); return btn; } /************************************************ ************************************************/ LXQtTaskButton * LXQtTaskGroup::checkedButton() const { foreach (LXQtTaskButton* button, mButtonHash.values()) if (button->isChecked()) return button; return NULL; } /************************************************ ************************************************/ LXQtTaskButton * LXQtTaskGroup::getNextPrevChildButton(bool next, bool circular) { LXQtTaskButton *button = checkedButton(); int idx = mPopup->indexOf(button); int inc = next ? 1 : -1; idx += inc; // if there is no cheked button, get the first one if next equals true // or the last one if not if (!button) { idx = -1; if (next) { for (int i = 0; i < mPopup->count() && idx == -1; i++) if (mPopup->itemAt(i)->widget()->isVisibleTo(mPopup)) idx = i; } else { for (int i = mPopup->count() - 1; i >= 0 && idx == -1; i--) if (mPopup->itemAt(i)->widget()->isVisibleTo(mPopup)) idx = i; } } if (circular) idx = (idx + mButtonHash.count()) % mButtonHash.count(); else if (mPopup->count() <= idx || idx < 0) return NULL; // return the next or the previous child QLayoutItem *item = mPopup->itemAt(idx); if (item) { button = qobject_cast(item->widget()); if (button->isVisibleTo(mPopup)) return button; } return NULL; } /************************************************ ************************************************/ void LXQtTaskGroup::onActiveWindowChanged(WId window) { LXQtTaskButton *button = mButtonHash.value(window, nullptr); foreach (LXQtTaskButton *btn, mButtonHash.values()) btn->setChecked(false); if (button) { button->setChecked(true); if (button->hasUrgencyHint()) button->setUrgencyHint(false); } setChecked(nullptr != button); } /************************************************ ************************************************/ void LXQtTaskGroup::onDesktopChanged(int number) { refreshVisibility(); } /************************************************ ************************************************/ void LXQtTaskGroup::onWindowRemoved(WId window) { if (mButtonHash.contains(window)) { LXQtTaskButton *button = mButtonHash.value(window); mButtonHash.remove(window); mPopup->removeWidget(button); button->deleteLater(); if (mButtonHash.count()) regroup(); else { if (isVisible()) emit visibilityChanged(false); hide(); emit groupBecomeEmpty(groupName()); } } } /************************************************ ************************************************/ void LXQtTaskGroup::onChildButtonClicked() { setPopupVisible(false, true); } /************************************************ ************************************************/ void LXQtTaskGroup::setToolButtonsStyle(Qt::ToolButtonStyle style) { setToolButtonStyle(style); for (auto & button : mButtonHash) { button->setToolButtonStyle(style); } } /************************************************ ************************************************/ int LXQtTaskGroup::buttonsCount() const { return mButtonHash.count(); } /************************************************ ************************************************/ int LXQtTaskGroup::visibleButtonsCount() const { int i = 0; foreach (LXQtTaskButton *btn, mButtonHash.values()) if (btn->isVisibleTo(mPopup)) i++; return i; } /************************************************ ************************************************/ void LXQtTaskGroup::draggingTimerTimeout() { if (windowId()) setPopupVisible(false); } /************************************************ ************************************************/ void LXQtTaskGroup::onClicked(bool) { if (visibleButtonsCount() > 1) { setChecked(mButtonHash.contains(KWindowSystem::activeWindow())); setPopupVisible(true); } } /************************************************ ************************************************/ void LXQtTaskGroup::regroup() { int cont = visibleButtonsCount(); recalculateFrameIfVisible(); if (cont == 1) { // Get first visible button LXQtTaskButton * button = NULL; foreach (LXQtTaskButton *btn, mButtonHash.values()) { if (btn->isVisibleTo(mPopup)) { button = btn; break; } } if (button) { setText(button->text()); setToolTip(button->toolTip()); setWindowId(button->windowId()); } } else if (cont == 0) hide(); else { QString t = QString("%1 - %2 windows").arg(mGroupName).arg(cont); setText(t); setToolTip(parentTaskBar()->isShowGroupOnHover() ? QString() : t); setWindowId(0); } } /************************************************ ************************************************/ void LXQtTaskGroup::showOnlySettingChanged() { refreshVisibility(); } /************************************************ ************************************************/ void LXQtTaskGroup::recalculateFrameIfVisible() { if (mPopup->isVisible()) { recalculateFrameSize(); if (mPlugin->panel()->position() == ILXQtPanel::PositionBottom) recalculateFramePosition(); } } /************************************************ ************************************************/ void LXQtTaskGroup::setAutoRotation(bool value, ILXQtPanel::Position position) { foreach (LXQtTaskButton *button, mButtonHash.values()) button->setAutoRotation(false, position); LXQtTaskButton::setAutoRotation(value, position); } /************************************************ ************************************************/ void LXQtTaskGroup::refreshVisibility() { bool will = false; LXQtTaskBar const * taskbar = parentTaskBar(); const int showDesktop = taskbar->showDesktopNum(); foreach(LXQtTaskButton * btn, mButtonHash.values()) { bool visible = taskbar->isShowOnlyOneDesktopTasks() ? btn->isOnDesktop(0 == showDesktop ? KWindowSystem::currentDesktop() : showDesktop) : true; visible &= taskbar->isShowOnlyCurrentScreenTasks() ? btn->isOnCurrentScreen() : true; visible &= taskbar->isShowOnlyMinimizedTasks() ? btn->isMinimized() : true; btn->setVisible(visible); will |= visible; } bool is = isVisible(); setVisible(will); regroup(); if (is != will) emit visibilityChanged(will); } /************************************************ ************************************************/ QMimeData * LXQtTaskGroup::mimeData() { QMimeData *mimedata = new QMimeData; QByteArray byteArray; QDataStream stream(&byteArray, QIODevice::WriteOnly); stream << groupName(); mimedata->setData(mimeDataFormat(), byteArray); return mimedata; } /************************************************ ************************************************/ void LXQtTaskGroup::setPopupVisible(bool visible, bool fast) { if (visible && !mPreventPopup && 0 == windowId()) { if (!mPopup->isVisible()) { // setup geometry recalculateFrameSize(); recalculateFramePosition(); } mPopup->show(); emit popupShown(this); } else mPopup->hide(fast); } /************************************************ ************************************************/ void LXQtTaskGroup::refreshIconsGeometry() { QRect rect = geometry(); rect.moveTo(mapToGlobal(QPoint(0, 0))); if (windowId()) { refreshIconGeometry(rect); return; } foreach(LXQtTaskButton *but, mButtonHash.values()) { but->refreshIconGeometry(rect); but->setIconSize(QSize(mPlugin->panel()->iconSize(), mPlugin->panel()->iconSize())); } } /************************************************ ************************************************/ QSize LXQtTaskGroup::recalculateFrameSize() { int height = recalculateFrameHeight(); mPopup->setMaximumHeight(1000); mPopup->setMinimumHeight(0); int hh = recalculateFrameWidth(); mPopup->setMaximumWidth(hh); mPopup->setMinimumWidth(0); QSize newSize(hh, height); mPopup->resize(newSize); return newSize; } /************************************************ ************************************************/ int LXQtTaskGroup::recalculateFrameHeight() const { int cont = visibleButtonsCount(); int h = !mPlugin->panel()->isHorizontal() && parentTaskBar()->isAutoRotate() ? width() : height(); return cont * h + (cont + 1) * mPopup->spacing(); } /************************************************ ************************************************/ int LXQtTaskGroup::recalculateFrameWidth() const { // FIXME: 300? int minimum = 300; int hh = width(); if (!mPlugin->panel()->isHorizontal() && !parentTaskBar()->isAutoRotate()) hh = height(); if (hh < minimum) hh = minimum; return hh; } /************************************************ ************************************************/ QPoint LXQtTaskGroup::recalculateFramePosition() { // Set position int x_offset = 0, y_offset = 0; switch (mPlugin->panel()->position()) { case ILXQtPanel::PositionTop: y_offset += height(); break; case ILXQtPanel::PositionBottom: y_offset = -recalculateFrameHeight(); break; case ILXQtPanel::PositionLeft: x_offset += width(); break; case ILXQtPanel::PositionRight: x_offset = -recalculateFrameWidth(); break; } QPoint pos = mapToGlobal(QPoint(x_offset, y_offset)); mPopup->move(pos); return pos; } /************************************************ ************************************************/ void LXQtTaskGroup::leaveEvent(QEvent *event) { setPopupVisible(false); QToolButton::leaveEvent(event); } /************************************************ ************************************************/ void LXQtTaskGroup::enterEvent(QEvent *event) { QToolButton::enterEvent(event); if (sDraggging) return; if (parentTaskBar()->isShowGroupOnHover()) setPopupVisible(true); } /************************************************ ************************************************/ void LXQtTaskGroup::dragEnterEvent(QDragEnterEvent *event) { // only show the popup if we aren't dragging a taskgroup if (!event->mimeData()->hasFormat(mimeDataFormat())) { setPopupVisible(true); } LXQtTaskButton::dragEnterEvent(event); } /************************************************ ************************************************/ void LXQtTaskGroup::dragLeaveEvent(QDragLeaveEvent *event) { // if draggind something into the taskgroup or the taskgroups' popup, // do not close the popup if (!sDraggging) setPopupVisible(false); LXQtTaskButton::dragLeaveEvent(event); } void LXQtTaskGroup::mouseMoveEvent(QMouseEvent* event) { // if dragging the taskgroup, do not show the popup setPopupVisible(false, true); LXQtTaskButton::mouseMoveEvent(event); } /************************************************ ************************************************/ bool LXQtTaskGroup::onWindowChanged(WId window, NET::Properties prop, NET::Properties2 prop2) { bool consumed{false}; bool needsRefreshVisibility{false}; QVector buttons; if (mButtonHash.contains(window)) buttons.append(mButtonHash.value(window)); // If group contains only one window properties must be changed also on button group if (window == windowId()) buttons.append(this); foreach (LXQtTaskButton * button, buttons) { consumed = true; // if class is changed the window won't belong to our group any more if (parentTaskBar()->isGroupingEnabled() && prop2.testFlag(NET::WM2WindowClass) && this != button) { KWindowInfo info(window, 0, NET::WM2WindowClass); if (info.windowClassClass() != mGroupName) { //remove this window from this group //Note: can't optimize case when there is only one window in this group // because mGroupName is a hash key in taskbar emit windowDisowned(window); onWindowRemoved(window); continue; } } // window changed virtual desktop if (prop.testFlag(NET::WMDesktop) || prop.testFlag(NET::WMGeometry)) { if (parentTaskBar()->isShowOnlyOneDesktopTasks() || parentTaskBar()->isShowOnlyCurrentScreenTasks()) { needsRefreshVisibility = true; } } if (prop.testFlag(NET::WMVisibleName) || prop.testFlag(NET::WMName)) button->updateText(); // XXX: we are setting window icon geometry -> don't need to handle NET::WMIconGeometry if (prop.testFlag(NET::WMIcon)) button->updateIcon(); if (prop.testFlag(NET::WMState)) { KWindowInfo info{window, NET::WMState}; if (info.hasState(NET::SkipTaskbar) && this != button) { //remove this window from this group //Note: can't optimize case when there is only one window in this group // because mGroupName is a hash key in taskbar emit windowDisowned(window); onWindowRemoved(window); continue; } button->setUrgencyHint(info.hasState(NET::DemandsAttention)); if (parentTaskBar()->isShowOnlyMinimizedTasks()) { needsRefreshVisibility = true; } } } if (needsRefreshVisibility) refreshVisibility(); return consumed; } lxqt-panel-0.10.0/plugin-taskbar/lxqttaskgroup.h000066400000000000000000000070531261500472700217120ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * http://lxqt.org * * Copyright: 2011 Razor team * 2014 LXQt team * Authors: * Alexander Sokoloff * Maciej Płaza * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTTASKGROUP_H #define LXQTTASKGROUP_H #include "../panel/ilxqtpanel.h" #include "../panel/ilxqtpanelplugin.h" #include "lxqttaskbar.h" #include "lxqtgrouppopup.h" #include "lxqttaskbutton.h" #include class QVBoxLayout; class ILXQtPanelPlugin; class LXQtGroupPopup; class LXQtMasterPopup; class LXQtTaskGroup: public LXQtTaskButton { Q_OBJECT public: LXQtTaskGroup(const QString & groupName, QIcon icon ,ILXQtPanelPlugin * plugin, LXQtTaskBar * parent); QString groupName() const { return mGroupName; } void removeButton(WId window); int buttonsCount() const; int visibleButtonsCount() const; LXQtTaskButton * addWindow(WId id); LXQtTaskButton * checkedButton() const; // Returns the next or the previous button in the popup // if circular is true, then it will go around the list of buttons LXQtTaskButton * getNextPrevChildButton(bool next, bool circular); bool onWindowChanged(WId window, NET::Properties prop, NET::Properties2 prop2); void refreshIconsGeometry(); void showOnlySettingChanged(); void setAutoRotation(bool value, ILXQtPanel::Position position); void setToolButtonsStyle(Qt::ToolButtonStyle style); void setPopupVisible(bool visible = true, bool fast = false); protected: QMimeData * mimeData(); void leaveEvent(QEvent * event); void enterEvent(QEvent * event); void dragEnterEvent(QDragEnterEvent * event); void dragLeaveEvent(QDragLeaveEvent * event); void contextMenuEvent(QContextMenuEvent * event); void mouseMoveEvent(QMouseEvent * event); int recalculateFrameHeight() const; int recalculateFrameWidth() const; void draggingTimerTimeout(); private slots: void onClicked(bool checked); void onChildButtonClicked(); void onActiveWindowChanged(WId window); void onWindowRemoved(WId window); void onDesktopChanged(int number); void closeGroup(); signals: void groupBecomeEmpty(QString name); void visibilityChanged(bool visible); void popupShown(LXQtTaskGroup* sender); void windowDisowned(WId window); private: QString mGroupName; LXQtGroupPopup * mPopup; LXQtTaskButtonHash mButtonHash; ILXQtPanelPlugin * mPlugin; bool mPreventPopup; QSize recalculateFrameSize(); QPoint recalculateFramePosition(); void recalculateFrameIfVisible(); void refreshVisibility(); void regroup(); }; #endif // LXQTTASKGROUP_H lxqt-panel-0.10.0/plugin-taskbar/resources/000077500000000000000000000000001261500472700206165ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-taskbar/resources/taskbar.desktop.in000066400000000000000000000002621261500472700242450ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications Icon=window-duplicate #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-taskbar/translations/000077500000000000000000000000001261500472700213255ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar.ts000066400000000000000000000165511261500472700233340ustar00rootroot00000000000000 LXQtTaskButton Application To &Desktop &All Desktops Desktop &%1 &To Current Desktop Ma&ximize Maximize vertically Maximize horizontally &Restore Mi&nimize Roll down Roll up &Layer Always on &top &Normal Always on &bottom &Close LXQtTaskGroup Group Close group LXQtTaskbarConfiguration Task Manager Settings General Show only windows from c&urrent desktop Show only windows from &panel's screen Show only minimized windows Raise minimized windows on current desktop Close on middle-click Window &grouping Show popup on mouse hover Appearance Button style Maximum button width px Maximum button height Auto&rotate buttons when the panel is vertical Icon and text Only icon Only text lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_ar.desktop000066400000000000000000000004221261500472700250270ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[ar]=التبديل بين التطبيقات الجارية Name[ar]=مدير المهامّ lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_ar.ts000066400000000000000000000175561261500472700240240ustar00rootroot00000000000000 LXQtTaskButton Application التطبيق To &Desktop إلى س&طح المكتب &All Desktops كا&فَّة أسطح المكتب Desktop &%1 سطح المكتب &%1 &To Current Desktop إلى سطح المكتب ال&حالي Ma&ximize ت&كبير Maximize vertically تكبيرٌ عموديٌّ Maximize horizontally تكبيرٌ أفقيٌّ &Restore استر&جاع Mi&nimize ت&صغير Roll down لفٌّ نحو اﻷسفل Roll up لفٌّ نحو اﻷعلى &Layer طب&قة Always on &top دوماً في اﻷ&على &Normal عا&دي Always on &bottom دوماً في اﻷس&فل &Close إ&غلاق LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings إعدادات مدير مهام ريزر Window List Content محتوى قائمة النَّوافذ Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop إظهار نوافذ سطح المكتب الحاليّ Show windows from all desktops إظهار نوافذ كافَّة اﻷسطح المكتبيَّة Auto&rotate buttons when the panel is vertical Window List Appearance مظهر قائمة النَّوافذ Button style شكل الزُّرّ Max button width عرض زرِّ التكبير Close on middle-click إغلاق عند الضغط على زرّ الفأرة اﻷوسط Icon and text أيقونةٌ ونصٌّ Only icon أيقونةٌ فقط Only text نصٌّ فقط lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_cs.desktop000066400000000000000000000003741261500472700250400ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[cs]=Přepínání mezi běžícími programy Name[cs]=Správce úkolů lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_cs.ts000066400000000000000000000170211261500472700240120ustar00rootroot00000000000000 LXQtTaskButton Application Program To &Desktop Na &plochu &All Desktops &Všechny plochy Desktop &%1 Plocha &%1 &To Current Desktop &Na nynější plochu Ma&ximize Zvě&tšit Maximize vertically Zvětšit svisle Maximize horizontally Zvětšit vodorovně &Restore &Obnovit Mi&nimize &Zmenšit Roll down Sbalit Roll up Rozbalit &Layer &Vrstva Always on &top Vždy &nahoře &Normal &Obvyklé Always on &bottom Vždy &dole &Close &Zavřít LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings Nastavení správce úkolů Window List Content Obsah seznamu oken Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Ukázat okna z nynější plochy Show windows from all desktops Ukázat okna ze všech ploch Auto&rotate buttons when the panel is vertical Window List Appearance Vzhled seznamu oken Button style Styl tlačítek Max button width Největší šířka tlačítka Close on middle-click Zavřít klepnutím prostředním tlačítkem Icon and text Ikona a text Only icon Pouze ikona Only text Pouze text lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_cs_CZ.desktop000066400000000000000000000003771261500472700254370ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[cs_CZ]=Přepínat mezi běžícími programy Name[cs_CZ]=Správce úkolů lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_cs_CZ.ts000066400000000000000000000170241261500472700244110ustar00rootroot00000000000000 LXQtTaskButton Application Program To &Desktop Na &plochu &All Desktops &Všechny plochy Desktop &%1 Plocha &%1 &To Current Desktop &Na nynější plochu Ma&ximize Zvě&tšit Maximize vertically Zvětšit svisle Maximize horizontally Zvětšit vodorovně &Restore &Obnovit Mi&nimize &Zmenšit Roll down Sbalit Roll up Rozbalit &Layer &Vrstva Always on &top Vždy &nahoře &Normal &Obvyklé Always on &bottom Vždy &dole &Close &Zavřít LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings Nastavení správce úkolů Window List Content Obsah seznamu oken Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Ukázat okna z nynější plochy Show windows from all desktops Ukázat okna ze všech ploch Auto&rotate buttons when the panel is vertical Window List Appearance Vzhled seznamu oken Button style Styl tlačítek Max button width Největší šířka tlačítka Close on middle-click Zavřít klepnutím prostředním tlačítkem Icon and text Ikona a text Only icon Pouze ikona Only text Pouze text lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_da.desktop000066400000000000000000000003731261500472700250160ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[da]=Skifter imellem kørende programmer Name[da]=Programadministrator lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_da.ts000066400000000000000000000171541261500472700240000ustar00rootroot00000000000000 LXQtTaskButton Application Program To &Desktop Til skrivebor&d &All Desktops &Alle skriveborde Desktop &%1 Skrivebord &%1 &To Current Desktop &Til aktuelt skrivebord Ma&ximize Ma&ksimer Maximize vertically Maksimer vertikalt Maximize horizontally Maksimer horisontalt &Restore &Gendan Mi&nimize Mi&nimer Roll down Rul ned Roll up Rul op &Layer &Lag Always on &top Al&tid øverst &Normal &Normal Always on &bottom Altid &nederst &Close &Luk LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings LXQt Opgavehåndtering Indstillinger Window List Content Indhold af vinduesliste Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Vis vinduer fra aktuelle skrivebord Auto&rotate buttons when the panel is vertical Close on middle-click wlcB wlcB Show windows from all desktops Vis vinduer fra alle skriveborde Window List Appearance Udseende af Vinduesliste Button style Knapstil Max button width Maks knapbredde Icon and text Ikon og tekst Only icon Kun ikon Only text Kun tekst lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_da_DK.desktop000066400000000000000000000003631261500472700253730ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[da_DK]=Skift imellem kørende programmer Name[da_DK]=Jobliste lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_da_DK.ts000066400000000000000000000167771261500472700243700ustar00rootroot00000000000000 LXQtTaskButton Application Program To &Desktop Til &Skrivebord &All Desktops A&lle Skriveborde Desktop &%1 Skrivebord &%1 &To Current Desktop Til Nuværende Skrivebor&d Ma&ximize Ma&ksimer Maximize vertically Maksimer vertikalt Maximize horizontally Maksimer horisontalt &Restore &Gendan Mi&nimize Mi&nimer Roll down Rul ned Roll up Rul op &Layer &Lag Always on &top Altid &Ovenpå &Normal &Normal Always on &bottom Altid Ned&erst &Close &Afslut LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings LXQt Jobliste Indstillinger Window List Content Indhold Af Vinduesliste Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Vis vinduer fra nuværende skrivebord Show windows from all desktops Vis vinduer fra alle skriveborde Auto&rotate buttons when the panel is vertical Window List Appearance Udseende af vinduesliste Button style Knap stil Max button width Maks. knapbredde Close on middle-click Luk ved midterklik Icon and text Ikon og tekst Only icon Kun ikoner Only text Kun tekst lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_de.desktop000066400000000000000000000001201261500472700250100ustar00rootroot00000000000000Name[de]=Anwendungsverwalter Comment[de]=Wechsel zwischen laufenden Anwendungen lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_de.ts000066400000000000000000000172451261500472700240050ustar00rootroot00000000000000 LXQtTaskButton Application Anwendung To &Desktop Zur Arb&eitsfläche &All Desktops &Alle Arbeitsflächen Desktop &%1 Arbeitsfläche &%1 &To Current Desktop Zur ak&tuellen Arbeitsfläche Ma&ximize Ma&ximieren Maximize vertically Vertikal maximieren Maximize horizontally Horizontal maximieren &Restore &Wiederherstellen Mi&nimize Mi&nimieren Roll down Herunterrollen Roll up Hochrollen &Layer &Ebene Always on &top Immer &oben &Normal &Normal Always on &bottom Immer &unten &Close &Schließen LXQtTaskGroup Group Gruppe Close group Gruppe schließen LXQtTaskbarConfiguration Task Manager Settings Anwendungsverwalter - Einstellungen General Allgemein Show only windows from desktop Nur Fenster der Arbeitsfläche anzeigen Show only windows from &panel's screen Nur Fenster aus der &Taskleiste anzeigen Show only minimized windows Nur minimierte Fenster anzeigen Raise minimized windows on current desktop Minimierte Fenster auf aktuelle Arbeitsfläche heben Close on middle-click Fenster bei Mittelklick schließen Window &grouping Fensteranordnun&g Show popup on mouse hover Popup beim Überfahren mit dem Mauszeiger Appearance Erscheinungsbild Button style Schaltflächenstil Maximum button width Max. Schaltflächenbreite px px Maximum button height Max. Schaltflächenhöhe Auto&rotate buttons when the panel is vertical Schaltflächen automatisch d&rehen bei vertikaler Leiste Icon and text Symbol und Text Only icon Nur Symbol Only text Nur Text Current Aktuell lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_el.desktop000066400000000000000000000002201261500472700250210ustar00rootroot00000000000000Name[el]=Διαχειριστής εργασιών Comment[el]=Εναλλαγή μεταξύ των εκτελούμενων εφαρμογών lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_el.ts000066400000000000000000000210421261500472700240030ustar00rootroot00000000000000 LXQtTaskButton Application Εφαρμογή To &Desktop Στην επι&φάνεια εργασίας &All Desktops Ό&λες οι επιφάνειες εργασίας Desktop &%1 Επιφάνεια εργασίας &%1 &To Current Desktop Στ&ην τρέχουσα επιφάνεια εργασίας Ma&ximize &Μεγιστοποίηση Maximize vertically Μεγιστοποίηση κάθετα Maximize horizontally Μεγιστοποίηση οριζόντια &Restore &Επαναφορά Mi&nimize Ελα&χιστοποίηση Roll down Κύλιση κάτω Roll up Κύλιση επάνω &Layer Στ&ρώση Always on &top Πάντα ε&πάνω &Normal Κα&νονικό Always on &bottom Πάντα &κάτω &Close Κλεί&σιμο LXQtTaskGroup Group Ομάδα Close group Κλείσιμο της ομάδας LXQtTaskbarConfiguration LXQt Task Manager Settings Ρυθμίσεις του διαχειριστή εργασιών LXQt Window List Content Περιεχόμενο της λίστας των παραθύρων Task Manager Settings Ρυθμίσεις του διαχειριστή εργασιών General Γενικά Show windows from c&urrent desktop Εμφάνιση των παραθύρων της &τρέχουσας επιφάνειας εργασίας Show windows from all des&ktops Εμφάνιση των παραθύρων &όλων των επιφανειών εργασίας Window &grouping Ομα&δοποίηση των παραθύρων Show popup on mouse hover Εμφάνιση αναδυόμενου κατά το πέρασμα του ποντικιού Appearance Εμφάνιση Maximum button width Μέγιστο πλάτος κουμπιού px εικ Show windows from current desktop Εμφάνιση των παραθύρων της τρέχουσας επιφάνειας εργασίας Show windows from all desktops Εμφάνιση παραθύρων όλων των επιφανειών εργασίας Auto&rotate buttons when the panel is vertical &Αυτόματη περιστροφή των κουμπιών όταν ο πίνακας είναι τοποθετημένος κάθετα Window List Appearance Εμφάνιση της λίστας των παραθύρων Button style Ύφος του πλήκτρου Max button width Μέγιστο πλάτος πλήκτρου Close on middle-click Κλείσιμο με μεσαίο κλικ Icon and text Εικόνα και κείμενο Only icon Μόνο εικόνα Only text Μόνο κείμενο lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_eo.desktop000066400000000000000000000003621261500472700250330ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[eo]=Ŝalti inter rulantaj aplikaĵoj Name[eo]=Taskmastrumilo lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_eo.ts000066400000000000000000000171261261500472700240160ustar00rootroot00000000000000 LXQtTaskButton Application Aplikaĵo To &Desktop &Al labortablo &All Desktops Ĉiuj l&abortabloj Desktop &%1 Labortablo &%1 &To Current Desktop Al ak&tuala labortablo Ma&ximize Ma&ksimumigi Maximize vertically Vertikale maksimumigi Maximize horizontally Horizontale maksimumigi &Restore &Restaŭri Mi&nimize &Malmaksimumigi Roll down Malsupren rulumi Roll up Supren rulumi &Layer Tavo&lo Always on &top Ĉiam &supre &Normal &Normale Always on &bottom Ĉiam &malsupre &Close &Fermi LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings Agordoj de taskmastrumilo de LXQto Window List Content Enhavo de listo de fenestroj Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Montri fenestrojn el aktuala labortablo Show windows from all desktops Montri fenestrojn el ĉiuj labortabloj Auto&rotate buttons when the panel is vertical Window List Appearance Apero de listo de fenestroj Button style Stilo de butonoj Max button width Maksimuma grando de butonoj Close on middle-click Icon and text Piktogramo kaj teksto Only icon Nur piktogramoj Only text Nur teksto lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_es.desktop000066400000000000000000000003741261500472700250420ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[es]=Cambia entre aplicaciones activas Name[es]=Administrador de tareas lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_es.ts000066400000000000000000000171401261500472700240160ustar00rootroot00000000000000 LXQtTaskButton Application Aplicación To &Desktop Al &escritorio &All Desktops &Todos los escritorios Desktop &%1 Escritorio &%1 &To Current Desktop &Al escritorio actual Ma&ximize Ma&ximizar Maximize vertically Maximizar verticalmente Maximize horizontally Maximizar horizontalmente &Restore &Restauar Mi&nimize Mi&nimizar Roll down Desplegar Roll up Enrollar &Layer &Capa Always on &top Siempre &encima &Normal &Normal Always on &bottom Siempre al &fondo &Close &Cerrar LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings Opciones del administrador de tareas de LXQt Window List Content Contenido del listado de ventanas Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Mostrar ventanas del escritorio actual Show windows from all desktops Mostrar ventanas de todos los escritorios Auto&rotate buttons when the panel is vertical Window List Appearance Apariencia de la lista de ventanas Button style Estilo del botón Max button width Ancho máximo del botón Close on middle-click Cerrar con el boton central Icon and text Icono y texto Only icon Solo icono Only text Solo texto lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_es_VE.desktop000066400000000000000000000004151261500472700254300ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[es_VE]=Cambia entre aplicaciones o programas abiertos Name[es_VE]=Manejador de ventanas lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_es_VE.ts000066400000000000000000000170761261500472700244200ustar00rootroot00000000000000 LXQtTaskButton Application Aplicación To &Desktop Al &Escritorio &All Desktops &Todos los escritorios Desktop &%1 Escritorio &%1 &To Current Desktop &Al escritorio actual Ma&ximize Ma&ximizar Maximize vertically Maximizar verticalmente Maximize horizontally Maximizar Orizzontalmente &Restore &Restaurar Mi&nimize Mi&nimizar Roll down DesEnrolar Roll up Enrolar &Layer Ca&pa Always on &top Siempre &encima &Normal &Normal Always on &bottom Siempre por de&bajo &Close &Cerrar LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings Configuaracion de lista de tareas LXQt Window List Content Lista de ventanas Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Mostrar ventanas del escritorio activo Show windows from all desktops Mostrar ventanas de todos los escritorios Auto&rotate buttons when the panel is vertical Window List Appearance Apariencia de la lista de ventanas Button style Estilo de boton Max button width Ancho maximo Close on middle-click Cerrar en click medio Icon and text Icono y texto Only icon Solo iconos Only text Solo texto lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_eu.desktop000066400000000000000000000003761261500472700250460ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[eu]=Aldatu martxan dauden aplikazioen artean Name[eu]=Ataza-kudeatzailea lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_eu.ts000066400000000000000000000170471261500472700240260ustar00rootroot00000000000000 LXQtTaskButton Application Aplikazioa To &Desktop &Mahaigainera &All Desktops Mahaigain &guztiak Desktop &%1 &%1 mahaigaina &To Current Desktop &Uneko mahaigainera Ma&ximize Maximizatu Maximize vertically Maximizatu bertikalki Maximize horizontally Maximizatu horizontalki &Restore &Leheneratu Mi&nimize Minimizatu Roll down Zabaldu Roll up Bildu &Layer &Geruza Always on &top Beti &goian &Normal &Normala Always on &bottom Beti &behean &Close &Itxi LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings LXQt ataza-kudeatzailearen ezarpenak Window List Content Leiho-zerrendaren edukia Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Erakutsi uneko mahaigaineko leihoak Show windows from all desktops Erakutsi mahaigain guztietako leihoak Auto&rotate buttons when the panel is vertical Window List Appearance Leiho-zerrendaren itxura Button style Botoi-estiloa Max button width Botoien zabalera maximoa Close on middle-click Itxi erdiko botoia klikatzean Icon and text Ikonoa eta testua Only icon Ikonoa soilik Only text Testua soilik lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_fi.desktop000066400000000000000000000004051261500472700250240ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[fi]=Vaihda käynnissä olevien sovellusten välillä Name[fi]=Tehtävähallinta lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_fi.ts000066400000000000000000000171611261500472700240100ustar00rootroot00000000000000 LXQtTaskButton Application Sovellus To &Desktop Työ&pöydälle &All Desktops &Kaikille työpöydille Desktop &%1 Työpöytä &%1 &To Current Desktop &Nykyiselle työpöydälle Ma&ximize Suu&renna Maximize vertically Suurenna pystysuunnassa Maximize horizontally Suurenna vaakasuunnassa &Restore &Palauta Mi&nimize Pie&nennä Roll down Rullaa alas Roll up Rullaa ylös &Layer Tas&o Always on &top Aina &ylimpänä &Normal &Tavallinen Always on &bottom Aina &alimpana &Close &Sulje LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings LXQt:n tehtävienhallinnan asetukset Window List Content Ikkunaluettelon sisältö Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Näytä ikkunat nykyiseltä työpöydältä Show windows from all desktops Näytä ikkunat kaikilta työpöydiltä Auto&rotate buttons when the panel is vertical Window List Appearance Ikkunaluettelon ulkoasu Button style Painiketyyli Max button width Painikkeen enimmäisleveys Close on middle-click Sulje hiiren keskimmäisen painikkeen painalluksella Icon and text Kuvake ja teksti Only icon Pelkkä kuvake Only text Pelkkä teksti lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_fr_FR.desktop000066400000000000000000000004111261500472700254210ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[fr_FR]=Basculer entre des applications actives Name[fr_FR]=Gestionnaire des tâches lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_fr_FR.ts000066400000000000000000000172011261500472700244030ustar00rootroot00000000000000 LXQtTaskButton Application Application To &Desktop Vers &le bureau &All Desktops &Tous les bureaux Desktop &%1 Bureau &%1 &To Current Desktop &Vers le bureau courant Ma&ximize Maximiser Maximize vertically Maximiser verticalement Maximize horizontally Maximiser horizontalement &Restore &Restaurer Mi&nimize Mi&nimiser Roll down Enrouler vers le bas Roll up Enrouler vers le haut &Layer &Calque Always on &top Toujours au &dessus &Normal &Normal Always on &bottom Toujours en &bas &Close &Fermer LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings Paramètres du gestionnaire des tâches de LXQt Window List Content Contenu de la liste des fenêtres Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Montrer les fenêtres du bureau actuel Show windows from all desktops Montrer les fenêtres de tous les bureaux Auto&rotate buttons when the panel is vertical Window List Appearance Apparence de la liste des fenêtres Button style Style de boutons Max button width Largeur maximale du bouton Close on middle-click Fermer d'un clic du milieu Icon and text Icone et texte Only icon Icone seule Only text Texte seul lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_hu.desktop000066400000000000000000000003711261500472700250440ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[hu]=Váltás a futó alkalmazások között Name[hu]=Feladatkezelő lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_hu.ts000066400000000000000000000170411261500472700240230ustar00rootroot00000000000000 LXQtTaskButton Application Alkalmazás To &Desktop Erre az asztal&ra &All Desktops &Az összes asztalra Desktop &%1 &%1. asztal &To Current Desktop Az ak&tuális asztalra Ma&ximize Ma&ximalizálás Maximize vertically Maximalizálás függőlegesen Maximize horizontally Maximalizálás vízszintesen &Restore &Visszaállítás Mi&nimize Mi&nimalizálás Roll down Legördítés Roll up Felgördítés &Layer Réte&g Always on &top Mindig &felül &Normal &Normál Always on &bottom Min&dig alul &Close &Bezárás LXQtTaskGroup Group Csoport Close group Csoport bezárás LXQtTaskbarConfiguration LXQt Task Manager Settings A LXQt feladatkezelő beállításai Window List Content Az ablaklista tartalma Task Manager Settings Feladatkezelő beállítása General Általános Show windows from c&urrent desktop A jelenlegi asztal ablakai látszanak Show windows from all des&ktops Az összes asztal ablakai létszanak Window &grouping &Ablakcsoportok Show popup on mouse hover Egérre felbukkanó jelzés Appearance Megjelenés Maximum button width Gomb maximális szélessége px pixel Show windows from current desktop A jelenlegi asztal ablakai Show windows from all desktops Az összes asztal ablakai Auto&rotate buttons when the panel is vertical Gombok függőleges panelnál gördülnek Window List Appearance Az ablaklista megjelenése Button style Gombstílus: Max button width Max. gombszélesség Close on middle-click Középkattintásra bezárul Icon and text Ikon és szöveg Only icon Csak ikon Only text Csak szöveg lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_hu_HU.ts000066400000000000000000000170441261500472700244220ustar00rootroot00000000000000 LXQtTaskButton Application Alkalmazás To &Desktop Erre az asztal&ra &All Desktops &Az összes asztalra Desktop &%1 &%1. asztal &To Current Desktop Az ak&tuális asztalra Ma&ximize Ma&ximalizálás Maximize vertically Maximalizálás függőlegesen Maximize horizontally Maximalizálás vízszintesen &Restore &Visszaállítás Mi&nimize Mi&nimalizálás Roll down Legördítés Roll up Felgördítés &Layer Réte&g Always on &top Mindig &felül &Normal &Normál Always on &bottom Min&dig alul &Close &Bezárás LXQtTaskGroup Group Csoport Close group Csoport bezárás LXQtTaskbarConfiguration LXQt Task Manager Settings A LXQt feladatkezelő beállításai Window List Content Az ablaklista tartalma Task Manager Settings Feladatkezelő beállítása General Általános Show windows from c&urrent desktop A jelenlegi asztal ablakai látszanak Show windows from all des&ktops Az összes asztal ablakai létszanak Window &grouping &Ablakcsoportok Show popup on mouse hover Egérre felbukkanó jelzés Appearance Megjelenés Maximum button width Gomb maximális szélessége px pixel Show windows from current desktop A jelenlegi asztal ablakai Show windows from all desktops Az összes asztal ablakai Auto&rotate buttons when the panel is vertical Gombok függőleges panelnál gördülnek Window List Appearance Az ablaklista megjelenése Button style Gombstílus: Max button width Max. gombszélesség Close on middle-click Középkattintásra bezárul Icon and text Ikon és szöveg Only icon Csak ikon Only text Csak szöveg lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_ia.desktop000066400000000000000000000002551261500472700250220ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task Manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_ia.ts000066400000000000000000000152421261500472700240010ustar00rootroot00000000000000 LXQtTaskButton Application To &Desktop &All Desktops Desktop &%1 &To Current Desktop Ma&ximize Maximize vertically Maximize horizontally &Restore Mi&nimize Roll down Roll up &Layer Always on &top &Normal Always on &bottom &Close LXQtTaskGroup Group Close group LXQtTaskbarConfiguration Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Auto&rotate buttons when the panel is vertical Close on middle-click Button style Icon and text Only icon Only text lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_id_ID.desktop000066400000000000000000000002551261500472700254010ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task Manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_id_ID.ts000066400000000000000000000152451261500472700243630ustar00rootroot00000000000000 LXQtTaskButton Application To &Desktop &All Desktops Desktop &%1 &To Current Desktop Ma&ximize Maximize vertically Maximize horizontally &Restore Mi&nimize Roll down Roll up &Layer Always on &top &Normal Always on &bottom &Close LXQtTaskGroup Group Close group LXQtTaskbarConfiguration Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Auto&rotate buttons when the panel is vertical Close on middle-click Button style Icon and text Only icon Only text lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_it.desktop000066400000000000000000000001671261500472700250470ustar00rootroot00000000000000Name[it]=Barra delle applicazioni Comment[it]=Permette di spostarsi tra le applicazioni in esecuzione tramite pulsanti lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_it.ts000066400000000000000000000201541261500472700240220ustar00rootroot00000000000000 LXQtTaskButton Application Applicazione To &Desktop Al &desktop &All Desktops &Tutti i desktop Desktop &%1 Desktop &%1 &To Current Desktop &Al desktop corrente Ma&ximize Ma&ssimizza Maximize vertically Massimizza verticalmente Maximize horizontally Massimizza orizzontalmente &Restore &Ripristina Mi&nimize Mi&nimizza Roll down &Srotola Roll up &Arrotola &Layer &Livello Always on &top Sempre in &primo piano &Normal &Normale Always on &bottom Sempre in &secondo piano &Close &Chiudi LXQtTaskGroup Group Gruppo Close group Chiudi gruppo LXQtTaskbarConfiguration LXQt Task Manager Settings Impostazioni del Task Manager di LXQt Window List Content Mostra finestre Task Manager Settings Impostazioni della barra applicazioni General Generali Show windows from c&urrent desktop Mostra finestre del &desktop attuale Show windows from all des&ktops Mostra finestre di &tutti desktop Window &grouping &Ragruppa finestre della stessa applicazione Show popup on mouse hover Mostra popup al passaggio del mouse Appearance Aspetto Maximum button width Larghezza massima del pulsante px px Taskbar Contents Contenuti della barra Show windows from current desktop Mostra finestre del desktop corrente Show windows from all desktops Mostra finestre da tutti i desktop Taskbar Appearance Aspetto Minimum button width Larghezza minima dei pulsanti Auto&rotate buttons when the panel is vertical Ruota &automaticamente se il panello è verticale Window List Appearance Aspetto delle finestre Button style Stile dei pulsanti Max button width Larghezza massima dei pulsanti Close on middle-click Chiudi con un click del tasto centrale Icon and text Icone e testo Only icon Solo icone Only text Solo testo lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_ja.desktop000066400000000000000000000004141261500472700250200ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[ja]=実行中のアプリケーションを切り替えます Name[ja]=タスク管理 lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_ja.ts000066400000000000000000000172031261500472700240010ustar00rootroot00000000000000 LXQtTaskButton Application アプリケーション To &Desktop デスクトップへ(&D) &All Desktops すべてのデスクトップ(&A) Desktop &%1 デスクトップ &%1 &To Current Desktop 現在のデスクトップへ(&T) Ma&ximize 最大化(&x) Maximize vertically 縦方向の最大化 Maximize horizontally 横方向の最大化 &Restore 復元(&R) Mi&nimize 最小化(&N) Roll down 広げる Roll up たたむ &Layer レイヤー(&L) Always on &top 常に手前に表示(&T) &Normal 通常(&N) Always on &bottom 常に奥に表示(&B) &Close 閉じる(&C) LXQtTaskGroup Group Close group LXQtTaskbarConfiguration Task Manager Settings タスクマネージャーの設定 Taskbar Contents タスクバーの内容 Show windows from current desktop 現在のデスクトップのウィンドウを表示 Show windows from all desktops 全てのデスクトップのウィンドウを表示 Taskbar Appearance タスクバーの見た目 Minimum button width ボタン幅の最小値 Auto&rotate buttons when the panel is vertical パネルが垂直なときにはボタンを回転(&R) Button style ボタンのスタイル General Show windows from c&urrent desktop Show windows from all des&ktops Close on middle-click 中ボタンのクリックで閉じる Window &grouping Show popup on mouse hover Appearance Maximum button width px Icon and text アイコンとテキスト Only icon アイコンのみ Only text テキストのみ lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_ko.desktop000066400000000000000000000002551261500472700250420ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task Manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_ko.ts000066400000000000000000000152421261500472700240210ustar00rootroot00000000000000 LXQtTaskButton Application To &Desktop &All Desktops Desktop &%1 &To Current Desktop Ma&ximize Maximize vertically Maximize horizontally &Restore Mi&nimize Roll down Roll up &Layer Always on &top &Normal Always on &bottom &Close LXQtTaskGroup Group Close group LXQtTaskbarConfiguration Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Auto&rotate buttons when the panel is vertical Close on middle-click Button style Icon and text Only icon Only text lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_lt.desktop000066400000000000000000000003671261500472700250540ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[lt]=Persijungimas tarp programų Name[lt]=Užduočių tvarkytuvė lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_lt.ts000066400000000000000000000171221261500472700240260ustar00rootroot00000000000000 LXQtTaskButton Application Programa To &Desktop Į &darbalaukį &All Desktops &visus darbalaukius Desktop &%1 &%1 darbalaukį &To Current Desktop &Į dabartinį darbalaukį Ma&ximize &Išdidinti Maximize vertically Išdidinti vertikaliai Maximize horizontally Išdidinti horizontaliai &Restore &Atstatyti Mi&nimize &Nuleisti Roll down Išvynioti Roll up Suvynioti &Layer S&luoksnis Always on &top Visada &viršuje &Normal Įpras&tas Always on &bottom Visada vi&ršuje &Close &Užverti LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings LXQt užduočių tvarkutyvės nuostatos Window List Content Langų sąrašo turinys Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Rodyti tik šio darbalaukio langus Show windows from all desktops Rodyti visų darbalaukių langus Auto&rotate buttons when the panel is vertical Window List Appearance Langų sąrašo išvaizda Button style Mygtuko stilius Max button width Didžiausias leidžiamas plotis Close on middle-click Icon and text Ženkliukas ir tekstas Only icon Tik ženkliukas Only text Tik tekstas lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_nl.desktop000066400000000000000000000003631261500472700250420ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[nl]=Wissel tussen draaiende applicaties Name[nl]=taak-manager lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_nl.ts000066400000000000000000000171041261500472700240200ustar00rootroot00000000000000 LXQtTaskButton Application Toepassing To &Desktop Naar &bureaublad &All Desktops &Alle bureaubladen Desktop &%1 Bureaublad &%1 &To Current Desktop &Naar huidig bureaublad Ma&ximize Ma&ximaliseren Maximize vertically Verticaal maximaliseren Maximize horizontally Horizontaal maximaliseren &Restore &Herstellen Mi&nimize Mi&nimaliseren Roll down Uitrollen Roll up Oprollen &Layer &Laag Always on &top Altijd bovenop &Normal &Normaal Always on &bottom Altijd onderop &Close &Sluiten LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings Instellingen voor taakbeheerder van LXQt Window List Content Inhoud van vensterlijst Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Toon vensters van huidig bureaublad Show windows from all desktops Toon vensters van alle bureaubladen Auto&rotate buttons when the panel is vertical Window List Appearance Uiterlijk van vensterlijst Button style Stijl van knoppen Max button width Maximale knopbreedte Close on middle-click Sluiten bij middelklik Icon and text Pictogram en tekst Only icon Alleen pictogram Only text Alleen tekst lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_pl.desktop000066400000000000000000000004011261500472700250350ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[pl]=Przełączaj się pomiędzy otwartymi aplikacjami Name[pl]=Pasek zadań lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_pl_PL.desktop000066400000000000000000000004041261500472700254330ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[pl_PL]=Przełączaj między uruchomionymi aplikacjami Name[pl_PL]=Pasek zadań lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_pl_PL.ts000066400000000000000000000170441261500472700244200ustar00rootroot00000000000000 LXQtTaskButton Application Aplikacja To &Desktop Na &pulpit &All Desktops &Wszystkie pulpity Desktop &%1 Pulpit &%1 &To Current Desktop &Na obecny pulpit Ma&ximize Zma&ksymalizuj Maximize vertically Zmaksymalizuj pionowo Maximize horizontally Zmaksymalizuj poziomo &Restore &Odzyskaj Mi&nimize Zmi&nimalizuj Roll down Zwiń Roll up Rozwiń &Layer &Warstwa Always on &top Zawsze na &wierzchu &Normal &Normalnie Always on &bottom Zawsze pod &spodem &Close &Zamknij LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings Ustawienia listy zadań LXQt Window List Content Zawartość listy zadań Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Pokazuj okna z obecnego pulpitu Show windows from all desktops Pokazuj okna ze wszystkich pulpitów Auto&rotate buttons when the panel is vertical Window List Appearance Wygląd listy zadań Button style Styl przycisku Max button width Maksymalna szerokość Close on middle-click Zamknij środkowym klawiszem Icon and text Ikona i tekst Only icon Tylko ikona Only text Tylko tekst lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_pt.desktop000066400000000000000000000004061261500472700250520ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Name[pt]=Gestor de tarefas Comment[pt]=Permite trocar entre as aplicações em execução lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_pt.ts000066400000000000000000000171771261500472700240440ustar00rootroot00000000000000 LXQtTaskButton Application Aplicação To &Desktop Na área &de trabalho &All Desktops Tod&as as áreas de trabalho Desktop &%1 Área de trabalho &%1 &To Current Desktop Na área de &trabalho atual Ma&ximize Ma&ximizar Maximize vertically Maximizar na vertical Maximize horizontally Maximizar na horizontal &Restore &Restaurar Mi&nimize Mi&nimizar Roll down Enrolar para baixo Roll up Enrolar para cima &Layer Ca&mada Always on &top Sempre na &frente &Normal &Normal Always on &bottom Sempre a&trás &Close Fe&char LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings Definições do gestor de tarefas LXQt Window List Content Conteúdo da lista de janelas Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Mostrar janelas da área de trabalho atual Show windows from all desktops Mostrar janelas de todas as áreas de trabalho Auto&rotate buttons when the panel is vertical Window List Appearance Aparência da lista de janelas Button style Estilo dos botões Max button width Largura máxima do botão Close on middle-click Fechar com a roda do rato Icon and text Ícones e texto Only icon Ícones Only text Texto lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_pt_BR.desktop000066400000000000000000000004071261500472700254360ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[pt_BR]=Alterne entre aplicativos em execução Name[pt_BR]=Gerenciador de tarefas lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_pt_BR.ts000066400000000000000000000172401261500472700244160ustar00rootroot00000000000000 LXQtTaskButton Application Aplicativo To &Desktop Para a área &de trabalho &All Desktops Todas &as áreas de trabalho Desktop &%1 Área de trabalho &%1 &To Current Desktop Para a área de &trabalho atual Ma&ximize Ma&ximizar Maximize vertically Maximizar verticalmente Maximize horizontally Maximizar horizontalmente &Restore &Restaurar Mi&nimize Mi&nimizar Roll down Rolar para baixo Roll up Rolar para cima &Layer &Camada Always on &top Sempre em &cima &Normal &Normal Always on &bottom Sempre em &baixo &Close &Fechar LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings Configurações do gerenciador de tarefas do LXQt Window List Content Conteúdo da lista de janelas Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Exibir as janelas da área de trabalho atual Show windows from all desktops Exibir as janelas de todas as áreas de trabalho Auto&rotate buttons when the panel is vertical Window List Appearance Aparência da lista de janelas Button style Estilo dos botões Max button width Largura máxima do botão Close on middle-click Fechar em meio clique Icon and text Ícone e texto Only icon Apenas ícone Only text Apenas texto lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_ro_RO.desktop000066400000000000000000000003361261500472700254510ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[ro_RO]=Comută între aplcațiile active lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_ro_RO.ts000066400000000000000000000167641261500472700244420ustar00rootroot00000000000000 LXQtTaskButton Application Aplicație To &Desktop Către &desktop &All Desktops Toate ecr&anele Desktop &%1 Ecranul &%1 &To Current Desktop Că&tre ecranul virtual curent Ma&ximize Ma&ximizează Maximize vertically Maximizează pe verticală Maximize horizontally Maximizează pe orizontală &Restore &Restaurează Mi&nimize Mi&nimizează Roll down Derulează în jos Roll up Derulează în sus &Layer &Strat Always on &top Întotdeauna de&asupra &Normal &Normal Always on &bottom Întotdeauna de&desubt &Close În&chide LXQtTaskGroup Group Close group LXQtTaskbarConfiguration Window List Content Conținut listă ferestre Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Afișează ferestrele de pe ecranul virtual curent Show windows from all desktops Afișează ferestrele din toate ecranele virtuale Auto&rotate buttons when the panel is vertical Window List Appearance Aspect listă ferestre Button style Stil butoane Max button width Lățime maximă butoane Close on middle-click Închide prin clic pe butonul din mijloc Icon and text Pictograme și text Only icon Doar pictograme Only text Doar text lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_ru.desktop000066400000000000000000000004571261500472700250630ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[ru]=Переключиться между запущенными приложениями Name[ru]=Панель задачlxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_ru.ts000066400000000000000000000204611261500472700240350ustar00rootroot00000000000000 LXQtTaskButton Application Приложение To &Desktop &На рабочий стол &All Desktops &Все рабочие столы Desktop &%1 Рабочий стол &%1 &To Current Desktop На &текущий рабочий стол Ma&ximize Р&аспахнуть Maximize vertically Распахнуть по вертикали Maximize horizontally Распахнуть по горизонтали &Restore &Восстановить Mi&nimize &Свернуть Roll down Развернуть из заголовока Roll up Свернуть в заголовок &Layer &Положение Always on &top Всегда на &верху &Normal &Обычное Always on &bottom Всегда в&низу &Close &Закрыть LXQtTaskGroup Group Группа Close group Закрыть группу LXQtTaskbarConfiguration Task Manager Settings Настройки панели задач General Общие Show only windows from &panel's screen Показывать окна только с экрана &панели Show only minimized windows Показывать только свёрнутые окна Raise minimized windows on current desktop Разворачивать свёрнутые окна на текущем рабочем столе Window &grouping &Группировка окон Show popup on mouse hover Показать всплывающее окно при наведении мыши Appearance Внешний вид Maximum button width Максимальная ширина кнопки px пикс Maximum button height Максимальная высота кнопки Button style Стиль кнопок Show only windows from desktop Показывать окна только с рабочего стола Auto&rotate buttons when the panel is vertical Авто&поворот кнопок, когда панель вертикальна Close on middle-click Закрыть по щелчку средней кнопки мыши Icon and text Значок и текст Only icon Только значок Only text Только текст Current Текущий lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_ru_RU.desktop000066400000000000000000000004651261500472700254700ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[ru_RU]=Переключиться между запущенными приложениями Name[ru_RU]=Панель задачlxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_ru_RU.ts000066400000000000000000000204641261500472700244460ustar00rootroot00000000000000 LXQtTaskButton Application Приложение To &Desktop &На рабочий стол &All Desktops &Все рабочие столы Desktop &%1 Рабочий стол &%1 &To Current Desktop На &текущий рабочий стол Ma&ximize Р&аспахнуть Maximize vertically Распахнуть по вертикали Maximize horizontally Распахнуть по горизонтали &Restore &Восстановить Mi&nimize &Свернуть Roll down Развернуть из заголовока Roll up Свернуть в заголовок &Layer &Положение Always on &top Всегда на &верху &Normal &Обычное Always on &bottom Всегда в&низу &Close &Закрыть LXQtTaskGroup Group Группа Close group Закрыть группу LXQtTaskbarConfiguration Task Manager Settings Настройки панели задач General Общие Show only windows from &panel's screen Показывать окна только с экрана &панели Show only minimized windows Показывать только свёрнутые окна Raise minimized windows on current desktop Разворачивать свёрнутые окна на текущем рабочем столе Window &grouping &Группировка окон Show popup on mouse hover Показать всплывающее окно при наведении мыши Appearance Внешний вид Maximum button width Максимальная ширина кнопки px пикс Maximum button height Максимальная высота кнопки Button style Стиль кнопок Show only windows from desktop Показывать окна только с рабочего стола Auto&rotate buttons when the panel is vertical Авто&поворот кнопок, когда панель вертикальна Close on middle-click Закрыть по щелчку средней кнопки мыши Icon and text Значок и текст Only icon Только значок Only text Только текст Current Текущий lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_sk.desktop000066400000000000000000000003731261500472700250470ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[sk]=Prepínanie medzi bežiacimi aplikáciami Name[sk]=Správca úloh lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_sk_SK.ts000066400000000000000000000170671261500472700244310ustar00rootroot00000000000000 LXQtTaskButton Application Aplikácia To &Desktop Na &plochu &All Desktops &Všetky plochy Desktop &%1 Plocha &%1 &To Current Desktop &Na aktuálnu plochu Ma&ximize Ma&ximalizovať Maximize vertically Maximalizovať zvisle Maximize horizontally Maximalizovať vodorovne &Restore &Obnoviť Mi&nimize Mi&nimalizovať Roll down Zrolovať nahor Roll up Zrolovať dolu &Layer &Vrstva Always on &top Vždy &navrchu &Normal &Normálne Always on &bottom Vždy na&spodku &Close &Zatvoriť LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings Nastavenia správcu úloh prostredia LXQt Window List Content Obsah zoznamu okien Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Zobraziť okná z aktuálnej plochy Show windows from all desktops Zobraziť okná z každej plochy Auto&rotate buttons when the panel is vertical Window List Appearance Vzhľad zoznamu okien Button style Štýl tlačidiel Max button width Maximálna šírka tlačidla Close on middle-click Icon and text Ikona a text Only icon Iba ikona Only text Iba text lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_sl.desktop000066400000000000000000000003741261500472700250510ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[sl]=Preklapljajte med zagnanimi programi Name[sl]=Upravljalnik opravil lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_sl.ts000066400000000000000000000167611261500472700240350ustar00rootroot00000000000000 LXQtTaskButton Application Program To &Desktop &Na namizje &All Desktops &Vsa namizja Desktop &%1 Namizje &%1 &To Current Desktop Na &trenutno namizje Ma&ximize &Razpni Maximize vertically Razpni navpično Maximize horizontally Razpni vodoravno &Restore &Obnovi Mi&nimize Po&manjšaj Roll down Razvij Roll up Zvij &Layer &Plast Always on &top Vedno na &vrhu &Normal &Običajno Always on &bottom Vedno na &dnu &Close &Zapri LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings Nastavitve upravitelja opravil za LXQt Window List Content Vsebina seznama oken Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Pokaži okna s trenutnega namizja Show windows from all desktops Pokaži okna z vseh namizij Auto&rotate buttons when the panel is vertical Window List Appearance Videz seznama oken Button style Slog z gumbi Max button width Največja širina gumbov Close on middle-click Icon and text Ikona in besedilo Only icon Samo ikona Only text Samo besedilo lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_sr.desktop000066400000000000000000000004411261500472700250520ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[sr]=Пребацујте између програма у раду Name[sr]=Менаџер задатака lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_sr@ijekavian.desktop000066400000000000000000000002101261500472700270260ustar00rootroot00000000000000Name[sr@ijekavian]=Менаџер задатака Comment[sr@ijekavian]=Пребацујте између програма у раду lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_sr@ijekavianlatin.desktop000066400000000000000000000001511261500472700300620ustar00rootroot00000000000000Name[sr@ijekavianlatin]=Menadžer zadataka Comment[sr@ijekavianlatin]=Prebacujte između programa u radu lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_sr@latin.desktop000066400000000000000000000004041261500472700262010ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[sr@latin]=Prebacujte između programa u radu Name[sr@latin]=Menadžer zadataka lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_sr@latin.ts000066400000000000000000000152501261500472700251630ustar00rootroot00000000000000 LXQtTaskButton Application To &Desktop &All Desktops Desktop &%1 &To Current Desktop Ma&ximize Maximize vertically Maximize horizontally &Restore Mi&nimize Roll down Roll up &Layer Always on &top &Normal Always on &bottom &Close LXQtTaskGroup Group Close group LXQtTaskbarConfiguration Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Auto&rotate buttons when the panel is vertical Close on middle-click Button style Icon and text Only icon Only text lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_sr_BA.ts000066400000000000000000000176711261500472700244060ustar00rootroot00000000000000 LXQtTaskButton Application Програм To &Desktop На &површ &All Desktops &све површи Desktop &%1 површ &%1 &To Current Desktop &На тренутну површ Ma&ximize Ма&ксимизуј Maximize vertically Максимизуј вертикално Maximize horizontally Максимизуј хоризонтално &Restore &Обнови Mi&nimize &Минимизуј Roll down Одмотај Roll up Намотај &Layer &Слој Always on &top увијек &изнад &Normal &нормално Always on &bottom увијек испо&д &Close &Затвори LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings Подешавања менаџера задатака Window List Content Садржај листе прозора Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Прикажи прозоре са тренутне површи Auto&rotate buttons when the panel is vertical Close on middle-click wlcB wlcB Show windows from all desktops Прикажи прозоре са свих површи Window List Appearance Изглед листе прозора Button style Стил тастера Max button width Макс. ширина тастера Icon and text икона и текст Only icon само икона Only text само текст lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_sr_RS.ts000066400000000000000000000174761261500472700244530ustar00rootroot00000000000000 LXQtTaskButton Application Програм To &Desktop На &површ &All Desktops &све површи Desktop &%1 површ &%1 &To Current Desktop &На тренутну површ Ma&ximize Ма&ксимизуј Maximize vertically Максимизуј вертикално Maximize horizontally Максимизуј хоризонтално &Restore &Обнови Mi&nimize &Минимизуј Roll down Одмотај Roll up Намотај &Layer &Слој Always on &top увек &изнад &Normal &нормално Always on &bottom увек испо&д &Close &Затвори LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings Подешавања менаџера задатака Window List Content Садржај листе прозора Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Прикажи прозоре са тренутне површи Show windows from all desktops Прикажи прозоре са свих површи Auto&rotate buttons when the panel is vertical Window List Appearance Изглед листе прозора Button style Стил тастера Max button width Макс. ширина тастера Close on middle-click Icon and text икона и текст Only icon само икона Only text само текст lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_th_TH.desktop000066400000000000000000000005271261500472700254410ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[th_TH]=สลับใช้งานระหว่างโปรแกรมที่เปิดอยู่ Name[th_TH]=ตัวจัดการงาน lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_th_TH.ts000066400000000000000000000204211261500472700244110ustar00rootroot00000000000000 LXQtTaskButton Application โปรแกรม To &Desktop ไปยัง &พ&ื&้นโต๊ะ &All Desktops &ท&ุกพื้นโต๊ะ Desktop &%1 พื้นโต๊ะ &%1 &To Current Desktop &ไปยังพื้นโต๊ะปัจจุบัน Ma&ximize &ขยายแผ่ Maximize vertically ขยายแผ่ทางแนวตั้ง Maximize horizontally ขยายแผ่ทางแนวนอน &Restore &ค&ืนสภาพ Mi&nimize &ย&่อเก็บ Roll down ม้วนลง Roll up ม้วนขึ้น &Layer &ลำดับชั้น Always on &top ด้าน&หน้าเสมอ &Normal &ปกติ Always on &bottom ด้านหลัง&งเสมอ &Close ปิ&ด LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings ค่าตั้งตัวจัดการงาน LXQt Window List Content การแสดงรายการหน้าต่าง Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop แสดงหน้าต่างเฉพาะพื้นโต๊ะปัจจุบัน Show windows from all desktops แสดงหน้าต่างจากทุกพื้นโต๊ะ Auto&rotate buttons when the panel is vertical Window List Appearance ลักษณะรายการหน้าต่าง Button style รูปแบบปุ่ม Max button width ความกว้างปุ่มขนาดสูงสุด Close on middle-click ปิดด้วยการคลิกปุ่มกลาง Icon and text ไอคอนและข้อความ Only icon ไอคอนเท่านั้น Only text ข้อความเท่านั้น lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_tr.desktop000066400000000000000000000004051261500472700250530ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[tr]=Çalışan uygulamalar arasında geçiş yapın Name[tr]=Görev Yöneticisi lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_tr.ts000066400000000000000000000171051261500472700240350ustar00rootroot00000000000000 LXQtTaskButton Application Uygulama To &Desktop &Masaüstüne &All Desktops &Tüm Masaüstlerine Desktop &%1 Masaüstü &%1 &To Current Desktop &Şimdiki Masaüstüne Ma&ximize Bü&yüt Maximize vertically Dikey büyüt Maximize horizontally Yatay büyüt &Restore &Geri getir Mi&nimize Kü&çült Roll down Aşağı indir Roll up Yukarı çıkar &Layer &Katman Always on &top Her zaman &üstte &Normal &Normal Always on &bottom Her zaman &altta &Close &Kapat LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings LXQt Görev Yöneticisi Ayarları Window List Content Pencere Listesi İçeriği Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Şimdiki masaüstündeki pencereleri göster Show windows from all desktops Tüm masaüstlerindeki pencereleri göster Auto&rotate buttons when the panel is vertical Window List Appearance Pencere Listesi Görünümü Button style Düğme biçimi Max button width En fazla düğme genişliği Close on middle-click Orta tıklama ile kapat Icon and text Simge ve metin Only icon Sadece simge Only text Sadece metin lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_uk.desktop000066400000000000000000000004461261500472700250520ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[uk]=Перемкнутися між запущеними вікнами Name[uk]=Менеджер завдань lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_uk.ts000066400000000000000000000176761261500472700240440ustar00rootroot00000000000000 LXQtTaskButton Application Програма To &Desktop На &стільницю &All Desktops На &всі стільниці Desktop &%1 Стільниця &%1 &To Current Desktop На &поточну стільницю Ma&ximize Ма&ксимізувати Maximize vertically Максимізувати вертикально Maximize horizontally Максимізувати горизонтально &Restore &Розгорнути Mi&nimize &Згорнути Roll down Посунути вниз Roll up Посунути вгору &Layer &Шар Always on &top Завжди з&гори &Normal &Типово Always on &bottom Завжди з&низу &Close З&акрити LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings Налаштування списку вікон Window List Content Вміст списку вікон Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop Показувати вікна поточної стільниці Show windows from all desktops Показувати вікна всіх стільниць Auto&rotate buttons when the panel is vertical Window List Appearance Вигляд списку вікон Button style Стиль кнопок Max button width Макс. довжина кнопки Close on middle-click Закривати по середній кнопці миші Icon and text Значок та текст Only icon Лише значок Only text Лише текст lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_zh_CN.GB2312.desktop000066400000000000000000000002551261500472700262310ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task Manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_zh_CN.desktop000066400000000000000000000003641261500472700254330ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[zh_CN]=在运行的程序间切换 Name[zh_CN]=任务管理器 lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_zh_CN.ts000066400000000000000000000167221261500472700244150ustar00rootroot00000000000000 LXQtTaskButton Application 应用程序 To &Desktop 到&桌面 &All Desktops &全部桌面 Desktop &%1 桌面 &%1 &To Current Desktop &到当前桌面 Ma&ximize 最&大化 Maximize vertically 垂直最大化 Maximize horizontally 水平最大化 &Restore &恢复 Mi&nimize 最&小化 Roll down 卷下 Roll up 卷上 &Layer &层 Always on &top 总在&顶层 &Normal &正常 Always on &bottom 总在&底层 &Close &关闭 LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings LXQt任务管理器设置 Window List Content 窗口列表内容 Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop 显示当前桌面的窗口 Show windows from all desktops 显示所有桌面的窗口 Auto&rotate buttons when the panel is vertical Window List Appearance 窗口列表外观 Button style 按钮样式 Max button width 最大按钮宽度 Close on middle-click 鼠标中击时关闭 Icon and text 图标和文字 Only icon 仅图标 Only text 仅文字 lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_zh_TW.desktop000066400000000000000000000003671261500472700254700ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Task manager Comment=Switch between running applications #TRANSLATIONS_DIR=../translations # Translations Comment[zh_TW]=在正在運行程式中切換 Name[zh_TW]=工作管理員 lxqt-panel-0.10.0/plugin-taskbar/translations/taskbar_zh_TW.ts000066400000000000000000000170321261500472700244420ustar00rootroot00000000000000 LXQtTaskButton Application 應用程式 To &Desktop 傳送到桌面(&D) &All Desktops 傳送到全部桌面(&A) Desktop &%1 桌面 &%1 &To Current Desktop 傳送到當前桌面(&T) Ma&ximize 最大化(&x) Maximize vertically 垂直最大化 Maximize horizontally 水平最大化 &Restore 恢復(&R) Mi&nimize 最小化(&n) Roll down 放下視窗 Roll up 捲起視窗 &Layer 層(&L) Always on &top 總是在最上層(&t) &Normal 正常(&N) Always on &bottom 總是在最底層(&b) &Close 關閉(&C) LXQtTaskGroup Group Close group LXQtTaskbarConfiguration LXQt Task Manager Settings LXQt工作管理員設定 Window List Content 視窗清單內容 Task Manager Settings General Show windows from c&urrent desktop Show windows from all des&ktops Window &grouping Show popup on mouse hover Appearance Maximum button width px Show windows from current desktop 顯示當前桌面視窗 Show windows from all desktops 顯示所有桌面視窗 Auto&rotate buttons when the panel is vertical Window List Appearance 視窗清單外觀 Button style 按鈕樣式 Max button width 最大按鈕寬度 Close on middle-click 按滑鼠中鍵關閉 Icon and text 圖示與文字 Only icon 僅圖示 Only text 僅文字 lxqt-panel-0.10.0/plugin-tray/000077500000000000000000000000001261500472700161345ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-tray/CMakeLists.txt000066400000000000000000000013361261500472700206770ustar00rootroot00000000000000set(PLUGIN "tray") include(CheckLibraryExists) find_package(PkgConfig) pkg_check_modules(XCB REQUIRED xcb) pkg_check_modules(XCB_UTIL REQUIRED xcb-util) pkg_check_modules(XCB_DAMAGE REQUIRED xcb-damage) find_package(X11 REQUIRED) pkg_check_modules(XCOMPOSITE REQUIRED xcomposite) pkg_check_modules(XDAMAGE REQUIRED xdamage) pkg_check_modules(XRENDER REQUIRED xrender) set(HEADERS lxqttrayplugin.h lxqttray.h trayicon.h xfitman.h ) set(SOURCES lxqttrayplugin.cpp lxqttray.cpp trayicon.cpp xfitman.cpp ) set(LIBRARIES ${X11_LIBRARIES} ${XCOMPOSITE_LIBRARIES} ${XDAMAGE_LIBRARIES} ${XRENDER_LIBRARIES} ${XCB_LIBRARIES} ${XCB_DAMAGE_LIBRARIES} ) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-tray/lxqttray.cpp000066400000000000000000000242671261500472700205430ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ /******************************************************************** Inspired by freedesktops tint2 ;) *********************************************************************/ #include #include #include #include #include "trayicon.h" #include "../panel/ilxqtpanel.h" #include #include "lxqttray.h" #include "xfitman.h" #include #include #include #include #include #include #include #undef Bool // defined as int in X11/Xlib.h #include "../panel/ilxqtpanelplugin.h" #define _NET_SYSTEM_TRAY_ORIENTATION_HORZ 0 #define _NET_SYSTEM_TRAY_ORIENTATION_VERT 1 #define SYSTEM_TRAY_REQUEST_DOCK 0 #define SYSTEM_TRAY_BEGIN_MESSAGE 1 #define SYSTEM_TRAY_CANCEL_MESSAGE 2 #define XEMBED_EMBEDDED_NOTIFY 0 #define XEMBED_MAPPED (1 << 0) /************************************************ ************************************************/ LXQtTray::LXQtTray(ILXQtPanelPlugin *plugin, QWidget *parent): QFrame(parent), mValid(false), mTrayId(0), mDamageEvent(0), mDamageError(0), mIconSize(TRAY_ICON_SIZE_DEFAULT, TRAY_ICON_SIZE_DEFAULT), mPlugin(plugin), mDisplay(QX11Info::display()) { mLayout = new LXQt::GridLayout(this); realign(); _NET_SYSTEM_TRAY_OPCODE = XfitMan::atom("_NET_SYSTEM_TRAY_OPCODE"); // Init the selection later just to ensure that no signals are sent until // after construction is done and the creating object has a chance to connect. QTimer::singleShot(0, this, SLOT(startTray())); } /************************************************ ************************************************/ LXQtTray::~LXQtTray() { stopTray(); } /************************************************ ************************************************/ bool LXQtTray::nativeEventFilter(const QByteArray &eventType, void *message, long *) { if (eventType != "xcb_generic_event_t") return false; xcb_generic_event_t* event = static_cast(message); TrayIcon* icon; int event_type = event->response_type & ~0x80; switch (event_type) { case ClientMessage: clientMessageEvent(event); break; // case ConfigureNotify: // icon = findIcon(event->xconfigure.window); // if (icon) // icon->configureEvent(&(event->xconfigure)); // break; case DestroyNotify: { unsigned long event_window; event_window = reinterpret_cast(event)->window; icon = findIcon(event_window); if (icon) { mIcons.removeAll(icon); delete icon; } break; } default: if (event_type == mDamageEvent + XDamageNotify) { xcb_damage_notify_event_t* dmg = reinterpret_cast(event); icon = findIcon(dmg->drawable); if (icon) icon->update(); } break; } return false; } /************************************************ ************************************************/ void LXQtTray::realign() { mLayout->setEnabled(false); ILXQtPanel *panel = mPlugin->panel(); if (panel->isHorizontal()) { mLayout->setRowCount(panel->lineCount()); mLayout->setColumnCount(0); } else { mLayout->setColumnCount(panel->lineCount()); mLayout->setRowCount(0); } mLayout->setEnabled(true); } /************************************************ ************************************************/ void LXQtTray::clientMessageEvent(xcb_generic_event_t *e) { unsigned long opcode; unsigned long message_type; Window id; xcb_client_message_event_t* event = reinterpret_cast(e); uint32_t* data32 = event->data.data32; message_type = event->type; opcode = data32[1]; if(message_type != _NET_SYSTEM_TRAY_OPCODE) return; switch (opcode) { case SYSTEM_TRAY_REQUEST_DOCK: id = data32[2]; if (id) addIcon(id); break; case SYSTEM_TRAY_BEGIN_MESSAGE: case SYSTEM_TRAY_CANCEL_MESSAGE: qDebug() << "we don't show balloon messages."; break; default: // if (opcode == xfitMan().atom("_NET_SYSTEM_TRAY_MESSAGE_DATA")) // qDebug() << "message from dockapp:" << e->data.b; // else // qDebug() << "SYSTEM_TRAY : unknown message type" << opcode; break; } } /************************************************ ************************************************/ TrayIcon* LXQtTray::findIcon(Window id) { foreach(TrayIcon* icon, mIcons) { if (icon->iconId() == id || icon->windowId() == id) return icon; } return 0; } /************************************************ ************************************************/ void LXQtTray::setIconSize(QSize iconSize) { mIconSize = iconSize; unsigned long size = qMin(mIconSize.width(), mIconSize.height()); XChangeProperty(mDisplay, mTrayId, XfitMan::atom("_NET_SYSTEM_TRAY_ICON_SIZE"), XA_CARDINAL, 32, PropModeReplace, (unsigned char*)&size, 1); } /************************************************ ************************************************/ VisualID LXQtTray::getVisual() { VisualID visualId = 0; Display* dsp = mDisplay; XVisualInfo templ; templ.screen=QX11Info::appScreen(); templ.depth=32; templ.c_class=TrueColor; int nvi; XVisualInfo* xvi = XGetVisualInfo(dsp, VisualScreenMask|VisualDepthMask|VisualClassMask, &templ, &nvi); if (xvi) { int i; XRenderPictFormat* format; for (i = 0; i < nvi; i++) { format = XRenderFindVisualFormat(dsp, xvi[i].visual); if (format && format->type == PictTypeDirect && format->direct.alphaMask) { visualId = xvi[i].visualid; break; } } XFree(xvi); } return visualId; } /************************************************ freedesktop systray specification ************************************************/ void LXQtTray::startTray() { Display* dsp = mDisplay; Window root = QX11Info::appRootWindow(); QString s = QString("_NET_SYSTEM_TRAY_S%1").arg(DefaultScreen(dsp)); Atom _NET_SYSTEM_TRAY_S = XfitMan::atom(s.toLatin1()); if (XGetSelectionOwner(dsp, _NET_SYSTEM_TRAY_S) != None) { qWarning() << "Another systray is running"; mValid = false; return; } // init systray protocol mTrayId = XCreateSimpleWindow(dsp, root, -1, -1, 1, 1, 0, 0, 0); XSetSelectionOwner(dsp, _NET_SYSTEM_TRAY_S, mTrayId, CurrentTime); if (XGetSelectionOwner(dsp, _NET_SYSTEM_TRAY_S) != mTrayId) { qWarning() << "Can't get systray manager"; stopTray(); mValid = false; return; } int orientation = _NET_SYSTEM_TRAY_ORIENTATION_HORZ; XChangeProperty(dsp, mTrayId, XfitMan::atom("_NET_SYSTEM_TRAY_ORIENTATION"), XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &orientation, 1); // ** Visual ******************************** VisualID visualId = getVisual(); if (visualId) { XChangeProperty(mDisplay, mTrayId, XfitMan::atom("_NET_SYSTEM_TRAY_VISUAL"), XA_VISUALID, 32, PropModeReplace, (unsigned char*)&visualId, 1); } // ****************************************** setIconSize(mIconSize); XClientMessageEvent ev; ev.type = ClientMessage; ev.window = root; ev.message_type = XfitMan::atom("MANAGER"); ev.format = 32; ev.data.l[0] = CurrentTime; ev.data.l[1] = _NET_SYSTEM_TRAY_S; ev.data.l[2] = mTrayId; ev.data.l[3] = 0; ev.data.l[4] = 0; XSendEvent(dsp, root, False, StructureNotifyMask, (XEvent*)&ev); XDamageQueryExtension(mDisplay, &mDamageEvent, &mDamageError); qDebug() << "Systray started"; mValid = true; qApp->installNativeEventFilter(this); } /************************************************ ************************************************/ void LXQtTray::stopTray() { qDeleteAll(mIcons); if (mTrayId) { XDestroyWindow(mDisplay, mTrayId); mTrayId = 0; } mValid = false; } /************************************************ ************************************************/ void LXQtTray::addIcon(Window winId) { TrayIcon* icon = new TrayIcon(winId, this); if (!icon->isValid()) { delete icon; return; } mIcons.append(icon); mLayout->addWidget(icon); } lxqt-panel-0.10.0/plugin-tray/lxqttray.h000066400000000000000000000050631261500472700202010ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTTRAY_H #define LXQTTRAY_H #include #include #include "../panel/ilxqtpanel.h" #include #include #include #include "fixx11h.h" class TrayIcon; class QSize; namespace LXQt { class GridLayout; } /** * @brief This makes our trayplugin */ class ILXQtPanelPlugin; class LXQtTray: public QFrame, QAbstractNativeEventFilter { Q_OBJECT Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize) public: LXQtTray(ILXQtPanelPlugin *plugin, QWidget* parent = 0); ~LXQtTray(); QSize iconSize() const { return mIconSize; } void setIconSize(QSize iconSize); bool nativeEventFilter(const QByteArray &eventType, void *message, long *); void realign(); signals: void iconSizeChanged(int iconSize); private slots: void startTray(); void stopTray(); private: VisualID getVisual(); void clientMessageEvent(xcb_generic_event_t *e); int clientMessage(WId _wid, Atom _msg, long unsigned int data0, long unsigned int data1 = 0, long unsigned int data2 = 0, long unsigned int data3 = 0, long unsigned int data4 = 0) const; void addIcon(Window id); TrayIcon* findIcon(Window trayId); bool mValid; Window mTrayId; QList mIcons; int mDamageEvent; int mDamageError; QSize mIconSize; LXQt::GridLayout *mLayout; ILXQtPanelPlugin *mPlugin; Atom _NET_SYSTEM_TRAY_OPCODE; Display* mDisplay; }; #endif lxqt-panel-0.10.0/plugin-tray/lxqttrayplugin.cpp000066400000000000000000000026011261500472700217460ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqttrayplugin.h" #include "lxqttray.h" LXQtTrayPlugin::LXQtTrayPlugin(const ILXQtPanelPluginStartupInfo &startupInfo) : QObject(), ILXQtPanelPlugin(startupInfo), mWidget(new LXQtTray(this)) { } LXQtTrayPlugin::~LXQtTrayPlugin() { delete mWidget; } QWidget *LXQtTrayPlugin::widget() { return mWidget; } void LXQtTrayPlugin::realign() { mWidget->realign(); } lxqt-panel-0.10.0/plugin-tray/lxqttrayplugin.h000066400000000000000000000037161261500472700214230ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2013 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTTRAYPLUGIN_H #define LXQTTRAYPLUGIN_H #include "../panel/ilxqtpanelplugin.h" #include class LXQtTray; class LXQtTrayPlugin : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: explicit LXQtTrayPlugin(const ILXQtPanelPluginStartupInfo &startupInfo); ~LXQtTrayPlugin(); virtual QWidget *widget(); virtual QString themeId() const { return "Tray"; } virtual Flags flags() const { return PreferRightAlignment | SingleInstance | NeedsHandle; } void realign(); bool isSeparate() const { return true; } private: LXQtTray *mWidget; }; class LXQtTrayPluginLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT // Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new LXQtTrayPlugin(startupInfo); } }; #endif // LXQTTRAYPLUGIN_H lxqt-panel-0.10.0/plugin-tray/resources/000077500000000000000000000000001261500472700201465ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-tray/resources/tray.desktop.in000066400000000000000000000002711261500472700231250ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. Icon=go-bottom #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-tray/translations/000077500000000000000000000000001261500472700206555ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-tray/translations/tray.ts000066400000000000000000000001161261500472700222020ustar00rootroot00000000000000 lxqt-panel-0.10.0/plugin-tray/translations/tray_ar.desktop000066400000000000000000000005301261500472700237070ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[ar]=الوصول إلى التطبيقات المخفيَّة المصغَّرة في دفَّة النّظام Name[ar]=دفَّة النِّظام lxqt-panel-0.10.0/plugin-tray/translations/tray_cs.desktop000066400000000000000000000004641261500472700237200ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[cs]=Přístup ke skrytým programům zmenšeným v oznamovací oblasti panelu Name[cs]=Oznamovací oblast panelu lxqt-panel-0.10.0/plugin-tray/translations/tray_cs_CZ.desktop000066400000000000000000000004531261500472700243120ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[cs_CZ]=Přistoupit k programům zmenšeným v oznamovací oblasti panelu Name[cs_CZ]=Oznamovací oblast lxqt-panel-0.10.0/plugin-tray/translations/tray_da.desktop000066400000000000000000000004341261500472700236740ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[da]=Adgang til skjulte programmer der er minimeret til systembakken Name[da]=Systembakke lxqt-panel-0.10.0/plugin-tray/translations/tray_da_DK.desktop000066400000000000000000000004421261500472700242510ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[da_DK]=Giver adgang til skjulte programmer, minimeret til systembakken Name[da_DK]=Systembakke lxqt-panel-0.10.0/plugin-tray/translations/tray_de.desktop000066400000000000000000000001721261500472700236770ustar00rootroot00000000000000# Translations Name[de]=Benachrichtigungsfläche Comment[de]=Benachrichtigungen von Anwendungen gem. System Tray Protocol lxqt-panel-0.10.0/plugin-tray/translations/tray_el.desktop000066400000000000000000000002611261500472700237060ustar00rootroot00000000000000Name[el]=Πλαίσιο συστήματος Comment[el]=Προβολή των ελαχιστοποιημένων εφαρμογών στο πλαίσιο συστήματος. lxqt-panel-0.10.0/plugin-tray/translations/tray_eo.desktop000066400000000000000000000004331261500472700237120ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[eo]=Akiri kaŝitajn aplikaĵojn malmaksimigitajn en la sistempleto Name[eo]=Sistempleto lxqt-panel-0.10.0/plugin-tray/translations/tray_es.desktop000066400000000000000000000004501261500472700237150ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[es]=Accede a aplicaciones ocultas minimizadas en la bandeja del sistema Name[es]=Bandeja del sistema lxqt-panel-0.10.0/plugin-tray/translations/tray_es_VE.desktop000066400000000000000000000004511261500472700243100ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[es_VE]=Acceder aplicaciones minimizadas en la barra de iconos de sistema Name[es_VE]=Barra de sistema lxqt-panel-0.10.0/plugin-tray/translations/tray_eu.desktop000066400000000000000000000004151261500472700237200ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[eu]=Bistaratu aplikazioak minimizatuta ataza-barran. Name[eu]=Ataza-barra lxqt-panel-0.10.0/plugin-tray/translations/tray_fi.desktop000066400000000000000000000004211261500472700237020ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[fi]=Käytä ilmoitusalueelle pienennettyjä sovelluksia Name[fi]=Ilmoitusalue lxqt-panel-0.10.0/plugin-tray/translations/tray_fr_FR.desktop000066400000000000000000000004671261500472700243140ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[fr_FR]=Accéder aux applications cachées minimisées dans la zone de notification Name[fr_FR]=Zone de notification lxqt-panel-0.10.0/plugin-tray/translations/tray_hu.desktop000066400000000000000000000004341261500472700237240ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[hu]=A paneltálcára minimalizált, rejtett alkalmazások elérése Name[hu]=Paneltálca lxqt-panel-0.10.0/plugin-tray/translations/tray_ia.desktop000066400000000000000000000003001261500472700236710ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Access hidden applications minimized in the system tray #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-tray/translations/tray_id_ID.desktop000066400000000000000000000003001261500472700242500ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Access hidden applications minimized in the system tray #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-tray/translations/tray_it.desktop000066400000000000000000000001441261500472700237220ustar00rootroot00000000000000Comment[it]=Accedi alle applicazioni minimizzate nel vassoio di sistema Name[it]=Vassoio di sistema lxqt-panel-0.10.0/plugin-tray/translations/tray_ja.desktop000066400000000000000000000004731261500472700237050ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[ja]=システムトレイに最小化されたアプリケーションを表示します Name[ja]=システムトレイ lxqt-panel-0.10.0/plugin-tray/translations/tray_ko.desktop000066400000000000000000000003001261500472700237110ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Access hidden applications minimized in the system tray #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-tray/translations/tray_lt.desktop000066400000000000000000000004331261500472700237260ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[lt]=Leidžia pasiekti į sistemos dėklą nuleistas programas Name[lt]=Sistemos dėklas lxqt-panel-0.10.0/plugin-tray/translations/tray_nl.desktop000066400000000000000000000003711261500472700237210ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[nl]=Verborgen pictogrammen tonen Name[nl]=Systeem vak lxqt-panel-0.10.0/plugin-tray/translations/tray_pl.desktop000066400000000000000000000003751261500472700237270ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[pl]=Udostępnia ukryte aplikacje Name[pl]=Tacka systemowa lxqt-panel-0.10.0/plugin-tray/translations/tray_pl_PL.desktop000066400000000000000000000004421261500472700243150ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[pl_PL]=Dostęp do aplikacji zminimalizowanych do tacki systemowej. Name[pl_PL]=Tacka systemowa lxqt-panel-0.10.0/plugin-tray/translations/tray_pt.desktop000066400000000000000000000004341261500472700237330ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Name[pt]=Bandeja do sistema Comment[pt]=Aceder às aplicações minimizadas na bandeja do sistema lxqt-panel-0.10.0/plugin-tray/translations/tray_pt_BR.desktop000066400000000000000000000004561261500472700243220ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[pt_BR]=Acesse aplicativos ocultos minimizados na área de notificação Name[pt_BR]=Área de notificação lxqt-panel-0.10.0/plugin-tray/translations/tray_ro_RO.desktop000066400000000000000000000004421261500472700243270ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[ro_RO]=Acceasți aplicații ascunse minimizate în tava sistem Name[ro_RO]=Zonă de notificare lxqt-panel-0.10.0/plugin-tray/translations/tray_ru.desktop000066400000000000000000000005011261500472700237310ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[ru]=Значки программ, свернутых в системный лоток. Name[ru]=Системный лотокlxqt-panel-0.10.0/plugin-tray/translations/tray_ru_RU.desktop000066400000000000000000000005071261500472700243450ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[ru_RU]=Значки программ, свернутых в системный лоток. Name[ru_RU]=Системный лотокlxqt-panel-0.10.0/plugin-tray/translations/tray_sk.desktop000066400000000000000000000004541261500472700237270ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[sk]=Prístup k skrytým aplikáciám minimalizovaným v oznamovacej oblasti Name[sk]=Oznamovacia oblasť lxqt-panel-0.10.0/plugin-tray/translations/tray_sl.desktop000066400000000000000000000004331261500472700237250ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[sl]=Dostopajte do programov pomanjšanih v sistemsko vrstico Name[sl]=Sistemska vrstica lxqt-panel-0.10.0/plugin-tray/translations/tray_sr.desktop000066400000000000000000000005451261500472700237370ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[sr]=Приступ скривеним програмима минимизованим у системску касету Name[sr]=Системска касета lxqt-panel-0.10.0/plugin-tray/translations/tray_sr@ijekavian.desktop000066400000000000000000000002761261500472700257220ustar00rootroot00000000000000Name[sr@ijekavian]=Системска касета Comment[sr@ijekavian]=Приступ скривеним програмима минимизованим у системску касету lxqt-panel-0.10.0/plugin-tray/translations/tray_sr@ijekavianlatin.desktop000066400000000000000000000002021261500472700267370ustar00rootroot00000000000000Name[sr@ijekavianlatin]=Sistemska kaseta Comment[sr@ijekavianlatin]=Pristup skrivenim programima minimizovanim u sistemsku kasetu lxqt-panel-0.10.0/plugin-tray/translations/tray_sr@latin.desktop000066400000000000000000000004531261500472700250650ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[sr@latin]=Pristup skrivenim programima minimizovanim u sistemsku kasetu Name[sr@latin]=Sistemska kaseta lxqt-panel-0.10.0/plugin-tray/translations/tray_th_TH.desktop000066400000000000000000000005451261500472700243210ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[th_TH]=เข้าใช้งานโปรแกรมที่ย่อเก็บอยู่ในถาดระบบ Name[th_TH]=ถาดระบบ lxqt-panel-0.10.0/plugin-tray/translations/tray_tr.desktop000066400000000000000000000004221261500472700237320ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[tr]=Sistem çekmecesinde gizli uygulamalara erişin Name[tr]=Sistem çekmecesi lxqt-panel-0.10.0/plugin-tray/translations/tray_uk.desktop000066400000000000000000000005061261500472700237270ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[uk]=Показує програми, згорнуті до системного лотка. Name[uk]=Системний лоток lxqt-panel-0.10.0/plugin-tray/translations/tray_zh_CN.GB2312.desktop000066400000000000000000000003001261500472700251000ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Access hidden applications minimized in the system tray #TRANSLATIONS_DIR=../translations # Translations lxqt-panel-0.10.0/plugin-tray/translations/tray_zh_CN.desktop000066400000000000000000000004211261500472700243050ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[zh_CN]=访问最小化到系统托盘的隐藏程序 Name[zh_CN]=系统托盘 lxqt-panel-0.10.0/plugin-tray/translations/tray_zh_TW.desktop000066400000000000000000000004101261500472700243350ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=System tray Comment=Display applications minimized to the system tray. #TRANSLATIONS_DIR=../translations # Translations Comment[zh_TW]=讀取縮小在系統列的隱藏程式 Name[zh_TW]=系統列 lxqt-panel-0.10.0/plugin-tray/trayicon.cpp000066400000000000000000000253131261500472700204740ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ // Warning: order of those include is important. #include #include #include #include #include #include #include #include "../panel/lxqtpanel.h" #include "trayicon.h" #include "xfitman.h" #include #include #include #include #include #define XEMBED_EMBEDDED_NOTIFY 0 static bool xError; /************************************************ ************************************************/ int windowErrorHandler(Display *d, XErrorEvent *e) { xError = true; if (e->error_code != BadWindow) { char str[1024]; XGetErrorText(d, e->error_code, str, 1024); qWarning() << "Error handler" << e->error_code << str; } return 0; } /************************************************ ************************************************/ TrayIcon::TrayIcon(Window iconId, QWidget* parent): QFrame(parent), mIconId(iconId), mWindowId(0), mIconSize(TRAY_ICON_SIZE_DEFAULT, TRAY_ICON_SIZE_DEFAULT), mDamage(0), mDisplay(QX11Info::display()) { // NOTE: // it's a good idea to save the return value of QX11Info::display(). // In Qt 5, this API is slower and has some limitations which can trigger crashes. // The XDisplay value is actally stored in QScreen object of the primary screen rather than // in a global variable. So when the parimary QScreen is being deleted and becomes invalid, // QX11Info::display() will fail and cause crash. Storing this value improves the efficiency and // also prevent potential crashes caused by this bug. setObjectName("TrayIcon"); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); mValid = init(); } /************************************************ ************************************************/ bool TrayIcon::init() { Display* dsp = mDisplay; XWindowAttributes attr; if (! XGetWindowAttributes(dsp, mIconId, &attr)) return false; // qDebug() << "New tray icon ***********************************"; // qDebug() << " * window id: " << hex << mIconId; // qDebug() << " * window name:" << xfitMan().getName(mIconId); // qDebug() << " * size (WxH): " << attr.width << "x" << attr.height; // qDebug() << " * color depth:" << attr.depth; unsigned long mask = 0; XSetWindowAttributes set_attr; Visual* visual = attr.visual; set_attr.colormap = attr.colormap; set_attr.background_pixel = 0; set_attr.border_pixel = 0; mask = CWColormap|CWBackPixel|CWBorderPixel; mWindowId = XCreateWindow(dsp, this->winId(), 0, 0, mIconSize.width(), mIconSize.height(), 0, attr.depth, InputOutput, visual, mask, &set_attr); xError = false; XErrorHandler old; old = XSetErrorHandler(windowErrorHandler); XReparentWindow(dsp, mIconId, mWindowId, 0, 0); XSync(dsp, false); XSetErrorHandler(old); if (xError) { qWarning() << "****************************************"; qWarning() << "* Not icon_swallow *"; qWarning() << "****************************************"; XDestroyWindow(dsp, mWindowId); return false; } { Atom acttype; int actfmt; unsigned long nbitem, bytes; unsigned char *data = 0; int ret; ret = XGetWindowProperty(dsp, mIconId, xfitMan().atom("_XEMBED_INFO"), 0, 2, false, xfitMan().atom("_XEMBED_INFO"), &acttype, &actfmt, &nbitem, &bytes, &data); if (ret == Success) { if (data) XFree(data); } else { qWarning() << "TrayIcon: xembed error"; XDestroyWindow(dsp, mWindowId); return false; } } { XEvent e; e.xclient.type = ClientMessage; e.xclient.serial = 0; e.xclient.send_event = True; e.xclient.message_type = xfitMan().atom("_XEMBED"); e.xclient.window = mIconId; e.xclient.format = 32; e.xclient.data.l[0] = CurrentTime; e.xclient.data.l[1] = XEMBED_EMBEDDED_NOTIFY; e.xclient.data.l[2] = 0; e.xclient.data.l[3] = mWindowId; e.xclient.data.l[4] = 0; XSendEvent(dsp, mIconId, false, 0xFFFFFF, &e); } XSelectInput(dsp, mIconId, StructureNotifyMask); mDamage = XDamageCreate(dsp, mIconId, XDamageReportRawRectangles); XCompositeRedirectWindow(dsp, mWindowId, CompositeRedirectManual); XMapWindow(dsp, mIconId); XMapRaised(dsp, mWindowId); XResizeWindow(dsp, mWindowId, mIconSize.width(), mIconSize.height()); XResizeWindow(dsp, mIconId, mIconSize.width(), mIconSize.height()); return true; } /************************************************ ************************************************/ TrayIcon::~TrayIcon() { Display* dsp = mDisplay; XSelectInput(dsp, mIconId, NoEventMask); if (mDamage) XDamageDestroy(dsp, mDamage); // reparent to root xError = false; XErrorHandler old = XSetErrorHandler(windowErrorHandler); XUnmapWindow(dsp, mIconId); XReparentWindow(dsp, mIconId, QX11Info::appRootWindow(), 0, 0); XDestroyWindow(dsp, mWindowId); XSync(dsp, False); XSetErrorHandler(old); } /************************************************ ************************************************/ QSize TrayIcon::sizeHint() const { QMargins margins = contentsMargins(); return QSize(margins.left() + mIconSize.width() + margins.right(), margins.top() + mIconSize.height() + margins.bottom() ); } /************************************************ ************************************************/ void TrayIcon::setIconSize(QSize iconSize) { mIconSize = iconSize; if (mWindowId) xfitMan().resizeWindow(mWindowId, mIconSize.width(), mIconSize.height()); if (mIconId) xfitMan().resizeWindow(mIconId, mIconSize.width(), mIconSize.height()); } /************************************************ ************************************************/ bool TrayIcon::event(QEvent *event) { switch (event->type()) { case QEvent::Paint: draw(static_cast(event)); break; case QEvent::Resize: { QRect rect = iconGeometry(); xfitMan().moveWindow(mWindowId, rect.left(), rect.top()); } break; case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: case QEvent::MouseButtonDblClick: event->accept(); break; default: break; } return QFrame::event(event); } /************************************************ ************************************************/ QRect TrayIcon::iconGeometry() { QRect res = QRect(QPoint(0, 0), mIconSize); res.moveCenter(QRect(0, 0, width(), height()).center()); return res; } /************************************************ ************************************************/ void TrayIcon::draw(QPaintEvent* /*event*/) { Display* dsp = mDisplay; XWindowAttributes attr; if (!XGetWindowAttributes(dsp, mIconId, &attr)) { qWarning() << "Paint error"; return; } QImage image; XImage* ximage = XGetImage(dsp, mIconId, 0, 0, attr.width, attr.height, AllPlanes, ZPixmap); if(ximage) { image = QImage((const uchar*) ximage->data, ximage->width, ximage->height, ximage->bytes_per_line, QImage::Format_ARGB32_Premultiplied); } else { qWarning() << " * Error image is NULL"; XClearArea(mDisplay, (Window)winId(), 0, 0, attr.width, attr.height, False); // for some unknown reason, XGetImage failed. try another less efficient method. // QScreen::grabWindow uses XCopyArea() internally. image = qApp->primaryScreen()->grabWindow(mIconId).toImage(); } // qDebug() << "Paint icon **************************************"; // qDebug() << " * XComposite: " << isXCompositeAvailable(); // qDebug() << " * Icon geometry:" << iconGeometry(); // qDebug() << " Icon"; // qDebug() << " * window id: " << hex << mIconId; // qDebug() << " * window name:" << xfitMan().getName(mIconId); // qDebug() << " * size (WxH): " << attr.width << "x" << attr.height; // qDebug() << " * pos (XxY): " << attr.x << attr.y; // qDebug() << " * color depth:" << attr.depth; // qDebug() << " XImage"; // qDebug() << " * size (WxH): " << ximage->width << "x" << ximage->height; // switch (ximage->format) // { // case XYBitmap: qDebug() << " * format: XYBitmap"; break; // case XYPixmap: qDebug() << " * format: XYPixmap"; break; // case ZPixmap: qDebug() << " * format: ZPixmap"; break; // } // qDebug() << " * color depth: " << ximage->depth; // qDebug() << " * bits per pixel:" << ximage->bits_per_pixel; // Draw QImage ........................... QPainter painter(this); QRect iconRect = iconGeometry(); if (image.size() != iconRect.size()) { image = image.scaled(iconRect.size(), Qt::KeepAspectRatio, Qt::SmoothTransformation); QRect r = image.rect(); r.moveCenter(iconRect.center()); iconRect = r; } // qDebug() << " Draw rect:" << iconRect; painter.drawImage(iconRect, image); if(ximage) XDestroyImage(ximage); // debug << "End paint icon **********************************"; } /************************************************ ************************************************/ bool TrayIcon::isXCompositeAvailable() { int eventBase, errorBase; return XCompositeQueryExtension(QX11Info::display(), &eventBase, &errorBase ); } lxqt-panel-0.10.0/plugin-tray/trayicon.h000066400000000000000000000037061261500472700201430ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef TRAYICON_H #define TRAYICON_H #include #include #include #include #include #define TRAY_ICON_SIZE_DEFAULT 24 class QWidget; class LXQtPanel; class TrayIcon: public QFrame { Q_OBJECT Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize) public: TrayIcon(Window iconId, QWidget* parent); virtual ~TrayIcon(); Window iconId() { return mIconId; } Window windowId() { return mWindowId; } bool isValid() const { return mValid; } QSize iconSize() const { return mIconSize; } void setIconSize(QSize iconSize); QSize sizeHint() const; protected: bool event(QEvent *event); void draw(QPaintEvent* event); private: bool init(); QRect iconGeometry(); Window mIconId; Window mWindowId; bool mValid; QSize mIconSize; Damage mDamage; Display* mDisplay; static bool isXCompositeAvailable(); }; #endif // TRAYICON_H lxqt-panel-0.10.0/plugin-tray/xfitman.cpp000066400000000000000000000212201261500472700203030ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXQt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Christopher "VdoP" Regali * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include // #include // #include // #include // #include #include #include #include "xfitman.h" #include #include #include /** * @file xfitman.cpp * @brief implements class Xfitman * @author Christopher "VdoP" Regali */ /* S ome requests from Cli*ents include type of the Client, for example the _NET_ACTIVE_WINDOW message. Currently the types can be 1 for normal applications, and 2 for pagers. See http://standards.freedesktop.org/wm-spec/latest/ar01s09.html#sourceindication */ #define SOURCE_NORMAL 1 #define SOURCE_PAGER 2 const XfitMan& xfitMan() { static XfitMan instance; return instance; } /** * @brief constructor: gets Display vars and registers us */ XfitMan::XfitMan() { root = (Window)QX11Info::appRootWindow(); } Atom XfitMan::atom(const char* atomName) { static QHash hash; if (hash.contains(atomName)) return hash.value(atomName); Atom atom = XInternAtom(QX11Info::display(), atomName, false); hash[atomName] = atom; return atom; } /** * @brief moves a window to a new position */ void XfitMan::moveWindow(Window _win, int _x, int _y) const { XMoveWindow(QX11Info::display(), _win, _x, _y); } /************************************************ ************************************************/ bool XfitMan::getWindowProperty(Window window, Atom atom, // property Atom reqType, // req_type unsigned long* resultLen,// nitems_return unsigned char** result // prop_return ) const { int format; unsigned long type, rest; return XGetWindowProperty(QX11Info::display(), window, atom, 0, 4096, false, reqType, &type, &format, resultLen, &rest, result) == Success; } /************************************************ ************************************************/ bool XfitMan::getRootWindowProperty(Atom atom, // property Atom reqType, // req_type unsigned long* resultLen,// nitems_return unsigned char** result // prop_return ) const { return getWindowProperty(root, atom, reqType, resultLen, result); } /** * @brief resizes a window to the given dimensions */ void XfitMan::resizeWindow(Window _wid, int _width, int _height) const { XResizeWindow(QX11Info::display(), _wid, _width, _height); } /** * @brief gets a windowpixmap from a window */ bool XfitMan::getClientIcon(Window _wid, QPixmap& _pixreturn) const { int format; ulong type, nitems, extra; ulong* data = 0; XGetWindowProperty(QX11Info::display(), _wid, atom("_NET_WM_ICON"), 0, LONG_MAX, False, AnyPropertyType, &type, &format, &nitems, &extra, (uchar**)&data); if (!data) { return false; } QImage img (data[0], data[1], QImage::Format_ARGB32); for (int i=0; iaddPixmap(QPixmap::fromImage(img)); } XFree(data); return true; } /** * @brief destructor */ XfitMan::~XfitMan() { } /** * @brief returns a windowname and sets _nameSource to the finally used Atom */ // i got the idea for this from taskbar-plugin of LXPanel - so credits fly out :) QString XfitMan::getWindowTitle(Window _wid) const { QString name = ""; //first try the modern net-wm ones unsigned long length; unsigned char *data = NULL; Atom utf8Atom = atom("UTF8_STRING"); if (getWindowProperty(_wid, atom("_NET_WM_VISIBLE_NAME"), utf8Atom, &length, &data)) { name = QString::fromUtf8((char*) data); XFree(data); } if (name.isEmpty()) { if (getWindowProperty(_wid, atom("_NET_WM_NAME"), utf8Atom, &length, &data)) { name = QString::fromUtf8((char*) data); XFree(data); } } if (name.isEmpty()) { if (getWindowProperty(_wid, atom("XA_WM_NAME"), XA_STRING, &length, &data)) { name = (char*) data; XFree(data); } } if (name.isEmpty()) { Status ok = XFetchName(QX11Info::display(), _wid, (char**) &data); name = QString((char*) data); if (0 != ok) XFree(data); } if (name.isEmpty()) { XTextProperty prop; if (XGetWMName(QX11Info::display(), _wid, &prop)) { name = QString::fromUtf8((char*) prop.value); XFree(prop.value); } } return name; } QString XfitMan::getApplicationName(Window _wid) const { XClassHint hint; QString ret; if (XGetClassHint(QX11Info::display(), _wid, &hint)) { if (hint.res_name) { ret = hint.res_name; XFree(hint.res_name); } if (hint.res_class) { XFree(hint.res_class); } } return ret; } /** * @brief sends a clientmessage to a window */ int XfitMan::clientMessage(Window _wid, Atom _msg, unsigned long data0, unsigned long data1, unsigned long data2, unsigned long data3, unsigned long data4) const { XClientMessageEvent msg; msg.window = _wid; msg.type = ClientMessage; msg.message_type = _msg; msg.send_event = true; msg.display = QX11Info::display(); msg.format = 32; msg.data.l[0] = data0; msg.data.l[1] = data1; msg.data.l[2] = data2; msg.data.l[3] = data3; msg.data.l[4] = data4; if (XSendEvent(QX11Info::display(), root, false, (SubstructureRedirectMask | SubstructureNotifyMask) , (XEvent *) &msg) == Success) return EXIT_SUCCESS; else return EXIT_FAILURE; } /** * @brief raises windows _wid */ void XfitMan::raiseWindow(Window _wid) const { clientMessage(_wid, atom("_NET_ACTIVE_WINDOW"), SOURCE_PAGER); } /************************************************ ************************************************/ void XfitMan::closeWindow(Window _wid) const { clientMessage(_wid, atom("_NET_CLOSE_WINDOW"), 0, // Timestamp SOURCE_PAGER); } void XfitMan::setIconGeometry(Window _wid, QRect* rect) const { Atom net_wm_icon_geometry = atom("_NET_WM_ICON_GEOMETRY"); if(!rect) XDeleteProperty(QX11Info::display(), _wid, net_wm_icon_geometry); else { long data[4]; data[0] = rect->x(); data[1] = rect->y(); data[2] = rect->width(); data[3] = rect->height(); XChangeProperty(QX11Info::display(), _wid, net_wm_icon_geometry, XA_CARDINAL, 32, PropModeReplace, (unsigned char*)data, 4); } } lxqt-panel-0.10.0/plugin-tray/xfitman.h000066400000000000000000000060441261500472700177570ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXQt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Christopher "VdoP" Regali * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTXFITMAN_H #define LXQTXFITMAN_H #include /** * @file xfitman.h * @author Christopher "VdoP" Regali * @brief handles all of our xlib-calls. */ /** * @brief manages the Xlib apicalls */ class XfitMan { public: XfitMan(); ~XfitMan(); static Atom atom(const char* atomName); void moveWindow(Window _win, int _x, int _y) const; void raiseWindow(Window _wid) const; void resizeWindow(Window _wid, int _width, int _height) const; void closeWindow(Window _wid) const; bool getClientIcon(Window _wid, QPixmap& _pixreturn) const; bool getClientIcon(Window _wid, QIcon *icon) const; void setIconGeometry(Window _wid, QRect* rect = 0) const; QString getWindowTitle(Window _wid) const; QString getApplicationName(Window _wid) const; int clientMessage(Window _wid, Atom _msg, long unsigned int data0, long unsigned int data1 = 0, long unsigned int data2 = 0, long unsigned int data3 = 0, long unsigned int data4 = 0) const; private: /** \warning Do not forget to XFree(result) after data are processed! */ bool getWindowProperty(Window window, Atom atom, // property Atom reqType, // req_type unsigned long* resultLen,// nitems_return unsigned char** result // prop_return ) const; /** \warning Do not forget to XFree(result) after data are processed! */ bool getRootWindowProperty(Atom atom, // property Atom reqType, // req_type unsigned long* resultLen,// nitems_return unsigned char** result // prop_return ) const; Window root; //the actual root window on the used screen }; const XfitMan& xfitMan(); #endif // LXQTXFITMAN_H lxqt-panel-0.10.0/plugin-volume/000077500000000000000000000000001261500472700164645ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-volume/CMakeLists.txt000066400000000000000000000021121261500472700212200ustar00rootroot00000000000000set(PLUGIN "volume") set(HEADERS lxqtvolume.h volumebutton.h volumepopup.h audiodevice.h lxqtvolumeconfiguration.h audioengine.h ) set(SOURCES ${PROJECT_SOURCE_DIR}/panel/lxqtpanelpluginconfigdialog.cpp lxqtvolume.cpp volumebutton.cpp volumepopup.cpp audiodevice.cpp lxqtvolumeconfiguration.cpp audioengine.cpp ossengine.cpp ) set(UIS lxqtvolumeconfiguration.ui ) set(LIBRARIES ${LIBRARIES} lxqt-globalkeys Qt5Xdg ) if(PULSEAUDIO_FOUND) add_definitions(-DUSE_PULSEAUDIO) include_directories(${PULSEAUDIO_INCLUDE_DIR}) set(HEADERS ${HEADERS} pulseaudioengine.h) set(SOURCES ${SOURCES} pulseaudioengine.cpp) set(MOCS ${MOCS} pulseaudioengine.h) set(LIBRARIES ${LIBRARIES} ${PULSEAUDIO_LIBRARY}) endif() if(ALSA_FOUND) add_definitions(-DUSE_ALSA) set(HEADERS ${HEADERS} alsaengine.h alsadevice.h) set(SOURCES ${SOURCES} alsaengine.cpp alsadevice.cpp) set(MOCS ${MOCS} alsaengine.h alsadevice.h) set(LIBRARIES ${LIBRARIES} ${ALSA_LIBRARIES}) endif() BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-volume/alsadevice.cpp000066400000000000000000000031401261500472700212660ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "alsadevice.h" AlsaDevice::AlsaDevice(AudioDeviceType t, AudioEngine *engine, QObject *parent) : AudioDevice(t, engine, parent), m_mixer(0), m_elem(0) { } void AlsaDevice::setMixer(snd_mixer_t *mixer) { if (m_mixer == mixer) return; m_mixer = mixer; emit mixerChanged(); } void AlsaDevice::setElement(snd_mixer_elem_t *elem) { if (m_elem == elem) return; m_elem = elem; emit elementChanged(); } void AlsaDevice::setCardName(const QString &cardName) { if (m_cardName == cardName) return; m_cardName = cardName; emit cardNameChanged(); } lxqt-panel-0.10.0/plugin-volume/alsadevice.h000066400000000000000000000033771261500472700207470ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef ALSADEVICE_H #define ALSADEVICE_H #include "audiodevice.h" #include #include #include class AlsaDevice : public AudioDevice { Q_OBJECT public: AlsaDevice(AudioDeviceType t, AudioEngine *engine, QObject *parent = 0); snd_mixer_t *mixer() const { return m_mixer; } snd_mixer_elem_t *element() const { return m_elem; } const QString &cardName() const { return m_cardName; } void setMixer(snd_mixer_t *mixer); void setElement(snd_mixer_elem_t *elem); void setCardName(const QString &cardName); signals: void mixerChanged(); void elementChanged(); void cardNameChanged(); private: snd_mixer_t *m_mixer; snd_mixer_elem_t *m_elem; QString m_cardName; }; #endif // ALSADEVICE_H lxqt-panel-0.10.0/plugin-volume/alsaengine.cpp000066400000000000000000000155121261500472700213020ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "alsaengine.h" #include "alsadevice.h" #include #include #include AlsaEngine *AlsaEngine::m_instance = 0; static int alsa_elem_event_callback(snd_mixer_elem_t *elem, unsigned int mask) { AlsaEngine *engine = AlsaEngine::instance(); if (engine) engine->updateDevice(engine->getDeviceByAlsaElem(elem)); return 0; } static int alsa_mixer_event_callback(snd_mixer_t *mixer, unsigned int mask, snd_mixer_elem_t *elem) { return 0; } AlsaEngine::AlsaEngine(QObject *parent) : AudioEngine(parent) { discoverDevices(); m_instance = this; } AlsaEngine *AlsaEngine::instance() { return m_instance; } int AlsaEngine::volumeMax(AudioDevice *device) const { // We already did snd_mixer_selem_set_playback_volume_range(mixerElem, 0, 100); // during initialization. So we can return 100 directly here. return 100; } AlsaDevice *AlsaEngine::getDeviceByAlsaElem(snd_mixer_elem_t *elem) const { foreach (AudioDevice *device, m_sinks) { AlsaDevice *dev = qobject_cast(device); if (!dev || !dev->element()) continue; if (dev->element() == elem) return dev; } return 0; } void AlsaEngine::commitDeviceVolume(AudioDevice *device) { AlsaDevice *dev = qobject_cast(device); if (!dev || !dev->element()) return; long value = dev->volume(); snd_mixer_selem_set_playback_volume_all(dev->element(), value); } void AlsaEngine::setMute(AudioDevice *device, bool state) { AlsaDevice *dev = qobject_cast(device); if (!dev || !dev->element()) return; if (snd_mixer_selem_has_playback_switch(dev->element())) snd_mixer_selem_set_playback_switch_all(dev->element(), (int)!state); else if (state) dev->setVolume(0); } void AlsaEngine::updateDevice(AlsaDevice *device) { if (!device) return; long value; snd_mixer_selem_get_playback_volume(device->element(), (snd_mixer_selem_channel_id_t)0, &value); // qDebug() << "updateDevice:" << device->name() << value; device->setVolumeNoCommit(value); if (snd_mixer_selem_has_playback_switch(device->element())) { int mute; snd_mixer_selem_get_playback_switch(device->element(), (snd_mixer_selem_channel_id_t)0, &mute); device->setMuteNoCommit(!(bool)mute); } } void AlsaEngine::driveAlsaEventHandling(int fd) { snd_mixer_handle_events(m_mixerMap.value(fd)); } void AlsaEngine::discoverDevices() { int error; int cardNum = -1; while (1) { error = snd_card_next(&cardNum); if (cardNum < 0) break; char str[64]; sprintf(str, "hw:%i", cardNum); snd_ctl_t *cardHandle; if ((error = snd_ctl_open(&cardHandle, str, 0)) < 0) { qWarning("Can't open card %i: %s\n", cardNum, snd_strerror(error)); continue; } snd_ctl_card_info_t *cardInfo; snd_ctl_card_info_alloca(&cardInfo); QString cardName = QString::fromLatin1(snd_ctl_card_info_get_name(cardInfo)); if (cardName.isEmpty()) cardName = QString::fromLatin1(str); if ((error = snd_ctl_card_info(cardHandle, cardInfo)) < 0) { qWarning("Can't get info for card %i: %s\n", cardNum, snd_strerror(error)); } else { // setup mixer and iterate over channels snd_mixer_t *mixer = 0; snd_mixer_open(&mixer, 0); snd_mixer_attach(mixer, str); snd_mixer_selem_register(mixer, NULL, NULL); snd_mixer_load(mixer); // setup event handler for mixer snd_mixer_set_callback(mixer, alsa_mixer_event_callback); // setup eventloop handling struct pollfd pfd; if (snd_mixer_poll_descriptors(mixer, &pfd, 1)) { QSocketNotifier *notifier = new QSocketNotifier(pfd.fd, QSocketNotifier::Read, this); connect(notifier, SIGNAL(activated(int)), this, SLOT(driveAlsaEventHandling(int))); m_mixerMap.insert(pfd.fd, mixer); } snd_mixer_elem_t *mixerElem = 0; mixerElem = snd_mixer_first_elem(mixer); while (mixerElem) { // check if we have a Sink or Source if (snd_mixer_selem_has_playback_volume(mixerElem)) { AlsaDevice *dev = new AlsaDevice(Sink, this, this); dev->setName(QString::fromLatin1(snd_mixer_selem_get_name(mixerElem))); dev->setIndex(cardNum); dev->setDescription(cardName + " - " + dev->name()); // set alsa specific members dev->setCardName(QString::fromLatin1(str)); dev->setMixer(mixer); dev->setElement(mixerElem); // set the range of volume to 0-100 snd_mixer_selem_set_playback_volume_range(mixerElem, 0, 100); long value; snd_mixer_selem_get_playback_volume(mixerElem, (snd_mixer_selem_channel_id_t)0, &value); // qDebug() << dev->name() << "initial volume" << value; dev->setVolumeNoCommit(value); if (snd_mixer_selem_has_playback_switch(mixerElem)) { int mute; snd_mixer_selem_get_playback_switch(mixerElem, (snd_mixer_selem_channel_id_t)0, &mute); dev->setMuteNoCommit(!(bool)mute); } // register event callback snd_mixer_elem_set_callback(mixerElem, alsa_elem_event_callback); m_sinks.append(dev); } mixerElem = snd_mixer_elem_next(mixerElem); } } snd_ctl_close(cardHandle); } snd_config_update_free_global(); } lxqt-panel-0.10.0/plugin-volume/alsaengine.h000066400000000000000000000035611261500472700207500ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef ALSAENGINE_H #define ALSAENGINE_H #include "audioengine.h" #include #include #include #include #include class AlsaDevice; class QSocketNotifier; class AlsaEngine : public AudioEngine { Q_OBJECT public: AlsaEngine(QObject *parent = 0); static AlsaEngine *instance(); virtual const QString backendName() const { return QLatin1String("Alsa"); } int volumeMax(AudioDevice *device) const; AlsaDevice *getDeviceByAlsaElem(snd_mixer_elem_t *elem) const; public slots: void commitDeviceVolume(AudioDevice *device); void setMute(AudioDevice *device, bool state); void updateDevice(AlsaDevice *device); private slots: void driveAlsaEventHandling(int fd); private: void discoverDevices(); QMap m_mixerMap; static AlsaEngine *m_instance; }; #endif // ALSAENGINE_H lxqt-panel-0.10.0/plugin-volume/audiodevice.cpp000066400000000000000000000051551261500472700214570ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "audiodevice.h" #include "audioengine.h" AudioDevice::AudioDevice(AudioDeviceType t, AudioEngine *engine, QObject *parent) : QObject(parent), m_engine(engine), m_volume(0), m_mute(false), m_type(t), m_index(0) { } AudioDevice::~AudioDevice() { } void AudioDevice::setName(const QString &name) { if (m_name == name) return; m_name = name; emit nameChanged(m_name); } void AudioDevice::setDescription(const QString &description) { if (m_description == description) return; m_description = description; emit descriptionChanged(m_description); } void AudioDevice::setIndex(uint index) { if (m_index == index) return; m_index = index; emit indexChanged(index); } // this is just for setting the internal volume void AudioDevice::setVolumeNoCommit(int volume) { if (m_engine) volume = m_engine->volumeBounded(volume, this); if (m_volume == volume) return; m_volume = volume; emit volumeChanged(m_volume); } void AudioDevice::toggleMute() { setMute(!m_mute); } void AudioDevice::setMute(bool state) { if (m_mute == state) return; setMuteNoCommit(state); if (m_engine) m_engine->setMute(this, state); } void AudioDevice::setMuteNoCommit(bool state) { if (m_mute == state) return; m_mute = state; emit muteChanged(m_mute); } // this performs a volume change on the device void AudioDevice::setVolume(int volume) { if (m_volume == volume) return; setVolumeNoCommit(volume); setMute(false); if (m_engine) m_engine->commitDeviceVolume(this); } lxqt-panel-0.10.0/plugin-volume/audiodevice.h000066400000000000000000000051621261500472700211220ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef AUDIODEVICE_H #define AUDIODEVICE_H #include class AudioEngine; typedef enum AudioDeviceType { Sink = 0, Source = 1, PulseAudioDeviceTypeLength } AudioDeviceType; class AudioDevice : public QObject { Q_OBJECT Q_PROPERTY(int volume READ volume WRITE setVolume NOTIFY volumeChanged) Q_PROPERTY(AudioDeviceType type READ type CONSTANT) public: AudioDevice(AudioDeviceType t, AudioEngine *engine, QObject *parent = 0); ~AudioDevice(); // the volume can range from 0 to 100. int volume() const { return m_volume; } bool mute() const { return m_mute; } AudioDeviceType type() const { return m_type; } const QString &name() const { return m_name; } const QString &description() const { return m_description; } uint index() const { return m_index; } void setName(const QString &name); void setDescription(const QString &description); void setIndex(uint index); AudioEngine* engine() { return m_engine; } public slots: // the volume can range from 0 to 100. void setVolume(int volume); void setVolumeNoCommit(int volume); void toggleMute(); void setMute(bool state); void setMuteNoCommit(bool state); signals: void volumeChanged(int volume); void muteChanged(bool state); void nameChanged(const QString &name); void descriptionChanged(const QString &description); void indexChanged(uint index); private: AudioEngine *m_engine; int m_volume; // the volume can range from 0 to 100. bool m_mute; AudioDeviceType m_type; QString m_name; uint m_index; QString m_description; }; #endif // AUDIODEVICE_H lxqt-panel-0.10.0/plugin-volume/audioengine.cpp000066400000000000000000000033161261500472700214620ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "audioengine.h" #include "audiodevice.h" #include #include AudioEngine::AudioEngine(QObject *parent) : QObject(parent) { } AudioEngine::~AudioEngine() { qDeleteAll(m_sinks); m_sinks.clear(); } int AudioEngine::volumeBounded(int volume, AudioDevice* device) const { int maximum = volumeMax(device); double v = ((double) volume / 100.0) * maximum; double bounded = qBound(0, v, maximum); return qRound((bounded / maximum) * 100); } void AudioEngine::mute(AudioDevice *device) { setMute(device, true); } void AudioEngine::unmute(AudioDevice *device) { setMute(device, false); } void AudioEngine::setIgnoreMaxVolume(bool ignore) { Q_UNUSED(ignore) } lxqt-panel-0.10.0/plugin-volume/audioengine.h000066400000000000000000000035121261500472700211250ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef AUDIOENGINE_H #define AUDIOENGINE_H #include #include #include class AudioDevice; class AudioEngine : public QObject { Q_OBJECT public: AudioEngine(QObject *parent = 0); ~AudioEngine(); const QList &sinks() const { return m_sinks; } virtual int volumeMax(AudioDevice *device) const = 0; virtual int volumeBounded(int volume, AudioDevice *device) const; virtual const QString backendName() const = 0; public slots: virtual void commitDeviceVolume(AudioDevice *device) = 0; virtual void setMute(AudioDevice *device, bool state) = 0; void mute(AudioDevice *device); void unmute(AudioDevice *device); virtual void setIgnoreMaxVolume(bool ignore); signals: void sinkListChanged(); protected: QList m_sinks; }; #endif // AUDIOENGINE_H lxqt-panel-0.10.0/plugin-volume/lxqtvolume.cpp000066400000000000000000000220211261500472700214050ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtvolume.h" #include "volumebutton.h" #include "volumepopup.h" #include "lxqtvolumeconfiguration.h" #include "audiodevice.h" #ifdef USE_PULSEAUDIO #include "pulseaudioengine.h" #endif #ifdef USE_ALSA #include "alsaengine.h" #endif #include "ossengine.h" #include #include #include #include #include #define DEFAULT_UP_SHORTCUT "XF86AudioRaiseVolume" #define DEFAULT_DOWN_SHORTCUT "XF86AudioLowerVolume" #define DEFAULT_MUTE_SHORTCUT "XF86AudioMute" LXQtVolume::LXQtVolume(const ILXQtPanelPluginStartupInfo &startupInfo): QObject(), ILXQtPanelPlugin(startupInfo), m_engine(0), m_defaultSinkIndex(0), m_defaultSink(0) { m_volumeButton = new VolumeButton(this); m_notification = new LXQt::Notification("", this); m_keyVolumeUp = GlobalKeyShortcut::Client::instance()->addAction(QString(), QString("/panel/%1/up").arg(settings()->group()), tr("Increase sound volume"), this); if (m_keyVolumeUp) { connect(m_keyVolumeUp, &GlobalKeyShortcut::Action::registrationFinished, this, &LXQtVolume::shortcutRegistered); connect(m_keyVolumeUp, SIGNAL(activated()), this, SLOT(handleShortcutVolumeUp())); } m_keyVolumeDown = GlobalKeyShortcut::Client::instance()->addAction(QString(), QString("/panel/%1/down").arg(settings()->group()), tr("Decrease sound volume"), this); if (m_keyVolumeDown) { connect(m_keyVolumeDown, &GlobalKeyShortcut::Action::registrationFinished, this, &LXQtVolume::shortcutRegistered); connect(m_keyVolumeDown, SIGNAL(activated()), this, SLOT(handleShortcutVolumeDown())); } m_keyMuteToggle = GlobalKeyShortcut::Client::instance()->addAction(QString(), QString("/panel/%1/mute").arg(settings()->group()), tr("Mute/unmute sound volume"), this); if (m_keyMuteToggle) { connect(m_keyMuteToggle, &GlobalKeyShortcut::Action::registrationFinished, this, &LXQtVolume::shortcutRegistered); connect(m_keyMuteToggle, SIGNAL(activated()), this, SLOT(handleShortcutVolumeMute())); } settingsChanged(); } LXQtVolume::~LXQtVolume() { delete m_volumeButton; } void LXQtVolume::shortcutRegistered() { GlobalKeyShortcut::Action * const shortcut = qobject_cast(sender()); QString shortcutNotRegistered; if (shortcut == m_keyVolumeUp) { disconnect(m_keyVolumeUp, &GlobalKeyShortcut::Action::registrationFinished, this, &LXQtVolume::shortcutRegistered); if (m_keyVolumeUp->shortcut().isEmpty()) { m_keyVolumeUp->changeShortcut(DEFAULT_UP_SHORTCUT); if (m_keyVolumeUp->shortcut().isEmpty()) { shortcutNotRegistered = " '" DEFAULT_UP_SHORTCUT "'"; } } } else if (shortcut == m_keyVolumeDown) { disconnect(m_keyVolumeDown, &GlobalKeyShortcut::Action::registrationFinished, this, &LXQtVolume::shortcutRegistered); if (m_keyVolumeDown->shortcut().isEmpty()) { m_keyVolumeDown->changeShortcut(DEFAULT_DOWN_SHORTCUT); if (m_keyVolumeDown->shortcut().isEmpty()) { shortcutNotRegistered += " '" DEFAULT_DOWN_SHORTCUT "'"; } } } else if (shortcut == m_keyMuteToggle) { disconnect(m_keyMuteToggle, &GlobalKeyShortcut::Action::registrationFinished, this, &LXQtVolume::shortcutRegistered); if (m_keyMuteToggle->shortcut().isEmpty()) { m_keyMuteToggle->changeShortcut(DEFAULT_MUTE_SHORTCUT); if (m_keyMuteToggle->shortcut().isEmpty()) { shortcutNotRegistered += " '" DEFAULT_MUTE_SHORTCUT "'"; } } } if(!shortcutNotRegistered.isEmpty()) { m_notification->setSummary(tr("Volume Control: The following shortcuts can not be registered: %1").arg(shortcutNotRegistered)); m_notification->update(); } m_notification->setTimeout(1000); m_notification->setUrgencyHint(LXQt::Notification::UrgencyLow); } void LXQtVolume::setAudioEngine(AudioEngine *engine) { if (m_engine) { if (m_engine->backendName() == engine->backendName()) return; m_volumeButton->volumePopup()->setDevice(0); disconnect(m_engine, 0, 0, 0); delete m_engine; m_engine = 0; } m_engine = engine; connect(m_engine, &AudioEngine::sinkListChanged, this, &LXQtVolume::handleSinkListChanged); handleSinkListChanged(); } void LXQtVolume::settingsChanged() { m_defaultSinkIndex = settings()->value(SETTINGS_DEVICE, SETTINGS_DEFAULT_DEVICE).toInt(); QString engineName = settings()->value(SETTINGS_AUDIO_ENGINE, SETTINGS_DEFAULT_AUDIO_ENGINE).toString(); qDebug() << "settingsChanged" << engineName; const bool new_engine = !m_engine || m_engine->backendName() != engineName; if (new_engine) { #if defined(USE_PULSEAUDIO) && defined(USE_ALSA) if (engineName == QLatin1String("PulseAudio")) setAudioEngine(new PulseAudioEngine(this)); else if (engineName == QLatin1String("Alsa")) setAudioEngine(new AlsaEngine(this)); else // fallback to OSS setAudioEngine(new OssEngine(this)); #elif defined(USE_PULSEAUDIO) if (engineName == QLatin1String("PulseAudio")) setAudioEngine(new PulseAudioEngine(this)); else // fallback to OSS setAudioEngine(new OssEngine(this)); #elif defined(USE_ALSA) if (engineName == QLatin1String("Alsa")) setAudioEngine(new AlsaEngine(this)); else // fallback to OSS setAudioEngine(new OssEngine(this)); #else // No other backends are available, fallback to OSS setAudioEngine(new OssEngine(this)); #endif } m_volumeButton->setShowOnClicked(settings()->value(SETTINGS_SHOW_ON_LEFTCLICK, SETTINGS_DEFAULT_SHOW_ON_LEFTCLICK).toBool()); m_volumeButton->setMuteOnMiddleClick(settings()->value(SETTINGS_MUTE_ON_MIDDLECLICK, SETTINGS_DEFAULT_MUTE_ON_MIDDLECLICK).toBool()); m_volumeButton->setMixerCommand(settings()->value(SETTINGS_MIXER_COMMAND, SETTINGS_DEFAULT_MIXER_COMMAND).toString()); m_volumeButton->volumePopup()->setSliderStep(settings()->value(SETTINGS_STEP, SETTINGS_DEFAULT_STEP).toInt()); if (!new_engine) handleSinkListChanged(); } void LXQtVolume::handleSinkListChanged() { if (m_engine) { if (m_engine->sinks().count() > 0) { m_defaultSink = m_engine->sinks().at(qBound(0, m_defaultSinkIndex, m_engine->sinks().count()-1)); m_volumeButton->volumePopup()->setDevice(m_defaultSink); m_engine->setIgnoreMaxVolume(settings()->value(SETTINGS_IGNORE_MAX_VOLUME, SETTINGS_DEFAULT_IGNORE_MAX_VOLUME).toBool()); } if (m_configDialog) m_configDialog->setSinkList(m_engine->sinks()); } } void LXQtVolume::handleShortcutVolumeUp() { if (m_defaultSink) { m_defaultSink->setVolume(m_defaultSink->volume() + settings()->value(SETTINGS_STEP, SETTINGS_DEFAULT_STEP).toInt()); m_notification->setSummary(tr("Volume: %1").arg(QString::number(m_defaultSink->volume()))); m_notification->update(); } } void LXQtVolume::handleShortcutVolumeDown() { if (m_defaultSink) { m_defaultSink->setVolume(m_defaultSink->volume() - settings()->value(SETTINGS_STEP, SETTINGS_DEFAULT_STEP).toInt()); m_notification->setSummary(tr("Volume: %1").arg(QString::number(m_defaultSink->volume()))); m_notification->update(); } } void LXQtVolume::handleShortcutVolumeMute() { if (m_defaultSink) m_defaultSink->toggleMute(); } QWidget *LXQtVolume::widget() { return m_volumeButton; } void LXQtVolume::realign() { } QDialog *LXQtVolume::configureDialog() { if(!m_configDialog) { m_configDialog = new LXQtVolumeConfiguration(*settings()); m_configDialog->setAttribute(Qt::WA_DeleteOnClose, true); if (m_engine) m_configDialog->setSinkList(m_engine->sinks()); } return m_configDialog; } #undef DEFAULT_UP_SHORTCUT #undef DEFAULT_DOWN_SHORTCUT #undef DEFAULT_MUTE_SHORTCUT lxqt-panel-0.10.0/plugin-volume/lxqtvolume.h000066400000000000000000000053121261500472700210560ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTVOLUME_H #define LXQTVOLUME_H #include "../panel/ilxqtpanelplugin.h" #include #include #include class VolumeButton; class AudioEngine; class AudioDevice; namespace LXQt { class Notification; } namespace GlobalKeyShortcut { class Action; } class LXQtVolumeConfiguration; class LXQtVolume : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: LXQtVolume(const ILXQtPanelPluginStartupInfo &startupInfo); ~LXQtVolume(); virtual QWidget *widget(); virtual QString themeId() const { return "Volume"; } virtual ILXQtPanelPlugin::Flags flags() const { return PreferRightAlignment | HaveConfigDialog ; } void realign(); QDialog *configureDialog(); void setAudioEngine(AudioEngine *engine); protected slots: virtual void settingsChanged(); void handleSinkListChanged(); void handleShortcutVolumeUp(); void handleShortcutVolumeDown(); void handleShortcutVolumeMute(); void shortcutRegistered(); private: AudioEngine *m_engine; VolumeButton *m_volumeButton; int m_defaultSinkIndex; AudioDevice *m_defaultSink; GlobalKeyShortcut::Action *m_keyVolumeUp; GlobalKeyShortcut::Action *m_keyVolumeDown; GlobalKeyShortcut::Action *m_keyMuteToggle; LXQt::Notification *m_notification; QPointer m_configDialog; }; class LXQtVolumePluginLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new LXQtVolume(startupInfo); } }; #endif // LXQTVOLUME_H lxqt-panel-0.10.0/plugin-volume/lxqtvolumeconfiguration.cpp000066400000000000000000000131071261500472700242020ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtvolumeconfiguration.h" #include "ui_lxqtvolumeconfiguration.h" #include "audiodevice.h" #include #include LXQtVolumeConfiguration::LXQtVolumeConfiguration(QSettings &settings, QWidget *parent) : LXQtPanelPluginConfigDialog(settings, parent), ui(new Ui::LXQtVolumeConfiguration) { ui->setupUi(this); loadSettings(); connect(ui->ossRadioButton, SIGNAL(toggled(bool)), this, SLOT(audioEngineChanged(bool))); connect(ui->devAddedCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(sinkSelectionChanged(int))); connect(ui->buttons, SIGNAL(clicked(QAbstractButton*)), this, SLOT(dialogButtonsAction(QAbstractButton*))); connect(ui->showOnClickCheckBox, SIGNAL(toggled(bool)), this, SLOT(showOnClickedChanged(bool))); connect(ui->muteOnMiddleClickCheckBox, SIGNAL(toggled(bool)), this, SLOT(muteOnMiddleClickChanged(bool))); connect(ui->mixerLineEdit, SIGNAL(textChanged(QString)), this, SLOT(mixerLineEditChanged(QString))); connect(ui->stepSpinBox, SIGNAL(valueChanged(int)), this, SLOT(stepSpinBoxChanged(int))); connect(ui->ignoreMaxVolumeCheckBox, SIGNAL(toggled(bool)), this, SLOT(ignoreMaxVolumeCheckBoxChanged(bool))); // currently, this option is only supported by the pulse audio backend if(!ui->pulseAudioRadioButton->isChecked()) ui->ignoreMaxVolumeCheckBox->setEnabled(false); #ifdef USE_PULSEAUDIO connect(ui->pulseAudioRadioButton, SIGNAL(toggled(bool)), this, SLOT(audioEngineChanged(bool))); #else ui->pulseAudioRadioButton->setVisible(false); #endif #ifdef USE_ALSA connect(ui->alsaRadioButton, SIGNAL(toggled(bool)), this, SLOT(audioEngineChanged(bool))); #else ui->alsaRadioButton->setVisible(false); #endif } LXQtVolumeConfiguration::~LXQtVolumeConfiguration() { delete ui; } void LXQtVolumeConfiguration::setSinkList(const QList sinks) { // preserve the current index, as we change the list int tmp_index = settings().value(SETTINGS_DEVICE, SETTINGS_DEFAULT_DEVICE).toInt(); ui->devAddedCombo->clear(); foreach (const AudioDevice *dev, sinks) { ui->devAddedCombo->addItem(dev->description(), dev->index()); } ui->devAddedCombo->setCurrentIndex(tmp_index); } void LXQtVolumeConfiguration::audioEngineChanged(bool checked) { if (!checked) return; bool canIgnoreMaxVolume = false; if (ui->pulseAudioRadioButton->isChecked()) { settings().setValue(SETTINGS_AUDIO_ENGINE, "PulseAudio"); canIgnoreMaxVolume = true; } else if(ui->alsaRadioButton->isChecked()) settings().setValue(SETTINGS_AUDIO_ENGINE, "Alsa"); else settings().setValue(SETTINGS_AUDIO_ENGINE, "Oss"); ui->ignoreMaxVolumeCheckBox->setEnabled(canIgnoreMaxVolume); } void LXQtVolumeConfiguration::sinkSelectionChanged(int index) { settings().setValue(SETTINGS_DEVICE, index >= 0 ? index : 0); } void LXQtVolumeConfiguration::showOnClickedChanged(bool state) { settings().setValue(SETTINGS_SHOW_ON_LEFTCLICK, state); } void LXQtVolumeConfiguration::muteOnMiddleClickChanged(bool state) { settings().setValue(SETTINGS_MUTE_ON_MIDDLECLICK, state); } void LXQtVolumeConfiguration::mixerLineEditChanged(const QString &command) { settings().setValue(SETTINGS_MIXER_COMMAND, command); } void LXQtVolumeConfiguration::stepSpinBoxChanged(int step) { settings().setValue(SETTINGS_STEP, step); } void LXQtVolumeConfiguration::ignoreMaxVolumeCheckBoxChanged(bool state) { settings().setValue(SETTINGS_IGNORE_MAX_VOLUME, state); } void LXQtVolumeConfiguration::loadSettings() { QString engine = settings().value(SETTINGS_AUDIO_ENGINE, SETTINGS_DEFAULT_AUDIO_ENGINE).toString().toLower(); if (engine == "pulseaudio") ui->pulseAudioRadioButton->setChecked(true); else if (engine == "alsa") ui->alsaRadioButton->setChecked(true); else ui->ossRadioButton->setChecked(true); setComboboxIndexByData(ui->devAddedCombo, settings().value(SETTINGS_DEVICE, SETTINGS_DEFAULT_DEVICE), 1); ui->showOnClickCheckBox->setChecked(settings().value(SETTINGS_SHOW_ON_LEFTCLICK, SETTINGS_DEFAULT_SHOW_ON_LEFTCLICK).toBool()); ui->muteOnMiddleClickCheckBox->setChecked(settings().value(SETTINGS_MUTE_ON_MIDDLECLICK, SETTINGS_DEFAULT_MUTE_ON_MIDDLECLICK).toBool()); ui->mixerLineEdit->setText(settings().value(SETTINGS_MIXER_COMMAND, SETTINGS_DEFAULT_MIXER_COMMAND).toString()); ui->stepSpinBox->setValue(settings().value(SETTINGS_STEP, SETTINGS_DEFAULT_STEP).toInt()); ui->ignoreMaxVolumeCheckBox->setChecked(settings().value(SETTINGS_IGNORE_MAX_VOLUME, SETTINGS_DEFAULT_IGNORE_MAX_VOLUME).toBool()); } lxqt-panel-0.10.0/plugin-volume/lxqtvolumeconfiguration.h000066400000000000000000000057071261500472700236560ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2010-2011 Razor team * Authors: * Alexander Sokoloff * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQTVOLUMECONFIGURATION_H #define LXQTVOLUMECONFIGURATION_H #include "../panel/lxqtpanelpluginconfigdialog.h" #include #define SETTINGS_MIXER_COMMAND "mixerCommand" #define SETTINGS_SHOW_ON_LEFTCLICK "showOnLeftClick" #define SETTINGS_MUTE_ON_MIDDLECLICK "showOnMiddleClick" #define SETTINGS_DEVICE "device" #define SETTINGS_STEP "volumeAdjustStep" #define SETTINGS_IGNORE_MAX_VOLUME "ignoreMaxVolume" #define SETTINGS_AUDIO_ENGINE "audioEngine" #define SETTINGS_DEFAULT_SHOW_ON_LEFTCLICK true #define SETTINGS_DEFAULT_MUTE_ON_MIDDLECLICK true #define SETTINGS_DEFAULT_DEVICE 0 #define SETTINGS_DEFAULT_STEP 3 #ifdef USE_PULSEAUDIO #define SETTINGS_DEFAULT_MIXER_COMMAND "pavucontrol" #define SETTINGS_DEFAULT_AUDIO_ENGINE "PulseAudio" #elif defined(USE_ALSA) #define SETTINGS_DEFAULT_MIXER_COMMAND "qasmixer" #define SETTINGS_DEFAULT_AUDIO_ENGINE "Alsa" #else #define SETTINGS_DEFAULT_MIXER_COMMAND "" #define SETTINGS_DEFAULT_AUDIO_ENGINE "Oss" #endif #define SETTINGS_DEFAULT_IGNORE_MAX_VOLUME false class AudioDevice; namespace Ui { class LXQtVolumeConfiguration; } class LXQtVolumeConfiguration : public LXQtPanelPluginConfigDialog { Q_OBJECT public: explicit LXQtVolumeConfiguration(QSettings &settings, QWidget *parent = 0); ~LXQtVolumeConfiguration(); public slots: void setSinkList(const QList sinks); void audioEngineChanged(bool checked); void sinkSelectionChanged(int index); void showOnClickedChanged(bool state); void muteOnMiddleClickChanged(bool state); void mixerLineEditChanged(const QString &command); void stepSpinBoxChanged(int step); void ignoreMaxVolumeCheckBoxChanged(bool state); protected slots: virtual void loadSettings(); private: Ui::LXQtVolumeConfiguration *ui; }; #endif // LXQTVOLUMECONFIGURATION_H lxqt-panel-0.10.0/plugin-volume/lxqtvolumeconfiguration.ui000066400000000000000000000105231261500472700240340ustar00rootroot00000000000000 LXQtVolumeConfiguration 0 0 306 407 Volume Control Settings Device to control Alsa PulseAudio OSS Behavior Mute on middle click Show on mouse click Allow volume beyond 100% (0dB) 0 0 Volume adjust step 1 External Mixer Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Reset buttons accepted() LXQtVolumeConfiguration accept() 248 254 157 274 buttons rejected() LXQtVolumeConfiguration reject() 316 260 286 274 lxqt-panel-0.10.0/plugin-volume/ossengine.cpp000066400000000000000000000062141261500472700211650ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXQt - a lightweight, Qt based, desktop toolset * http://lxqt.org * * Copyright: 2014 LXQt team * Authors: * Hong Jen Yee (PCMan) * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "ossengine.h" #include "audiodevice.h" #include #include #include #include #include #include #include #if defined(__FreeBSD__) || defined(__NetBSD__) #include #elif defined(__linux__) || defined(__Linux__) #include #else #error "Not supported platform" #endif OssEngine::OssEngine(QObject *parent) : AudioEngine(parent), m_mixer(-1), m_device(NULL), m_leftVolume(0), m_rightVolume(0) { qDebug() << "OssEngine"; initMixer(); } OssEngine::~OssEngine() { if(m_mixer >= 0) close(m_mixer); } void OssEngine::initMixer() { m_mixer = open ("/dev/mixer", O_RDWR, 0); if (m_mixer < 0) { qDebug() << "/dev/mixer cannot be opened"; return; } qDebug() << "InitMixer:" << m_mixer; m_device = new AudioDevice(Sink, this); m_device->setName("Master"); m_device->setIndex(0); m_device->setDescription("Master Volume"); m_device->setMuteNoCommit(false); updateVolume(); m_sinks.append(m_device); emit sinkListChanged(); } void OssEngine::updateVolume() { if(m_mixer < 0 || !m_device) return; int volumes; if(ioctl(m_mixer, MIXER_READ(SOUND_MIXER_VOLUME), &volumes) < 0) { qDebug() << "updateVolume() failed" << errno; } m_leftVolume = volumes & 0xff; // left m_rightVolume = (volumes >> 8) & 0xff; // right qDebug() << "volume:" << m_leftVolume << m_rightVolume; m_device->setVolumeNoCommit(m_leftVolume); } void OssEngine::setVolume(int volume) { if(m_mixer < 0) return; int volumes = (volume << 8) + volume; if(ioctl(m_mixer, MIXER_WRITE(SOUND_MIXER_VOLUME), &volumes) < 0) { qDebug() << "setVolume() failed" << errno; } else { qDebug() << "setVolume()" << volume; } } void OssEngine::commitDeviceVolume(AudioDevice *device) { if (!device) return; setVolume(device->volume()); } void OssEngine::setMute(AudioDevice *device, bool state) { if(state) setVolume(0); else setVolume(m_leftVolume); } void OssEngine::setIgnoreMaxVolume(bool ignore) { // TODO } lxqt-panel-0.10.0/plugin-volume/ossengine.h000066400000000000000000000035641261500472700206370ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef OSSENGINE_H #define OSSENGINE_H #include "audioengine.h" #include #include #include class AudioDevice; class OssEngine : public AudioEngine { Q_OBJECT public: OssEngine(QObject *parent = 0); ~OssEngine(); virtual const QString backendName() const { return QLatin1String("Oss"); } virtual int volumeMax(AudioDevice */*device*/) const { return 100; } virtual void commitDeviceVolume(AudioDevice *device); virtual void setMute(AudioDevice *device, bool state); virtual void setIgnoreMaxVolume(bool ignore); signals: void sinkInfoChanged(AudioDevice *device); void readyChanged(bool ready); private: void initMixer(); void updateVolume(); void setVolume(int volume); private: int m_mixer; // oss mixer fd AudioDevice* m_device; int m_leftVolume; int m_rightVolume; }; #endif // OSSENGINE_H lxqt-panel-0.10.0/plugin-volume/pulseaudioengine.cpp000066400000000000000000000302311261500472700225270ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "pulseaudioengine.h" #include "audiodevice.h" #include #include //#define PULSEAUDIO_ENGINE_DEBUG static void sinkInfoCallback(pa_context *context, const pa_sink_info *info, int isLast, void *userdata) { PulseAudioEngine *pulseEngine = static_cast(userdata); QMap stateMap; stateMap[PA_SINK_INVALID_STATE] = "n/a"; stateMap[PA_SINK_RUNNING] = "RUNNING"; stateMap[PA_SINK_IDLE] = "IDLE"; stateMap[PA_SINK_SUSPENDED] = "SUSPENDED"; if (isLast < 0) { pa_threaded_mainloop_signal(pulseEngine->mainloop(), 0); qWarning() << QString("Failed to get sink information: %1").arg(pa_strerror(pa_context_errno(context))); return; } if (isLast) { pa_threaded_mainloop_signal(pulseEngine->mainloop(), 0); return; } pulseEngine->addOrUpdateSink(info); } static void contextEventCallback(pa_context *context, const char *name, pa_proplist *p, void *userdata) { #ifdef PULSEAUDIO_ENGINE_DEBUG qWarning("event received %s", name); #endif } static void contextStateCallback(pa_context *context, void *userdata) { PulseAudioEngine *pulseEngine = reinterpret_cast(userdata); // update internal state pa_context_state_t state = pa_context_get_state(context); pulseEngine->setContextState(state); #ifdef PULSEAUDIO_ENGINE_DEBUG switch (state) { case PA_CONTEXT_UNCONNECTED: qWarning("context unconnected"); break; case PA_CONTEXT_CONNECTING: qWarning("context connecting"); break; case PA_CONTEXT_AUTHORIZING: qWarning("context authorizing"); break; case PA_CONTEXT_SETTING_NAME: qWarning("context setting name"); break; case PA_CONTEXT_READY: qWarning("context ready"); break; case PA_CONTEXT_FAILED: qWarning("context failed"); break; case PA_CONTEXT_TERMINATED: qWarning("context terminated"); break; default: qWarning("we should never hit this state"); } #endif pa_threaded_mainloop_signal(pulseEngine->mainloop(), 0); } static void contextSuccessCallback(pa_context *context, int success, void *userdata) { Q_UNUSED(context); Q_UNUSED(success); Q_UNUSED(userdata); PulseAudioEngine *pulseEngine = reinterpret_cast(userdata); pa_threaded_mainloop_signal(pulseEngine->mainloop(), 0); } static void contextSubscriptionCallback(pa_context *context, pa_subscription_event_type_t t, uint32_t idx, void *userdata) { PulseAudioEngine *pulseEngine = reinterpret_cast(userdata); if (PA_SUBSCRIPTION_EVENT_REMOVE == t) pulseEngine->removeSink(idx); else pulseEngine->requestSinkInfoUpdate(idx); } PulseAudioEngine::PulseAudioEngine(QObject *parent) : AudioEngine(parent), m_context(0), m_contextState(PA_CONTEXT_UNCONNECTED), m_ready(false), m_maximumVolume(PA_VOLUME_UI_MAX) { qRegisterMetaType("pa_context_state_t"); m_reconnectionTimer.setSingleShot(true); m_reconnectionTimer.setInterval(100); connect(&m_reconnectionTimer, SIGNAL(timeout()), this, SLOT(connectContext())); m_mainLoop = pa_threaded_mainloop_new(); if (m_mainLoop == 0) { qWarning("Unable to create pulseaudio mainloop"); return; } if (pa_threaded_mainloop_start(m_mainLoop) != 0) { qWarning("Unable to start pulseaudio mainloop"); pa_threaded_mainloop_free(m_mainLoop); m_mainLoop = 0; return; } m_mainLoopApi = pa_threaded_mainloop_get_api(m_mainLoop); connect(this, SIGNAL(contextStateChanged(pa_context_state_t)), this, SLOT(handleContextStateChanged())); connectContext(); } PulseAudioEngine::~PulseAudioEngine() { if (m_context) { pa_context_unref(m_context); m_context = 0; } if (m_mainLoop) { pa_threaded_mainloop_free(m_mainLoop); m_mainLoop = 0; } } void PulseAudioEngine::removeSink(uint32_t idx) { auto dev_i = std::find_if(m_sinks.begin(), m_sinks.end(), [idx] (AudioDevice * dev) { return dev->index() == idx; }); if (m_sinks.end() == dev_i) return; QScopedPointer dev{*dev_i}; m_cVolumeMap.remove(dev.data()); m_sinks.erase(dev_i); emit sinkListChanged(); } void PulseAudioEngine::addOrUpdateSink(const pa_sink_info *info) { AudioDevice *dev = 0; bool newSink = false; QString name = QString::fromUtf8(info->name); foreach (AudioDevice *device, m_sinks) { if (device->name() == name) { dev = device; break; } } if (!dev) { dev = new AudioDevice(Sink, this); newSink = true; } dev->setName(name); dev->setIndex(info->index); dev->setDescription(QString::fromUtf8(info->description)); dev->setMuteNoCommit(info->mute); // TODO: save separately? alsa does not have it m_cVolumeMap.insert(dev, info->volume); pa_volume_t v = pa_cvolume_avg(&(info->volume)); // convert real volume to percentage dev->setVolumeNoCommit(((double)v * 100.0) / m_maximumVolume); if (newSink) { //keep the sinks sorted by index() m_sinks.insert( std::lower_bound(m_sinks.begin(), m_sinks.end(), dev, [] (AudioDevice const * const a, AudioDevice const * const b) { return a->name() < b->name(); }) , dev ); emit sinkListChanged(); } } void PulseAudioEngine::requestSinkInfoUpdate(uint32_t idx) { emit sinkInfoChanged(idx); } void PulseAudioEngine::commitDeviceVolume(AudioDevice *device) { if (!device || !m_ready) return; // convert from percentage to real volume value pa_volume_t v = ((double)device->volume() / 100.0) * m_maximumVolume; pa_cvolume tmpVolume = m_cVolumeMap.value(device); pa_cvolume *volume = pa_cvolume_set(&tmpVolume, tmpVolume.channels, v); // qDebug() << "PulseAudioEngine::commitDeviceVolume" << v; pa_threaded_mainloop_lock(m_mainLoop); pa_operation *operation; if (device->type() == Sink) operation = pa_context_set_sink_volume_by_index(m_context, device->index(), volume, contextSuccessCallback, this); else operation = pa_context_set_source_volume_by_index(m_context, device->index(), volume, contextSuccessCallback, this); while (pa_operation_get_state(operation) == PA_OPERATION_RUNNING) pa_threaded_mainloop_wait(m_mainLoop); pa_operation_unref(operation); pa_threaded_mainloop_unlock(m_mainLoop); } void PulseAudioEngine::retrieveSinks() { if (!m_ready) return; pa_threaded_mainloop_lock(m_mainLoop); pa_operation *operation; operation = pa_context_get_sink_info_list(m_context, sinkInfoCallback, this); while (pa_operation_get_state(operation) == PA_OPERATION_RUNNING) pa_threaded_mainloop_wait(m_mainLoop); pa_operation_unref(operation); pa_threaded_mainloop_unlock(m_mainLoop); } void PulseAudioEngine::setupSubscription() { if (!m_ready) return; connect(this, &PulseAudioEngine::sinkInfoChanged, this, &PulseAudioEngine::retrieveSinkInfo, Qt::QueuedConnection); pa_context_set_subscribe_callback(m_context, contextSubscriptionCallback, this); pa_threaded_mainloop_lock(m_mainLoop); pa_operation *operation; operation = pa_context_subscribe(m_context, PA_SUBSCRIPTION_MASK_SINK, contextSuccessCallback, this); while (pa_operation_get_state(operation) == PA_OPERATION_RUNNING) pa_threaded_mainloop_wait(m_mainLoop); pa_operation_unref(operation); pa_threaded_mainloop_unlock(m_mainLoop); } void PulseAudioEngine::handleContextStateChanged() { if (m_contextState == PA_CONTEXT_FAILED || m_contextState == PA_CONTEXT_TERMINATED) { qWarning("LXQt-Volume: Context connection failed or terminated lets try to reconnect"); m_reconnectionTimer.start(); } } void PulseAudioEngine::connectContext() { bool keepGoing = true; bool ok = false; m_reconnectionTimer.stop(); if (!m_mainLoop) return; pa_threaded_mainloop_lock(m_mainLoop); if (m_context) { pa_context_unref(m_context); m_context = 0; } m_context = pa_context_new(m_mainLoopApi, "lxqt-volume"); pa_context_set_state_callback(m_context, contextStateCallback, this); pa_context_set_event_callback(m_context, contextEventCallback, this); if (!m_context) { pa_threaded_mainloop_unlock(m_mainLoop); m_reconnectionTimer.start(); return; } if (pa_context_connect(m_context, NULL, (pa_context_flags_t)0, NULL) < 0) { pa_threaded_mainloop_unlock(m_mainLoop); m_reconnectionTimer.start(); return; } while (keepGoing) { switch (m_contextState) { case PA_CONTEXT_CONNECTING: case PA_CONTEXT_AUTHORIZING: case PA_CONTEXT_SETTING_NAME: break; case PA_CONTEXT_READY: keepGoing = false; ok = true; break; case PA_CONTEXT_TERMINATED: keepGoing = false; break; case PA_CONTEXT_FAILED: default: qWarning() << QString("Connection failure: %1").arg(pa_strerror(pa_context_errno(m_context))); keepGoing = false; } if (keepGoing) pa_threaded_mainloop_wait(m_mainLoop); } pa_threaded_mainloop_unlock(m_mainLoop); if (ok) { retrieveSinks(); setupSubscription(); } else { m_reconnectionTimer.start(); } } void PulseAudioEngine::retrieveSinkInfo(uint32_t idx) { if (!m_ready) return; pa_threaded_mainloop_lock(m_mainLoop); pa_operation *operation; operation = pa_context_get_sink_info_by_index(m_context, idx, sinkInfoCallback, this); while (pa_operation_get_state(operation) == PA_OPERATION_RUNNING) pa_threaded_mainloop_wait(m_mainLoop); pa_operation_unref(operation); pa_threaded_mainloop_unlock(m_mainLoop); } void PulseAudioEngine::setMute(AudioDevice *device, bool state) { if (!m_ready) return; pa_threaded_mainloop_lock(m_mainLoop); pa_operation *operation; operation = pa_context_set_sink_mute_by_index(m_context, device->index(), state, contextSuccessCallback, this); while (pa_operation_get_state(operation) == PA_OPERATION_RUNNING) pa_threaded_mainloop_wait(m_mainLoop); pa_operation_unref(operation); pa_threaded_mainloop_unlock(m_mainLoop); } void PulseAudioEngine::setContextState(pa_context_state_t state) { if (m_contextState == state) return; m_contextState = state; // update ready member as it depends on state if (m_ready == (m_contextState == PA_CONTEXT_READY)) return; m_ready = (m_contextState == PA_CONTEXT_READY); emit contextStateChanged(m_contextState); emit readyChanged(m_ready); } void PulseAudioEngine::setIgnoreMaxVolume(bool ignore) { if (ignore) m_maximumVolume = PA_VOLUME_UI_MAX; else m_maximumVolume = pa_sw_volume_from_dB(0); } lxqt-panel-0.10.0/plugin-volume/pulseaudioengine.h000066400000000000000000000054011261500472700221750ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef PULSEAUDIOENGINE_H #define PULSEAUDIOENGINE_H #include "audioengine.h" #include #include #include #include #include // PA_VOLUME_UI_MAX is only supported since pulseaudio 0.9.23 #ifndef PA_VOLUME_UI_MAX #define PA_VOLUME_UI_MAX (pa_sw_volume_from_dB(+11.0)) #endif class AudioDevice; class PulseAudioEngine : public AudioEngine { Q_OBJECT public: PulseAudioEngine(QObject *parent = 0); ~PulseAudioEngine(); virtual const QString backendName() const { return QLatin1String("PulseAudio"); } int volumeMax(AudioDevice */*device*/) const { return m_maximumVolume; } void requestSinkInfoUpdate(uint32_t idx); void removeSink(uint32_t idx); void addOrUpdateSink(const pa_sink_info *info); pa_context_state_t contextState() const { return m_contextState; } bool ready() const { return m_ready; } pa_threaded_mainloop *mainloop() const { return m_mainLoop; } public slots: void commitDeviceVolume(AudioDevice *device); void retrieveSinkInfo(uint32_t idx); void setMute(AudioDevice *device, bool state); void setContextState(pa_context_state_t state); void setIgnoreMaxVolume(bool ignore); signals: void sinkInfoChanged(uint32_t idx); void contextStateChanged(pa_context_state_t state); void readyChanged(bool ready); private slots: void handleContextStateChanged(); void connectContext(); private: void retrieveSinks(); void setupSubscription(); pa_mainloop_api *m_mainLoopApi; pa_threaded_mainloop *m_mainLoop; pa_context *m_context; pa_context_state_t m_contextState; bool m_ready; QTimer m_reconnectionTimer; int m_maximumVolume; QMap m_cVolumeMap; }; #endif // PULSEAUDIOENGINE_H lxqt-panel-0.10.0/plugin-volume/resources/000077500000000000000000000000001261500472700204765ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-volume/resources/volume.desktop.in000066400000000000000000000003261261500472700240060ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. Icon=multimedia-volume-control #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-volume/translations/000077500000000000000000000000001261500472700212055ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-volume/translations/volume.ts000066400000000000000000000073311261500472700230700ustar00rootroot00000000000000 LXQtVolume Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration Volume Control Settings Device to control Alsa PulseAudio OSS Behavior Mute on middle click Show on mouse click Allow volume beyond 100% (0dB) Volume adjust step External Mixer VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_ar.ts000066400000000000000000000077641261500472700235640ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered إظهار سطح المكتب: ﻻ يمكن تسجيل اختصار لوحة المفاتيح العامُّ `%1` Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration Volume Control Settings Device to control Alsa PulseAudio OSS Behavior Mute on middle click Show on mouse click Allow volume beyond 100% (0dB) Volume adjust step External Mixer VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_cs.desktop000066400000000000000000000005041261500472700245730ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[cs]=Ovládejte hlasitost systému a spusťte svůj upřednostňovaný směšovač. Name[cs]=Ovládání hlasitosti lxqt-panel-0.10.0/plugin-volume/translations/volume_cs.ts000066400000000000000000000102171261500472700235520ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Ukázat plochu: Celkovou zkratku '%1' nelze zapsat Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings Nastavení ovládání hlasitosti Volume Control Settings Device to control Zařízení k ovládání Alsa Alsa PulseAudio PulseAudio OSS Behavior Chování Mute on middle click Ztlumit při klepnutí prostředním tlačítkem Show on mouse click Ukázat při klepnutí myší Allow volume beyond 100% (0dB) Povolit hlasitost přes 100% (0dB) Volume adjust step Krok úpravy hlasitosti External Mixer Vnější směšovač VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_cs_CZ.desktop000066400000000000000000000005121261500472700251660ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[cs_CZ]=Ovládejte hlasitost systému a spusťte svůj upřednostňovaný směšovač. Name[cs_CZ]=Ovládání hlasitosti lxqt-panel-0.10.0/plugin-volume/translations/volume_cs_CZ.ts000066400000000000000000000102221261500472700241420ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Ukázat plochu: Celkovou zkratku '%1' nelze zapsat Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings Nastavení ovládání hlasitosti Volume Control Settings Device to control Zařízení k ovládání Alsa Alsa PulseAudio PulseAudio OSS Behavior Chování Mute on middle click Ztlumit při klepnutí prostředním tlačítkem Show on mouse click Ukázat při klepnutí myší Allow volume beyond 100% (0dB) Povolit hlasitost přes 100% (0dB) Volume adjust step Krok úpravy hlasitosti External Mixer Vnější směšovač VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_da.desktop000066400000000000000000000004541261500472700245560ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[da]=Kontroller systemets lydstyrke og start din foretrukne mixer. Name[da]=Lydstyrkekontrol lxqt-panel-0.10.0/plugin-volume/translations/volume_da_DK.desktop000066400000000000000000000004621261500472700251330ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[da_DK]=Kontroller systemets lydstyrke og start din foretrukne mixer. Name[da_DK]=Lydstyrkekontrol lxqt-panel-0.10.0/plugin-volume/translations/volume_da_DK.ts000066400000000000000000000101451261500472700241070ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Vis Skrivebord: Global genvej '%1' kan ikke registreres Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings Indstillinger for LXQt Lydstyrkekontrol Volume Control Settings Device to control Enhed som styres Alsa ALSA PulseAudio PulseAudio OSS Behavior Adfærd Mute on middle click Lydløs ved midterklik Show on mouse click Vis ved museklik Allow volume beyond 100% (0dB) Tillad lydstyrke over 100% (0dB) Volume adjust step Trin for lydstyrkejustering External Mixer Ekstern mixer VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_de.desktop000066400000000000000000000001561261500472700245610ustar00rootroot00000000000000Name[de]=Lautstärkeeinstellung Comment[de]=Systemlautstärke einstellen und den bevorzugten Mischer starten. lxqt-panel-0.10.0/plugin-volume/translations/volume_de.ts000066400000000000000000000074651261500472700235500ustar00rootroot00000000000000 LXQtVolume Increase sound volume Lautstärke erhöhen Decrease sound volume Lautstärke verringern Mute/unmute sound volume Lautstärke stummschalten/wiederherstellen Volume Control: The following shortcuts can not be registered: %1 Lautstärkeeinstellung: Die folgenden Tastaturkürzel konnten nicht registriert werden: %1 Volume: %1 Lautstärke: %1 LXQtVolumeConfiguration Volume Control Settings Lautstärkeeinstellungen Device to control Zu steuerndes Gerät Alsa ALSA PulseAudio PulseAudio OSS OSS Behavior Verhalten Mute on middle click Stummschaltung per Mittelklick Show on mouse click Bei Mausklick anzeigen Allow volume beyond 100% (0dB) Lautstärke über 100% (0dB) erlauben Volume adjust step Lautstärkeschrittweite External Mixer Externer Mischer VolumePopup Launch mixer Mischer starten Mi&xer &Mischer lxqt-panel-0.10.0/plugin-volume/translations/volume_el.desktop000066400000000000000000000003101261500472700245610ustar00rootroot00000000000000Name[el]=Έλεγχος έντασης ήχου Comment[el]=Ελέγξτε την ένταση ήχου του συστήματος και εκκινήστε τον προτιμώμενο μίκτη. lxqt-panel-0.10.0/plugin-volume/translations/volume_el.ts000066400000000000000000000111701261500472700235440ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Εμφάνιση επιφάνειας εργασίας: Δεν είναι δυνατή η καταχώριση της καθολικής συντόμευσης "%1" Increase sound volume Αύξηση της έντασης του ήχου Decrease sound volume Μείωση της έντασης του ήχου Mute/unmute sound volume Σίγαση/αποσίγαση της έντασης του ήχου Volume Control: The following shortcuts can not be registered: %1 Έλεγχος έντασης: Οι ακόλουθες συντομεύσεις μπόρεσαν να καταχωρηθούν: %1 Volume: %1 Ένταση: %1 LXQtVolumeConfiguration LXQt Volume Control Settings Ρυθμίσεις ελέγχου έντασης ήχου του LXQt Volume Control Settings Ρυθμίσεις του ελέγχου έντασης του ήχου Device to control Συσκευή για έλεγχο Alsa Alsa PulseAudio PulseAudio OSS OSS Behavior Συμπεριφορά Mute on middle click Σίγαση με μεσαίο κλικ Show on mouse click Εμφάνιση με κλικ Allow volume beyond 100% (0dB) Να επιτρέπεται ένταση πάνω από 100% (0dB) Volume adjust step Βήμα προσαρμογής έντασης External Mixer Εξωτερικός μίκτης VolumePopup Launch mixer Εκτέλεση του μίκτη Mixer Μίκτης lxqt-panel-0.10.0/plugin-volume/translations/volume_eo.ts000066400000000000000000000077061261500472700235610ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Montri labortablon: ĉiea klavkombino '%1' ne registreblas Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration Volume Control Settings Device to control Alsa PulseAudio OSS Behavior Mute on middle click Show on mouse click Allow volume beyond 100% (0dB) Volume adjust step External Mixer VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_es.desktop000066400000000000000000000004571261500472700246040ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[es]=Controla el volumen del sistema y lanza su mezclador preferido Name[es]=Control de volumen lxqt-panel-0.10.0/plugin-volume/translations/volume_es.ts000066400000000000000000000102231261500472700235510ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Mostrar Escritorio: Atajo global '%1' no puede ser registrado Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings Opciones del Control de Volumen de LXQt Volume Control Settings Device to control Dispositivo de control Alsa Alsa PulseAudio PulseAudio OSS Behavior Comportamiento Mute on middle click Silenciar con click central Show on mouse click Mostrar con un click Allow volume beyond 100% (0dB) Permitir que el volumen sobrepase el 100% (0dB) Volume adjust step Tamaño del ajuste de volumen External Mixer Mezclador externo VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_es_VE.desktop000066400000000000000000000004751261500472700251760ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[es_VE]=Controla el volumen del sistema y lanza el mezclador escogido referido Name[es_VE]=Control de volumen lxqt-panel-0.10.0/plugin-volume/translations/volume_es_VE.ts000066400000000000000000000102021261500472700241400ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Mostrar escritorio: Acceso de teclado global '%1' no puede registrarse Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings Preferencias de control de volumen de LXQt Volume Control Settings Device to control Disositivo Alsa Alsa PulseAudio PulseAudio OSS Behavior Comportamiento Mute on middle click Silenciar en clic medio Show on mouse click Mostrar en clic de raton Allow volume beyond 100% (0dB) permitir volumen mas alla de 100% (0db) Volume adjust step paso de ajuste de volumen External Mixer Mexclador VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_eu.desktop000066400000000000000000000004631261500472700246030ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[eu]=Kontrolatu sistemaren bolumena eta abiarazi zure gogoko nahasgailua. Name[eu]=Bolumen-kontrola lxqt-panel-0.10.0/plugin-volume/translations/volume_eu.ts000066400000000000000000000102351261500472700235560ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Erakutsi mahaigaina: Ezin da '%1' lasterbide globala erregistratu Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings LXQt bolumen-kontrolaren ezarpenak Volume Control Settings Device to control Kontrolatu beharreko gailua Alsa Alsa PulseAudio PulseAudio OSS Behavior Portaera Mute on middle click Mututu erdiko botoiarekin klikatzean Show on mouse click Erakutsi saguarekin klikatzean Allow volume beyond 100% (0dB) Baimendu % 100etik (0dB) gorako bolumena Volume adjust step Bolumen-doikuntzaren pausoa External Mixer Kanpoko nahastailea VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_fi.desktop000066400000000000000000000005111261500472700245620ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[fi]=Hallitse järjestelmän äänenvoimakkuutta, ja käynnistä suosimasi mikseri. Name[fi]=Äänenvoimakkuuden hallinta lxqt-panel-0.10.0/plugin-volume/translations/volume_fi.ts000066400000000000000000000102611261500472700235420ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Näytä työpöytä: globaalia pikanäppäintä '%1' ei voi rekisteröidä Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings LXQtin äänenhallinnan asetukset Volume Control Settings Device to control Hallittava laite Alsa Alsa PulseAudio PulseAudio OSS Behavior Toiminta Mute on middle click Vaimenna hiiren keskimmäisen painikkeen painalluksella Show on mouse click Näytä hiiren painalluksella Allow volume beyond 100% (0dB) Salli yli 100 %:n äänenvoimakkuus (0 dB) Volume adjust step Äänenvoimakkuuden säätöväli External Mixer Ulkoinen mikseri VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_fr_FR.ts000066400000000000000000000077251261500472700241550ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Montrer le bureau : le raccourci global '%1' ne peut pas être défini Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration Volume Control Settings Device to control Alsa PulseAudio OSS Behavior Mute on middle click Show on mouse click Allow volume beyond 100% (0dB) Volume adjust step External Mixer VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_hu.desktop000066400000000000000000000004301261500472700246000ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[hu]=A rendszer hangerejének beállítása Name[hu]=Hangerőszabályzó lxqt-panel-0.10.0/plugin-volume/translations/volume_hu.ts000066400000000000000000000073131261500472700235640ustar00rootroot00000000000000 LXQtVolume Increase sound volume Hangosítás Decrease sound volume Halkítás Mute/unmute sound volume Némítás/megszólaltatás Volume Control: The following shortcuts can not be registered: %1 Hangerőszabályozó: A %1 gyorsbillentyű regisztrálhatatlan Volume: %1 Hangerő: %1 LXQtVolumeConfiguration Volume Control Settings Hangszabályzó beállítás Device to control Eszközbeállítás Alsa PulseAudio OSS Behavior Működés Mute on middle click Középkattintásra némul Show on mouse click Egérkattintásra látszik Allow volume beyond 100% (0dB) Hangerő tartomány 100% (0dB) Volume adjust step Lépésköz External Mixer Külső keverő VolumePopup Launch mixer Keverő futtatása Mixer Keverő lxqt-panel-0.10.0/plugin-volume/translations/volume_hu_HU.ts000066400000000000000000000073161261500472700241630ustar00rootroot00000000000000 LXQtVolume Increase sound volume Hangosítás Decrease sound volume Halkítás Mute/unmute sound volume Némítás/megszólaltatás Volume Control: The following shortcuts can not be registered: %1 Hangerőszabályozó: A %1 gyorsbillentyű regisztrálhatatlan Volume: %1 Hangerő: %1 LXQtVolumeConfiguration Volume Control Settings Hangszabályzó beállítás Device to control Eszközbeállítás Alsa PulseAudio OSS Behavior Működés Mute on middle click Középkattintásra némul Show on mouse click Egérkattintásra látszik Allow volume beyond 100% (0dB) Hangerő tartomány 100% (0dB) Volume adjust step Lépésköz External Mixer Külső keverő VolumePopup Launch mixer Keverő futtatása Mixer Keverő lxqt-panel-0.10.0/plugin-volume/translations/volume_it.desktop000066400000000000000000000001471261500472700246050ustar00rootroot00000000000000Name[it]=Controllo del volume Comment[it]=Controlla il volume del sistema e avvia il mixer preferito lxqt-panel-0.10.0/plugin-volume/translations/volume_it.ts000066400000000000000000000102651261500472700235640ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Mostra desktop: la scorciatoia globale '%1' non può essere registrata Increase sound volume Alza volume Decrease sound volume Abbassa volume Mute/unmute sound volume Muta/smuta audio Volume Control: The following shortcuts can not be registered: %1 Controllo volume: la scorciatoia globale '%1' non può essere registrata Volume: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings Impostazioni del controllo del volume di LXQt Volume Control Settings Impostazioni controllo volume Device to control Dispositivo da controllare Alsa Alsa PulseAudio PulseAudio OSS OSS Behavior Comportamento Mute on middle click Muta al click centrale del mouse Show on mouse click Mostra al click del mouse Allow volume beyond 100% (0dB) Permetti volume oltre il 100% (0dB) Volume adjust step Valore di regolazione del volume External Mixer Mixer esterno VolumePopup Launch mixer Avvia mixer Mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_ja.desktop000066400000000000000000000003221261500472700245560ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name[ja]=音量調節 Comment[ja]=システムの音量を制御したり、ミキサーを起動したりします #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-volume/translations/volume_ja.ts000066400000000000000000000074541261500472700235500ustar00rootroot00000000000000 LXQtVolume Increase sound volume 音量を上げる Decrease sound volume 音量を下げる Mute/unmute sound volume ミュート/解除 Volume Control: The following shortcuts can not be registered: %1 音量制御: このショートカットは登録することができません: %1 Volume: %1 音量: %1 LXQtVolumeConfiguration Volume Control Settings 音量制御の設定 Device to control 制御するデバイス Alsa ALSA PulseAudio PulseAudio OSS OSS Behavior 挙動 Mute on middle click 中ボタンのクリックでミュート Show on mouse click マウスのクリックで表示 Allow volume beyond 100% (0dB) 100% (0dB)を超える音量を許可 Volume adjust step 音量変更のステップ幅 External Mixer 外部ミキサー VolumePopup Launch mixer ミキサーを起動 Mixer ミキサー lxqt-panel-0.10.0/plugin-volume/translations/volume_lt.ts000066400000000000000000000077171261500472700235770ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Rodyti darbalaukį: globalusis klavišas „%1“ negali būti registruojamas Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration Volume Control Settings Device to control Alsa PulseAudio OSS Behavior Mute on middle click Show on mouse click Allow volume beyond 100% (0dB) Volume adjust step External Mixer VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_nl.ts000066400000000000000000000102141261500472700235530ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Bureaublad weergeven: systeembrede sneltoets '%1' kan niet worden geregistreerd Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings Instellingen voor volumebeheer van LXQt Volume Control Settings Device to control Apparaat om te beheren Alsa Alsa PulseAudio PulseAudio OSS Behavior Gedrag Mute on middle click Dempen bij middelklik Show on mouse click Tonen bij muisklik Allow volume beyond 100% (0dB) Volume hoger dan 100% toestaan (0dB) Volume adjust step Trap voor bijstellen van volume External Mixer Extern mengpaneel VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_pl_PL.desktop000066400000000000000000000004671261500472700252040ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[pl_PL]=Dopasuj poziom dźwięku i włącz preferowany mikser. Name[pl_PL]=Regulacja poziomu dźwięku lxqt-panel-0.10.0/plugin-volume/translations/volume_pl_PL.ts000066400000000000000000000103011261500472700241450ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Pokaż Pulpit: Globalny skrót '%1' nie może zostać zarejestrowany Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings Ustawienia regulacji poziomu dźwięku LXQt Volume Control Settings Device to control Używane urządzenie Alsa ALSA PulseAudio PulseAudio OSS Behavior Zachowanie Mute on middle click Wycisz na klikniecie środkowym przyciskiem myszy Show on mouse click Pokaż na kliknięcie myszką Allow volume beyond 100% (0dB) Pozwól poziom dźwięku powyżej 100% (0db) Volume adjust step Stopień regulowania poziomu dźwięku External Mixer Zewnętrzny mikser VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_pt.desktop000066400000000000000000000004451261500472700246150ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Name[pt]=Controlo de volume Comment[pt]=Controlar o volume do sistema e abrir o gestor de som lxqt-panel-0.10.0/plugin-volume/translations/volume_pt.ts000066400000000000000000000102141261500472700235650ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Tecla de atalho global: "%1" não pode ser registada Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings Definições do controlo de volume do LXQt Volume Control Settings Device to control Dispositivo a controlar Alsa Alsa PulseAudio PulseAudio OSS Behavior Comportamento Mute on middle click Silenciar com a roda do rato Show on mouse click Mostrar ao clicar com o rato Allow volume beyond 100% (0dB) Permitir volume abaixo de 100% (0dB) Volume adjust step Nível de ajuste do volume External Mixer Gestor de som externo VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_pt_BR.desktop000066400000000000000000000004611261500472700251760ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[pt_BR]=Controla o volume do sistema e lança seu mixer preferido. Name[pt_BR]=Controle de Volume lxqt-panel-0.10.0/plugin-volume/translations/volume_pt_BR.ts000066400000000000000000000102131261500472700241470ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Mostrar Área De Trabalho: Atalho Global '%1'não pode se registrado Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings Configurações Do Controle De Volume Volume Control Settings Device to control Dispositivo para controlar Alsa Alsa PulseAudio PulseAudio OSS Behavior Comportamento Mute on middle click Mudo no clique do meio Show on mouse click Mostrar no clique do mouse Allow volume beyond 100% (0dB) Permitir o volume além de 100% (0dB) Volume adjust step Ajustar passo do volume External Mixer Mixer Externo VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_ro_RO.desktop000066400000000000000000000004601261500472700252070ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[ro_RO]=Controlează volumul sistem și lansează mixerul dvs preferat Name[ro_RO]=Control volum lxqt-panel-0.10.0/plugin-volume/translations/volume_ro_RO.ts000066400000000000000000000075661261500472700242020ustar00rootroot00000000000000 LXQtVolume Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings Setări control volum LXQt Volume Control Settings Device to control Dispozitiv de controlat Alsa Alsa PulseAudio PulseAudio OSS Behavior Comportament Mute on middle click Show on mouse click Afișează la clic de maus Allow volume beyond 100% (0dB) Permite volum dincolo de 100% (0dB) Volume adjust step External Mixer Mixer extern VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_ru.desktop000066400000000000000000000006221261500472700246150ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[ru]=Контролировать громкость звука в системе и запустить предпочтитаемый микшер. Name[ru]=Регулятор громкостиlxqt-panel-0.10.0/plugin-volume/translations/volume_ru.ts000066400000000000000000000101611261500472700235710ustar00rootroot00000000000000 LXQtVolume Increase sound volume Увеличить громкость звука Decrease sound volume Уменьшить громкость звука Mute/unmute sound volume Выкл/вкл звук Volume Control: The following shortcuts can not be registered: %1 Контроль громкости: следующие сочетания клавиш не могут быть зарегистрированы: %1 Volume: %1 Громкость: %1 LXQtVolumeConfiguration Volume Control Settings Настройки контроля громкости Device to control Контролируемое устройство Alsa Alsa PulseAudio PulseAudio OSS OSS Behavior Поведение Mute on middle click Отключать звук при щелчке средней кнопкой мыши Show on mouse click Показать по щелчку мыши Allow volume beyond 100% (0dB) Разрешить громкость выше 100% (0Дб) Volume adjust step Шаг регулировки громкости External Mixer Внешний микшер VolumePopup Launch mixer Запустить микшер Mixer Микшер lxqt-panel-0.10.0/plugin-volume/translations/volume_ru_RU.desktop000066400000000000000000000006301261500472700252220ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[ru_RU]=Контролировать громкость звука в системе и запустить предпочтитаемый микшер. Name[ru_RU]=Регулятор громкостиlxqt-panel-0.10.0/plugin-volume/translations/volume_ru_RU.ts000066400000000000000000000101641261500472700242020ustar00rootroot00000000000000 LXQtVolume Increase sound volume Увеличить громкость звука Decrease sound volume Уменьшить громкость звука Mute/unmute sound volume Выкл/вкл звук Volume Control: The following shortcuts can not be registered: %1 Контроль громкости: следующие сочетания клавиш не могут быть зарегистрированы: %1 Volume: %1 Громкость: %1 LXQtVolumeConfiguration Volume Control Settings Настройки контроля громкости Device to control Контролируемое устройство Alsa Alsa PulseAudio PulseAudio OSS OSS Behavior Поведение Mute on middle click Отключать звук при щелчке средней кнопкой мыши Show on mouse click Показать по щелчку мыши Allow volume beyond 100% (0dB) Разрешить громкость выше 100% (0Дб) Volume adjust step Шаг регулировки громкости External Mixer Внешний микшер VolumePopup Launch mixer Запустить микшер Mixer Микшер lxqt-panel-0.10.0/plugin-volume/translations/volume_sl.ts000066400000000000000000000101451261500472700235630ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Prikaz namizja: globalne bližnjice »%1« ni moč registrirati Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings Nastavitve upravljalnika glasnosti LXQt Volume Control Settings Device to control Naprava Alsa ALSA PulseAudio PulseAudio OSS Behavior Obnašanje Mute on middle click Utišaj s srednjim klikom Show on mouse click Pokaži z miškinim klikom Allow volume beyond 100% (0dB) Dovoli glasnost, večjo od 100% (0 dB) Volume adjust step Velikost koraka External Mixer Zunanji mešalnik VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_th_TH.desktop000066400000000000000000000006641261500472700252030ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[th_TH]=ควบคุมระดับเสียงของระบบและเรียกใช้ตัวผสมที่คุณต้องการ Name[th_TH]=ควบคุมระดับเสียง lxqt-panel-0.10.0/plugin-volume/translations/volume_th_TH.ts000066400000000000000000000110121261500472700241450ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered แสดงพื้นโต๊ะ: ไม่สามารถตั้ง '%1' เป็นปุ่มลัดส่วนกลางได้ Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings ค่าตั้งควบคุมระดับเสียง LXQt Volume Control Settings Device to control อุปกรณ์ที่จะควบคุม Alsa Alsa PulseAudio PulseAudio OSS Behavior พฤติกรรม Mute on middle click ปิดเสียงด้วยการคลิกปุ่มกลาง Show on mouse click แสดงขึ้นมาเมื่อถูกคลิก Allow volume beyond 100% (0dB) อนุญาตให้ใช้ระดับเสียงเกินกว่า 100% (0dB) Volume adjust step ช่วงการปรับระดับเสียง External Mixer ตัวผสมภายนอก VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_uk.desktop000066400000000000000000000005571261500472700246150ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[uk]=Регулює системну гучність та запускає ваш улюблений мікшер Name[uk]=Регулятор гучності lxqt-panel-0.10.0/plugin-volume/translations/volume_uk.ts000066400000000000000000000105501261500472700235640ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered Показати стільницю: Не вдалося зареєструвати глобальне скорочення '%1' Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings Налаштування регулятора гучності LXQt Volume Control Settings Device to control Контролювати пристрій Alsa Alsa PulseAudio PulseAudio OSS Behavior Поведінка Mute on middle click Приглушити по середній кнопці Show on mouse click Показати по кнопці миші Allow volume beyond 100% (0dB) Дозволяти гучність вище 100% (0 дБ) Volume adjust step Крок регулювання гучності External Mixer Зовнішній мікшер VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_zh_CN.desktop000066400000000000000000000004441261500472700251720ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[zh_CN]=控制系统音量并启动您喜欢的混音器。 Name[zh_CN]=音量控制 lxqt-panel-0.10.0/plugin-volume/translations/volume_zh_CN.ts000066400000000000000000000101011261500472700241360ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered 显示桌面:无法注册全局快捷键'%1' Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings LXQt 声音控制设置 Volume Control Settings Device to control 控制设备 Alsa Alsa PulseAudio PulseAudio OSS Behavior 行为 Mute on middle click 鼠标中击时静音 Show on mouse click 显示鼠标点击 Allow volume beyond 100% (0dB) 允许声音超过 100%(0分贝) Volume adjust step 声音调整幅度 External Mixer 外部混音器 VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/translations/volume_zh_TW.desktop000066400000000000000000000004471261500472700252270ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=Volume control Comment=Control the system's volume and launch your preferred mixer. #TRANSLATIONS_DIR=../translations # Translations Comment[zh_TW]=控制系統音量並啟動您喜愛的音量控制器 Name[zh_TW]=音量控制 lxqt-panel-0.10.0/plugin-volume/translations/volume_zh_TW.ts000066400000000000000000000101151261500472700241750ustar00rootroot00000000000000 LXQtVolume Show Desktop: Global shortcut '%1' cannot be registered 顯示桌面:全域快捷鍵'%1'無法被註冊 Increase sound volume Decrease sound volume Mute/unmute sound volume Volume Control: The following shortcuts can not be registered: %1 Volume: %1 LXQtVolumeConfiguration LXQt Volume Control Settings LXQt音量調整設定 Volume Control Settings Device to control 設置裝置 Alsa ALSA PulseAudio PulseAudio OSS Behavior 行為 Mute on middle click 按滑鼠中鍵時靜音 Show on mouse click 滑鼠點擊時顯示 Allow volume beyond 100% (0dB) 允許音量超過 100% (0dB) Volume adjust step 音量調整步驟 External Mixer 外掛音量調整程式 VolumePopup Launch mixer Mixer lxqt-panel-0.10.0/plugin-volume/volumebutton.cpp000066400000000000000000000100651261500472700217350ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "volumebutton.h" #include "volumepopup.h" #include "audiodevice.h" #include #include #include #include #include "../panel/ilxqtpanel.h" #include "../panel/ilxqtpanelplugin.h" VolumeButton::VolumeButton(ILXQtPanelPlugin *plugin, QWidget* parent): QToolButton(parent), mPlugin(plugin), m_panel(plugin->panel()), m_showOnClick(true), m_muteOnMiddleClick(true) { // initial icon for button. It will be replaced after devices scan. // In the worst case - no soundcard/pulse - is found it remains // in the button but at least the button is not blank ("invisible") handleStockIconChanged("dialog-error"); m_volumePopup = new VolumePopup(this); m_popupHideTimer.setInterval(1000); connect(this, SIGNAL(clicked()), this, SLOT(toggleVolumeSlider())); connect(&m_popupHideTimer, SIGNAL(timeout()), this, SLOT(hideVolumeSlider())); connect(m_volumePopup, SIGNAL(mouseEntered()), &m_popupHideTimer, SLOT(stop())); connect(m_volumePopup, SIGNAL(mouseLeft()), &m_popupHideTimer, SLOT(start())); connect(m_volumePopup, SIGNAL(launchMixer()), this, SLOT(handleMixerLaunch())); connect(m_volumePopup, SIGNAL(stockIconChanged(QString)), this, SLOT(handleStockIconChanged(QString))); } VolumeButton::~VolumeButton() { } void VolumeButton::setShowOnClicked(bool state) { if (m_showOnClick == state) return; m_showOnClick = state; } void VolumeButton::setMuteOnMiddleClick(bool state) { m_muteOnMiddleClick = state; } void VolumeButton::setMixerCommand(const QString &command) { m_mixerCommand = command; } void VolumeButton::enterEvent(QEvent *event) { if (!m_showOnClick) showVolumeSlider(); m_popupHideTimer.stop(); } void VolumeButton::leaveEvent(QEvent *event) { m_popupHideTimer.start(); } void VolumeButton::wheelEvent(QWheelEvent *event) { m_volumePopup->handleWheelEvent(event); } void VolumeButton::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::MidButton && m_muteOnMiddleClick) { if (m_volumePopup->device()) { m_volumePopup->device()->toggleMute(); return; } } QToolButton::mouseReleaseEvent(event); } void VolumeButton::toggleVolumeSlider() { if (m_volumePopup->isVisible()) { hideVolumeSlider(); } else { showVolumeSlider(); } } void VolumeButton::showVolumeSlider() { if (m_volumePopup->isVisible()) return; m_popupHideTimer.stop(); m_volumePopup->updateGeometry(); m_volumePopup->adjustSize(); QRect pos = mPlugin->calculatePopupWindowPos(m_volumePopup->size()); m_volumePopup->openAt(pos.topLeft(), Qt::TopLeftCorner); m_volumePopup->activateWindow(); } void VolumeButton::hideVolumeSlider() { // qDebug() << "hideVolumeSlider"; m_popupHideTimer.stop(); m_volumePopup->hide(); } void VolumeButton::handleMixerLaunch() { QProcess::startDetached(m_mixerCommand); } void VolumeButton::handleStockIconChanged(const QString &iconName) { setIcon(XdgIcon::fromTheme(iconName)); } lxqt-panel-0.10.0/plugin-volume/volumebutton.h000066400000000000000000000041361261500472700214040ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef VOLUMEBUTTON_H #define VOLUMEBUTTON_H #include #include class VolumePopup; class ILXQtPanel; class LXQtVolume; class ILXQtPanelPlugin; class VolumeButton : public QToolButton { Q_OBJECT public: VolumeButton(ILXQtPanelPlugin *plugin, QWidget* parent = 0); ~VolumeButton(); void setShowOnClicked(bool state); void setMuteOnMiddleClick(bool state); void setMixerCommand(const QString &command); VolumePopup *volumePopup() const { return m_volumePopup; } public slots: void hideVolumeSlider(); void showVolumeSlider(); protected: void enterEvent(QEvent *event); void leaveEvent(QEvent *event); void wheelEvent(QWheelEvent *event); void mouseReleaseEvent(QMouseEvent *event); private slots: void toggleVolumeSlider(); void handleMixerLaunch(); void handleStockIconChanged(const QString &iconName); private: VolumePopup *m_volumePopup; ILXQtPanelPlugin *mPlugin; ILXQtPanel *m_panel; QTimer m_popupHideTimer; bool m_showOnClick; bool m_muteOnMiddleClick; QString m_mixerCommand; }; #endif // VOLUMEBUTTON_H lxqt-panel-0.10.0/plugin-volume/volumepopup.cpp000066400000000000000000000153641261500472700215740ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "volumepopup.h" #include "audiodevice.h" #include #include #include #include #include #include #include #include #include "audioengine.h" #include VolumePopup::VolumePopup(QWidget* parent): QDialog(parent, Qt::Dialog | Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint | Qt::Popup | Qt::X11BypassWindowManagerHint), m_pos(0,0), m_anchor(Qt::TopLeftCorner), m_device(0) { m_mixerButton = new QPushButton(this); m_mixerButton->setObjectName("MixerLink"); m_mixerButton->setMinimumWidth(1); m_mixerButton->setToolTip(tr("Launch mixer")); m_mixerButton->setText(tr("Mi&xer")); m_mixerButton->setAutoDefault(false); m_volumeSlider = new QSlider(Qt::Vertical, this); m_volumeSlider->setTickPosition(QSlider::TicksBothSides); m_volumeSlider->setTickInterval(10); // the volume slider shows 0-100 and volumes of all devices // should be converted to percentages. m_volumeSlider->setRange(0, 100); m_muteToggleButton = new QPushButton(this); m_muteToggleButton->setIcon(XdgIcon::fromTheme(QStringList() << "audio-volume-muted")); m_muteToggleButton->setCheckable(true); m_muteToggleButton->setAutoDefault(false); QVBoxLayout *l = new QVBoxLayout(this); l->setSpacing(0); l->setMargin(0); l->addWidget(m_mixerButton, 0, Qt::AlignHCenter); l->addWidget(m_volumeSlider, 0, Qt::AlignHCenter); l->addWidget(m_muteToggleButton, 0, Qt::AlignHCenter); connect(m_mixerButton, SIGNAL(released()), this, SIGNAL(launchMixer())); connect(m_volumeSlider, SIGNAL(valueChanged(int)), this, SLOT(handleSliderValueChanged(int))); connect(m_muteToggleButton, SIGNAL(clicked()), this, SLOT(handleMuteToggleClicked())); } bool VolumePopup::event(QEvent *event) { if(event->type() == QEvent::WindowDeactivate) { // qDebug("QEvent::WindowDeactivate"); hide(); } return QDialog::event(event); } void VolumePopup::enterEvent(QEvent *event) { emit mouseEntered(); } void VolumePopup::leaveEvent(QEvent *event) { // qDebug("leaveEvent"); emit mouseLeft(); } void VolumePopup::handleSliderValueChanged(int value) { if (!m_device) return; // qDebug("VolumePopup::handleSliderValueChanged: %d\n", value); m_device->setVolume(value); m_volumeSlider->setToolTip(QString("%1%").arg(value)); dynamic_cast(*parent()).setToolTip(m_volumeSlider->toolTip()); //parent is the button on panel QToolTip::showText(QCursor::pos(), m_volumeSlider->toolTip(), m_volumeSlider); } void VolumePopup::handleMuteToggleClicked() { if (!m_device) return; m_device->toggleMute(); } void VolumePopup::handleDeviceVolumeChanged(int volume) { // qDebug() << "handleDeviceVolumeChanged" << "volume" << volume << "max" << max; // calling m_volumeSlider->setValue will trigger // handleSliderValueChanged(), which set the device volume // again, so we have to block the signals to avoid recursive // signal emission. m_volumeSlider->blockSignals(true); m_volumeSlider->setValue(volume); m_volumeSlider->setToolTip(QString("%1%").arg(volume)); dynamic_cast(*parent()).setToolTip(m_volumeSlider->toolTip()); //parent is the button on panel m_volumeSlider->blockSignals(false); // emit volumeChanged(percent); updateStockIcon(); } void VolumePopup::handleDeviceMuteChanged(bool mute) { m_muteToggleButton->setChecked(mute); updateStockIcon(); } void VolumePopup::updateStockIcon() { if (!m_device) return; QString iconName; if (m_device->volume() <= 0 || m_device->mute()) iconName = "audio-volume-muted"; else if (m_device->volume() <= 33) iconName = "audio-volume-low"; else if (m_device->volume() <= 66) iconName = "audio-volume-medium"; else iconName = "audio-volume-high"; m_muteToggleButton->setIcon(XdgIcon::fromTheme(iconName)); emit stockIconChanged(iconName); } void VolumePopup::resizeEvent(QResizeEvent *event) { QWidget::resizeEvent(event); realign(); } void VolumePopup::openAt(QPoint pos, Qt::Corner anchor) { m_pos = pos; m_anchor = anchor; realign(); show(); } void VolumePopup::handleWheelEvent(QWheelEvent *event) { m_volumeSlider->event(reinterpret_cast(event)); } void VolumePopup::setDevice(AudioDevice *device) { if (device == m_device) return; // disconnect old device if (m_device) disconnect(m_device); m_device = device; if (m_device) { m_muteToggleButton->setChecked(m_device->mute()); handleDeviceVolumeChanged(m_device->volume()); connect(m_device, SIGNAL(volumeChanged(int)), this, SLOT(handleDeviceVolumeChanged(int))); connect(m_device, SIGNAL(muteChanged(bool)), this, SLOT(handleDeviceMuteChanged(bool))); } else updateStockIcon(); emit deviceChanged(); } void VolumePopup::setSliderStep(int step) { m_volumeSlider->setSingleStep(step); m_volumeSlider->setPageStep(step * 10); } void VolumePopup::realign() { QRect rect; rect.setSize(sizeHint()); switch (m_anchor) { case Qt::TopLeftCorner: rect.moveTopLeft(m_pos); break; case Qt::TopRightCorner: rect.moveTopRight(m_pos); break; case Qt::BottomLeftCorner: rect.moveBottomLeft(m_pos); break; case Qt::BottomRightCorner: rect.moveBottomRight(m_pos); break; } QRect screen = QApplication::desktop()->availableGeometry(m_pos); if (rect.right() > screen.right()) rect.moveRight(screen.right()); if (rect.bottom() > screen.bottom()) rect.moveBottom(screen.bottom()); move(rect.topLeft()); } lxqt-panel-0.10.0/plugin-volume/volumepopup.h000066400000000000000000000044111261500472700212300ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Johannes Zellner * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef VOLUMEPOPUP_H #define VOLUMEPOPUP_H #include class QSlider; class QPushButton; class AudioDevice; class VolumePopup : public QDialog { Q_OBJECT public: VolumePopup(QWidget* parent = 0); void openAt(QPoint pos, Qt::Corner anchor); void handleWheelEvent(QWheelEvent *event); QSlider *volumeSlider() const { return m_volumeSlider; } AudioDevice *device() const { return m_device; } void setDevice(AudioDevice *device); void setSliderStep(int step); signals: void mouseEntered(); void mouseLeft(); // void volumeChanged(int value); void deviceChanged(); void launchMixer(); void stockIconChanged(const QString &iconName); protected: void resizeEvent(QResizeEvent *event); void enterEvent(QEvent *event); void leaveEvent(QEvent *event); bool event(QEvent * event); private slots: void handleSliderValueChanged(int value); void handleMuteToggleClicked(); void handleDeviceVolumeChanged(int volume); void handleDeviceMuteChanged(bool mute); private: void realign(); void updateStockIcon(); QSlider *m_volumeSlider; QPushButton *m_mixerButton; QPushButton *m_muteToggleButton; QPoint m_pos; Qt::Corner m_anchor; AudioDevice *m_device; }; #endif // VOLUMEPOPUP_H lxqt-panel-0.10.0/plugin-worldclock/000077500000000000000000000000001261500472700173205ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-worldclock/CMakeLists.txt000066400000000000000000000010061261500472700220550ustar00rootroot00000000000000set(PLUGIN "worldclock") set(HEADERS lxqtworldclock.h lxqtworldclockconfiguration.h lxqtworldclockconfigurationtimezones.h lxqtworldclockconfigurationmanualformat.h ) set(SOURCES lxqtworldclock.cpp lxqtworldclockconfiguration.cpp lxqtworldclockconfigurationtimezones.cpp lxqtworldclockconfigurationmanualformat.cpp ) set(UIS lxqtworldclockconfiguration.ui lxqtworldclockconfigurationtimezones.ui lxqtworldclockconfigurationmanualformat.ui ) BUILD_LXQT_PLUGIN(${PLUGIN}) lxqt-panel-0.10.0/plugin-worldclock/lxqtworldclock.cpp000066400000000000000000000450421261500472700231050ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012-2013 Razor team * 2014 LXQt team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtworldclock.h" #include #include #include #include #include #include #include #include #include #include LXQtWorldClock::LXQtWorldClock(const ILXQtPanelPluginStartupInfo &startupInfo): QObject(), ILXQtPanelPlugin(startupInfo), mPopup(NULL), mTimer(new QTimer(this)), mUpdateInterval(1), mLastUpdate(0), mAutoRotate(true), mPopupContent(NULL) { mMainWidget = new QWidget(); mContent = new ActiveLabel(); mRotatedWidget = new LXQt::RotatedWidget(*mContent, mMainWidget); mRotatedWidget->setTransferWheelEvent(true); QVBoxLayout *borderLayout = new QVBoxLayout(mMainWidget); borderLayout->setContentsMargins(0, 0, 0, 0); borderLayout->setSpacing(0); borderLayout->addWidget(mRotatedWidget, 0, Qt::AlignCenter); mContent->setObjectName(QLatin1String("WorldClockContent")); mContent->setAlignment(Qt::AlignCenter); settingsChanged(); connect(mTimer, SIGNAL(timeout()), SLOT(timeout())); connect(mContent, SIGNAL(wheelScrolled(int)), SLOT(wheelScrolled(int))); } LXQtWorldClock::~LXQtWorldClock() { delete mMainWidget; } void LXQtWorldClock::timeout() { QDateTime now = QDateTime::currentDateTime(); qint64 nowMsec = now.toMSecsSinceEpoch(); if ((mLastUpdate / mUpdateInterval) == (nowMsec / mUpdateInterval)) return; mLastUpdate = nowMsec; QString timeZoneName = mActiveTimeZone; if (timeZoneName == QLatin1String("local")) timeZoneName = QString::fromLatin1(QTimeZone::systemTimeZoneId()); mContent->setText(formatDateTime(now, timeZoneName)); mRotatedWidget->update(); updatePopupContent(); } void LXQtWorldClock::restartTimer(int updateInterval) { mUpdateInterval = updateInterval; mTimer->start(qMin(100, updateInterval)); } void LXQtWorldClock::settingsChanged() { QSettings *_settings = settings(); QString oldFormat = mFormat; mTimeZones.clear(); int size = _settings->beginReadArray(QLatin1String("timeZones")); for (int i = 0; i < size; ++i) { _settings->setArrayIndex(i); QString timeZoneName = _settings->value(QLatin1String("timeZone"), QString()).toString(); mTimeZones.append(timeZoneName); mTimeZoneCustomNames[timeZoneName] = _settings->value(QLatin1String("customName"), QString()).toString(); } _settings->endArray(); if (mTimeZones.isEmpty()) mTimeZones.append(QLatin1String("local")); mDefaultTimeZone = _settings->value(QLatin1String("defaultTimeZone"), QString()).toString(); if (mDefaultTimeZone.isEmpty()) mDefaultTimeZone = mTimeZones[0]; mActiveTimeZone = mDefaultTimeZone; bool longTimeFormatSelected = false; QString formatType = _settings->value(QLatin1String("formatType"), QString()).toString(); QString dateFormatType = _settings->value(QLatin1String("dateFormatType"), QString()).toString(); bool advancedManual = _settings->value(QLatin1String("useAdvancedManualFormat"), false).toBool(); // backward compatibility if (formatType == QLatin1String("custom")) { formatType = QLatin1String("short-timeonly"); dateFormatType = QLatin1String("short"); advancedManual = true; } else if (formatType == QLatin1String("short")) { formatType = QLatin1String("short-timeonly"); dateFormatType = QLatin1String("short"); advancedManual = false; } else if ((formatType == QLatin1String("full")) || (formatType == QLatin1String("long")) || (formatType == QLatin1String("medium"))) { formatType = QLatin1String("long-timeonly"); dateFormatType = QLatin1String("long"); advancedManual = false; } if (formatType == QLatin1String("long-timeonly")) longTimeFormatSelected = true; bool timeShowSeconds = _settings->value(QLatin1String("timeShowSeconds"), false).toBool(); bool timePadHour = _settings->value(QLatin1String("timePadHour"), false).toBool(); bool timeAMPM = _settings->value(QLatin1String("timeAMPM"), false).toBool(); // timezone bool showTimezone = _settings->value(QLatin1String("showTimezone"), false).toBool() && !longTimeFormatSelected; QString timezonePosition = _settings->value(QLatin1String("timezonePosition"), QString()).toString(); QString timezoneFormatType = _settings->value(QLatin1String("timezoneFormatType"), QString()).toString(); // date bool showDate = _settings->value(QLatin1String("showDate"), false).toBool(); QString datePosition = _settings->value(QLatin1String("datePosition"), QString()).toString(); bool dateShowYear = _settings->value(QLatin1String("dateShowYear"), false).toBool(); bool dateShowDoW = _settings->value(QLatin1String("dateShowDoW"), false).toBool(); bool datePadDay = _settings->value(QLatin1String("datePadDay"), false).toBool(); bool dateLongNames = _settings->value(QLatin1String("dateLongNames"), false).toBool(); // advanced QString customFormat = _settings->value(QLatin1String("customFormat"), tr("''HH:mm:ss'
'ddd, d MMM yyyy'
'TT'
'")).toString(); if (advancedManual) mFormat = customFormat; else { QLocale locale = QLocale(QLocale::AnyLanguage, QLocale().country()); if (formatType == QLatin1String("short-timeonly")) mFormat = locale.timeFormat(QLocale::ShortFormat); else if (formatType == QLatin1String("long-timeonly")) mFormat = locale.timeFormat(QLocale::LongFormat); else // if (formatType == QLatin1String("custom-timeonly")) mFormat = QString(QLatin1String("%1:mm%2%3")).arg(timePadHour ? QLatin1String("hh") : QLatin1String("h")).arg(timeShowSeconds ? QLatin1String(":ss") : QLatin1String("")).arg(timeAMPM ? QLatin1String(" A") : QLatin1String("")); if (showTimezone) { QString timezonePortion; if (timezoneFormatType == QLatin1String("short")) timezonePortion = QLatin1String("TTTT"); else if (timezoneFormatType == QLatin1String("long")) timezonePortion = QLatin1String("TTTTT"); else if (timezoneFormatType == QLatin1String("offset")) timezonePortion = QLatin1String("T"); else if (timezoneFormatType == QLatin1String("abbreviation")) timezonePortion = QLatin1String("TTT"); else if (timezoneFormatType == QLatin1String("iana")) timezonePortion = QLatin1String("TT"); else // if (timezoneFormatType == QLatin1String("custom")) timezonePortion = QLatin1String("TTTTTT"); if (timezonePosition == QLatin1String("below")) mFormat = mFormat + QLatin1String("'
'") + timezonePortion; else if (timezonePosition == QLatin1String("above")) mFormat = timezonePortion + QLatin1String("'
'") + mFormat; else if (timezonePosition == QLatin1String("before")) mFormat = timezonePortion + QLatin1String(" ") + mFormat; else // if (timezonePosition == QLatin1String("after")) mFormat = mFormat + QLatin1String(" ") + timezonePortion; } if (showDate) { QString datePortion; if (dateFormatType == QLatin1String("short")) datePortion = locale.dateFormat(QLocale::ShortFormat); else if (dateFormatType == QLatin1String("long")) datePortion = locale.dateFormat(QLocale::LongFormat); else if (dateFormatType == QLatin1String("iso")) datePortion = QLatin1String("yyyy-MM-dd"); else // if (dateFormatType == QLatin1String("custom")) { QString datePortionOrder; QString dateLocale = locale.dateFormat(QLocale::ShortFormat).toLower(); int yearIndex = dateLocale.indexOf("y"); int monthIndex = dateLocale.indexOf("m"); int dayIndex = dateLocale.indexOf("d"); if (yearIndex < dayIndex) // Big-endian (year, month, day) (yyyy MMMM dd, dddd) -> in some Asia countires like China or Japan datePortionOrder = QLatin1String("%1%2%3 %4%5%6"); else if (monthIndex < dayIndex) // Middle-endian (month, day, year) (dddd, MMMM dd yyyy) -> USA datePortionOrder = QLatin1String("%6%5%3 %4%2%1"); else // Little-endian (day, month, year) (dddd, dd MMMM yyyy) -> most of Europe datePortionOrder = QLatin1String("%6%5%4 %3%2%1"); datePortion = datePortionOrder.arg(dateShowYear ? QLatin1String("yyyy") : QLatin1String("")).arg(dateShowYear ? QLatin1String(" ") : QLatin1String("")).arg(dateLongNames ? QLatin1String("MMMM") : QLatin1String("MMM")).arg(datePadDay ? QLatin1String("dd") : QLatin1String("d")).arg(dateShowDoW ? QLatin1String(", ") : QLatin1String("")).arg(dateShowDoW ? (dateLongNames ? QLatin1String("dddd") : QLatin1String("ddd")) : QLatin1String("")); } if (datePosition == QLatin1String("below")) mFormat = mFormat + QLatin1String("'
'") + datePortion; else if (datePosition == QLatin1String("above")) mFormat = datePortion + QLatin1String("'
'") + mFormat; else if (datePosition == QLatin1String("before")) mFormat = datePortion + QLatin1String(" ") + mFormat; else // if (datePosition == QLatin1String("after")) mFormat = mFormat + QLatin1String(" ") + datePortion; } } if ((oldFormat != mFormat)) { int updateInterval = 0; QString format = mFormat; format.replace(QRegExp(QLatin1String("'[^']*'")), QString()); if (format.contains(QLatin1String("z"))) updateInterval = 1; else if (format.contains(QLatin1String("s"))) updateInterval = 1000; else updateInterval = 60000; restartTimer(updateInterval); } bool autoRotate = settings()->value(QLatin1String("autoRotate"), true).toBool(); if (autoRotate != mAutoRotate) { mAutoRotate = autoRotate; realign(); } if (mPopup) { updatePopupContent(); mPopup->adjustSize(); mPopup->setGeometry(calculatePopupWindowPos(mPopup->size())); } timeout(); } QDialog *LXQtWorldClock::configureDialog() { return new LXQtWorldClockConfiguration(settings()); } void LXQtWorldClock::wheelScrolled(int delta) { if (mTimeZones.count() > 1) { mActiveTimeZone = mTimeZones[(mTimeZones.indexOf(mActiveTimeZone) + ((delta > 0) ? -1 : 1) + mTimeZones.size()) % mTimeZones.size()]; timeout(); } } void LXQtWorldClock::activated(ActivationReason reason) { switch (reason) { case ILXQtPanelPlugin::Trigger: case ILXQtPanelPlugin::MiddleClick: break; default: return; } if (!mPopup) { mPopup = new LXQtWorldClockPopup(mContent); connect(mPopup, SIGNAL(deactivated()), SLOT(deletePopup())); if (reason == ILXQtPanelPlugin::Trigger) { mPopup->setObjectName(QLatin1String("WorldClockCalendar")); mPopup->layout()->setContentsMargins(0, 0, 0, 0); QCalendarWidget *calendarWidget = new QCalendarWidget(mPopup); mPopup->layout()->addWidget(calendarWidget); QString timeZoneName = mActiveTimeZone; if (timeZoneName == QLatin1String("local")) timeZoneName = QString::fromLatin1(QTimeZone::systemTimeZoneId()); QTimeZone timeZone(timeZoneName.toLatin1()); calendarWidget->setFirstDayOfWeek(QLocale(QLocale::AnyLanguage, timeZone.country()).firstDayOfWeek()); calendarWidget->setSelectedDate(QDateTime::currentDateTime().toTimeZone(timeZone).date()); } else { mPopup->setObjectName(QLatin1String("WorldClockPopup")); mPopupContent = new QLabel(mPopup); mPopup->layout()->addWidget(mPopupContent); mPopupContent->setAlignment(mContent->alignment()); updatePopupContent(); } mPopup->adjustSize(); mPopup->setGeometry(calculatePopupWindowPos(mPopup->size())); mPopup->show(); } else { deletePopup(); } } void LXQtWorldClock::deletePopup() { mPopupContent = NULL; mPopup->deleteLater(); mPopup = NULL; } QString LXQtWorldClock::formatDateTime(const QDateTime &datetime, const QString &timeZoneName) { QTimeZone timeZone(timeZoneName.toLatin1()); QDateTime tzNow = datetime.toTimeZone(timeZone); return tzNow.toString(preformat(mFormat, timeZone, tzNow)); } void LXQtWorldClock::updatePopupContent() { if (mPopupContent) { QDateTime now = QDateTime::currentDateTime(); QStringList allTimeZones; bool hasTimeZone = formatHasTimeZone(mFormat); foreach (QString timeZoneName, mTimeZones) { if (timeZoneName == QLatin1String("local")) timeZoneName = QString::fromLatin1(QTimeZone::systemTimeZoneId()); QString formatted = formatDateTime(now, timeZoneName); if (!hasTimeZone) formatted += QLatin1String("
") + QString::fromLatin1(QTimeZone(timeZoneName.toLatin1()).id()); allTimeZones.append(formatted); } mPopupContent->setText(allTimeZones.join(QLatin1String("
"))); } } bool LXQtWorldClock::formatHasTimeZone(QString format) { format.replace(QRegExp(QLatin1String("'[^']*'")), QString()); return format.toLower().contains(QLatin1String("t")); } QString LXQtWorldClock::preformat(const QString &format, const QTimeZone &timeZone, const QDateTime &dateTime) { QString result = format; int from = 0; for (;;) { int apos = result.indexOf(QLatin1Char('\''), from); int tz = result.indexOf(QLatin1Char('T'), from); if ((apos != -1) && (tz != -1)) { if (apos > tz) apos = -1; else tz = -1; } if (apos != -1) { from = apos + 1; apos = result.indexOf(QLatin1Char('\''), from); if (apos == -1) // misformat break; from = apos + 1; } else if (tz != -1) { int length = 1; for (; result[tz + length] == QLatin1Char('T'); ++length); if (length > 6) length = 6; QString replacement; switch (length) { case 1: replacement = timeZone.displayName(dateTime, QTimeZone::OffsetName); if (replacement.startsWith(QLatin1String("UTC"))) replacement = replacement.mid(3); break; case 2: replacement = QString::fromLatin1(timeZone.id()); break; case 3: replacement = timeZone.abbreviation(dateTime); break; case 4: replacement = timeZone.displayName(dateTime, QTimeZone::ShortName); break; case 5: replacement = timeZone.displayName(dateTime, QTimeZone::LongName); break; case 6: replacement = mTimeZoneCustomNames[QString::fromLatin1(timeZone.id())]; } if ((tz > 0) && (result[tz - 1] == QLatin1Char('\''))) { --tz; ++length; } else replacement.prepend(QLatin1Char('\'')); if (result[tz + length] == QLatin1Char('\'')) ++length; else replacement.append(QLatin1Char('\'')); result.replace(tz, length, replacement); from = tz + replacement.length(); } else break; } return result; } void LXQtWorldClock::realign() { if (mAutoRotate) switch (panel()->position()) { case ILXQtPanel::PositionTop: case ILXQtPanel::PositionBottom: mRotatedWidget->setOrigin(Qt::TopLeftCorner); break; case ILXQtPanel::PositionLeft: mRotatedWidget->setOrigin(Qt::BottomLeftCorner); break; case ILXQtPanel::PositionRight: mRotatedWidget->setOrigin(Qt::TopRightCorner); break; } else mRotatedWidget->setOrigin(Qt::TopLeftCorner); } ActiveLabel::ActiveLabel(QWidget *parent) : QLabel(parent) { } void ActiveLabel::wheelEvent(QWheelEvent *event) { emit wheelScrolled(event->delta()); QLabel::wheelEvent(event); } void ActiveLabel::mouseReleaseEvent(QMouseEvent* event) { switch (event->button()) { case Qt::LeftButton: emit leftMouseButtonClicked(); break; case Qt::MidButton: emit middleMouseButtonClicked(); break; default:; } QLabel::mouseReleaseEvent(event); } LXQtWorldClockPopup::LXQtWorldClockPopup(QWidget *parent) : QDialog(parent, Qt::Window | Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint | Qt::Popup | Qt::X11BypassWindowManagerHint) { setLayout(new QHBoxLayout(this)); layout()->setMargin(1); } void LXQtWorldClockPopup::show() { QDialog::show(); activateWindow(); } bool LXQtWorldClockPopup::event(QEvent *event) { if (event->type() == QEvent::Close) emit deactivated(); return QDialog::event(event); } lxqt-panel-0.10.0/plugin-worldclock/lxqtworldclock.h000066400000000000000000000071061261500472700225510ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012-2013 Razor team * 2014 LXQt team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQT_PANEL_WORLDCLOCK_H #define LXQT_PANEL_WORLDCLOCK_H #include #include #include #include #include "../panel/ilxqtpanelplugin.h" #include "lxqtworldclockconfiguration.h" class ActiveLabel; class QTimer; class LXQtWorldClockPopup; class LXQtWorldClock : public QObject, public ILXQtPanelPlugin { Q_OBJECT public: LXQtWorldClock(const ILXQtPanelPluginStartupInfo &startupInfo); ~LXQtWorldClock(); virtual QWidget *widget() { return mMainWidget; } virtual QString themeId() const { return QLatin1String("WorldClock"); } virtual ILXQtPanelPlugin::Flags flags() const { return PreferRightAlignment | HaveConfigDialog ; } bool isSeparate() const { return true; } void activated(ActivationReason reason); virtual void settingsChanged(); virtual void realign(); QDialog *configureDialog(); private slots: void timeout(); void wheelScrolled(int); void deletePopup(); private: QWidget *mMainWidget; LXQt::RotatedWidget* mRotatedWidget; ActiveLabel *mContent; LXQtWorldClockPopup* mPopup; QTimer *mTimer; int mUpdateInterval; qint64 mLastUpdate; QStringList mTimeZones; QMap mTimeZoneCustomNames; QString mDefaultTimeZone; QString mActiveTimeZone; QString mFormat; bool mAutoRotate; QLabel *mPopupContent; void restartTimer(int); QString formatDateTime(const QDateTime &datetime, const QString &timeZoneName); void updatePopupContent(); bool formatHasTimeZone(QString format); QString preformat(const QString &format, const QTimeZone &timeZone, const QDateTime& dateTime); }; class ActiveLabel : public QLabel { Q_OBJECT public: explicit ActiveLabel(QWidget * = NULL); signals: void wheelScrolled(int); void leftMouseButtonClicked(); void middleMouseButtonClicked(); protected: void wheelEvent(QWheelEvent *); void mouseReleaseEvent(QMouseEvent* event); }; class LXQtWorldClockPopup : public QDialog { Q_OBJECT public: LXQtWorldClockPopup(QWidget *parent = 0); void show(); signals: void deactivated(); protected: virtual bool event(QEvent* ); }; class LXQtWorldClockLibrary: public QObject, public ILXQtPanelPluginLibrary { Q_OBJECT Q_PLUGIN_METADATA(IID "lxde-qt.org/Panel/PluginInterface/3.0") Q_INTERFACES(ILXQtPanelPluginLibrary) public: ILXQtPanelPlugin *instance(const ILXQtPanelPluginStartupInfo &startupInfo) const { return new LXQtWorldClock(startupInfo); } }; #endif // LXQT_PANEL_WORLDCLOCK_H lxqt-panel-0.10.0/plugin-worldclock/lxqtworldclockconfiguration.cpp000066400000000000000000000555751261500472700257110ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * 2014 LXQt team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include "lxqtworldclockconfiguration.h" #include "ui_lxqtworldclockconfiguration.h" #include "lxqtworldclockconfigurationtimezones.h" #include "lxqtworldclockconfigurationmanualformat.h" #include LXQtWorldClockConfiguration::LXQtWorldClockConfiguration(QSettings *settings, QWidget *parent) : QDialog(parent), ui(new Ui::LXQtWorldClockConfiguration), mSettings(settings), mOldSettings(settings), mLockCascadeSettingChanges(false), mConfigurationTimeZones(NULL), mConfigurationManualFormat(NULL) { setAttribute(Qt::WA_DeleteOnClose); setObjectName(QLatin1String("WorldClockConfigurationWindow")); ui->setupUi(this); connect(ui->buttons, SIGNAL(clicked(QAbstractButton*)), this, SLOT(dialogButtonsAction(QAbstractButton*))); connect(ui->timeFormatCB, SIGNAL(currentIndexChanged(int)), SLOT(saveSettings())); connect(ui->timeShowSecondsCB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->timePadHourCB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->timeAMPMCB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->timezoneGB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->timezonePositionCB, SIGNAL(currentIndexChanged(int)), SLOT(saveSettings())); connect(ui->timezoneFormatCB, SIGNAL(currentIndexChanged(int)), SLOT(saveSettings())); connect(ui->dateGB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->datePositionCB, SIGNAL(currentIndexChanged(int)), SLOT(saveSettings())); connect(ui->dateFormatCB, SIGNAL(currentIndexChanged(int)), SLOT(saveSettings())); connect(ui->dateShowYearCB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->dateShowDoWCB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->datePadDayCB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->dateLongNamesCB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->advancedManualGB, SIGNAL(clicked()), SLOT(saveSettings())); connect(ui->customisePB, SIGNAL(clicked()), SLOT(customiseManualFormatClicked())); connect(ui->timeFormatCB, SIGNAL(currentIndexChanged(int)), SLOT(timeFormatChanged(int))); connect(ui->dateGB, SIGNAL(toggled(bool)), SLOT(dateGroupToggled(bool))); connect(ui->dateFormatCB, SIGNAL(currentIndexChanged(int)), SLOT(dateFormatChanged(int))); connect(ui->advancedManualGB, SIGNAL(toggled(bool)), SLOT(advancedFormatToggled(bool))); connect(ui->timeZonesTW, SIGNAL(itemSelectionChanged()), SLOT(updateTimeZoneButtons())); connect(ui->addPB, SIGNAL(clicked()), SLOT(addTimeZone())); connect(ui->removePB, SIGNAL(clicked()), SLOT(removeTimeZone())); connect(ui->setAsDefaultPB, SIGNAL(clicked()), SLOT(setTimeZoneAsDefault())); connect(ui->editCustomNamePB, SIGNAL(clicked()), SLOT(editTimeZoneCustomName())); connect(ui->moveUpPB, SIGNAL(clicked()), SLOT(moveTimeZoneUp())); connect(ui->moveDownPB, SIGNAL(clicked()), SLOT(moveTimeZoneDown())); connect(ui->autorotateCB, SIGNAL(clicked()), SLOT(saveSettings())); loadSettings(); } LXQtWorldClockConfiguration::~LXQtWorldClockConfiguration() { delete ui; } void LXQtWorldClockConfiguration::loadSettings() { mLockCascadeSettingChanges = true; bool longTimeFormatSelected = false; QString formatType = mSettings->value(QLatin1String("formatType"), QString()).toString(); QString dateFormatType = mSettings->value(QLatin1String("dateFormatType"), QString()).toString(); bool advancedManual = mSettings->value(QLatin1String("useAdvancedManualFormat"), false).toBool(); mManualFormat = mSettings->value(QLatin1String("customFormat"), tr("''HH:mm:ss'
'ddd, d MMM yyyy'
'TT'
'")).toString(); // backward compatibility if (formatType == QLatin1String("custom")) { formatType = QLatin1String("short-timeonly"); dateFormatType = QLatin1String("short"); advancedManual = true; } else if (formatType == QLatin1String("short")) { formatType = QLatin1String("short-timeonly"); dateFormatType = QLatin1String("short"); advancedManual = false; } else if ((formatType == QLatin1String("full")) || (formatType == QLatin1String("long")) || (formatType == QLatin1String("medium"))) { formatType = QLatin1String("long-timeonly"); dateFormatType = QLatin1String("long"); advancedManual = false; } if (formatType == QLatin1String("short-timeonly")) ui->timeFormatCB->setCurrentIndex(0); else if (formatType == QLatin1String("long-timeonly")) { ui->timeFormatCB->setCurrentIndex(1); longTimeFormatSelected = true; } else // if (formatType == QLatin1String("custom-timeonly")) ui->timeFormatCB->setCurrentIndex(2); ui->timeShowSecondsCB->setChecked(mSettings->value(QLatin1String("timeShowSeconds"), false).toBool() ? Qt::Checked : Qt:: Unchecked); ui->timePadHourCB->setChecked(mSettings->value(QLatin1String("timePadHour"), false).toBool() ? Qt::Checked : Qt:: Unchecked); ui->timeAMPMCB->setChecked(mSettings->value(QLatin1String("timeAMPM"), false).toBool() ? Qt::Checked : Qt:: Unchecked); bool customTimeFormatSelected = ui->timeFormatCB->currentIndex() == ui->timeFormatCB->count() - 1; ui->timeCustomW->setEnabled(customTimeFormatSelected); ui->timezoneGB->setEnabled(!longTimeFormatSelected); // timezone ui->timezoneGB->setChecked(mSettings->value(QLatin1String("showTimezone"), false).toBool() && !longTimeFormatSelected); QString timezonePosition = mSettings->value(QLatin1String("timezonePosition"), QString()).toString(); if (timezonePosition == QLatin1String("above")) ui->timezonePositionCB->setCurrentIndex(1); else if (timezonePosition == QLatin1String("before")) ui->timezonePositionCB->setCurrentIndex(2); else if (timezonePosition == QLatin1String("after")) ui->timezonePositionCB->setCurrentIndex(3); else // if (timezonePosition == QLatin1String("below")) ui->timezonePositionCB->setCurrentIndex(0); QString timezoneFormatType = mSettings->value(QLatin1String("timezoneFormatType"), QString()).toString(); if (timezoneFormatType == QLatin1String("short")) ui->timezoneFormatCB->setCurrentIndex(0); else if (timezoneFormatType == QLatin1String("long")) ui->timezoneFormatCB->setCurrentIndex(1); else if (timezoneFormatType == QLatin1String("offset")) ui->timezoneFormatCB->setCurrentIndex(2); else if (timezoneFormatType == QLatin1String("abbreviation")) ui->timezoneFormatCB->setCurrentIndex(3); else // if (timezoneFormatType == QLatin1String("iana")) ui->timezoneFormatCB->setCurrentIndex(4); // date bool dateIsChecked = mSettings->value(QLatin1String("showDate"), false).toBool(); ui->dateGB->setChecked(dateIsChecked); QString datePosition = mSettings->value(QLatin1String("datePosition"), QString()).toString(); if (datePosition == QLatin1String("above")) ui->datePositionCB->setCurrentIndex(1); else if (datePosition == QLatin1String("before")) ui->datePositionCB->setCurrentIndex(2); else if (datePosition == QLatin1String("after")) ui->datePositionCB->setCurrentIndex(3); else // if (datePosition == QLatin1String("below")) ui->datePositionCB->setCurrentIndex(0); if (dateFormatType == QLatin1String("short")) ui->dateFormatCB->setCurrentIndex(0); else if (dateFormatType == QLatin1String("long")) ui->dateFormatCB->setCurrentIndex(1); else if (dateFormatType == QLatin1String("iso")) ui->dateFormatCB->setCurrentIndex(2); else // if (dateFormatType == QLatin1String("custom")) ui->dateFormatCB->setCurrentIndex(3); ui->dateShowYearCB->setChecked(mSettings->value(QLatin1String("dateShowYear"), false).toBool() ? Qt::Checked : Qt:: Unchecked); ui->dateShowDoWCB->setChecked(mSettings->value(QLatin1String("dateShowDoW"), false).toBool() ? Qt::Checked : Qt:: Unchecked); ui->datePadDayCB->setChecked(mSettings->value(QLatin1String("datePadDay"), false).toBool() ? Qt::Checked : Qt:: Unchecked); ui->dateLongNamesCB->setChecked(mSettings->value(QLatin1String("dateLongNames"), false).toBool() ? Qt::Checked : Qt:: Unchecked); bool customDateFormatSelected = ui->dateFormatCB->currentIndex() == ui->dateFormatCB->count() - 1; ui->dateCustomW->setEnabled(dateIsChecked && customDateFormatSelected); ui->advancedManualGB->setChecked(advancedManual); mDefaultTimeZone = mSettings->value("defaultTimeZone", QString()).toString(); ui->timeZonesTW->setRowCount(0); int size = mSettings->beginReadArray(QLatin1String("timeZones")); for (int i = 0; i < size; ++i) { mSettings->setArrayIndex(i); ui->timeZonesTW->setRowCount(ui->timeZonesTW->rowCount() + 1); QString timeZoneName = mSettings->value(QLatin1String("timeZone"), QString()).toString(); if (mDefaultTimeZone.isEmpty()) mDefaultTimeZone = timeZoneName; ui->timeZonesTW->setItem(i, 0, new QTableWidgetItem(timeZoneName)); ui->timeZonesTW->setItem(i, 1, new QTableWidgetItem(mSettings->value(QLatin1String("customName"), QString()).toString())); setBold(i, mDefaultTimeZone == timeZoneName); } mSettings->endArray(); ui->timeZonesTW->resizeColumnsToContents(); ui->autorotateCB->setChecked(mSettings->value("autoRotate", true).toBool()); mLockCascadeSettingChanges = false; } void LXQtWorldClockConfiguration::saveSettings() { if (mLockCascadeSettingChanges) return; QString formatType; switch (ui->timeFormatCB->currentIndex()) { case 0: formatType = QLatin1String("short-timeonly"); break; case 1: formatType = QLatin1String("long-timeonly"); break; case 2: formatType = QLatin1String("custom-timeonly"); break; } mSettings->setValue(QLatin1String("formatType"), formatType); mSettings->setValue(QLatin1String("timeShowSeconds"), ui->timeShowSecondsCB->isChecked()); mSettings->setValue(QLatin1String("timePadHour"), ui->timePadHourCB->isChecked()); mSettings->setValue(QLatin1String("timeAMPM"), ui->timeAMPMCB->isChecked()); mSettings->setValue(QLatin1String("showTimezone"), ui->timezoneGB->isChecked()); QString timezonePosition; switch (ui->timezonePositionCB->currentIndex()) { case 0: timezonePosition = QLatin1String("below"); break; case 1: timezonePosition = QLatin1String("above"); break; case 2: timezonePosition = QLatin1String("before"); break; case 3: timezonePosition = QLatin1String("after"); break; } mSettings->setValue(QLatin1String("timezonePosition"), timezonePosition); QString timezoneFormatType; switch (ui->timezoneFormatCB->currentIndex()) { case 0: timezoneFormatType = QLatin1String("short"); break; case 1: timezoneFormatType = QLatin1String("long"); break; case 2: timezoneFormatType = QLatin1String("offset"); break; case 3: timezoneFormatType = QLatin1String("abbreviation"); break; case 4: timezoneFormatType = QLatin1String("iana"); break; } mSettings->setValue(QLatin1String("timezoneFormatType"), timezoneFormatType); mSettings->setValue(QLatin1String("showDate"), ui->dateGB->isChecked()); QString datePosition; switch (ui->datePositionCB->currentIndex()) { case 0: datePosition = QLatin1String("below"); break; case 1: datePosition = QLatin1String("above"); break; case 2: datePosition = QLatin1String("before"); break; case 3: datePosition = QLatin1String("after"); break; } mSettings->setValue(QLatin1String("datePosition"), datePosition); QString dateFormatType; switch (ui->dateFormatCB->currentIndex()) { case 0: dateFormatType = QLatin1String("short"); break; case 1: dateFormatType = QLatin1String("long"); break; case 2: dateFormatType = QLatin1String("iso"); break; case 3: dateFormatType = QLatin1String("custom"); break; } mSettings->setValue(QLatin1String("dateFormatType"), dateFormatType); mSettings->setValue(QLatin1String("dateShowYear"), ui->dateShowYearCB->isChecked()); mSettings->setValue(QLatin1String("dateShowDoW"), ui->dateShowDoWCB->isChecked()); mSettings->setValue(QLatin1String("datePadDay"), ui->datePadDayCB->isChecked()); mSettings->setValue(QLatin1String("dateLongNames"), ui->dateLongNamesCB->isChecked()); mSettings->setValue(QLatin1String("customFormat"), mManualFormat); mSettings->remove(QLatin1String("timeZones")); int size = ui->timeZonesTW->rowCount(); mSettings->beginWriteArray(QLatin1String("timeZones"), size); for (int i = 0; i < size; ++i) { mSettings->setArrayIndex(i); mSettings->setValue(QLatin1String("timeZone"), ui->timeZonesTW->item(i, 0)->text()); mSettings->setValue(QLatin1String("customName"), ui->timeZonesTW->item(i, 1)->text()); } mSettings->endArray(); mSettings->setValue(QLatin1String("defaultTimeZone"), mDefaultTimeZone); mSettings->setValue(QLatin1String("useAdvancedManualFormat"), ui->advancedManualGB->isChecked()); mSettings->setValue(QLatin1String("autoRotate"), ui->autorotateCB->isChecked()); } void LXQtWorldClockConfiguration::dialogButtonsAction(QAbstractButton *button) { if (ui->buttons->buttonRole(button) == QDialogButtonBox::ResetRole) { mOldSettings.loadToSettings(); loadSettings(); } else close(); } void LXQtWorldClockConfiguration::timeFormatChanged(int index) { bool longTimeFormatSelected = index == 1; bool customTimeFormatSelected = index == 2; ui->timeCustomW->setEnabled(customTimeFormatSelected); ui->timezoneGB->setEnabled(!longTimeFormatSelected); } void LXQtWorldClockConfiguration::dateGroupToggled(bool dateIsChecked) { bool customDateFormatSelected = ui->dateFormatCB->currentIndex() == ui->dateFormatCB->count() - 1; ui->dateCustomW->setEnabled(dateIsChecked && customDateFormatSelected); } void LXQtWorldClockConfiguration::dateFormatChanged(int index) { bool customDateFormatSelected = index == ui->dateFormatCB->count() - 1; bool dateIsChecked = ui->dateGB->isChecked(); ui->dateCustomW->setEnabled(dateIsChecked && customDateFormatSelected); } void LXQtWorldClockConfiguration::advancedFormatToggled(bool on) { bool longTimeFormatSelected = ui->timeFormatCB->currentIndex() == 1; ui->timeGB->setEnabled(!on); ui->timezoneGB->setEnabled(!on && !longTimeFormatSelected); ui->dateGB->setEnabled(!on); } void LXQtWorldClockConfiguration::customiseManualFormatClicked() { if (!mConfigurationManualFormat) { mConfigurationManualFormat = new LXQtWorldClockConfigurationManualFormat(this); connect(mConfigurationManualFormat, SIGNAL(manualFormatChanged()), this, SLOT(manualFormatChanged())); } mConfigurationManualFormat->setManualFormat(mManualFormat); QString oldManualFormat = mManualFormat; mManualFormat = (mConfigurationManualFormat->exec() == QDialog::Accepted) ? mConfigurationManualFormat->manualFormat() : oldManualFormat; saveSettings(); } void LXQtWorldClockConfiguration::manualFormatChanged() { mManualFormat = mConfigurationManualFormat->manualFormat(); saveSettings(); } void LXQtWorldClockConfiguration::updateTimeZoneButtons() { QList selectedItems = ui->timeZonesTW->selectedItems(); int selectedCount = selectedItems.count() / 2; int allCount = ui->timeZonesTW->rowCount(); ui->removePB->setEnabled(selectedCount != 0); bool canSetAsDefault = (selectedCount == 1); if (canSetAsDefault) { if (selectedItems[0]->column() == 0) canSetAsDefault = (selectedItems[0]->text() != mDefaultTimeZone); else canSetAsDefault = (selectedItems[1]->text() != mDefaultTimeZone); } bool canMoveUp = false; bool canMoveDown = false; if ((selectedCount != 0) && (selectedCount != allCount)) { bool skipBottom = true; for (int i = allCount - 1; i >= 0; --i) { if (ui->timeZonesTW->item(i, 0)->isSelected()) { if (!skipBottom) { canMoveDown = true; break; } } else skipBottom = false; } bool skipTop = true; for (int i = 0; i < allCount; ++i) { if (ui->timeZonesTW->item(i, 0)->isSelected()) { if (!skipTop) { canMoveUp = true; break; } } else skipTop = false; } } ui->setAsDefaultPB->setEnabled(canSetAsDefault); ui->editCustomNamePB->setEnabled(selectedCount == 1); ui->moveUpPB->setEnabled(canMoveUp); ui->moveDownPB->setEnabled(canMoveDown); } int LXQtWorldClockConfiguration::findTimeZone(const QString& timeZone) { QList items = ui->timeZonesTW->findItems(timeZone, Qt::MatchExactly); foreach (QTableWidgetItem* item, items) if (item->column() == 0) return item->row(); return -1; } void LXQtWorldClockConfiguration::addTimeZone() { if (!mConfigurationTimeZones) mConfigurationTimeZones = new LXQtWorldClockConfigurationTimeZones(this); if (mConfigurationTimeZones->updateAndExec() == QDialog::Accepted) { QString timeZone = mConfigurationTimeZones->timeZone(); if (timeZone != QString()) { if (findTimeZone(timeZone) == -1) { int row = ui->timeZonesTW->rowCount(); ui->timeZonesTW->setRowCount(row + 1); QTableWidgetItem *item = new QTableWidgetItem(timeZone); ui->timeZonesTW->setItem(row, 0, item); ui->timeZonesTW->setItem(row, 1, new QTableWidgetItem(QString())); if (mDefaultTimeZone.isEmpty()) setDefault(row); } } } saveSettings(); } void LXQtWorldClockConfiguration::removeTimeZone() { foreach (QTableWidgetItem *item, ui->timeZonesTW->selectedItems()) if (item->column() == 0) { if (item->text() == mDefaultTimeZone) mDefaultTimeZone.clear(); ui->timeZonesTW->removeRow(item->row()); } if ((mDefaultTimeZone.isEmpty()) && ui->timeZonesTW->rowCount()) setDefault(0); saveSettings(); } void LXQtWorldClockConfiguration::setBold(QTableWidgetItem *item, bool value) { if (item) { QFont font = item->font(); font.setBold(value); item->setFont(font); } } void LXQtWorldClockConfiguration::setBold(int row, bool value) { setBold(ui->timeZonesTW->item(row, 0), value); setBold(ui->timeZonesTW->item(row, 1), value); } void LXQtWorldClockConfiguration::setDefault(int row) { setBold(row, true); mDefaultTimeZone = ui->timeZonesTW->item(row, 0)->text(); } void LXQtWorldClockConfiguration::setTimeZoneAsDefault() { setBold(findTimeZone(mDefaultTimeZone), false); setDefault(ui->timeZonesTW->selectedItems()[0]->row()); saveSettings(); } void LXQtWorldClockConfiguration::editTimeZoneCustomName() { int row = ui->timeZonesTW->selectedItems()[0]->row(); QString oldName = ui->timeZonesTW->item(row, 1)->text(); QInputDialog d(this); d.setWindowTitle(tr("Input custom time zone name")); d.setLabelText(tr("Custom name")); d.setTextValue(oldName); d.setWindowModality(Qt::WindowModal); if (d.exec()) { ui->timeZonesTW->item(row, 1)->setText(d.textValue()); saveSettings(); } } void LXQtWorldClockConfiguration::moveTimeZoneUp() { int m = ui->timeZonesTW->rowCount(); bool skipTop = true; for (int i = 0; i < m; ++i) { if (ui->timeZonesTW->item(i, 0)->isSelected()) { if (!skipTop) { QTableWidgetItem *itemP0 = ui->timeZonesTW->takeItem(i - 1, 0); QTableWidgetItem *itemP1 = ui->timeZonesTW->takeItem(i - 1, 1); QTableWidgetItem *itemT0 = ui->timeZonesTW->takeItem(i, 0); QTableWidgetItem *itemT1 = ui->timeZonesTW->takeItem(i, 1); ui->timeZonesTW->setItem(i - 1, 0, itemT0); ui->timeZonesTW->setItem(i - 1, 1, itemT1); ui->timeZonesTW->setItem(i, 0, itemP0); ui->timeZonesTW->setItem(i, 1, itemP1); itemT0->setSelected(true); itemT1->setSelected(true); itemP0->setSelected(false); itemP1->setSelected(false); } } else skipTop = false; } saveSettings(); } void LXQtWorldClockConfiguration::moveTimeZoneDown() { int m = ui->timeZonesTW->rowCount(); bool skipBottom = true; for (int i = m - 1; i >= 0; --i) { if (ui->timeZonesTW->item(i, 0)->isSelected()) { if (!skipBottom) { QTableWidgetItem *itemN0 = ui->timeZonesTW->takeItem(i + 1, 0); QTableWidgetItem *itemN1 = ui->timeZonesTW->takeItem(i + 1, 1); QTableWidgetItem *itemT0 = ui->timeZonesTW->takeItem(i, 0); QTableWidgetItem *itemT1 = ui->timeZonesTW->takeItem(i, 1); ui->timeZonesTW->setItem(i + 1, 0, itemT0); ui->timeZonesTW->setItem(i + 1, 1, itemT1); ui->timeZonesTW->setItem(i, 0, itemN0); ui->timeZonesTW->setItem(i, 1, itemN1); itemT0->setSelected(true); itemT1->setSelected(true); itemN0->setSelected(false); itemN1->setSelected(false); } } else skipBottom = false; } saveSettings(); } lxqt-panel-0.10.0/plugin-worldclock/lxqtworldclockconfiguration.h000066400000000000000000000054141261500472700253410ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQT_PANEL_WORLDCLOCK_CONFIGURATION_H #define LXQT_PANEL_WORLDCLOCK_CONFIGURATION_H #include #include #include #include #include namespace Ui { class LXQtWorldClockConfiguration; } class LXQtWorldClockConfigurationTimeZones; class LXQtWorldClockConfigurationManualFormat; class QTableWidgetItem; class LXQtWorldClockConfiguration : public QDialog { Q_OBJECT public: explicit LXQtWorldClockConfiguration(QSettings *settings, QWidget *parent = NULL); ~LXQtWorldClockConfiguration(); public slots: void saveSettings(); private: Ui::LXQtWorldClockConfiguration *ui; QSettings *mSettings; LXQt::SettingsCache mOldSettings; /* Read settings from conf file and put data into controls. */ void loadSettings(); private slots: /* Saves settings in conf file. */ void dialogButtonsAction(QAbstractButton *); void timeFormatChanged(int); void dateGroupToggled(bool); void dateFormatChanged(int); void advancedFormatToggled(bool); void customiseManualFormatClicked(); void manualFormatChanged(); void updateTimeZoneButtons(); void addTimeZone(); void removeTimeZone(); void setTimeZoneAsDefault(); void editTimeZoneCustomName(); void moveTimeZoneUp(); void moveTimeZoneDown(); private: QString mDefaultTimeZone; bool mLockCascadeSettingChanges; LXQtWorldClockConfigurationTimeZones *mConfigurationTimeZones; LXQtWorldClockConfigurationManualFormat *mConfigurationManualFormat; QString mManualFormat; void setDefault(int); void setBold(QTableWidgetItem*, bool); void setBold(int row, bool value); int findTimeZone(const QString& timeZone); }; #endif // LXQT_PANEL_WORLDCLOCK_CONFIGURATION_H lxqt-panel-0.10.0/plugin-worldclock/lxqtworldclockconfiguration.ui000066400000000000000000000454551261500472700255400ustar00rootroot00000000000000 LXQtWorldClockConfiguration 0 0 600 686 World Clock Settings 0 Display &format &Time QFormLayout::AllNonFixedFieldsGrow F&ormat: timeFormatCB Short Long Custom false 0 0 0 0 Sho&w seconds Pad &hour with zero &Use 12-hour format T&ime zone true false &Position: timezonePositionCB For&mat: timezoneFormatCB Below Above Before After 0 Short Long Offset from UTC Abbreviation Location identifier Custom name &Date true false QFormLayout::AllNonFixedFieldsGrow Po&sition: datePositionCB Below Above Before After Fo&rmat: dateFormatCB Short Long ISO 8601 Custom false 0 0 0 0 Show &year Show day of wee&k Pad d&ay with zero &Long month and day of week names Ad&vanced manual format true false Qt::Horizontal 40 20 &Customise ... Qt::Vertical 20 40 Time &zones QAbstractItemView::NoEditTriggers true QAbstractItemView::ExtendedSelection QAbstractItemView::SelectRows 2 true false IANA id Custom name &Add ... false &Remove false Set as &default false &Edit custom name ... false Move &up false Move do&wn Qt::Vertical 1 0 &General Auto&rotate when the panel is vertical true Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Reset tabWidget timeFormatCB timeShowSecondsCB timePadHourCB timeAMPMCB timezoneGB timezonePositionCB timezoneFormatCB dateGB datePositionCB dateFormatCB dateShowYearCB dateShowDoWCB datePadDayCB dateLongNamesCB advancedManualGB customisePB timeZonesTW addPB removePB setAsDefaultPB editCustomNamePB moveUpPB moveDownPB autorotateCB buttons buttons accepted() LXQtWorldClockConfiguration accept() 104 438 97 253 buttons rejected() LXQtWorldClockConfiguration reject() 85 438 62 253 maximumNetSpeedChanged(QString) on_typeCOB_currentIndexChanged(int) on_sourceCOB_currentIndexChanged(int) on_maximumHS_valueChanged(int) saveSettings() lxqt-panel-0.10.0/plugin-worldclock/lxqtworldclockconfigurationmanualformat.cpp000066400000000000000000000036161261500472700303050ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * 2014 LXQt team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include "lxqtworldclockconfigurationmanualformat.h" #include "ui_lxqtworldclockconfigurationmanualformat.h" LXQtWorldClockConfigurationManualFormat::LXQtWorldClockConfigurationManualFormat(QWidget *parent) : QDialog(parent), ui(new Ui::LXQtWorldClockConfigurationManualFormat) { setObjectName("WorldClockConfigurationManualFormatWindow"); setWindowModality(Qt::WindowModal); ui->setupUi(this); connect(ui->manualFormatPTE, SIGNAL(textChanged()), this, SIGNAL(manualFormatChanged())); } LXQtWorldClockConfigurationManualFormat::~LXQtWorldClockConfigurationManualFormat() { delete ui; } void LXQtWorldClockConfigurationManualFormat::setManualFormat(const QString& text) { ui->manualFormatPTE->setPlainText(text); } QString LXQtWorldClockConfigurationManualFormat::manualFormat() const { return ui->manualFormatPTE->toPlainText(); } lxqt-panel-0.10.0/plugin-worldclock/lxqtworldclockconfigurationmanualformat.h000066400000000000000000000033421261500472700277460ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * 2014 LXQt team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQT_PANEL_WORLDCLOCK_CONFIGURATION_MANUAL_FORMAT_H #define LXQT_PANEL_WORLDCLOCK_CONFIGURATION_MANUAL_FORMAT_H #include #include namespace Ui { class LXQtWorldClockConfigurationManualFormat; } class QTreeWidgetItem; class LXQtWorldClockConfigurationManualFormat : public QDialog { Q_OBJECT public: explicit LXQtWorldClockConfigurationManualFormat(QWidget *parent = NULL); ~LXQtWorldClockConfigurationManualFormat(); void setManualFormat(const QString&); QString manualFormat() const; signals: void manualFormatChanged(); private: Ui::LXQtWorldClockConfigurationManualFormat *ui; }; #endif // LXQT_PANEL_WORLDCLOCK_CONFIGURATION_MANUAL_FORMAT_H lxqt-panel-0.10.0/plugin-worldclock/lxqtworldclockconfigurationmanualformat.ui000066400000000000000000000231211261500472700301310ustar00rootroot00000000000000 LXQtWorldClockConfigurationManualFormat 0 0 800 500 World Clock Time Zones Qt::Vertical false 0 1 0 100 0 100 0 100 Qt::ScrollBarAlwaysOff true 0 0 766 1050 0 0 0 0 <h1>Custom Date/Time Format Syntax</h1> <p>A date pattern is a string of characters, where specific strings of characters are replaced with date and time data from a calendar when formatting or used to generate data for a calendar when parsing.</p> <p>The Date Field Symbol Table below contains the characters used in patterns to show the appropriate formats for a given locale, such as yyyy for the year. Characters may be used multiple times. For example, if y is used for the year, 'yy' might produce '99', whereas 'yyyy' produces '1999'. For most numerical fields, the number of characters specifies the field width. For example, if h is the hour, 'h' might produce '5', but 'hh' produces '05'. For some characters, the count specifies whether an abbreviated or full form should be used, but may have other choices, as given below.</p> <p>Two single quotes represents a literal single quote, either inside or outside single quotes. Text within single quotes is not interpreted in any way (except for two adjacent single quotes). Otherwise all ASCII letter from a to z and A to Z are reserved as syntax characters, and require quoting if they are to represent literal characters. In addition, certain ASCII punctuation characters may become variable in the future (eg ":" being interpreted as the time separator and '/' as a date separator, and replaced by respective locale-sensitive characters in display).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Code</th><th>Meaning</th></tr> <tr><td>d</td><td>the day as number without a leading zero (1 to 31)</td></tr> <tr><td>dd</td><td>the day as number with a leading zero (01 to 31)</td></tr> <tr><td>ddd</td><td>the abbreviated localized day name (e.g. 'Mon' to 'Sun').</td></tr> <tr><td>dddd</td><td>the long localized day name (e.g. 'Monday' to 'Sunday</td></tr> <tr><td>M</td><td>the month as number without a leading zero (1-12)</td></tr> <tr><td>MM</td><td>the month as number with a leading zero (01-12)</td></tr> <tr><td>MMM</td><td>the abbreviated localized month name (e.g. 'Jan' to 'Dec').</td></tr> <tr><td>MMMM</td><td>the long localized month name (e.g. 'January' to 'December').</td></tr> <tr><td>yy</td><td>the year as two digit number (00-99)</td></tr> <tr><td>yyyy</td><td>the year as four digit number</td></tr> <tr><td>h</td><td>the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)</td></tr> <tr><td>hh</td><td>the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)</td></tr> <tr><td>H</td><td>the hour without a leading zero (0 to 23, even with AM/PM display)</td></tr> <tr><td>HH</td><td>the hour with a leading zero (00 to 23, even with AM/PM display)</td></tr> <tr><td>m</td><td>the minute without a leading zero (0 to 59)</td></tr> <tr><td>mm</td><td>the minute with a leading zero (00 to 59)</td></tr> <tr><td>s</td><td>the second without a leading zero (0 to 59)</td></tr> <tr><td>ss</td><td>the second with a leading zero (00 to 59)</td></tr> <tr><td>z</td><td>the milliseconds without leading zeroes (0 to 999)</td></tr> <tr><td>zzz</td><td>the milliseconds with leading zeroes (000 to 999)</td></tr> <tr><td>AP <i>or</i> A</td><td>use AM/PM display. <b>A/AP</b> will be replaced by either "AM" or "PM".<</td></tr> <tr><td>ap <i>or</i> a</td><td>use am/pm display. <b>a/ap</b> will be replaced by either "am" or "pm".<</td></tr> <tr><td>t</td><td>the timezone (for example "CEST")</td></tr> <tr><td>T</td><td>the offset from UTC</td></tr> <tr><td>TT</td><td>the timezone IANA id</td></tr> <tr><td>TTT</td><td>the timezone abbreviation</td></tr> <tr><td>TTTT</td><td>the timezone short display name</td></tr> <tr><td>TTTTT</td><td>the timezone long display name</td></tr> <tr><td>TTTTTT</td><td>the timezone custom name. You can change it the 'Time zones' tab of the configuration window</td></tr></table> <p><br /><b>Note:</b> Any characters in the pattern that are not in the ranges of ['a'..'z'] and ['A'..'Z'] will be treated as quoted text. For instance, characters like ':', '.', ' ', '#' and '@' will appear in the resulting time text even they are not enclosed within single quotes.The single quote is used to 'escape' letters. Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.</p> Qt::RichText true QDialogButtonBox::Cancel|QDialogButtonBox::Ok manualFormatPTE scrollArea buttons buttons accepted() LXQtWorldClockConfigurationManualFormat accept() 95 490 97 253 buttons rejected() LXQtWorldClockConfigurationManualFormat reject() 76 490 62 253 maximumNetSpeedChanged(QString) on_typeCOB_currentIndexChanged(int) on_sourceCOB_currentIndexChanged(int) on_maximumHS_valueChanged(int) saveSettings() lxqt-panel-0.10.0/plugin-worldclock/lxqtworldclockconfigurationtimezones.cpp000066400000000000000000000106201261500472700276250ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * 2014 LXQt team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #include #include "lxqtworldclockconfigurationtimezones.h" #include "ui_lxqtworldclockconfigurationtimezones.h" LXQtWorldClockConfigurationTimeZones::LXQtWorldClockConfigurationTimeZones(QWidget *parent) : QDialog(parent), ui(new Ui::LXQtWorldClockConfigurationTimeZones) { setObjectName("WorldClockConfigurationTimeZonesWindow"); setWindowModality(Qt::WindowModal); ui->setupUi(this); connect(ui->timeZonesTW, SIGNAL(itemSelectionChanged()), SLOT(itemSelectionChanged())); connect(ui->timeZonesTW, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), SLOT(itemDoubleClicked(QTreeWidgetItem*,int))); } LXQtWorldClockConfigurationTimeZones::~LXQtWorldClockConfigurationTimeZones() { delete ui; } QString LXQtWorldClockConfigurationTimeZones::timeZone() { return mTimeZone; } void LXQtWorldClockConfigurationTimeZones::itemSelectionChanged() { QList items = ui->timeZonesTW->selectedItems(); if (!items.empty()) mTimeZone = items[0]->data(0, Qt::UserRole).toString(); else mTimeZone.clear(); } void LXQtWorldClockConfigurationTimeZones::itemDoubleClicked(QTreeWidgetItem* /*item*/, int /*column*/) { if (!mTimeZone.isEmpty()) accept(); } QTreeWidgetItem* LXQtWorldClockConfigurationTimeZones::makeSureParentsExist(const QStringList &parts, QMap &parentItems) { if (parts.length() == 1) return 0; QStringList parentParts = parts.mid(0, parts.length() - 1); QString parentPath = parentParts.join(QLatin1String("/")); QMap::Iterator I = parentItems.find(parentPath); if (I != parentItems.end()) return I.value(); QTreeWidgetItem* newItem = new QTreeWidgetItem(QStringList() << parts[parts.length() - 2]); QTreeWidgetItem* parentItem = makeSureParentsExist(parentParts, parentItems); if (!parentItem) ui->timeZonesTW->addTopLevelItem(newItem); else parentItem->addChild(newItem); parentItems[parentPath] = newItem; return newItem; } int LXQtWorldClockConfigurationTimeZones::updateAndExec() { QDateTime now = QDateTime::currentDateTime(); ui->timeZonesTW->clear(); QMap parentItems; foreach(QByteArray ba, QTimeZone::availableTimeZoneIds()) { QTimeZone timeZone(ba); QString ianaId(ba); QStringList qStrings(QString(ba).split(QLatin1Char('/'))); if ((qStrings.size() == 1) && (qStrings[0].startsWith(QLatin1String("UTC")))) qStrings.prepend(tr("UTC")); if (qStrings.size() == 1) qStrings.prepend(tr("Other")); QTreeWidgetItem *tzItem = new QTreeWidgetItem(QStringList() << qStrings[qStrings.length() - 1] << timeZone.displayName(now) << timeZone.comment() << QLocale::countryToString(timeZone.country())); tzItem->setData(0, Qt::UserRole, ianaId); makeSureParentsExist(qStrings, parentItems)->addChild(tzItem); } QStringList qStrings = QStringList() << tr("Other") << QLatin1String("local"); QTreeWidgetItem *tzItem = new QTreeWidgetItem(QStringList() << qStrings[qStrings.length() - 1] << QString() << tr("Local timezone") << QString()); tzItem->setData(0, Qt::UserRole, qStrings[qStrings.length() - 1]); makeSureParentsExist(qStrings, parentItems)->addChild(tzItem); ui->timeZonesTW->sortByColumn(0, Qt::AscendingOrder); return exec(); } lxqt-panel-0.10.0/plugin-worldclock/lxqtworldclockconfigurationtimezones.h000066400000000000000000000035601261500472700272770ustar00rootroot00000000000000/* BEGIN_COMMON_COPYRIGHT_HEADER * (c)LGPL2+ * * LXDE-Qt - a lightweight, Qt based, desktop toolset * http://razor-qt.org * * Copyright: 2012 Razor team * 2014 LXQt team * Authors: * Kuzma Shapran * * This program or library is free software; you can redistribute it * and/or modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA * * END_COMMON_COPYRIGHT_HEADER */ #ifndef LXQT_PANEL_WORLDCLOCK_CONFIGURATION_TIMEZONES_H #define LXQT_PANEL_WORLDCLOCK_CONFIGURATION_TIMEZONES_H #include #include namespace Ui { class LXQtWorldClockConfigurationTimeZones; } class QTreeWidgetItem; class LXQtWorldClockConfigurationTimeZones : public QDialog { Q_OBJECT public: explicit LXQtWorldClockConfigurationTimeZones(QWidget *parent = NULL); ~LXQtWorldClockConfigurationTimeZones(); int updateAndExec(); QString timeZone(); public slots: void itemSelectionChanged(); void itemDoubleClicked(QTreeWidgetItem*,int); private: Ui::LXQtWorldClockConfigurationTimeZones *ui; QString mTimeZone; QTreeWidgetItem* makeSureParentsExist(const QStringList &parts, QMap &parentItems); }; #endif // LXQT_PANEL_WORLDCLOCK_CONFIGURATION_TIMEZONES_H lxqt-panel-0.10.0/plugin-worldclock/lxqtworldclockconfigurationtimezones.ui000066400000000000000000000052621261500472700274660ustar00rootroot00000000000000 LXQtWorldClockConfigurationTimeZones 0 0 718 280 World Clock Time Zones QAbstractItemView::NoEditTriggers true true 4 150 Time zone Name Comment Country QDialogButtonBox::Cancel|QDialogButtonBox::Ok timeZonesTW buttons buttons accepted() LXQtWorldClockConfigurationTimeZones accept() 86 244 97 253 buttons rejected() LXQtWorldClockConfigurationTimeZones reject() 67 244 62 253 maximumNetSpeedChanged(QString) on_typeCOB_currentIndexChanged(int) on_sourceCOB_currentIndexChanged(int) on_maximumHS_valueChanged(int) saveSettings() lxqt-panel-0.10.0/plugin-worldclock/resources/000077500000000000000000000000001261500472700213325ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-worldclock/resources/worldclock.desktop.in000066400000000000000000000002261261500472700254750ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name=World clock Comment=World clock plugin. Icon=clock #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-worldclock/translations/000077500000000000000000000000001261500472700220415ustar00rootroot00000000000000lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock.ts000066400000000000000000000436101261500472700245600ustar00rootroot00000000000000 LXQtWorldClock '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' LXQtWorldClockConfiguration World Clock Settings Display &format &Time F&ormat: Short Long Custom Sho&w seconds Pad &hour with zero T&ime zone &Position: For&mat: Below Above Before After Offset from UTC Abbreviation IANA id Custom name &Use 12-hour format Location identifier &Date Po&sition: Fo&rmat: ISO 8601 Show &year Show day of wee&k Pad d&ay with zero &Long month and day of week names Ad&vanced manual format &Customise ... Time &zones &Add ... &Remove Set as &default &Edit custom name ... Move &up Move do&wn &General Auto&rotate when the panel is vertical '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' Input custom time zone name LXQtWorldClockConfigurationManualFormat World Clock Time Zones <h1>Custom Date/Time Format Syntax</h1> <p>A date pattern is a string of characters, where specific strings of characters are replaced with date and time data from a calendar when formatting or used to generate data for a calendar when parsing.</p> <p>The Date Field Symbol Table below contains the characters used in patterns to show the appropriate formats for a given locale, such as yyyy for the year. Characters may be used multiple times. For example, if y is used for the year, 'yy' might produce '99', whereas 'yyyy' produces '1999'. For most numerical fields, the number of characters specifies the field width. For example, if h is the hour, 'h' might produce '5', but 'hh' produces '05'. For some characters, the count specifies whether an abbreviated or full form should be used, but may have other choices, as given below.</p> <p>Two single quotes represents a literal single quote, either inside or outside single quotes. Text within single quotes is not interpreted in any way (except for two adjacent single quotes). Otherwise all ASCII letter from a to z and A to Z are reserved as syntax characters, and require quoting if they are to represent literal characters. In addition, certain ASCII punctuation characters may become variable in the future (eg ":" being interpreted as the time separator and '/' as a date separator, and replaced by respective locale-sensitive characters in display).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Code</th><th>Meaning</th></tr> <tr><td>d</td><td>the day as number without a leading zero (1 to 31)</td></tr> <tr><td>dd</td><td>the day as number with a leading zero (01 to 31)</td></tr> <tr><td>ddd</td><td>the abbreviated localized day name (e.g. 'Mon' to 'Sun').</td></tr> <tr><td>dddd</td><td>the long localized day name (e.g. 'Monday' to 'Sunday</td></tr> <tr><td>M</td><td>the month as number without a leading zero (1-12)</td></tr> <tr><td>MM</td><td>the month as number with a leading zero (01-12)</td></tr> <tr><td>MMM</td><td>the abbreviated localized month name (e.g. 'Jan' to 'Dec').</td></tr> <tr><td>MMMM</td><td>the long localized month name (e.g. 'January' to 'December').</td></tr> <tr><td>yy</td><td>the year as two digit number (00-99)</td></tr> <tr><td>yyyy</td><td>the year as four digit number</td></tr> <tr><td>h</td><td>the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)</td></tr> <tr><td>hh</td><td>the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)</td></tr> <tr><td>H</td><td>the hour without a leading zero (0 to 23, even with AM/PM display)</td></tr> <tr><td>HH</td><td>the hour with a leading zero (00 to 23, even with AM/PM display)</td></tr> <tr><td>m</td><td>the minute without a leading zero (0 to 59)</td></tr> <tr><td>mm</td><td>the minute with a leading zero (00 to 59)</td></tr> <tr><td>s</td><td>the second without a leading zero (0 to 59)</td></tr> <tr><td>ss</td><td>the second with a leading zero (00 to 59)</td></tr> <tr><td>z</td><td>the milliseconds without leading zeroes (0 to 999)</td></tr> <tr><td>zzz</td><td>the milliseconds with leading zeroes (000 to 999)</td></tr> <tr><td>AP <i>or</i> A</td><td>use AM/PM display. <b>A/AP</b> will be replaced by either "AM" or "PM".<</td></tr> <tr><td>ap <i>or</i> a</td><td>use am/pm display. <b>a/ap</b> will be replaced by either "am" or "pm".<</td></tr> <tr><td>t</td><td>the timezone (for example "CEST")</td></tr> <tr><td>T</td><td>the offset from UTC</td></tr> <tr><td>TT</td><td>the timezone IANA id</td></tr> <tr><td>TTT</td><td>the timezone abbreviation</td></tr> <tr><td>TTTT</td><td>the timezone short display name</td></tr> <tr><td>TTTTT</td><td>the timezone long display name</td></tr> <tr><td>TTTTTT</td><td>the timezone custom name. You can change it the 'Time zones' tab of the configuration window</td></tr></table> <p><br /><b>Note:</b> Any characters in the pattern that are not in the ranges of ['a'..'z'] and ['A'..'Z'] will be treated as quoted text. For instance, characters like ':', '.', ' ', '#' and '@' will appear in the resulting time text even they are not enclosed within single quotes.The single quote is used to 'escape' letters. Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.</p> LXQtWorldClockConfigurationTimeZones World Clock Time Zones Time zone Name Comment Country UTC Other Local timezone lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_de.desktop000066400000000000000000000000551261500472700262470ustar00rootroot00000000000000Name[de]=Weltzeituhr Comment[de]=Weltzeituhr lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_de.ts000066400000000000000000000574401261500472700252360ustar00rootroot00000000000000 LXQtWorldClock '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' LXQtWorldClockConfiguration World Clock Settings Weltzeituhr - Einstellungen Display &format Anzeige&format &Time &Zeit F&ormat: F&ormat: Short Kurz Long Lang Custom Eigenes Sho&w seconds Se&kunden anzeigen Pad &hour with zero Stunden mit fü&hrender Null &Use 12-hour format 12-St&undenformat benutzen T&ime zone Ze&itzone &Position: &Position: For&mat: For&mat: Below Unter Above Über Before Vor After Nach Offset from UTC Versatz zu UTC Abbreviation Abkürzung Location identifier Ortsbezeichnung Custom name Eigener Name &Date &Datum Po&sition: &Position: Fo&rmat: Fo&rmat: ISO 8601 ISO 8601 Show &year &Jahr anzeigen Show day of wee&k &Wochentag anzeigen Pad d&ay with zero T&ag mit führender Null &Long month and day of week names &Lange Monats- und Wochentagsbezeichnungen Ad&vanced manual format &Erweitertes manuelles Format &Customise ... &Ändern... Time &zones &Zeitzonen IANA id IANA-ID &Add ... &Hinzufügen ... &Remove &Entfernen Set as &default Als &Default setzen &Edit custom name ... &Eigenen Namen bearbeiten... Move &up Nach &oben Move do&wn Nach &unten &General All&gemein Auto&rotate when the panel is vertical &Bei senkrechter Leiste automatisch drehen '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' Input custom time zone name Eigenen Zeitzonennamen eingeben LXQtWorldClockConfigurationManualFormat World Clock Time Zones Weltzeituhr Zeitzonen <h1>Custom Date/Time Format Syntax</h1> <p>A date pattern is a string of characters, where specific strings of characters are replaced with date and time data from a calendar when formatting or used to generate data for a calendar when parsing.</p> <p>The Date Field Symbol Table below contains the characters used in patterns to show the appropriate formats for a given locale, such as yyyy for the year. Characters may be used multiple times. For example, if y is used for the year, 'yy' might produce '99', whereas 'yyyy' produces '1999'. For most numerical fields, the number of characters specifies the field width. For example, if h is the hour, 'h' might produce '5', but 'hh' produces '05'. For some characters, the count specifies whether an abbreviated or full form should be used, but may have other choices, as given below.</p> <p>Two single quotes represents a literal single quote, either inside or outside single quotes. Text within single quotes is not interpreted in any way (except for two adjacent single quotes). Otherwise all ASCII letter from a to z and A to Z are reserved as syntax characters, and require quoting if they are to represent literal characters. In addition, certain ASCII punctuation characters may become variable in the future (eg ":" being interpreted as the time separator and '/' as a date separator, and replaced by respective locale-sensitive characters in display).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Code</th><th>Meaning</th></tr> <tr><td>d</td><td>the day as number without a leading zero (1 to 31)</td></tr> <tr><td>dd</td><td>the day as number with a leading zero (01 to 31)</td></tr> <tr><td>ddd</td><td>the abbreviated localized day name (e.g. 'Mon' to 'Sun').</td></tr> <tr><td>dddd</td><td>the long localized day name (e.g. 'Monday' to 'Sunday</td></tr> <tr><td>M</td><td>the month as number without a leading zero (1-12)</td></tr> <tr><td>MM</td><td>the month as number with a leading zero (01-12)</td></tr> <tr><td>MMM</td><td>the abbreviated localized month name (e.g. 'Jan' to 'Dec').</td></tr> <tr><td>MMMM</td><td>the long localized month name (e.g. 'January' to 'December').</td></tr> <tr><td>yy</td><td>the year as two digit number (00-99)</td></tr> <tr><td>yyyy</td><td>the year as four digit number</td></tr> <tr><td>h</td><td>the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)</td></tr> <tr><td>hh</td><td>the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)</td></tr> <tr><td>H</td><td>the hour without a leading zero (0 to 23, even with AM/PM display)</td></tr> <tr><td>HH</td><td>the hour with a leading zero (00 to 23, even with AM/PM display)</td></tr> <tr><td>m</td><td>the minute without a leading zero (0 to 59)</td></tr> <tr><td>mm</td><td>the minute with a leading zero (00 to 59)</td></tr> <tr><td>s</td><td>the second without a leading zero (0 to 59)</td></tr> <tr><td>ss</td><td>the second with a leading zero (00 to 59)</td></tr> <tr><td>z</td><td>the milliseconds without leading zeroes (0 to 999)</td></tr> <tr><td>zzz</td><td>the milliseconds with leading zeroes (000 to 999)</td></tr> <tr><td>AP <i>or</i> A</td><td>use AM/PM display. <b>A/AP</b> will be replaced by either "AM" or "PM".<</td></tr> <tr><td>ap <i>or</i> a</td><td>use am/pm display. <b>a/ap</b> will be replaced by either "am" or "pm".<</td></tr> <tr><td>t</td><td>the timezone (for example "CEST")</td></tr> <tr><td>T</td><td>the offset from UTC</td></tr> <tr><td>TT</td><td>the timezone IANA id</td></tr> <tr><td>TTT</td><td>the timezone abbreviation</td></tr> <tr><td>TTTT</td><td>the timezone short display name</td></tr> <tr><td>TTTTT</td><td>the timezone long display name</td></tr> <tr><td>TTTTTT</td><td>the timezone custom name. You can change it the 'Time zones' tab of the configuration window</td></tr></table> <p><br /><b>Note:</b> Any characters in the pattern that are not in the ranges of ['a'..'z'] and ['A'..'Z'] will be treated as quoted text. For instance, characters like ':', '.', ' ', '#' and '@' will appear in the resulting time text even they are not enclosed within single quotes.The single quote is used to 'escape' letters. Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.</p> <h1>Syntax für eigenes Datums-/Zeitformat </h1> <p>Ein Datumsmuster ist eine Zeichenkette, in der bestimmte Zeichenfolgen durch Datums- und Zeitangaben eines Kalenders ersetzt werden.</p> <p>In der unten angegebenen Tabelle sind die Zeichenfolgen angegeben, für die eine Ersetzung vorgenommen wird. Dabei können einzelne Zeichen mehrfach angegeben werden, um die Bedeutung zu verändern. Beispielsweise wird y zur Darstellung des Jahres benutzt. Dabei produziert 'yy' z.B. '99', und 'yyyy' produziert dann '1999'. Bei den meisten numerischen Feldern bestimmt die Anzahl der Zeichen die Feldbreite. Beispielsweise bei h, das zur Darstellung der Stunden dient, könnte 'h' eine '5' produzieren, aber 'hh' ergäbe '05'. Bei einigen Zeichen wird durch die Anzahl bestimmt, ob die abgekürzte oder ausgeschriebene Form benutzt werden soll.</p> <p>Zwei Hochkommas werden durch ein einzelnes Hochkomma ersetzt, sowohl innerhalb als auch außerhalb Hochkommas. Text innerhalb einfacher Hochkommas wird nicht ersetzt (abgesehen von zwei aufeinander folgenden Hochkommas). Ansonsten sind alle ASCII-Zeichen von a bis z und A bis Z reservierte Zeichen und müssen in Hochkommas stehen, wenn sie für sich selbst stehen sollen. Außerdem könnten bestimmte Satzzeichen zukünftig als Variablen aufgefasst werden (z.B. könnte ":" als Trennzeichen zwischen Zeitbestandteilen und '/' als Datumstrenner interpretiert werden, welche durch entsprechende lokale Zeichen in der Anzeige ersetzt werden).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Code</th><th>Bedeutung</th></tr> <tr><td>d</td><td>Tag als Zahl ohne führende Null (1 bis 31)</td></tr> <tr><td>dd</td><td>Tag als Zahl mit führender Null (01 bis 31)</td></tr> <tr><td>ddd</td><td>Abgekürzter lokalisierter Tagesname (z.B. 'Mon' bis 'Son').</td></tr> <tr><td>dddd</td><td>Ausgeschriebener lokalisierter Tagesname (z.B. 'Montag' bis 'Sonntag</td></tr> <tr><td>M</td><td>Monat als Zahl ohne führende Null (1-12)</td></tr> <tr><td>MM</td><td>Monat als Zahl mit führender Null (01-12)</td></tr> <tr><td>MMM</td><td>Abgekürzter lokalisierter Monatsname (z.B. 'Jan' bis 'Dez').</td></tr> <tr><td>MMMM</td><td>Ausgeschriebener lokalisierter Monatsname (z.B. 'Januar' bis 'Dezember').</td></tr> <tr><td>yy</td><td>Jahr als zweistellige Zahl (00-99)</td></tr> <tr><td>yyyy</td><td>Jahr als vierstellige Zahl</td></tr> <tr><td>h</td><td>Stunde ohne führende Null (0 bis 23 oder 1 bis 12 bei AM/PM-Anzeige)</td></tr> <tr><td>hh</td><td>Stunde mit führender Null (00 bis 23 oder 01 bis 12 bei AM/PM-Anzeige)</td></tr> <tr><td>H</td><td>Stunde ohne führende Null (0 bis 23, selbst bei AM/PM-Anzeige)</td></tr> <tr><td>HH</td><td>Stunde mit führender Null (00 bis 23, selbst bei AM/PM-Anzeige)</td></tr> <tr><td>m</td><td>Minute ohne führende Null (0 bis 59)</td></tr> <tr><td>mm</td><td>Minute mit führender Null (00 bis 59)</td></tr> <tr><td>s</td><td>Sekunde ohne führende Null (0 bis 59)</td></tr> <tr><td>ss</td><td>Sekunde mit führender Null (00 bis 59)</td></tr> <tr><td>z</td><td>Millisekunden ohne führende Nullen (0 bis 999)</td></tr> <tr><td>zzz</td><td>Millisekunden mit führenden Nullen (000 bis 999)</td></tr> <tr><td>AP <i>oder</i> A</td><td>AM/PM-Anzeige nutzen. <b>A/AP</b> wird durch "AM" oder "PM" ersetzt.<</td></tr> <tr><td>ap <i>oder</i> a</td><td>am/pm-Anzeige nutzen. <b>a/ap</b> wird durch "am" oder "pm" ersetzt.<</td></tr> <tr><td>t</td><td>Zeitzone (z.B. "CEST")</td></tr> <tr><td>T</td><td>Offset zu UTC</td></tr> <tr><td>TT</td><td>Zeitzone IANA-ID</td></tr> <tr><td>TTT</td><td>Zeitzone abgekürzt</td></tr> <tr><td>TTTT</td><td>Zeitzone kurz</td></tr> <tr><td>TTTTT</td><td>Zeitzone lang</td></tr> <tr><td>TTTTTT</td><td>Eigener Name für die Zeitzone. Dieser kann im Reiter 'Zeitzonen' gesetzt werden.</td></tr></table> <p><br /><b>Hinweis:</b> Jedes Zeichen, das nicht in den Bereichen ['a'..'z'] und ['A'..'Z'] liegt, wird als in Hochkommas eingeschlossener Text behandelt. Zeichen wie ':', '.', ' ', '#' und '@' erscheinen im resultierenden Text auch wenn sie nicht in Hochkommas eingeschlossen sind. Das Hochkomma wird als Fluchtzeichen verwendet. Zwei aufeinander folgende Hochkommas repräsentieren ein 'echtes' Hochkomma.</p> LXQtWorldClockConfigurationTimeZones World Clock Time Zones Weltzeituhr Zeitzonen Time zone Zeitzone Name Name Comment Kommentar Country Land UTC UTC Other Andere Local timezone Lokale Zeitzone lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_el.desktop000066400000000000000000000001521261500472700262550ustar00rootroot00000000000000Name[el]=Παγκόσμιο ρολόι Comment[el]=Πρόσθετο παγκόσμιου ρολογιού lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_el.ts000066400000000000000000000705531261500472700252460ustar00rootroot00000000000000 LXQtWorldClock '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' LXQtWorldClockConfiguration World Clock Settings Ρυθμίσεις παγκόσμιου ρολογιού Display &format &Μορφή εμφάνισης &Time &Ώρα F&ormat: Μ&ορφή: Short Σύντομη Long Μακριά Custom Προσαρμοσμένη Sho&w seconds Εμφάνι&ση των δευτερολέπτων Pad &hour with zero &Συμπλήρωση της ώρας με μηδενικά T&ime zone &Ζώνη ώρας &Position: &Θέση: For&mat: &Μορφή: Below Κάτω Above Πάνω Before Πριν After Μετά Offset from UTC Διαφορά από την UTC Abbreviation Συντομογραφία IANA id Αναγνωριστικό IANA Custom name Προσαρμοσμένο όνομα &Use 12-hour format &Χρήση της 12άωρης μορφής Location identifier Αναγνωριστικό τοποθεσίας &Date &Ημερομηνία Po&sition: &Θέση: Fo&rmat: &Μορφή: ISO 8601 ISO 8601 Show &year Εμφάνιση του έ&τους Show day of wee&k Εμφάνιση της ημέρας της ε&βδομάδας Pad d&ay with zero Συμπλή&ρωση της ημέρας με μηδενικά &Long month and day of week names &Μακριά ονόματα του μήνα και της ημέρας της εβδομάδας Ad&vanced manual format Προη&γμένη χειροκίνητη μορφή &Customise ... &Προσαρμογή... Time &zones &Ζώνες ώρας &Add ... &Προσθήκη... &Remove Α&φαίρεση Set as &default &Ορισμός ως προκαθορισμένο &Edit custom name ... &Επεξεργασία προσαρμοσμένου ονόματος... Move &up Μετακίνηση &πάνω Move do&wn Μετακίνηση &κάτω &General &Γενικά Auto&rotate when the panel is vertical &Αυτόματη περιστροφή όταν ο πίνακας είναι τοποθετημένος κάθετα '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' Input custom time zone name Εισαγωγή του προσαρμοσμένου ονόματος της ζώνης ώρας LXQtWorldClockConfigurationManualFormat World Clock Time Zones Ζώνες ώρας του παγκόσμιου ρολογιού <h1>Custom Date/Time Format Syntax</h1> <p>A date pattern is a string of characters, where specific strings of characters are replaced with date and time data from a calendar when formatting or used to generate data for a calendar when parsing.</p> <p>The Date Field Symbol Table below contains the characters used in patterns to show the appropriate formats for a given locale, such as yyyy for the year. Characters may be used multiple times. For example, if y is used for the year, 'yy' might produce '99', whereas 'yyyy' produces '1999'. For most numerical fields, the number of characters specifies the field width. For example, if h is the hour, 'h' might produce '5', but 'hh' produces '05'. For some characters, the count specifies whether an abbreviated or full form should be used, but may have other choices, as given below.</p> <p>Two single quotes represents a literal single quote, either inside or outside single quotes. Text within single quotes is not interpreted in any way (except for two adjacent single quotes). Otherwise all ASCII letter from a to z and A to Z are reserved as syntax characters, and require quoting if they are to represent literal characters. In addition, certain ASCII punctuation characters may become variable in the future (eg ":" being interpreted as the time separator and '/' as a date separator, and replaced by respective locale-sensitive characters in display).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Code</th><th>Meaning</th></tr> <tr><td>d</td><td>the day as number without a leading zero (1 to 31)</td></tr> <tr><td>dd</td><td>the day as number with a leading zero (01 to 31)</td></tr> <tr><td>ddd</td><td>the abbreviated localized day name (e.g. 'Mon' to 'Sun').</td></tr> <tr><td>dddd</td><td>the long localized day name (e.g. 'Monday' to 'Sunday</td></tr> <tr><td>M</td><td>the month as number without a leading zero (1-12)</td></tr> <tr><td>MM</td><td>the month as number with a leading zero (01-12)</td></tr> <tr><td>MMM</td><td>the abbreviated localized month name (e.g. 'Jan' to 'Dec').</td></tr> <tr><td>MMMM</td><td>the long localized month name (e.g. 'January' to 'December').</td></tr> <tr><td>yy</td><td>the year as two digit number (00-99)</td></tr> <tr><td>yyyy</td><td>the year as four digit number</td></tr> <tr><td>h</td><td>the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)</td></tr> <tr><td>hh</td><td>the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)</td></tr> <tr><td>H</td><td>the hour without a leading zero (0 to 23, even with AM/PM display)</td></tr> <tr><td>HH</td><td>the hour with a leading zero (00 to 23, even with AM/PM display)</td></tr> <tr><td>m</td><td>the minute without a leading zero (0 to 59)</td></tr> <tr><td>mm</td><td>the minute with a leading zero (00 to 59)</td></tr> <tr><td>s</td><td>the second without a leading zero (0 to 59)</td></tr> <tr><td>ss</td><td>the second with a leading zero (00 to 59)</td></tr> <tr><td>z</td><td>the milliseconds without leading zeroes (0 to 999)</td></tr> <tr><td>zzz</td><td>the milliseconds with leading zeroes (000 to 999)</td></tr> <tr><td>AP <i>or</i> A</td><td>use AM/PM display. <b>A/AP</b> will be replaced by either "AM" or "PM".<</td></tr> <tr><td>ap <i>or</i> a</td><td>use am/pm display. <b>a/ap</b> will be replaced by either "am" or "pm".<</td></tr> <tr><td>t</td><td>the timezone (for example "CEST")</td></tr> <tr><td>T</td><td>the offset from UTC</td></tr> <tr><td>TT</td><td>the timezone IANA id</td></tr> <tr><td>TTT</td><td>the timezone abbreviation</td></tr> <tr><td>TTTT</td><td>the timezone short display name</td></tr> <tr><td>TTTTT</td><td>the timezone long display name</td></tr> <tr><td>TTTTTT</td><td>the timezone custom name. You can change it the 'Time zones' tab of the configuration window</td></tr></table> <p><br /><b>Note:</b> Any characters in the pattern that are not in the ranges of ['a'..'z'] and ['A'..'Z'] will be treated as quoted text. For instance, characters like ':', '.', ' ', '#' and '@' will appear in the resulting time text even they are not enclosed within single quotes.The single quote is used to 'escape' letters. Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.</p> <h1>Προσαρμοσμένη σύνταξη ημερομηνίας/ώρας</h1> <p>Μια σχηματομορφή ημερομηνίας είναι μια συμβολοσειρά χαρακτήρων, όπου συγκεκριμένοι χαρακτήρες αντικαθιστώνται με τα δεδομένα της ημερομηνίας και της ώρας από ένα ημερολόγιο κατά την μορφοποίηση ή όταν χρησιμοποιείται για την δημιουργία δεδομένον ημερολογίου κατά την ανάλυση.</p> <p>Ο παρακάτω πίνακας του πεδίου συμβόλου της ημερομηνίας περιέχει τους χαρακτήρες που χρησιμοποιούνται στις σχηματομορφές για να εμφανίσουν τις κατάλληλες μορφές για μια δοσμένη τοπικότητα, όπως yyyy για το έτος. Οι χαρακτήρες μπορούν να χρησιμοποιηθούν περισσότερες φορές. Για παράδειγμα, αν χρησιμοποιείται για το έτος,το 'yy' μπορεί να παράγει '99', ενώ το 'yyyy' παράγει '1999'. Για τα περισσότερα των αριθμητικών πεδίων, το πλήθος των χαρακτήρων καθορίζει το πλάτος του πεδίου. Για παράδειγμα, αν h είναι η ώρα, το 'h' μπορεί να παράγει '5', αλλά το 'hh' παράγει '05'. Για ορισμένους χαρακτήρες, το πλήθος καθορίζει αν θα χρησιμοποιείται μια πλήρης ή συντομογραφημένη μορφή, αλλά μπορεί να έχει και άλλες επιλογές, όπως αναφέρεται παρακάτω.</p> <p>Δυο μονά εισαγωγικά αναπαριστούν κυριολεκτικά μονά εισαγωγικά, είτε εσωτερικά είτε εξωτερικά μονά εισαγωγικά. Το κείμενο που εσωκλείεται σε μονά εισαγωγικά δεν ερμηνεύεται σε καμιά περίπτωση (εκτός των δυο παρακείμενων μονών εισαγωγικών). Διαφορετικά όλα τα γράμματα ASCII από το a ως το z και από το A ως το Z είναι δεσμευμένα ως χαρακτήρες σύνταξης, και απαιτούνται εισαγωγικά αν πρόκειται να αναπαραστήσουν κυριολεκτικούς χαρακτήρες. Επιπρόσθετα, ορισμένοι χαρακτήρες στίξης ASCII μπορεί να χρησιμοποιηθούν μελλοντικά ως μεταβλητές (πχ η ":" ερμηνεύεται ως διαχωριστικό ώρας και και η '/' ως διαχωριστικό ημερομηνίας, και αντικαθίσταται από τους εκάστοτε χαρακτήρες τοπικότητας στην οθόνη).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Κωδικός</th><th>Σημασία</th></tr> <tr><td>d</td><td>η ημέρα ως αριθμός χωρίς το αρχικό μηδενικό (1 ως 31)</td></tr> <tr><td>dd</td><td>η ημέρα ως αριθμός με το αρχικό μηδενικό (01 ως 31)</td></tr> <tr><td>ddd</td><td>η συντομογραφημένη τοπικοποιημένη ονομασία της ημέρας (π.χ. 'Δευ' ως 'Κυρ').</td></tr> <tr><td>dddd</td><td>η μακριά τοπικοποιημένη ονομασία της ημέρας (π.χ. 'Δευτέρα' ως 'Κυριακή</td></tr> <tr><td>M</td><td>ο μήνας ως αριθμός δίχως το αρχικό μηδενικό (1-12)</td></tr> <tr><td>MM</td><td>ο μήνας ως αριθμός με το αρχικό μηδενικό (01-12)</td></tr> <tr><td>MMM</td><td>η συντομογραφημένη τοπικοποιημένη ονομασία του μήνα (π.χ. 'Ιαν' ως 'Δεκ').</td></tr> <tr><td>MMMM</td><td>η μακριά τοπικοποιημένη ονομασία του μήνα (π.χ. 'Ιανουάριος' ως 'Δεκέμβριος').</td></tr> <tr><td>yy</td><td>το έτος ως διψήφιος αριθμός (00-99)</td></tr> <tr><td>yyyy</td><td>το έτος ως τετραψήφιος αριθμός</td></tr> <tr><td>h</td><td>η ώρα δίχως το αρχικό μηδενικό (0 ως 23 ή 1 ως 12 αν απεικονίζεται ως ΠΜ/ΜΜ)</td></tr> <tr><td>hh</td><td>η ώρα με το αρχικό μηδενικό (00 ως 23 ή 01 ως 12 αν απεικονίζεται ως ΠΜ/ΜΜ)</td></tr> <tr><td>H</td><td>η ώρα με το αρχικό μηδενικό (0 ως 23, ακόμα και με απεικόνιση ως ΠΜ/ΜΜ)</td></tr> <tr><td>HH</td><td>η ώρα με το αρχικό μηδενικό (00 ως 23, ακόμα και με απεικόνιση ως ΠΜ/ΜΜ)</td></tr> <tr><td>m</td><td>τα λεπτά δίχως το αρχικό μηδενικό (0 ως 59)</td></tr> <tr><td>mm</td><td>τα λεπτά με το αρχικό μηδενικό (00 ως 59)</td></tr> <tr><td>s</td><td>τα δευτερόλεπτα δίχως το αρχικό μηδενικό (0 ως 59)</td></tr> <tr><td>ss</td><td>τα δευτερόλεπτα με το αρχικό μηδενικό (00 ως 59)</td></tr> <tr><td>z</td><td>τα χιλιοστά δευτερολέπτου δίχως τα αρχικά μηδενικά (0 ως 999)</td></tr> <tr><td>zzz</td><td>τα χιλιοστά δευτερολέπτου με τα αρχικά μηδενικά (000 ως 999)</td></tr> <tr><td>AP <i>or</i> A</td><td>χρήση της απεικόνισης ως ΠΜ/ΜΜ. Τα <b>A/AP</b> θα αντικατασταθούν από "ΠΠ" ή "ΜΜ".<</td></tr> <tr><td>ap <i>or</i> a</td><td>χρήση της απεικόνισης πμ/μμ. Τα <b>a/ap</b> θα αντικατασταθούν από τα "πμ" ή "μμ".<</td></tr> <tr><td>t</td><td>η ζώνη ώρας (για παράδειγμα "CEST")</td></tr> <tr><td>T</td><td>η διαφορά από την ώρα UTC</td></tr> <tr><td>TT</td><td>το αναγνωριστικό IANA της ζώνης ώρας</td></tr> <tr><td>TTT</td><td>η συντομογραφία της ζώνης ώρας</td></tr> <tr><td>TTTT</td><td>το βραχύ όνομα της ζώνης ώρας</td></tr> <tr><td>TTTTT</td><td>το μακρύ όνομα της ζώνης ώρας</td></tr> <tr><td>TTTTTT</td><td>το προσαρμοσμένο όνομα της ζώνης ώρας. Μπορείτε να το αλλάξετε από την καρτέλα «Ζώνες ώρας» του παραθύρου διαμόρφωσης</td></tr></table> <p><br /><b>Σημείωση:</b> Οποιοσδήποτε χαρακτήρας στη σχηματομορφή που δεν είναι σε εύρος του ['a'..'z'] και ['A'..'Z'] θα διαχειρίζεται ως κείμενο σε εισαγωγικά. Παραδείγματος χάριν, οι χαρακτήρες όπως ':', '.', ' ', '#' και '@' θα εμφανίζονται στο τελικό κείμενο της ώρας ακόμα και αν δεν είναι έγκλειστοι σε μονά εισαγωγικά. Τα μονά εισαγωγικά χρησιμοποιούνται για τη «διαφυγή» γραμμάτων. Δυο μονά εισαγωγικά σε μια γραμμή, είτε εσωτερικά είτε εξωτερικά της ακολουθίας έγκλειστης σε εισαγωγικά, αναπαριστούν ένα ζεύγος «πραγματικών» μονών εισαγωγικών.</p> LXQtWorldClockConfigurationTimeZones World Clock Time Zones Ζώνες ώρας του παγκόσμιου ρολογιού Time zone Ζώνη ώρας Name Όνομα Comment Σχόλιο Country Χώρα UTC UTC Other Άλλο Local timezone Τοπικής ζώνης ώρας lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_hu.desktop000066400000000000000000000001061261500472700262700ustar00rootroot00000000000000#TRANSLATIONS Name[hu]=Világóra Comment[hu]=Világóra bővítmény lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_hu.ts000066400000000000000000000433151261500472700252560ustar00rootroot00000000000000 LXQtWorldClock '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' LXQtWorldClockConfiguration World Clock Settings Világóra beállítás Display &format Megjelenítés &forma &Time &Idő F&ormat: F&ormátum: Short Rövid Long Hosszú Custom Egyéni Sho&w seconds &Másodpercek Pad &hour with zero Óra bevezető nullával T&ime zone &Időzóna &Position: &Hely For&mat: Fo&rmátum: Below Belül Above Kívül Before Előtt After Után Offset from UTC UTC eltérés Abbreviation Rövidítés IANA id Custom name Egyedi &Use 12-hour format 12 ó&rás alak Location identifier Helyazonosító &Date &Dátum Po&sition: H&ely Fo&rmat: Fo&rmátum: ISO 8601 Show &year É&v látszik Show day of wee&k Hét napja látszi&k Pad d&ay with zero N&ap nullával indul &Long month and day of week names &Hosszú hónap és hetinap Ad&vanced manual format Haladó kézi forma &Customise ... &Meghatároz... Time &zones Idő&zónák &Add ... Hozzá&ad &Remove Tö&röl Set as &default Alapértelmez &Edit custom name ... Névsz&erkesztés Move &up &Föl Move do&wn &Le &General Általáno&s Auto&rotate when the panel is vertical Függöleges panelnél görgetés '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' Input custom time zone name Egyéb időzóna név LXQtWorldClockConfigurationManualFormat World Clock Time Zones Világóra időzónák <h1>Custom Date/Time Format Syntax</h1> <p>A date pattern is a string of characters, where specific strings of characters are replaced with date and time data from a calendar when formatting or used to generate data for a calendar when parsing.</p> <p>The Date Field Symbol Table below contains the characters used in patterns to show the appropriate formats for a given locale, such as yyyy for the year. Characters may be used multiple times. For example, if y is used for the year, 'yy' might produce '99', whereas 'yyyy' produces '1999'. For most numerical fields, the number of characters specifies the field width. For example, if h is the hour, 'h' might produce '5', but 'hh' produces '05'. For some characters, the count specifies whether an abbreviated or full form should be used, but may have other choices, as given below.</p> <p>Two single quotes represents a literal single quote, either inside or outside single quotes. Text within single quotes is not interpreted in any way (except for two adjacent single quotes). Otherwise all ASCII letter from a to z and A to Z are reserved as syntax characters, and require quoting if they are to represent literal characters. In addition, certain ASCII punctuation characters may become variable in the future (eg ":" being interpreted as the time separator and '/' as a date separator, and replaced by respective locale-sensitive characters in display).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Code</th><th>Meaning</th></tr> <tr><td>d</td><td>the day as number without a leading zero (1 to 31)</td></tr> <tr><td>dd</td><td>the day as number with a leading zero (01 to 31)</td></tr> <tr><td>ddd</td><td>the abbreviated localized day name (e.g. 'Mon' to 'Sun').</td></tr> <tr><td>dddd</td><td>the long localized day name (e.g. 'Monday' to 'Sunday</td></tr> <tr><td>M</td><td>the month as number without a leading zero (1-12)</td></tr> <tr><td>MM</td><td>the month as number with a leading zero (01-12)</td></tr> <tr><td>MMM</td><td>the abbreviated localized month name (e.g. 'Jan' to 'Dec').</td></tr> <tr><td>MMMM</td><td>the long localized month name (e.g. 'January' to 'December').</td></tr> <tr><td>yy</td><td>the year as two digit number (00-99)</td></tr> <tr><td>yyyy</td><td>the year as four digit number</td></tr> <tr><td>h</td><td>the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)</td></tr> <tr><td>hh</td><td>the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)</td></tr> <tr><td>H</td><td>the hour without a leading zero (0 to 23, even with AM/PM display)</td></tr> <tr><td>HH</td><td>the hour with a leading zero (00 to 23, even with AM/PM display)</td></tr> <tr><td>m</td><td>the minute without a leading zero (0 to 59)</td></tr> <tr><td>mm</td><td>the minute with a leading zero (00 to 59)</td></tr> <tr><td>s</td><td>the second without a leading zero (0 to 59)</td></tr> <tr><td>ss</td><td>the second with a leading zero (00 to 59)</td></tr> <tr><td>z</td><td>the milliseconds without leading zeroes (0 to 999)</td></tr> <tr><td>zzz</td><td>the milliseconds with leading zeroes (000 to 999)</td></tr> <tr><td>AP <i>or</i> A</td><td>use AM/PM display. <b>A/AP</b> will be replaced by either "AM" or "PM".<</td></tr> <tr><td>ap <i>or</i> a</td><td>use am/pm display. <b>a/ap</b> will be replaced by either "am" or "pm".<</td></tr> <tr><td>t</td><td>the timezone (for example "CEST")</td></tr> <tr><td>T</td><td>the offset from UTC</td></tr> <tr><td>TT</td><td>the timezone IANA id</td></tr> <tr><td>TTT</td><td>the timezone abbreviation</td></tr> <tr><td>TTTT</td><td>the timezone short display name</td></tr> <tr><td>TTTTT</td><td>the timezone long display name</td></tr> <tr><td>TTTTTT</td><td>the timezone custom name. You can change it the 'Time zones' tab of the configuration window</td></tr></table> <p><br /><b>Note:</b> Any characters in the pattern that are not in the ranges of ['a'..'z'] and ['A'..'Z'] will be treated as quoted text. For instance, characters like ':', '.', ' ', '#' and '@' will appear in the resulting time text even they are not enclosed within single quotes.The single quote is used to 'escape' letters. Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.</p> LXQtWorldClockConfigurationTimeZones World Clock Time Zones Világóra időzónák Time zone Időzóna Name Név Comment Megjegyzés Country Ország UTC Other Egyéb Local timezone Helyi idő lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_hu_HU.ts000066400000000000000000000433201261500472700256460ustar00rootroot00000000000000 LXQtWorldClock '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' LXQtWorldClockConfiguration World Clock Settings Világóra beállítás Display &format Megjelenítés &forma &Time &Idő F&ormat: F&ormátum: Short Rövid Long Hosszú Custom Egyéni Sho&w seconds &Másodpercek Pad &hour with zero Óra bevezető nullával T&ime zone &Időzóna &Position: &Hely For&mat: Fo&rmátum: Below Belül Above Kívül Before Előtt After Után Offset from UTC UTC eltérés Abbreviation Rövidítés IANA id Custom name Egyedi &Use 12-hour format 12 ó&rás alak Location identifier Helyazonosító &Date &Dátum Po&sition: H&ely Fo&rmat: Fo&rmátum: ISO 8601 Show &year É&v látszik Show day of wee&k Hét napja látszi&k Pad d&ay with zero N&ap nullával indul &Long month and day of week names &Hosszú hónap és hetinap Ad&vanced manual format Haladó kézi forma &Customise ... &Meghatároz... Time &zones Idő&zónák &Add ... Hozzá&ad &Remove Tö&röl Set as &default Alapértelmez &Edit custom name ... Névsz&erkesztés Move &up &Föl Move do&wn &Le &General Általáno&s Auto&rotate when the panel is vertical Függöleges panelnél görgetés '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' Input custom time zone name Egyéb időzóna név LXQtWorldClockConfigurationManualFormat World Clock Time Zones Világóra időzónák <h1>Custom Date/Time Format Syntax</h1> <p>A date pattern is a string of characters, where specific strings of characters are replaced with date and time data from a calendar when formatting or used to generate data for a calendar when parsing.</p> <p>The Date Field Symbol Table below contains the characters used in patterns to show the appropriate formats for a given locale, such as yyyy for the year. Characters may be used multiple times. For example, if y is used for the year, 'yy' might produce '99', whereas 'yyyy' produces '1999'. For most numerical fields, the number of characters specifies the field width. For example, if h is the hour, 'h' might produce '5', but 'hh' produces '05'. For some characters, the count specifies whether an abbreviated or full form should be used, but may have other choices, as given below.</p> <p>Two single quotes represents a literal single quote, either inside or outside single quotes. Text within single quotes is not interpreted in any way (except for two adjacent single quotes). Otherwise all ASCII letter from a to z and A to Z are reserved as syntax characters, and require quoting if they are to represent literal characters. In addition, certain ASCII punctuation characters may become variable in the future (eg ":" being interpreted as the time separator and '/' as a date separator, and replaced by respective locale-sensitive characters in display).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Code</th><th>Meaning</th></tr> <tr><td>d</td><td>the day as number without a leading zero (1 to 31)</td></tr> <tr><td>dd</td><td>the day as number with a leading zero (01 to 31)</td></tr> <tr><td>ddd</td><td>the abbreviated localized day name (e.g. 'Mon' to 'Sun').</td></tr> <tr><td>dddd</td><td>the long localized day name (e.g. 'Monday' to 'Sunday</td></tr> <tr><td>M</td><td>the month as number without a leading zero (1-12)</td></tr> <tr><td>MM</td><td>the month as number with a leading zero (01-12)</td></tr> <tr><td>MMM</td><td>the abbreviated localized month name (e.g. 'Jan' to 'Dec').</td></tr> <tr><td>MMMM</td><td>the long localized month name (e.g. 'January' to 'December').</td></tr> <tr><td>yy</td><td>the year as two digit number (00-99)</td></tr> <tr><td>yyyy</td><td>the year as four digit number</td></tr> <tr><td>h</td><td>the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)</td></tr> <tr><td>hh</td><td>the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)</td></tr> <tr><td>H</td><td>the hour without a leading zero (0 to 23, even with AM/PM display)</td></tr> <tr><td>HH</td><td>the hour with a leading zero (00 to 23, even with AM/PM display)</td></tr> <tr><td>m</td><td>the minute without a leading zero (0 to 59)</td></tr> <tr><td>mm</td><td>the minute with a leading zero (00 to 59)</td></tr> <tr><td>s</td><td>the second without a leading zero (0 to 59)</td></tr> <tr><td>ss</td><td>the second with a leading zero (00 to 59)</td></tr> <tr><td>z</td><td>the milliseconds without leading zeroes (0 to 999)</td></tr> <tr><td>zzz</td><td>the milliseconds with leading zeroes (000 to 999)</td></tr> <tr><td>AP <i>or</i> A</td><td>use AM/PM display. <b>A/AP</b> will be replaced by either "AM" or "PM".<</td></tr> <tr><td>ap <i>or</i> a</td><td>use am/pm display. <b>a/ap</b> will be replaced by either "am" or "pm".<</td></tr> <tr><td>t</td><td>the timezone (for example "CEST")</td></tr> <tr><td>T</td><td>the offset from UTC</td></tr> <tr><td>TT</td><td>the timezone IANA id</td></tr> <tr><td>TTT</td><td>the timezone abbreviation</td></tr> <tr><td>TTTT</td><td>the timezone short display name</td></tr> <tr><td>TTTTT</td><td>the timezone long display name</td></tr> <tr><td>TTTTTT</td><td>the timezone custom name. You can change it the 'Time zones' tab of the configuration window</td></tr></table> <p><br /><b>Note:</b> Any characters in the pattern that are not in the ranges of ['a'..'z'] and ['A'..'Z'] will be treated as quoted text. For instance, characters like ':', '.', ' ', '#' and '@' will appear in the resulting time text even they are not enclosed within single quotes.The single quote is used to 'escape' letters. Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.</p> LXQtWorldClockConfigurationTimeZones World Clock Time Zones Világóra időzónák Time zone Időzóna Name Név Comment Megjegyzés Country Ország UTC Other Egyéb Local timezone Helyi idő lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_it.desktop000066400000000000000000000001431261500472700262710ustar00rootroot00000000000000#TRANSLATIONS Name[it]=Orologio mondiale Comment[it]=Mostra un orologio con un fuso orario diverso lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_it.ts000066400000000000000000000427241261500472700252610ustar00rootroot00000000000000 LXQtWorldClock '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' LXQtWorldClockConfiguration World Clock Settings Impostazioni orologio mondiale Display &format &Aspetto &Time &Ora F&ormat: F&ormato: Short Breve Long Esteso Custom Personalizzato Sho&w seconds &Mostra secondi Pad &hour with zero Ora &senza zero iniziale T&ime zone &Fuso orario &Position: &Posizione: For&mat: F&ormato: Below Sotto Above Sopra Before Prima After Dopo Offset from UTC Differenza da UTC Abbreviation Abbreviazione IANA id Custom name Nome personalizzato &Use 12-hour format &Usa formato 12 ore Location identifier Nome località &Date &Data Po&sition: &Posizione: Fo&rmat: F&ormato: ISO 8601 Show &year Mostra l'&anno Show day of wee&k Mostra &giorno della settimana Pad d&ay with zero Giorno &senza zero iniziale &Long month and day of week names Nome &esteso per mese e giorno della settimana Ad&vanced manual format Formato avanzato &personalizzato &Customise ... &Personalizza... Time &zones Fu&si orari &Add ... &Aggiungi... &Remove &Rimuovi Set as &default &Imponi come predefinito &Edit custom name ... &Personalizza nome... Move &up &Sù Move do&wn &Giù &General A&ltro Auto&rotate when the panel is vertical &Ruota automaticamente se il panello è verticale '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' Input custom time zone name Nome personalizzato LXQtWorldClockConfigurationManualFormat World Clock Time Zones Fusi orari orologio mondiale <h1>Custom Date/Time Format Syntax</h1> <p>A date pattern is a string of characters, where specific strings of characters are replaced with date and time data from a calendar when formatting or used to generate data for a calendar when parsing.</p> <p>The Date Field Symbol Table below contains the characters used in patterns to show the appropriate formats for a given locale, such as yyyy for the year. Characters may be used multiple times. For example, if y is used for the year, 'yy' might produce '99', whereas 'yyyy' produces '1999'. For most numerical fields, the number of characters specifies the field width. For example, if h is the hour, 'h' might produce '5', but 'hh' produces '05'. For some characters, the count specifies whether an abbreviated or full form should be used, but may have other choices, as given below.</p> <p>Two single quotes represents a literal single quote, either inside or outside single quotes. Text within single quotes is not interpreted in any way (except for two adjacent single quotes). Otherwise all ASCII letter from a to z and A to Z are reserved as syntax characters, and require quoting if they are to represent literal characters. In addition, certain ASCII punctuation characters may become variable in the future (eg ":" being interpreted as the time separator and '/' as a date separator, and replaced by respective locale-sensitive characters in display).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Code</th><th>Meaning</th></tr> <tr><td>d</td><td>the day as number without a leading zero (1 to 31)</td></tr> <tr><td>dd</td><td>the day as number with a leading zero (01 to 31)</td></tr> <tr><td>ddd</td><td>the abbreviated localized day name (e.g. 'Mon' to 'Sun').</td></tr> <tr><td>dddd</td><td>the long localized day name (e.g. 'Monday' to 'Sunday</td></tr> <tr><td>M</td><td>the month as number without a leading zero (1-12)</td></tr> <tr><td>MM</td><td>the month as number with a leading zero (01-12)</td></tr> <tr><td>MMM</td><td>the abbreviated localized month name (e.g. 'Jan' to 'Dec').</td></tr> <tr><td>MMMM</td><td>the long localized month name (e.g. 'January' to 'December').</td></tr> <tr><td>yy</td><td>the year as two digit number (00-99)</td></tr> <tr><td>yyyy</td><td>the year as four digit number</td></tr> <tr><td>h</td><td>the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)</td></tr> <tr><td>hh</td><td>the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)</td></tr> <tr><td>H</td><td>the hour without a leading zero (0 to 23, even with AM/PM display)</td></tr> <tr><td>HH</td><td>the hour with a leading zero (00 to 23, even with AM/PM display)</td></tr> <tr><td>m</td><td>the minute without a leading zero (0 to 59)</td></tr> <tr><td>mm</td><td>the minute with a leading zero (00 to 59)</td></tr> <tr><td>s</td><td>the second without a leading zero (0 to 59)</td></tr> <tr><td>ss</td><td>the second with a leading zero (00 to 59)</td></tr> <tr><td>z</td><td>the milliseconds without leading zeroes (0 to 999)</td></tr> <tr><td>zzz</td><td>the milliseconds with leading zeroes (000 to 999)</td></tr> <tr><td>AP <i>or</i> A</td><td>use AM/PM display. <b>A/AP</b> will be replaced by either "AM" or "PM".<</td></tr> <tr><td>ap <i>or</i> a</td><td>use am/pm display. <b>a/ap</b> will be replaced by either "am" or "pm".<</td></tr> <tr><td>t</td><td>the timezone (for example "CEST")</td></tr> <tr><td>T</td><td>the offset from UTC</td></tr> <tr><td>TT</td><td>the timezone IANA id</td></tr> <tr><td>TTT</td><td>the timezone abbreviation</td></tr> <tr><td>TTTT</td><td>the timezone short display name</td></tr> <tr><td>TTTTT</td><td>the timezone long display name</td></tr> <tr><td>TTTTTT</td><td>the timezone custom name. You can change it the 'Time zones' tab of the configuration window</td></tr></table> <p><br /><b>Note:</b> Any characters in the pattern that are not in the ranges of ['a'..'z'] and ['A'..'Z'] will be treated as quoted text. For instance, characters like ':', '.', ' ', '#' and '@' will appear in the resulting time text even they are not enclosed within single quotes.The single quote is used to 'escape' letters. Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.</p> LXQtWorldClockConfigurationTimeZones World Clock Time Zones Fusi orari orologio mondiale Time zone Fuso orario Name Nome Comment Commento Country Paese UTC Other Altro lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_ja.desktop000066400000000000000000000002501261500472700262460ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name[ja]=世界時計 Comment[ja]=世界時計のウィジェットです #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_ja.ts000066400000000000000000000603741261500472700252400ustar00rootroot00000000000000 LXQtWorldClock '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' LXQtWorldClockConfiguration World Clock Settings 世界時計の設定 Display &format 表示形式 (&F) &Time 時刻(&T) F&ormat: 形式(&O): Short 短い Long 長い Custom 指定する Sho&w seconds 秒も表示(&W) Pad &hour with zero 時が一桁のときゼロで埋める(&H) &Use 12-hour format 12時間制で表示(&U) T&ime zone タイムゾーン(&I) &Position: 位置(&P): For&mat: 形式(&M) Below Above Before After Offset from UTC UTCからの時差 Abbreviation 短縮形 Location identifier 場所 IANA id IANAのID Custom name 指定した名前 &Date 日時(&D) Po&sition: 位置(&S): Fo&rmat: 形式(&R): ISO 8601 ISO 8601 Show &year 年を表示(&Y) Show day of wee&k 曜日を表示(&K) Pad d&ay with zero 日が一桁のときゼロで埋める(&A) &Long month and day of week names 月や曜日を長い名前で表示(&L) Ad&vanced manual format 形式を詳しく指定する(&V) &Customise ... 指定する(&C) Time &zones タイムゾーン(&Z) &Add ... 追加(&A) &Remove 削除(&R) Set as &default デフォルトにする(&D) &Edit custom name ... 名前を付ける(&E) Move &up 上へ(&U) Move do&wn 下へ(&W) &General 一般(&G) Auto&rotate when the panel is vertical パネルが垂直なときには回転する(&R) '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' Input custom time zone name タイムゾーンの名前を入力 LXQtWorldClockConfigurationManualFormat World Clock Time Zones 世界時計のタイムゾーン <h1>Custom Date/Time Format Syntax</h1> <p>A date pattern is a string of characters, where specific strings of characters are replaced with date and time data from a calendar when formatting or used to generate data for a calendar when parsing.</p> <p>The Date Field Symbol Table below contains the characters used in patterns to show the appropriate formats for a given locale, such as yyyy for the year. Characters may be used multiple times. For example, if y is used for the year, 'yy' might produce '99', whereas 'yyyy' produces '1999'. For most numerical fields, the number of characters specifies the field width. For example, if h is the hour, 'h' might produce '5', but 'hh' produces '05'. For some characters, the count specifies whether an abbreviated or full form should be used, but may have other choices, as given below.</p> <p>Two single quotes represents a literal single quote, either inside or outside single quotes. Text within single quotes is not interpreted in any way (except for two adjacent single quotes). Otherwise all ASCII letter from a to z and A to Z are reserved as syntax characters, and require quoting if they are to represent literal characters. In addition, certain ASCII punctuation characters may become variable in the future (eg ":" being interpreted as the time separator and '/' as a date separator, and replaced by respective locale-sensitive characters in display).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Code</th><th>Meaning</th></tr> <tr><td>d</td><td>the day as number without a leading zero (1 to 31)</td></tr> <tr><td>dd</td><td>the day as number with a leading zero (01 to 31)</td></tr> <tr><td>ddd</td><td>the abbreviated localized day name (e.g. 'Mon' to 'Sun').</td></tr> <tr><td>dddd</td><td>the long localized day name (e.g. 'Monday' to 'Sunday</td></tr> <tr><td>M</td><td>the month as number without a leading zero (1-12)</td></tr> <tr><td>MM</td><td>the month as number with a leading zero (01-12)</td></tr> <tr><td>MMM</td><td>the abbreviated localized month name (e.g. 'Jan' to 'Dec').</td></tr> <tr><td>MMMM</td><td>the long localized month name (e.g. 'January' to 'December').</td></tr> <tr><td>yy</td><td>the year as two digit number (00-99)</td></tr> <tr><td>yyyy</td><td>the year as four digit number</td></tr> <tr><td>h</td><td>the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)</td></tr> <tr><td>hh</td><td>the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)</td></tr> <tr><td>H</td><td>the hour without a leading zero (0 to 23, even with AM/PM display)</td></tr> <tr><td>HH</td><td>the hour with a leading zero (00 to 23, even with AM/PM display)</td></tr> <tr><td>m</td><td>the minute without a leading zero (0 to 59)</td></tr> <tr><td>mm</td><td>the minute with a leading zero (00 to 59)</td></tr> <tr><td>s</td><td>the second without a leading zero (0 to 59)</td></tr> <tr><td>ss</td><td>the second with a leading zero (00 to 59)</td></tr> <tr><td>z</td><td>the milliseconds without leading zeroes (0 to 999)</td></tr> <tr><td>zzz</td><td>the milliseconds with leading zeroes (000 to 999)</td></tr> <tr><td>AP <i>or</i> A</td><td>use AM/PM display. <b>A/AP</b> will be replaced by either "AM" or "PM".<</td></tr> <tr><td>ap <i>or</i> a</td><td>use am/pm display. <b>a/ap</b> will be replaced by either "am" or "pm".<</td></tr> <tr><td>t</td><td>the timezone (for example "CEST")</td></tr> <tr><td>T</td><td>the offset from UTC</td></tr> <tr><td>TT</td><td>the timezone IANA id</td></tr> <tr><td>TTT</td><td>the timezone abbreviation</td></tr> <tr><td>TTTT</td><td>the timezone short display name</td></tr> <tr><td>TTTTT</td><td>the timezone long display name</td></tr> <tr><td>TTTTTT</td><td>the timezone custom name. You can change it the 'Time zones' tab of the configuration window</td></tr></table> <p><br /><b>Note:</b> Any characters in the pattern that are not in the ranges of ['a'..'z'] and ['A'..'Z'] will be treated as quoted text. For instance, characters like ':', '.', ' ', '#' and '@' will appear in the resulting time text even they are not enclosed within single quotes.The single quote is used to 'escape' letters. Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.</p> <h1>日時形式の指定方法</h1> <p>日時の表現パターンは文字列で表記します。特定の文字列は生成処理時に解釈され、カレンダー上の日時の情報に置き換えられます。</p> <p>以下の日付フィールドのシンボル表は、例えば yyyy が年を意味するといったように、設定されているロケールに合わせた形式で表示されるパターン文字列を示しています。また、同じ文字を並べるものがあり、例えば y は年を示すために用い、'yy' なら '99'、'yyyy' なら '1999' といったように生成されます。数字を示す多くのフィールドは、文字長を表しています。例えば、時を示す h は、'h' は '5'、'hh' は '05' を生成します。繰り返す回数により短縮名かフルネームかを区別するものもあります。そのほか下表に示す通りです。</p> <p>引用符内か否かに関わらず、シングルクオーテーションを2つ続けると、シングルクオーテーション文字1つを表します。シングルクオーテーション内の文字列は、(2つ連続している場合を除いて、)解釈されません。a から Z および A から Z までの ASCII 文字は、この記法のための予約文字で、文字そのものを表したいときには引用符で括る必要があります。しかも、いくつかの ASCII 記号も、将来は変数に指定される可能性があります。(例えば、":" は時刻のセパレータとして、'/' は日付のセパレータとして、ロケールに合わせた別の文字に差し替えられることになるかもしれません。)<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">文字列</th><th>意味</th></tr> <tr><td>d</td><td>日(ゼロ埋めしない) (1-31)</td></tr> <tr><td>dd</td><td>日(ゼロ埋めする) (01-31)</td></tr> <tr><td>ddd</td><td>ロケールに合わせた曜日(短縮名) ('月'-'日').</td></tr> <tr><td>dddd</td><td>ロケールに合わせた曜日(フルネーム) ('月曜日'-'日曜日')</td></tr> <tr><td>M</td><td>月(ゼロ埋めしない) (1-12)</td></tr> <tr><td>MM</td><td>月(ゼロ埋めする) (01-12)</td></tr> <tr><td>MMM</td><td>月(短縮名) ('1月'-'12月'、※英語ならJan...).</td></tr> <tr><td>MMMM</td><td>月(フルネーム) ('1月'-'12月'、※英語ならJanuary...).</td></tr> <tr><td>yy</td><td>西暦の二桁 (00-99)</td></tr> <tr><td>yyyy</td><td>西暦の四桁</td></tr> <tr><td>h</td><td>時(ゼロ埋めしない) (0-23、午前/午後表示時は 1-12)</td></tr> <tr><td>hh</td><td>時(ゼロ埋めする) (00-23、午前/午後表示時は 01-12)</td></tr> <tr><td>H</td><td>時(ゼロ埋めしない) (0-23、常に24時間制)</td></tr> <tr><td>HH</td><td>時(ゼロ埋めする) (00-23、常に24時間制)</td></tr> <tr><td>m</td><td>分(ゼロ埋めしない) (0-59)</td></tr> <tr><td>mm</td><td>分(ゼロ埋めする) (00-59)</td></tr> <tr><td>s</td><td>秒(ゼロ埋めしない) (0-59)</td></tr> <tr><td>ss</td><td>秒(ゼロ埋めする) (00-59)</td></tr> <tr><td>z</td><td>ミリ秒(ゼロ埋めしない) (0-999)</td></tr> <tr><td>zzz</td><td>ミリ秒(ゼロ埋めする) (000-999)</td></tr> <tr><td>AP <i>または</i> A</td><td>午前/午後。<b>A や AP</b> は "午前"または"午後"に置き換えられる(※英語ならAM/PM)<</td></tr> <tr><td>ap <i>または</i> a</td><td>午前/午後。<b>a や ap</b> は "午前"または"午後"に置き換えられる(※英語ならam/pm)<</td></tr> <tr><td>t</td><td>タイムゾーン(例えば"JST")</td></tr> <tr><td>T</td><td>UTC(世界標準時)からの時差</td></tr> <tr><td>TT</td><td>IANA で定める ID</td></tr> <tr><td>TTT</td><td>タイムゾーンの短縮名</td></tr> <tr><td>TTTT</td><td>タイムゾーン名(短い)</td></tr> <tr><td>TTTTT</td><td>タイムゾーン名(長い)</td></tr> <tr><td>TTTTTT</td><td>設定ウィンドウの'タイムゾーン'タブで付けた名前</td></tr></table> <p><br /><b>Note:</b> ['a'..'z'] および ['A'..'Z'] 以外の文字は解釈されません。例えば ':' や '.'、' '、'#'、'@'のような文字は、引用符で括らなくとも、そのまま表示されます。シングルクオーテーションは、'エスケープ文字'として使用します。連続するシングルクオーテーションは、'本物の' 1個のシングルクオーテーションを表します。</p> LXQtWorldClockConfigurationTimeZones World Clock Time Zones 世界時計のタイムゾーン Time zone 都市 Name タイムゾーン Comment 備考 Country 国名 UTC UTC Other その他 Local timezone lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_pt.desktop000066400000000000000000000001331261500472700262770ustar00rootroot00000000000000#TRANSLATIONS Name[pt]=Relógio mundial Comment[pt]=Extra para mostrar um relógio mundial lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_pt.ts000066400000000000000000001153401261500472700252630ustar00rootroot00000000000000 LXQtWorldClock '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' LXQtWorldClockConfiguration World Clock Settings Definições do relógio mundial &Short, time only &Curto, apenas horas &Long, time only &Longo, apenas horas S&hort, date && time C&urto, hora e data L&ong, date && time L&ongo, hora e data &Custom &Personalizar <html><head/><body><p><span style=" font-size:x-large; font-weight:600;">Custom Date/Time Format Syntax</span></p><p>A date pattern is a string of characters, where specific strings of characters are replaced with date and time data from a calendar when formatting or used to generate data for a calendar when parsing.</p><p>The Date Field Symbol Table below contains the characters used in patterns to show the appropriate formats for a given locale, such as yyyy for the year. Characters may be used multiple times. For example, if y is used for the year, 'yy' might produce '99', whereas 'yyyy' produces '1999'. For most numerical fields, the number of characters specifies the field width. For example, if h is the hour, 'h' might produce '5', but 'hh' produces '05'. For some characters, the count specifies whether an abbreviated or full form should be used, but may have other choices, as given below.</p><p>Two single quotes represents a literal single quote, either inside or outside single quotes. Text within single quotes is not interpreted in any way (except for two adjacent single quotes). Otherwise all ASCII letter from a to z and A to Z are reserved as syntax characters, and require quoting if they are to represent literal characters. In addition, certain ASCII punctuation characters may become variable in the future (eg &quot;:&quot; being interpreted as the time separator and '/' as a date separator, and replaced by respective locale-sensitive characters in display).<br/></p><table border="1" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" width="100%" cellspacing="0" cellpadding="4"><tr><td width="20%"><p align="center"><span style=" font-weight:600;">Code</span></p></td><td><p align="center"><span style=" font-weight:600;">Meaning</span></p></td></tr><tr><td><p>d</p></td><td><p>the day as number without a leading zero (1 to 31)</p></td></tr><tr><td><p>dd</p></td><td><p>the day as number with a leading zero (01 to 31)</p></td></tr><tr><td><p>ddd</p></td><td><p>the abbreviated localized day name (e.g. 'Mon' to 'Sun').</p></td></tr><tr><td><p>dddd</p></td><td><p>the long localized day name (e.g. 'Monday' to 'Sunday</p></td></tr><tr><td><p>M</p></td><td><p>the month as number without a leading zero (1-12)</p></td></tr><tr><td><p>MM</p></td><td><p>the month as number with a leading zero (01-12)</p></td></tr><tr><td><p>MMM</p></td><td><p>the abbreviated localized month name (e.g. 'Jan' to 'Dec').</p></td></tr><tr><td><p>MMMM</p></td><td><p>the long localized month name (e.g. 'January' to 'December').</p></td></tr><tr><td><p>yy</p></td><td><p>the year as two digit number (00-99)</p></td></tr><tr><td><p>yyyy</p></td><td><p>the year as four digit number</p></td></tr><tr><td><p>h</p></td><td><p>the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)</p></td></tr><tr><td><p>hh</p></td><td><p>the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)</p></td></tr><tr><td><p>H</p></td><td><p>the hour without a leading zero (0 to 23, even with AM/PM display)</p></td></tr><tr><td><p>HH</p></td><td><p>the hour with a leading zero (00 to 23, even with AM/PM display)</p></td></tr><tr><td><p>m</p></td><td><p>the minute without a leading zero (0 to 59)</p></td></tr><tr><td><p>mm</p></td><td><p>the minute with a leading zero (00 to 59)</p></td></tr><tr><td><p>s</p></td><td><p>the second without a leading zero (0 to 59)</p></td></tr><tr><td><p>ss</p></td><td><p>the second with a leading zero (00 to 59)</p></td></tr><tr><td><p>z</p></td><td><p>the milliseconds without leading zeroes (0 to 999)</p></td></tr><tr><td><p>zzz</p></td><td><p>the milliseconds with leading zeroes (000 to 999)</p></td></tr><tr><td><p>AP or A</p></td><td><p>use AM/PM display. <span style=" font-weight:600;">A/AP</span> will be replaced by either &quot;AM&quot; or &quot;PM&quot;.</p></td></tr><tr><td><p>ap or a</p></td><td><p>use am/pm display. <span style=" font-weight:600;">a/ap</span> will be replaced by either &quot;am&quot; or &quot;pm&quot;.</p></td></tr><tr><td><p>t</p></td><td><p>the timezone (for example &quot;CEST&quot;)</p></td></tr><tr><td><p>T</p></td><td><p>the offset from UTC</p></td></tr><tr><td><p>TT</p></td><td><p>the timezone IANA id</p></td></tr><tr><td><p>TTT</p></td><td><p>the timezone abbreviation</p></td></tr><tr><td><p>TTTT</p></td><td><p>the timezone short display name</p></td></tr><tr><td><p>TTTTT</p></td><td><p>the timezone long display name</p></td></tr></table><p><br/><span style=" font-weight:600;">Note:</span> Any characters in the pattern that are not in the ranges of ['a'..'z'] and ['A'..'Z'] will be treated as quoted text. For instance, characters like ':', '.', ' ', '#' and '@' will appear in the resulting time text even they are not enclosed within single quotes.The single quote is used to 'escape' letters. Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.</p></body></html> <html><head/><body><p><span style=" font-size:x-large; font-weight:600;">Sintaxe do formato de data/hora personalizado</span></p><p>Um formato de data é uma cadeia de caracteres em que os caracteres são substituidos pelos dados de data e hora de um calendário ou que são utilizados para gerar os dados do calendário.</p><p>A tabela de símbolos para campos de data abaixo contém os caracteres utilizados em padrões para mostrar os devidos formatos de uma região. Os caracteres podem ser utilizados diversas vezes. Por exemplo, se utilizar y para o anor, yy devolve 99 e yyyy devolve 1999. Para a maioria dos campo numéricos, o número de caracteres especifica o tamanho do campo. Por exemplo, se utilizar h para a hora, h devolve 5 mas hh devolve 05. Para alguns caracteres, o número de letras especifica o formato utilizado (pode ser abreviado ou completo), conforme explicado abaixo.</p><p>Duas aspas simples representam uma aspa simples literal, seja dentro ou fora das aspas simples. O texto entre aspas simples não é interpretado de qualquer forma (exceto para duas aspas simples adjacentes). Doutra forma, todas as letras ASCII , de "a" a "z" e "A" a "Z" estão reservadas para caracteres de sintaxe e são necessárias aspas para representarem caracteres literais. Adicionalmente, alguns símbolos de pontuação ASCII podem ser tornados variáveis no futuro (ex: &quot;:&quot; é interpretado como separador de hora e '/' como separador de data e são substituidos pelos separadores normalmente utilizados na região).<br/></p><table border="1" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" width="100%" cellspacing="0" cellpadding="4"><tr><td width="20%"><p align="center"><span style=" font-weight:600;">Code</span></p></td><td><p align="center"><span style=" font-weight:600;">Significado</span></p></td></tr><tr><td><p>d</p></td><td><p>o dia como número sem o zero inicial (1 a 31)</p></td></tr><tr><td><p>dd</p></td><td><p>o dia como número mas com zero inicial (01 a 31)</p></td></tr><tr><td><p>ddd</p></td><td><p>o nome do dia abreviado (Seg a Dom).</p></td></tr><tr><td><p>dddd</p></td><td><p>o nome do dia completo (Segunda a Domingo</p></td></tr><tr><td><p>M</p></td><td><p>o mês como número sem o zero inicial (1-12)</p></td></tr><tr><td><p>MM</p></td><td><p>o mês como número mas com zero inicial (01-12)</p></td></tr><tr><td><p>MMM</p></td><td><p>o nome abreviado do mês (Jan a Dez).</p></td></tr><tr><td><p>MMMM</p></td><td><p>o nome completo do mês (Janeiro a Dezembro).</p></td></tr><tr><td><p>yy</p></td><td><p>o ano como número de 2 dígitos (00-99)</p></td></tr><tr><td><p>yyyy</p></td><td><p>o ano como número de 4 dígitos</p></td></tr><tr><td><p>h</p></td><td><p>a hora sem o zero inicial (0 a 23 ou 1 a 12 se AM/PM)</p></td></tr><tr><td><p>hh</p></td><td><p>a hora mas com o zero inicial (00 a 23 ou 01 a 12 se AM/PM)</p></td></tr><tr><td><p>H</p></td><td><p>a hora sem o zero inicial (0 a 23, mesmo se AM/PM)</p></td></tr><tr><td><p>HH</p></td><td><p>a hora mas com o zero inicial (00 a 23, mesmo se AM/PM)</p></td></tr><tr><td><p>m</p></td><td><p>os minutos sem o zero inicial (0 a 59)</p></td></tr><tr><td><p>mm</p></td><td><p>os minutos mas com zero inicial (00 a 59)</p></td></tr><tr><td><p>s</p></td><td><p>os segundos sem o zero inicial (0 a 59)</p></td></tr><tr><td><p>ss</p></td><td><p>os segundos mas com zero inicial (00 a 59)</p></td></tr><tr><td><p>z</p></td><td><p>os milissegundos sem o zero inicial (0 a 999)</p></td></tr><tr><td><p>zzz</p></td><td><p>os milissegundos mas com zero inicial (000 a 999)</p></td></tr><tr><td><p>AP ou A</p></td><td><p>para mostrar AM/PM <span style=" font-weight:600;">A/AP</span> será substituido por &quot;AM&quot; ou &quot;PM&quot;.</p></td></tr><tr><td><p>ap ou a</p></td><td><p>para mostrar am/pm <span style=" font-weight:600;">a/ap</span> será substituido por &quot;am&quot; ou &quot;pm&quot;.</p></td></tr><tr><td><p>t</p></td><td><p>o fuso horário (por exemplo: &quot;CEST&quot;)</p></td></tr><tr><td><p>T</p></td><td><p>o desvio da UTC</p></td></tr><tr><td><p>TT</p></td><td><p>a ID IANA do fuso horário</p></td></tr><tr><td><p>TTT</p></td><td><p>a abreviatura do fuso horário</p></td></tr><tr><td><p>TTTT</p></td><td><p>o nome abreviado do fuso horário</p></td></tr><tr><td><p>TTTTT</p></td><td><p>o nome completo do fuso horário</p></td></tr></table><p><br/><span style=" font-weight:600;">Nota:</span> quaisquer caracteres no padrão que não estejam no intervalo [a...z] e [A...Z] serão tratados como texto. Por exemplo, os caracteres ':', '.', ' ', '#' e '@' aparecerão no texto mesmo se não tiverem aspas.As aspas simples são utilizadas para 'escape' de letras. As aspas duplas, dentro ou fora da sequência entre aspas, representa uma aspa simples 'real.</p></body></html> Time &zones Fusos &horários &Add ... &Adicionar... &Remove &Remover Set as &default Utilizar como pré-&definido Move &up Mover para &cima Move do&wn Mover para &baixo Display &format &Formato de exibição &Time &Hora F&ormat: F&ormato: Short Curto Long Longo Custom Personalizado Sho&w seconds Mo&strar segundos Pad &hour with zero Mostrar zero inicial nas &horas &Use 12-hour format &Utilizar formato AM/PM T&ime zone Fuso horár&io &Position: &Posição: For&mat: F&ormato: Below Abaixo Above Acima Before Antes After Depois Offset from UTC Desvio da UTC Abbreviation Abreviatura Location identifier Identificador da localização Custom name Nome personalizado &Date &Data Po&sition: Pos&ição: Fo&rmat: Fo&rmato: ISO 8601 ISO 8601 Show &year Mostrar &ano Show day of wee&k Mostrar dia da se&mana Pad d&ay with zero Mostrar zero inicial nos di&as &Long month and day of week names Mês &longo e nome do dia da semana Ad&vanced manual format Formato a&vançado &Customise ... &Personalizar... IANA id ID IANA &Edit custom name ... &Editar nome personalizado... &General &Geral Auto&rotate when the panel is vertical &Rodar automaticamente se o painel estiver na vertical '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' Input custom time zone name Escreva o nome do fuso horário personalizado LXQtWorldClockConfigurationManualFormat World Clock Time Zones Fusos horários do relógio mundial <h1>Custom Date/Time Format Syntax</h1> <p>A date pattern is a string of characters, where specific strings of characters are replaced with date and time data from a calendar when formatting or used to generate data for a calendar when parsing.</p> <p>The Date Field Symbol Table below contains the characters used in patterns to show the appropriate formats for a given locale, such as yyyy for the year. Characters may be used multiple times. For example, if y is used for the year, 'yy' might produce '99', whereas 'yyyy' produces '1999'. For most numerical fields, the number of characters specifies the field width. For example, if h is the hour, 'h' might produce '5', but 'hh' produces '05'. For some characters, the count specifies whether an abbreviated or full form should be used, but may have other choices, as given below.</p> <p>Two single quotes represents a literal single quote, either inside or outside single quotes. Text within single quotes is not interpreted in any way (except for two adjacent single quotes). Otherwise all ASCII letter from a to z and A to Z are reserved as syntax characters, and require quoting if they are to represent literal characters. In addition, certain ASCII punctuation characters may become variable in the future (eg ":" being interpreted as the time separator and '/' as a date separator, and replaced by respective locale-sensitive characters in display).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Code</th><th>Meaning</th></tr> <tr><td>d</td><td>the day as number without a leading zero (1 to 31)</td></tr> <tr><td>dd</td><td>the day as number with a leading zero (01 to 31)</td></tr> <tr><td>ddd</td><td>the abbreviated localized day name (e.g. 'Mon' to 'Sun').</td></tr> <tr><td>dddd</td><td>the long localized day name (e.g. 'Monday' to 'Sunday</td></tr> <tr><td>M</td><td>the month as number without a leading zero (1-12)</td></tr> <tr><td>MM</td><td>the month as number with a leading zero (01-12)</td></tr> <tr><td>MMM</td><td>the abbreviated localized month name (e.g. 'Jan' to 'Dec').</td></tr> <tr><td>MMMM</td><td>the long localized month name (e.g. 'January' to 'December').</td></tr> <tr><td>yy</td><td>the year as two digit number (00-99)</td></tr> <tr><td>yyyy</td><td>the year as four digit number</td></tr> <tr><td>h</td><td>the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)</td></tr> <tr><td>hh</td><td>the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)</td></tr> <tr><td>H</td><td>the hour without a leading zero (0 to 23, even with AM/PM display)</td></tr> <tr><td>HH</td><td>the hour with a leading zero (00 to 23, even with AM/PM display)</td></tr> <tr><td>m</td><td>the minute without a leading zero (0 to 59)</td></tr> <tr><td>mm</td><td>the minute with a leading zero (00 to 59)</td></tr> <tr><td>s</td><td>the second without a leading zero (0 to 59)</td></tr> <tr><td>ss</td><td>the second with a leading zero (00 to 59)</td></tr> <tr><td>z</td><td>the milliseconds without leading zeroes (0 to 999)</td></tr> <tr><td>zzz</td><td>the milliseconds with leading zeroes (000 to 999)</td></tr> <tr><td>AP <i>or</i> A</td><td>use AM/PM display. <b>A/AP</b> will be replaced by either "AM" or "PM".<</td></tr> <tr><td>ap <i>or</i> a</td><td>use am/pm display. <b>a/ap</b> will be replaced by either "am" or "pm".<</td></tr> <tr><td>t</td><td>the timezone (for example "CEST")</td></tr> <tr><td>T</td><td>the offset from UTC</td></tr> <tr><td>TT</td><td>the timezone IANA id</td></tr> <tr><td>TTT</td><td>the timezone abbreviation</td></tr> <tr><td>TTTT</td><td>the timezone short display name</td></tr> <tr><td>TTTTT</td><td>the timezone long display name</td></tr> <tr><td>TTTTTT</td><td>the timezone custom name. You can change it the 'Time zones' tab of the configuration window</td></tr></table> <p><br /><b>Note:</b> Any characters in the pattern that are not in the ranges of ['a'..'z'] and ['A'..'Z'] will be treated as quoted text. For instance, characters like ':', '.', ' ', '#' and '@' will appear in the resulting time text even they are not enclosed within single quotes.The single quote is used to 'escape' letters. Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.</p> <h1>Sintaxe personalizada para datas e horas</h1> <p>A date pattern is a string of characters, where specific strings of characters are replaced with date and time data from a calendar when formatting or used to generate data for a calendar when parsing.</p> <p>The Date Field Symbol Table below contains the characters used in patterns to show the appropriate formats for a given locale, such as yyyy for the year. Characters may be used multiple times. For example, if y is used for the year, 'yy' might produce '99', whereas 'yyyy' produces '1999'. For most numerical fields, the number of characters specifies the field width. For example, if h is the hour, 'h' might produce '5', but 'hh' produces '05'. For some characters, the count specifies whether an abbreviated or full form should be used, but may have other choices, as given below.</p> <p>Two single quotes represents a literal single quote, either inside or outside single quotes. Text within single quotes is not interpreted in any way (except for two adjacent single quotes). Otherwise all ASCII letter from a to z and A to Z are reserved as syntax characters, and require quoting if they are to represent literal characters. In addition, certain ASCII punctuation characters may become variable in the future (eg ":" being interpreted as the time separator and '/' as a date separator, and replaced by respective locale-sensitive characters in display).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Código</th><th>Significado</th></tr> <tr><td>d</td><td>o número do dia sem o zero inicial (1 a 31)</td></tr> <tr><td>dd</td><td>o número do dia com o zero inicial (01 a 31)</td></tr> <tr><td>ddd</td><td>o nome abrevidado do dia (Seg a Dom).</td></tr> <tr><td>dddd</td><td>o nome completo do dia (Segunda a Domingo)</td></tr> <tr><td>M</td><td>o número do mês sem o zero inicial (1 a 12)</td></tr> <tr><td>MM</td><td>o número do mês com o zero inicial (01 a 12)</td></tr> <tr><td>MMM</td><td>o nome abreviado do mês (Jan a Dez)</td></tr> <tr><td>MMMM</td><td>o nome completo do mês (Janeiro a Dezembro)</td></tr> <tr><td>yy</td><td>o ano na forma de dois dígitos (00 a 99)</td></tr> <tr><td>yyyy</td><td>o ano na forma de quatro dígitos</td></tr> <tr><td>h</td><td>a hora sem o zero inicial (0 a 23 ou 1 a 12 com AM/PM)</td></tr> <tr><td>hh</td><td>a hora com o zero inicial (00 a 23 ou 01 a 12 com AM/PM)</td></tr> <tr><td>H</td><td>a hora sem o zero inicial (0 a 23 mesmo se com AM/PM)</td></tr> <tr><td>HH</td><td>a hora sem o zero inicial (00 a 23 mesmo se com AM/PM)</td></tr> <tr><td>m</td><td>os minutos sem o zero inicial (0 a 59)</td></tr> <tr><td>mm</td><td>os minutos com o zero inicial (00 a 59)</td></tr> <tr><td>s</td><td>os segundos sem o zero inicial (0 a 59)</td></tr> <tr><td>ss</td><td>os segundos com o zero inicial (00 a 59)</td></tr> <tr><td>z</td><td>os milissegundos sem o zero inicial (0 a 999)</td></tr> <tr><td>zzz</td><td>os milissegundos com o zero inicial (0 a 999)</td></tr> <tr><td>AP <i>ou</i> A</td><td>para mostrar AM/PM. <b>A/AP</b> será substituido por "AM" ou "PM"<</td></tr> <tr><td>ap <i>ou</i> a</td><td>para mostrar am/pm. <b>a/ap</b> será substituido por "am" ou "pm"<</td></tr> <tr><td>t</td><td>o fuso horário (por exemplo: "CEST")</td></tr> <tr><td>T</td><td>o desvio da UTC</td></tr> <tr><td>TT</td><td>o identificador IANA do fuso horário</td></tr> <tr><td>TTT</td><td>a abreviatura do fuso horário</td></tr> <tr><td>TTTT</td><td>o nome abreviado do fuso horário</td></tr> <tr><td>TTTTT</td><td>o nome completo do fuso horário</td></tr> <tr><td>TTTTTT</td><td>o nome personalizado do fuso horario. Pode mudar o nome no separador 'Fusos horários' da janela de configurações</td></tr></table> <p><br /><b>Nota:</b> quaisquer caracteres do padrão que não estejam no intervalo ['a'..'z'] e ['A'..'Z'] serão tratados como texto entre aspas. Por exemplo, os caracteres ':', '.', ' ', '#' e '@' aparecerão na hora resultante do padrão mesmo se não estiverem entre aspas. A plica é utilizada para fazer o 'escape' das letras. Duas plicas seguidas numa linha, dentro ou fora de uma frase entre aspas representa uma plica 'real'.</p LXQtWorldClockConfigurationTimeZones World Clock Time Zones Fusos horários do relógio mundial Time zone Fuso horário Name Nome Comment Comentário Country País UTC UTC Other Outro Local timezone lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_ru.desktop000066400000000000000000000002731261500472700263070ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name[ru]=Мировое время Comment[ru]=Плагин мирового времени. #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_ru.ts000066400000000000000000001304461261500472700252720ustar00rootroot00000000000000 LXQtWorldClock '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' LXQtWorldClockConfiguration World Clock Settings Настройки мирового времени &Short, time only &Короткий, только время &Long, time only &Длинный, только время S&hort, date && time К&ороткий, дата и время L&ong, date && time Д&линный, дата и время &Custom &Свой <html><head/><body><p><span style=" font-size:x-large; font-weight:600;">Custom Date/Time Format Syntax</span></p><p>A date pattern is a string of characters, where specific strings of characters are replaced with date and time data from a calendar when formatting or used to generate data for a calendar when parsing.</p><p>The Date Field Symbol Table below contains the characters used in patterns to show the appropriate formats for a given locale, such as yyyy for the year. Characters may be used multiple times. For example, if y is used for the year, 'yy' might produce '99', whereas 'yyyy' produces '1999'. For most numerical fields, the number of characters specifies the field width. For example, if h is the hour, 'h' might produce '5', but 'hh' produces '05'. For some characters, the count specifies whether an abbreviated or full form should be used, but may have other choices, as given below.</p><p>Two single quotes represents a literal single quote, either inside or outside single quotes. Text within single quotes is not interpreted in any way (except for two adjacent single quotes). Otherwise all ASCII letter from a to z and A to Z are reserved as syntax characters, and require quoting if they are to represent literal characters. In addition, certain ASCII punctuation characters may become variable in the future (eg &quot;:&quot; being interpreted as the time separator and '/' as a date separator, and replaced by respective locale-sensitive characters in display).<br/></p><table border="1" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" width="100%" cellspacing="0" cellpadding="4"><tr><td width="20%"><p align="center"><span style=" font-weight:600;">Code</span></p></td><td><p align="center"><span style=" font-weight:600;">Meaning</span></p></td></tr><tr><td><p>d</p></td><td><p>the day as number without a leading zero (1 to 31)</p></td></tr><tr><td><p>dd</p></td><td><p>the day as number with a leading zero (01 to 31)</p></td></tr><tr><td><p>ddd</p></td><td><p>the abbreviated localized day name (e.g. 'Mon' to 'Sun').</p></td></tr><tr><td><p>dddd</p></td><td><p>the long localized day name (e.g. 'Monday' to 'Sunday</p></td></tr><tr><td><p>M</p></td><td><p>the month as number without a leading zero (1-12)</p></td></tr><tr><td><p>MM</p></td><td><p>the month as number with a leading zero (01-12)</p></td></tr><tr><td><p>MMM</p></td><td><p>the abbreviated localized month name (e.g. 'Jan' to 'Dec').</p></td></tr><tr><td><p>MMMM</p></td><td><p>the long localized month name (e.g. 'January' to 'December').</p></td></tr><tr><td><p>yy</p></td><td><p>the year as two digit number (00-99)</p></td></tr><tr><td><p>yyyy</p></td><td><p>the year as four digit number</p></td></tr><tr><td><p>h</p></td><td><p>the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)</p></td></tr><tr><td><p>hh</p></td><td><p>the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)</p></td></tr><tr><td><p>H</p></td><td><p>the hour without a leading zero (0 to 23, even with AM/PM display)</p></td></tr><tr><td><p>HH</p></td><td><p>the hour with a leading zero (00 to 23, even with AM/PM display)</p></td></tr><tr><td><p>m</p></td><td><p>the minute without a leading zero (0 to 59)</p></td></tr><tr><td><p>mm</p></td><td><p>the minute with a leading zero (00 to 59)</p></td></tr><tr><td><p>s</p></td><td><p>the second without a leading zero (0 to 59)</p></td></tr><tr><td><p>ss</p></td><td><p>the second with a leading zero (00 to 59)</p></td></tr><tr><td><p>z</p></td><td><p>the milliseconds without leading zeroes (0 to 999)</p></td></tr><tr><td><p>zzz</p></td><td><p>the milliseconds with leading zeroes (000 to 999)</p></td></tr><tr><td><p>AP or A</p></td><td><p>use AM/PM display. <span style=" font-weight:600;">A/AP</span> will be replaced by either &quot;AM&quot; or &quot;PM&quot;.</p></td></tr><tr><td><p>ap or a</p></td><td><p>use am/pm display. <span style=" font-weight:600;">a/ap</span> will be replaced by either &quot;am&quot; or &quot;pm&quot;.</p></td></tr><tr><td><p>t</p></td><td><p>the timezone (for example &quot;CEST&quot;)</p></td></tr><tr><td><p>T</p></td><td><p>the offset from UTC</p></td></tr><tr><td><p>TT</p></td><td><p>the timezone IANA id</p></td></tr><tr><td><p>TTT</p></td><td><p>the timezone abbreviation</p></td></tr><tr><td><p>TTTT</p></td><td><p>the timezone short display name</p></td></tr><tr><td><p>TTTTT</p></td><td><p>the timezone long display name</p></td></tr></table><p><br/><span style=" font-weight:600;">Note:</span> Any characters in the pattern that are not in the ranges of ['a'..'z'] and ['A'..'Z'] will be treated as quoted text. For instance, characters like ':', '.', ' ', '#' and '@' will appear in the resulting time text even they are not enclosed within single quotes.The single quote is used to 'escape' letters. Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.</p></body></html> <html><head/><body><p><span style=" font-size:x-large; font-weight:600;">Синтаксис своего формата даты/времени</span></p><p>Шаблон даты — это строка символов, где специальные группы символов заменяются при форматировании на дату и время из календаря или используются для генерации даты при синтаксическом разборе.</p><p>Таблица символов полей даты ниже содержит символы, используемые в шаблонах для отображения подходящих форматов установленной локали, такой как yyyy для года. Символы могут быть использованы несколько раз. Например, если использован y для года, 'yy' отобразит '99', тогда как 'yyyy' покажет '1999'. Для большинства числовых полей число символов определяет ширину поля. Например, если h это час, 'h' отобразит '5', но 'hh' отобразит '05'. Для некоторых символов, это число определяет должно ли быть использовано сокращение или полная форма, но могут быть и другие варианты, как написано ниже.</p><p>Две одинарные кавычки отобразят одиночную кавычку, независимо от того внутренние они или внешние. Текст внутри одинарных кавычек никак не интерпретируется (за исключением двух смежных одинарных кавычек). Тогда как все символы ASCII от a до z и A до Z зарезервированы под символы синтаксиса, и требуют заключения в кавычки для отображения их как обычных символов. помимо прочего, некоторые знаки препинания ASCII могут стать переменными в будущем (т.е. &quot;:&quot; быть интерпретированы как разделитель компонентов времени и '/' как разделитель компонентов даты, и заменены при отображении соответствующими символами с учётом локали ).<br /></p><table border="1" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" width="100%" cellspacing="0" cellpadding="4"><tr><td width="20%"><p align="center"><span style=" font-weight:600;">Код</span></p></td><td><p align="center"><span style=" font-weight:600;">Обозначения</span></p></td></tr><tr><td><p>d</p></td><td><p>день как число без первого нуля (от 1 до 31)</p></td></tr><tr><td><p>dd</p></td><td><p>день как число с первым нулём (от 01 до 31)</p></td></tr><tr><td><p>ddd</p></td><td><p>сокращённое локализованное название дня (т.е. от 'Пн' до 'Вс').</p></td></tr><tr><td><p>dddd</p></td><td><p>длинное локализованное название дня (т.е. от 'Понедельник' до 'Воскресенье'</p></td></tr><tr><td><p>M</p></td><td><p>месяц как число без первого нуля (1-12)</p></td></tr><tr><td><p>MM</td><td><p>месяц как число с первым нулём (01-12)</p></td></tr><tr><td><p>MMM</p></td><td><p>сокращённое локализованное название месяца (т.е. от 'Янв' до 'Дек').</p></td></tr><tr><td><p>MMMM</p></td><td><p>длинное локализованное название месяца (т.е. от 'Январь' до 'Декабрь').</p></td></tr><tr><td><p>yy</p></td><td><p>год как двухразрядное число (00-99)</p></td></tr><tr><td><p>yyyy</p></td><td><p>год как четырёхразрядное число</p></td></tr><tr><td><p>h</p></td><td><p>час без нуля впереди (от 0 до 23 или 1 до 12, если отображается AM/PM)</p></td></tr><tr><td><p>hh</p></td><td><p>час с нулём впереди (от 00 до 23 или 01 до 12, если отображается AM/PM)</p></td></tr><tr><td><p>H</p></td><td><p>час без нуля впереди (от 00 до 23, даже с отображением AM/PM)</p></td></tr><tr><td><p>HH</p></td><td><p>час с нулём впереди (от 00 до 23, даже с отображением AM/PM)</p></td></tr><tr><td>m</p></td><td><p>минута без нуля впереди (от 0 до 59)</p></td></tr><tr><td><p>mm</p></td><td><p>минута с нулём впереди (от 00 до 59)</p></td></tr><tr><td><p>s</td><td><p>секунда без нуля впереди (от 0 до 59)</p></td></tr><tr><td><p>ss</p></td><td><p>секунда с нулём впереди (от 00 до 59)</p></td></tr><tr><td><p>z</p></td><td><p>миллисекунда без нуля впереди (от 0 до 999)</p></td></tr><tr><td><p>zzz</p></td><td><p>миллисекунда с нулём впереди (от 000 до 999)</p></td></tr><tr><td><p>AP или A</p></td><td><p>использовать отображение AM/PM. <span style=" font-weight:600;">A/AP</span> будет замещено или &quot;AM&quot; или &quot;PM&quot;.</p></td></tr><tr><td><p>ap или a</p></td><td><p>использовать отображение am/pm. <span style=" font-weight:600;">a/ap</span> будет замещено или &quot;am&quot; или &quot;pm&quot;</p></td></tr><tr><td><p>t</p></td><td><p>часовой пояс (например &quot;CEST&quot;)</p></td></tr><tr><td><p>T</p></td><td><p>сдвиг времени от UTC</p></td></tr><tr><td>TT</p></td><td><p>id часового пояса IANA</p></td></tr><tr><td><p>TTT</p></td><td><p>аббревиатура часового пояса</p></td></tr><tr><td><p>TTTT</p></td><td><p>короткое имя часового пояса</p></td></tr><tr><td><p>TTTTT</p></td><td><p>длинное имя часового пояса</p></td></tr></table><p><br/><span style=" font-weight:600;">Замечание:</span> Любой символ в шаблоне не из диапазона ['a'..'z'] и ['A'..'Z'] будет обработан как цитируемый текст. Например, символы как ':', '.', ' ', '#' и '@' появятся в тексте со временем, даже если они не помещены в одинарные кавычки. Одинарные кавычки используются для управляющих символ. Две одинарные кавычки подряд, независимо от того внутри или снаружи цитируемой последовательности, представляет 'реальные' одинарные кавычки.</p></body></html> Time &zones Часовые &пояса &Add ... &Добавить… &Remove &Удалить Set as &default Установить &по-умолчанию Move &up &Выше Move do&wn &Ниже Display &format Формат &отображения &Time &Время F&ormat: Ф&ормат: Short Короткий Long Длинный Custom Свой Sho&w seconds П&оказывать секунды Pad &hour with zero Дополнить &час нулём T&ime zone Ч&асовой пояс &Position: &Расположение: For&mat: Ф&ормат: Below Ниже Above Выше Before До After После Offset from UTC Сдвиг относительно UTC Abbreviation Сокращение IANA id Custom name Своё имя &Use 12-hour format &Использовать 12 часовой формат Location identifier Идентификатор местоположения &Date &Дата Po&sition: &Расположение: Fo&rmat: Ф&ормат: ISO 8601 Show &year П&оказывать год Show day of wee&k Показывать день &недели Pad d&ay with zero Дополнить &день нулём &Long month and day of week names &Длинные названия месяцев и дней недели Ad&vanced manual format &Продвинутый ручной формат &Customise ... &Настроить ... &Edit custom name ... &Изменить своё имя ... &General &Общие Auto&rotate when the panel is vertical Авто&поворот для вертикальной панели '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' Input custom time zone name Введите своё имя для часового пояса LXQtWorldClockConfigurationManualFormat World Clock Time Zones Часовые пояса мирового времени <h1>Custom Date/Time Format Syntax</h1> <p>A date pattern is a string of characters, where specific strings of characters are replaced with date and time data from a calendar when formatting or used to generate data for a calendar when parsing.</p> <p>The Date Field Symbol Table below contains the characters used in patterns to show the appropriate formats for a given locale, such as yyyy for the year. Characters may be used multiple times. For example, if y is used for the year, 'yy' might produce '99', whereas 'yyyy' produces '1999'. For most numerical fields, the number of characters specifies the field width. For example, if h is the hour, 'h' might produce '5', but 'hh' produces '05'. For some characters, the count specifies whether an abbreviated or full form should be used, but may have other choices, as given below.</p> <p>Two single quotes represents a literal single quote, either inside or outside single quotes. Text within single quotes is not interpreted in any way (except for two adjacent single quotes). Otherwise all ASCII letter from a to z and A to Z are reserved as syntax characters, and require quoting if they are to represent literal characters. In addition, certain ASCII punctuation characters may become variable in the future (eg ":" being interpreted as the time separator and '/' as a date separator, and replaced by respective locale-sensitive characters in display).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Code</th><th>Meaning</th></tr> <tr><td>d</td><td>the day as number without a leading zero (1 to 31)</td></tr> <tr><td>dd</td><td>the day as number with a leading zero (01 to 31)</td></tr> <tr><td>ddd</td><td>the abbreviated localized day name (e.g. 'Mon' to 'Sun').</td></tr> <tr><td>dddd</td><td>the long localized day name (e.g. 'Monday' to 'Sunday</td></tr> <tr><td>M</td><td>the month as number without a leading zero (1-12)</td></tr> <tr><td>MM</td><td>the month as number with a leading zero (01-12)</td></tr> <tr><td>MMM</td><td>the abbreviated localized month name (e.g. 'Jan' to 'Dec').</td></tr> <tr><td>MMMM</td><td>the long localized month name (e.g. 'January' to 'December').</td></tr> <tr><td>yy</td><td>the year as two digit number (00-99)</td></tr> <tr><td>yyyy</td><td>the year as four digit number</td></tr> <tr><td>h</td><td>the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)</td></tr> <tr><td>hh</td><td>the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)</td></tr> <tr><td>H</td><td>the hour without a leading zero (0 to 23, even with AM/PM display)</td></tr> <tr><td>HH</td><td>the hour with a leading zero (00 to 23, even with AM/PM display)</td></tr> <tr><td>m</td><td>the minute without a leading zero (0 to 59)</td></tr> <tr><td>mm</td><td>the minute with a leading zero (00 to 59)</td></tr> <tr><td>s</td><td>the second without a leading zero (0 to 59)</td></tr> <tr><td>ss</td><td>the second with a leading zero (00 to 59)</td></tr> <tr><td>z</td><td>the milliseconds without leading zeroes (0 to 999)</td></tr> <tr><td>zzz</td><td>the milliseconds with leading zeroes (000 to 999)</td></tr> <tr><td>AP <i>or</i> A</td><td>use AM/PM display. <b>A/AP</b> will be replaced by either "AM" or "PM".<</td></tr> <tr><td>ap <i>or</i> a</td><td>use am/pm display. <b>a/ap</b> will be replaced by either "am" or "pm".<</td></tr> <tr><td>t</td><td>the timezone (for example "CEST")</td></tr> <tr><td>T</td><td>the offset from UTC</td></tr> <tr><td>TT</td><td>the timezone IANA id</td></tr> <tr><td>TTT</td><td>the timezone abbreviation</td></tr> <tr><td>TTTT</td><td>the timezone short display name</td></tr> <tr><td>TTTTT</td><td>the timezone long display name</td></tr> <tr><td>TTTTTT</td><td>the timezone custom name. You can change it the 'Time zones' tab of the configuration window</td></tr></table> <p><br /><b>Note:</b> Any characters in the pattern that are not in the ranges of ['a'..'z'] and ['A'..'Z'] will be treated as quoted text. For instance, characters like ':', '.', ' ', '#' and '@' will appear in the resulting time text even they are not enclosed within single quotes.The single quote is used to 'escape' letters. Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.</p> <h1>Синтаксис своего формата даты/времени</h1> <p>Шаблон даты — это строка символов, где специальные группы символов заменяются при форматировании на дату и время из календаря или используются для генерации даты при синтаксическом разборе.</p> <p>Таблица символов полей даты ниже содержит символы, используемые в шаблонах для отображения подходящих форматов установленной локали, такой как yyyy для года. Символы могут быть использованы несколько раз. Например, если использован y для года, 'yy' отобразит '99', тогда как 'yyyy' покажет '1999'. Для большинства числовых полей число символов определяет ширину поля. Например, если h это час, 'h' отобразит '5', но 'hh' отобразит '05'. Для некоторых символов, это число определяет должно ли быть использовано сокращение или полная форма, но могут быть и другие варианты, как написано ниже.</p> <p>Две одинарные кавычки отобразят одиночную кавычку, независимо от того внутренние они или внешние. Текст внутри одинарных кавычек никак не интерпретируется (за исключением двух смежных одинарных кавычек). Тогда как все символы ASCII от a до z и A до Z зарезервированы под символы синтаксиса, и требуют заключения в кавычки для отображения их как обычных символов. помимо прочего, некоторые знаки препинания ASCII могут стать переменными в будущем (т.е. &quot;:&quot; быть интерпретированы как разделитель компонентов времени и '/' как разделитель компонентов даты, и заменены при отображении соответствующими символами с учётом локали).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Код</th><th>Обозначения</th></tr> <tr><td>d</td></td><td>день как число без первого нуля (от 1 до 31)</td></tr> <tr><td>dd</td><td>день как число с первым нулём (от 01 до 31)</td></tr> <tr><td>ddd</p></td><td>сокращённое локализованное название дня (т.е. от 'Пн' до 'Вс').</td></tr> <tr><td>dddd</td><td>длинное локализованное название дня (т.е. от 'Понедельник' до 'Воскресенье'</td></tr> <tr><td>M</td><td>месяц как число без первого нуля (1-12)</td></tr> <tr><td>MM</td><td>месяц как число с первым нулём (01-12)</td></tr> <tr><td>MMM</td><td>сокращённое локализованное название месяца (т.е. от 'Янв' до 'Дек').</td></tr> <tr><td>MMMM</td><td>длинное локализованное название месяца (т.е. от 'Январь' до 'Декабрь').</td></tr> <tr><td>yy</td><td><p>год как двухразрядное число (00-99</td></tr> <tr><td>yyyy</td><td>год как четырёхразрядное число</td></tr> <tr><td>h</td><td>час без нуля впереди (от 0 до 23 или 1 до 12, если отображается AM/PM)</td></tr> <tr><td>hh</td><td>час с нулём впереди (от 00 до 23 или 01 до 12, если отображается AM/PM)</td></tr> <tr><td>H</td><td>час без нуля впереди (от 00 до 23, даже с отображением AM/PM)</td></tr> <tr><td>HH</td><td>час с нулём впереди (от 00 до 23, даже с отображением AM/PM)</td></tr> <tr><td>m</td><td>минута без нуля впереди (от 0 до 59)</td></tr> <tr><td>mm</td><td>минута с нулём впереди (от 00 до 59)</td></tr> <tr><td>s</td><td>секунда без нуля впереди (от 0 до 59)</td></tr> <tr><td>ss</td><td>секунда с нулём впереди (от 00 до 59)</td></tr> <tr><td>z</td><td>миллисекунда без нуля впереди (от 0 до 999)</td></tr> <tr><td>zzz</td><td>миллисекунда с нулём впереди (от 000 до 999)</td></tr> <tr><td>AP <i>или</i> A</td><td>использовать отображение AM/PM. <b>A/AP</b> будет замещено на "AM" или "PM".<</td></tr> <tr><td>ap <i>или</i> a</td><td>использовать отображение am/pm. <b>a/ap</b> будет замещено на "am" или "pm".<</td></tr> <tr><td>t</td><td>часовой пояс (например "CEST")</td></tr> <tr><td>T</td><td>сдвиг времени относительно UTC</td></tr> <tr><td>TT</td><td>id часового пояса IANA</td></tr> <tr><td>TTT</td><td>аббревиатура часового пояса</td></tr> <tr><td>TTTT</td><td>короткое имя часового пояса</td></tr> <tr><td>TTTTT</p></td><td><p>длинное имя часового пояса</td></tr> <tr><td>TTTTTT</td><td>своё имя часового пояса. Вы можете изменить его во вкладке «Часовые пояса» окна настройки</td></tr></table> <p><br /><b>Замечание:</b> Любые символы в шаблоне не из диапазона ['a'..'z'] и ['A'..'Z'] будут обработаны как цитируемый текст. Например, символы как ':', '.', ' ', '#' и '@' появятся в тексте со временем, даже если они не помещены в одинарные кавычки. Одинарные кавычки используются для управляющих символ. Две одинарные кавычки подряд, независимо от того внутри или снаружи цитируемой последовательности, представляет 'реальные' одинарные кавычки.</p> LXQtWorldClockConfigurationTimeZones World Clock Time Zones Часовые пояса мирового времени Time zone Часовой пояс Name Название Comment Коментарий Country Страна UTC UTC Other Другое Local timezone lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_ru_RU.desktop000066400000000000000000000003011261500472700267050ustar00rootroot00000000000000[Desktop Entry] Type=Service ServiceTypes=LXQtPanel/Plugin Name[ru_RU]=Мировое время Comment[ru_RU]=Плагин мирового времени. #TRANSLATIONS_DIR=../translations lxqt-panel-0.10.0/plugin-worldclock/translations/worldclock_ru_RU.ts000066400000000000000000001304511261500472700256740ustar00rootroot00000000000000 LXQtWorldClock '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' LXQtWorldClockConfiguration World Clock Settings Настройки мирового времени &Short, time only &Короткий, только время &Long, time only &Длинный, только время S&hort, date && time К&ороткий, дата и время L&ong, date && time Д&линный, дата и время &Custom &Свой <html><head/><body><p><span style=" font-size:x-large; font-weight:600;">Custom Date/Time Format Syntax</span></p><p>A date pattern is a string of characters, where specific strings of characters are replaced with date and time data from a calendar when formatting or used to generate data for a calendar when parsing.</p><p>The Date Field Symbol Table below contains the characters used in patterns to show the appropriate formats for a given locale, such as yyyy for the year. Characters may be used multiple times. For example, if y is used for the year, 'yy' might produce '99', whereas 'yyyy' produces '1999'. For most numerical fields, the number of characters specifies the field width. For example, if h is the hour, 'h' might produce '5', but 'hh' produces '05'. For some characters, the count specifies whether an abbreviated or full form should be used, but may have other choices, as given below.</p><p>Two single quotes represents a literal single quote, either inside or outside single quotes. Text within single quotes is not interpreted in any way (except for two adjacent single quotes). Otherwise all ASCII letter from a to z and A to Z are reserved as syntax characters, and require quoting if they are to represent literal characters. In addition, certain ASCII punctuation characters may become variable in the future (eg &quot;:&quot; being interpreted as the time separator and '/' as a date separator, and replaced by respective locale-sensitive characters in display).<br/></p><table border="1" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" width="100%" cellspacing="0" cellpadding="4"><tr><td width="20%"><p align="center"><span style=" font-weight:600;">Code</span></p></td><td><p align="center"><span style=" font-weight:600;">Meaning</span></p></td></tr><tr><td><p>d</p></td><td><p>the day as number without a leading zero (1 to 31)</p></td></tr><tr><td><p>dd</p></td><td><p>the day as number with a leading zero (01 to 31)</p></td></tr><tr><td><p>ddd</p></td><td><p>the abbreviated localized day name (e.g. 'Mon' to 'Sun').</p></td></tr><tr><td><p>dddd</p></td><td><p>the long localized day name (e.g. 'Monday' to 'Sunday</p></td></tr><tr><td><p>M</p></td><td><p>the month as number without a leading zero (1-12)</p></td></tr><tr><td><p>MM</p></td><td><p>the month as number with a leading zero (01-12)</p></td></tr><tr><td><p>MMM</p></td><td><p>the abbreviated localized month name (e.g. 'Jan' to 'Dec').</p></td></tr><tr><td><p>MMMM</p></td><td><p>the long localized month name (e.g. 'January' to 'December').</p></td></tr><tr><td><p>yy</p></td><td><p>the year as two digit number (00-99)</p></td></tr><tr><td><p>yyyy</p></td><td><p>the year as four digit number</p></td></tr><tr><td><p>h</p></td><td><p>the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)</p></td></tr><tr><td><p>hh</p></td><td><p>the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)</p></td></tr><tr><td><p>H</p></td><td><p>the hour without a leading zero (0 to 23, even with AM/PM display)</p></td></tr><tr><td><p>HH</p></td><td><p>the hour with a leading zero (00 to 23, even with AM/PM display)</p></td></tr><tr><td><p>m</p></td><td><p>the minute without a leading zero (0 to 59)</p></td></tr><tr><td><p>mm</p></td><td><p>the minute with a leading zero (00 to 59)</p></td></tr><tr><td><p>s</p></td><td><p>the second without a leading zero (0 to 59)</p></td></tr><tr><td><p>ss</p></td><td><p>the second with a leading zero (00 to 59)</p></td></tr><tr><td><p>z</p></td><td><p>the milliseconds without leading zeroes (0 to 999)</p></td></tr><tr><td><p>zzz</p></td><td><p>the milliseconds with leading zeroes (000 to 999)</p></td></tr><tr><td><p>AP or A</p></td><td><p>use AM/PM display. <span style=" font-weight:600;">A/AP</span> will be replaced by either &quot;AM&quot; or &quot;PM&quot;.</p></td></tr><tr><td><p>ap or a</p></td><td><p>use am/pm display. <span style=" font-weight:600;">a/ap</span> will be replaced by either &quot;am&quot; or &quot;pm&quot;.</p></td></tr><tr><td><p>t</p></td><td><p>the timezone (for example &quot;CEST&quot;)</p></td></tr><tr><td><p>T</p></td><td><p>the offset from UTC</p></td></tr><tr><td><p>TT</p></td><td><p>the timezone IANA id</p></td></tr><tr><td><p>TTT</p></td><td><p>the timezone abbreviation</p></td></tr><tr><td><p>TTTT</p></td><td><p>the timezone short display name</p></td></tr><tr><td><p>TTTTT</p></td><td><p>the timezone long display name</p></td></tr></table><p><br/><span style=" font-weight:600;">Note:</span> Any characters in the pattern that are not in the ranges of ['a'..'z'] and ['A'..'Z'] will be treated as quoted text. For instance, characters like ':', '.', ' ', '#' and '@' will appear in the resulting time text even they are not enclosed within single quotes.The single quote is used to 'escape' letters. Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.</p></body></html> <html><head/><body><p><span style=" font-size:x-large; font-weight:600;">Синтаксис своего формата даты/времени</span></p><p>Шаблон даты — это строка символов, где специальные группы символов заменяются при форматировании на дату и время из календаря или используются для генерации даты при синтаксическом разборе.</p><p>Таблица символов полей даты ниже содержит символы, используемые в шаблонах для отображения подходящих форматов установленной локали, такой как yyyy для года. Символы могут быть использованы несколько раз. Например, если использован y для года, 'yy' отобразит '99', тогда как 'yyyy' покажет '1999'. Для большинства числовых полей число символов определяет ширину поля. Например, если h это час, 'h' отобразит '5', но 'hh' отобразит '05'. Для некоторых символов, это число определяет должно ли быть использовано сокращение или полная форма, но могут быть и другие варианты, как написано ниже.</p><p>Две одинарные кавычки отобразят одиночную кавычку, независимо от того внутренние они или внешние. Текст внутри одинарных кавычек никак не интерпретируется (за исключением двух смежных одинарных кавычек). Тогда как все символы ASCII от a до z и A до Z зарезервированы под символы синтаксиса, и требуют заключения в кавычки для отображения их как обычных символов. помимо прочего, некоторые знаки препинания ASCII могут стать переменными в будущем (т.е. &quot;:&quot; быть интерпретированы как разделитель компонентов времени и '/' как разделитель компонентов даты, и заменены при отображении соответствующими символами с учётом локали ).<br /></p><table border="1" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" width="100%" cellspacing="0" cellpadding="4"><tr><td width="20%"><p align="center"><span style=" font-weight:600;">Код</span></p></td><td><p align="center"><span style=" font-weight:600;">Обозначения</span></p></td></tr><tr><td><p>d</p></td><td><p>день как число без первого нуля (от 1 до 31)</p></td></tr><tr><td><p>dd</p></td><td><p>день как число с первым нулём (от 01 до 31)</p></td></tr><tr><td><p>ddd</p></td><td><p>сокращённое локализованное название дня (т.е. от 'Пн' до 'Вс').</p></td></tr><tr><td><p>dddd</p></td><td><p>длинное локализованное название дня (т.е. от 'Понедельник' до 'Воскресенье'</p></td></tr><tr><td><p>M</p></td><td><p>месяц как число без первого нуля (1-12)</p></td></tr><tr><td><p>MM</td><td><p>месяц как число с первым нулём (01-12)</p></td></tr><tr><td><p>MMM</p></td><td><p>сокращённое локализованное название месяца (т.е. от 'Янв' до 'Дек').</p></td></tr><tr><td><p>MMMM</p></td><td><p>длинное локализованное название месяца (т.е. от 'Январь' до 'Декабрь').</p></td></tr><tr><td><p>yy</p></td><td><p>год как двухразрядное число (00-99)</p></td></tr><tr><td><p>yyyy</p></td><td><p>год как четырёхразрядное число</p></td></tr><tr><td><p>h</p></td><td><p>час без нуля впереди (от 0 до 23 или 1 до 12, если отображается AM/PM)</p></td></tr><tr><td><p>hh</p></td><td><p>час с нулём впереди (от 00 до 23 или 01 до 12, если отображается AM/PM)</p></td></tr><tr><td><p>H</p></td><td><p>час без нуля впереди (от 00 до 23, даже с отображением AM/PM)</p></td></tr><tr><td><p>HH</p></td><td><p>час с нулём впереди (от 00 до 23, даже с отображением AM/PM)</p></td></tr><tr><td>m</p></td><td><p>минута без нуля впереди (от 0 до 59)</p></td></tr><tr><td><p>mm</p></td><td><p>минута с нулём впереди (от 00 до 59)</p></td></tr><tr><td><p>s</td><td><p>секунда без нуля впереди (от 0 до 59)</p></td></tr><tr><td><p>ss</p></td><td><p>секунда с нулём впереди (от 00 до 59)</p></td></tr><tr><td><p>z</p></td><td><p>миллисекунда без нуля впереди (от 0 до 999)</p></td></tr><tr><td><p>zzz</p></td><td><p>миллисекунда с нулём впереди (от 000 до 999)</p></td></tr><tr><td><p>AP или A</p></td><td><p>использовать отображение AM/PM. <span style=" font-weight:600;">A/AP</span> будет замещено или &quot;AM&quot; или &quot;PM&quot;.</p></td></tr><tr><td><p>ap или a</p></td><td><p>использовать отображение am/pm. <span style=" font-weight:600;">a/ap</span> будет замещено или &quot;am&quot; или &quot;pm&quot;</p></td></tr><tr><td><p>t</p></td><td><p>часовой пояс (например &quot;CEST&quot;)</p></td></tr><tr><td><p>T</p></td><td><p>сдвиг времени от UTC</p></td></tr><tr><td>TT</p></td><td><p>id часового пояса IANA</p></td></tr><tr><td><p>TTT</p></td><td><p>аббревиатура часового пояса</p></td></tr><tr><td><p>TTTT</p></td><td><p>короткое имя часового пояса</p></td></tr><tr><td><p>TTTTT</p></td><td><p>длинное имя часового пояса</p></td></tr></table><p><br/><span style=" font-weight:600;">Замечание:</span> Любой символ в шаблоне не из диапазона ['a'..'z'] и ['A'..'Z'] будет обработан как цитируемый текст. Например, символы как ':', '.', ' ', '#' и '@' появятся в тексте со временем, даже если они не помещены в одинарные кавычки. Одинарные кавычки используются для управляющих символ. Две одинарные кавычки подряд, независимо от того внутри или снаружи цитируемой последовательности, представляет 'реальные' одинарные кавычки.</p></body></html> Time &zones Часовые &пояса &Add ... &Добавить… &Remove &Удалить Set as &default Установить &по-умолчанию Move &up &Выше Move do&wn &Ниже Display &format Формат &отображения &Time &Время F&ormat: Ф&ормат: Short Короткий Long Длинный Custom Свой Sho&w seconds П&оказывать секунды Pad &hour with zero Дополнить &час нулём T&ime zone Ч&асовой пояс &Position: &Расположение: For&mat: Ф&ормат: Below Ниже Above Выше Before До After После Offset from UTC Сдвиг относительно UTC Abbreviation Сокращение IANA id Custom name Своё имя &Use 12-hour format &Использовать 12 часовой формат Location identifier Идентификатор местоположения &Date &Дата Po&sition: &Расположение: Fo&rmat: Ф&ормат: ISO 8601 Show &year П&оказывать год Show day of wee&k Показывать день &недели Pad d&ay with zero Дополнить &день нулём &Long month and day of week names &Длинные названия месяцев и дней недели Ad&vanced manual format &Продвинутый ручной формат &Customise ... &Настроить ... &Edit custom name ... &Изменить своё имя ... &General &Общие Auto&rotate when the panel is vertical Авто&поворот для вертикальной панели '<b>'HH:mm:ss'</b><br/><font size="-2">'ddd, d MMM yyyy'<br/>'TT'</font>' Input custom time zone name Введите своё имя для часового пояса LXQtWorldClockConfigurationManualFormat World Clock Time Zones Часовые пояса мирового времени <h1>Custom Date/Time Format Syntax</h1> <p>A date pattern is a string of characters, where specific strings of characters are replaced with date and time data from a calendar when formatting or used to generate data for a calendar when parsing.</p> <p>The Date Field Symbol Table below contains the characters used in patterns to show the appropriate formats for a given locale, such as yyyy for the year. Characters may be used multiple times. For example, if y is used for the year, 'yy' might produce '99', whereas 'yyyy' produces '1999'. For most numerical fields, the number of characters specifies the field width. For example, if h is the hour, 'h' might produce '5', but 'hh' produces '05'. For some characters, the count specifies whether an abbreviated or full form should be used, but may have other choices, as given below.</p> <p>Two single quotes represents a literal single quote, either inside or outside single quotes. Text within single quotes is not interpreted in any way (except for two adjacent single quotes). Otherwise all ASCII letter from a to z and A to Z are reserved as syntax characters, and require quoting if they are to represent literal characters. In addition, certain ASCII punctuation characters may become variable in the future (eg ":" being interpreted as the time separator and '/' as a date separator, and replaced by respective locale-sensitive characters in display).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Code</th><th>Meaning</th></tr> <tr><td>d</td><td>the day as number without a leading zero (1 to 31)</td></tr> <tr><td>dd</td><td>the day as number with a leading zero (01 to 31)</td></tr> <tr><td>ddd</td><td>the abbreviated localized day name (e.g. 'Mon' to 'Sun').</td></tr> <tr><td>dddd</td><td>the long localized day name (e.g. 'Monday' to 'Sunday</td></tr> <tr><td>M</td><td>the month as number without a leading zero (1-12)</td></tr> <tr><td>MM</td><td>the month as number with a leading zero (01-12)</td></tr> <tr><td>MMM</td><td>the abbreviated localized month name (e.g. 'Jan' to 'Dec').</td></tr> <tr><td>MMMM</td><td>the long localized month name (e.g. 'January' to 'December').</td></tr> <tr><td>yy</td><td>the year as two digit number (00-99)</td></tr> <tr><td>yyyy</td><td>the year as four digit number</td></tr> <tr><td>h</td><td>the hour without a leading zero (0 to 23 or 1 to 12 if AM/PM display)</td></tr> <tr><td>hh</td><td>the hour with a leading zero (00 to 23 or 01 to 12 if AM/PM display)</td></tr> <tr><td>H</td><td>the hour without a leading zero (0 to 23, even with AM/PM display)</td></tr> <tr><td>HH</td><td>the hour with a leading zero (00 to 23, even with AM/PM display)</td></tr> <tr><td>m</td><td>the minute without a leading zero (0 to 59)</td></tr> <tr><td>mm</td><td>the minute with a leading zero (00 to 59)</td></tr> <tr><td>s</td><td>the second without a leading zero (0 to 59)</td></tr> <tr><td>ss</td><td>the second with a leading zero (00 to 59)</td></tr> <tr><td>z</td><td>the milliseconds without leading zeroes (0 to 999)</td></tr> <tr><td>zzz</td><td>the milliseconds with leading zeroes (000 to 999)</td></tr> <tr><td>AP <i>or</i> A</td><td>use AM/PM display. <b>A/AP</b> will be replaced by either "AM" or "PM".<</td></tr> <tr><td>ap <i>or</i> a</td><td>use am/pm display. <b>a/ap</b> will be replaced by either "am" or "pm".<</td></tr> <tr><td>t</td><td>the timezone (for example "CEST")</td></tr> <tr><td>T</td><td>the offset from UTC</td></tr> <tr><td>TT</td><td>the timezone IANA id</td></tr> <tr><td>TTT</td><td>the timezone abbreviation</td></tr> <tr><td>TTTT</td><td>the timezone short display name</td></tr> <tr><td>TTTTT</td><td>the timezone long display name</td></tr> <tr><td>TTTTTT</td><td>the timezone custom name. You can change it the 'Time zones' tab of the configuration window</td></tr></table> <p><br /><b>Note:</b> Any characters in the pattern that are not in the ranges of ['a'..'z'] and ['A'..'Z'] will be treated as quoted text. For instance, characters like ':', '.', ' ', '#' and '@' will appear in the resulting time text even they are not enclosed within single quotes.The single quote is used to 'escape' letters. Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.</p> <h1>Синтаксис своего формата даты/времени</h1> <p>Шаблон даты — это строка символов, где специальные группы символов заменяются при форматировании на дату и время из календаря или используются для генерации даты при синтаксическом разборе.</p> <p>Таблица символов полей даты ниже содержит символы, используемые в шаблонах для отображения подходящих форматов установленной локали, такой как yyyy для года. Символы могут быть использованы несколько раз. Например, если использован y для года, 'yy' отобразит '99', тогда как 'yyyy' покажет '1999'. Для большинства числовых полей число символов определяет ширину поля. Например, если h это час, 'h' отобразит '5', но 'hh' отобразит '05'. Для некоторых символов, это число определяет должно ли быть использовано сокращение или полная форма, но могут быть и другие варианты, как написано ниже.</p> <p>Две одинарные кавычки отобразят одиночную кавычку, независимо от того внутренние они или внешние. Текст внутри одинарных кавычек никак не интерпретируется (за исключением двух смежных одинарных кавычек). Тогда как все символы ASCII от a до z и A до Z зарезервированы под символы синтаксиса, и требуют заключения в кавычки для отображения их как обычных символов. помимо прочего, некоторые знаки препинания ASCII могут стать переменными в будущем (т.е. &quot;:&quot; быть интерпретированы как разделитель компонентов времени и '/' как разделитель компонентов даты, и заменены при отображении соответствующими символами с учётом локали).<br /></p> <table border="1" width="100%" cellpadding="4" cellspacing="0"> <tr><th width="20%">Код</th><th>Обозначения</th></tr> <tr><td>d</td></td><td>день как число без первого нуля (от 1 до 31)</td></tr> <tr><td>dd</td><td>день как число с первым нулём (от 01 до 31)</td></tr> <tr><td>ddd</p></td><td>сокращённое локализованное название дня (т.е. от 'Пн' до 'Вс').</td></tr> <tr><td>dddd</td><td>длинное локализованное название дня (т.е. от 'Понедельник' до 'Воскресенье'</td></tr> <tr><td>M</td><td>месяц как число без первого нуля (1-12)</td></tr> <tr><td>MM</td><td>месяц как число с первым нулём (01-12)</td></tr> <tr><td>MMM</td><td>сокращённое локализованное название месяца (т.е. от 'Янв' до 'Дек').</td></tr> <tr><td>MMMM</td><td>длинное локализованное название месяца (т.е. от 'Январь' до 'Декабрь').</td></tr> <tr><td>yy</td><td><p>год как двухразрядное число (00-99</td></tr> <tr><td>yyyy</td><td>год как четырёхразрядное число</td></tr> <tr><td>h</td><td>час без нуля впереди (от 0 до 23 или 1 до 12, если отображается AM/PM)</td></tr> <tr><td>hh</td><td>час с нулём впереди (от 00 до 23 или 01 до 12, если отображается AM/PM)</td></tr> <tr><td>H</td><td>час без нуля впереди (от 00 до 23, даже с отображением AM/PM)</td></tr> <tr><td>HH</td><td>час с нулём впереди (от 00 до 23, даже с отображением AM/PM)</td></tr> <tr><td>m</td><td>минута без нуля впереди (от 0 до 59)</td></tr> <tr><td>mm</td><td>минута с нулём впереди (от 00 до 59)</td></tr> <tr><td>s</td><td>секунда без нуля впереди (от 0 до 59)</td></tr> <tr><td>ss</td><td>секунда с нулём впереди (от 00 до 59)</td></tr> <tr><td>z</td><td>миллисекунда без нуля впереди (от 0 до 999)</td></tr> <tr><td>zzz</td><td>миллисекунда с нулём впереди (от 000 до 999)</td></tr> <tr><td>AP <i>или</i> A</td><td>использовать отображение AM/PM. <b>A/AP</b> будет замещено на "AM" или "PM".<</td></tr> <tr><td>ap <i>или</i> a</td><td>использовать отображение am/pm. <b>a/ap</b> будет замещено на "am" или "pm".<</td></tr> <tr><td>t</td><td>часовой пояс (например "CEST")</td></tr> <tr><td>T</td><td>сдвиг времени относительно UTC</td></tr> <tr><td>TT</td><td>id часового пояса IANA</td></tr> <tr><td>TTT</td><td>аббревиатура часового пояса</td></tr> <tr><td>TTTT</td><td>короткое имя часового пояса</td></tr> <tr><td>TTTTT</p></td><td><p>длинное имя часового пояса</td></tr> <tr><td>TTTTTT</td><td>своё имя часового пояса. Вы можете изменить его во вкладке «Часовые пояса» окна настройки</td></tr></table> <p><br /><b>Замечание:</b> Любые символы в шаблоне не из диапазона ['a'..'z'] и ['A'..'Z'] будут обработаны как цитируемый текст. Например, символы как ':', '.', ' ', '#' и '@' появятся в тексте со временем, даже если они не помещены в одинарные кавычки. Одинарные кавычки используются для управляющих символ. Две одинарные кавычки подряд, независимо от того внутри или снаружи цитируемой последовательности, представляет 'реальные' одинарные кавычки.</p> LXQtWorldClockConfigurationTimeZones World Clock Time Zones Часовые пояса мирового времени Time zone Часовой пояс Name Название Comment Коментарий Country Страна UTC UTC Other Другое Local timezone