plasma-framework: vendor as full-fork recipe (path=source, patches baked)
@@ -4,8 +4,13 @@ version = "6.7.2"
|
||||
|
||||
#TODO: Plasma Framework — Plasma applets, containments, shell. Depends on kf6-kio, kf6-kdeclarative, kf6-kpackage.
|
||||
[source]
|
||||
tar = "https://invent.kde.org/frameworks/plasma-framework/-/archive/v6.7.2/plasma-framework-v6.7.2.tar.gz"
|
||||
blake3 = "cc48730db434dd5eeeda847317778ef97b0a0e228b2d07dd93ffd3072452d933"
|
||||
# Vendored local fork (full-fork model): builds from the committed source/
|
||||
# tree (offline, reproducible). source/ = pristine upstream + the patches below
|
||||
# BAKED IN. .patch files kept tracked so a version bump can re-apply them via
|
||||
# sync-recipe-source.sh.
|
||||
# upstream: https://invent.kde.org/frameworks/plasma-framework/-/archive/v6.7.2/plasma-framework-v6.7.2.tar.gz
|
||||
# blake3: cc48730db434dd5eeeda847317778ef97b0a0e228b2d07dd93ffd3072452d933
|
||||
path = "source"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
#clang-format
|
||||
08d4f6335bcd60306b243f4fd53d1ea60a995a06
|
||||
adaffcfc08d7dec7a5ae4b2a34d38494d5fe94c2
|
||||
#clang-tidy
|
||||
3120de70f25378cad1faf0ee4e96ac506006b953
|
||||
# re-run of clang-format
|
||||
30f46ade664d7a9492817befa838297aecc44506
|
||||
@@ -0,0 +1 @@
|
||||
*.svg binary
|
||||
@@ -0,0 +1,29 @@
|
||||
# Ignore the following files
|
||||
*~
|
||||
*.[oa]
|
||||
*.diff
|
||||
*.kate-swp
|
||||
*.kdev4
|
||||
.kdev_include_paths
|
||||
*.kdevelop.pcs
|
||||
*.moc
|
||||
*.moc.cpp
|
||||
*.orig
|
||||
*.user
|
||||
.*.swp
|
||||
.swp.*
|
||||
Doxyfile
|
||||
Makefile
|
||||
avail
|
||||
random_seed
|
||||
/build*/
|
||||
CMakeLists.txt.user*
|
||||
*.unc-backup*
|
||||
.cmake/
|
||||
cmake-build-debug*
|
||||
.idea
|
||||
/.clang-format
|
||||
/compile_commands.json
|
||||
.clangd
|
||||
.cache
|
||||
.qmlls.ini
|
||||
@@ -0,0 +1,12 @@
|
||||
# SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org>
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
include:
|
||||
- project: sysadmin/ci-utilities
|
||||
file:
|
||||
- /gitlab-templates/linux-qt6.yml
|
||||
- /gitlab-templates/freebsd-qt6.yml
|
||||
- /gitlab-templates/xml-lint.yml
|
||||
- /gitlab-templates/yaml-lint.yml
|
||||
- /gitlab-templates/qml-lint.yml
|
||||
- /gitlab-templates/linux-qt6-next.yml
|
||||
@@ -0,0 +1,29 @@
|
||||
Dependencies:
|
||||
- 'on': ['Linux', 'FreeBSD', 'Windows', 'macOS']
|
||||
'require':
|
||||
'frameworks/extra-cmake-modules': '@latest-kf6'
|
||||
'frameworks/karchive': '@latest-kf6'
|
||||
'frameworks/kconfig': '@latest-kf6'
|
||||
'frameworks/kcolorscheme': '@latest-kf6'
|
||||
'frameworks/kcoreaddons': '@latest-kf6'
|
||||
'frameworks/kdbusaddons': '@latest-kf6'
|
||||
'frameworks/kglobalaccel': '@latest-kf6'
|
||||
'frameworks/kguiaddons': '@latest-kf6'
|
||||
'frameworks/ki18n': '@latest-kf6'
|
||||
'frameworks/kiconthemes': '@latest-kf6'
|
||||
'frameworks/kio': '@latest-kf6'
|
||||
'frameworks/knotifications': '@latest-kf6'
|
||||
'frameworks/kpackage': '@latest-kf6'
|
||||
# kparts for examples
|
||||
'frameworks/kparts': '@latest-kf6'
|
||||
'frameworks/kwidgetsaddons': '@latest-kf6'
|
||||
'frameworks/kwindowsystem': '@latest-kf6'
|
||||
'frameworks/kirigami': '@latest-kf6'
|
||||
'frameworks/ksvg': '@latest-kf6'
|
||||
'plasma/plasma-activities': '@same'
|
||||
|
||||
Options:
|
||||
cppcheck-ignore-files: ['templates/']
|
||||
require-passing-tests-on: ['@all']
|
||||
cmake-options: -DBUILD_EXAMPLES=ON
|
||||
enable-lsan: True
|
||||
@@ -0,0 +1 @@
|
||||
plasma-framework-v6.7.2.tar.gz
|
||||
@@ -0,0 +1,215 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
set(PROJECT_VERSION "6.7.2")
|
||||
project(libplasma VERSION ${PROJECT_VERSION})
|
||||
|
||||
set(QT_MIN_VERSION "6.10.0")
|
||||
set(PROJECT_DEP_VERSION "6.7.0")
|
||||
set(KF6_MIN_VERSION "6.26.0")
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
find_package(ECM ${KF6_MIN_VERSION} REQUIRED NO_MODULE)
|
||||
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} )
|
||||
|
||||
include(FeatureSummary)
|
||||
include(KDEInstallDirs)
|
||||
include(KDECMakeSettings)
|
||||
include(KDEGitCommitHooks)
|
||||
include(KDECompilerSettings NO_POLICY_SCOPE)
|
||||
include(KDEClangFormat)
|
||||
|
||||
include(ECMGenerateExportHeader)
|
||||
include(ECMGenerateHeaders)
|
||||
include(CMakePackageConfigHelpers)
|
||||
include(ECMSetupVersion)
|
||||
include(ECMQtDeclareLoggingCategory)
|
||||
include(KDEPackageAppTemplates)
|
||||
include(ECMGenerateQmlTypes)
|
||||
include(ECMMarkNonGuiExecutable)
|
||||
include(ECMDeprecationSettings)
|
||||
include(ECMQmlModule)
|
||||
include(ECMGenerateQDoc)
|
||||
include(ECMFindQmlModule)
|
||||
|
||||
ecm_setup_version(PROJECT
|
||||
VARIABLE_PREFIX PLASMA
|
||||
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/plasma_version.h"
|
||||
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/PlasmaConfigVersion.cmake"
|
||||
SOVERSION 7)
|
||||
|
||||
################# now find all used packages #################
|
||||
|
||||
find_package(Qt6 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Quick Gui Qml Svg QuickControls2 DBus)
|
||||
|
||||
if (Qt6Gui_VERSION VERSION_GREATER_EQUAL "6.10.0")
|
||||
find_package(Qt6GuiPrivate ${QT_MIN_VERSION} REQUIRED NO_MODULE)
|
||||
endif()
|
||||
|
||||
find_package(KF6 ${KF6_MIN_VERSION} REQUIRED
|
||||
COMPONENTS
|
||||
Config
|
||||
CoreAddons
|
||||
GlobalAccel
|
||||
GuiAddons
|
||||
I18n
|
||||
IconThemes
|
||||
KIO
|
||||
WindowSystem
|
||||
Notifications
|
||||
Package
|
||||
KirigamiPlatform
|
||||
Svg
|
||||
ColorScheme
|
||||
)
|
||||
find_package(PlasmaActivities REQUIRED ${PROJECT_DEP_VERSION})
|
||||
|
||||
# Wayland features
|
||||
find_package(PlasmaWaylandProtocols 1.10.0 REQUIRED)
|
||||
find_package(Qt6WaylandClient ${QT_MIN_VERSION} REQUIRED CONFIG)
|
||||
find_package(Wayland 1.9 REQUIRED Client)
|
||||
find_package(WaylandProtocols 1.46 REQUIRED)
|
||||
|
||||
option(WITHOUT_X11 "Build without X11 support (skips finding X11)." OFF)
|
||||
if(NOT WITHOUT_X11)
|
||||
#optional features
|
||||
find_package(X11 MODULE)
|
||||
set_package_properties(X11 PROPERTIES DESCRIPTION "X11 libraries"
|
||||
URL "https://www.x.org/"
|
||||
TYPE OPTIONAL
|
||||
)
|
||||
find_package(XCB MODULE COMPONENTS XCB COMPOSITE DAMAGE XFIXES RENDER)
|
||||
set_package_properties(XCB PROPERTIES DESCRIPTION "X protocol C-language Binding"
|
||||
URL "https://xcb.freedesktop.org/"
|
||||
TYPE OPTIONAL
|
||||
)
|
||||
if(X11_FOUND AND XCB_XCB_FOUND)
|
||||
set(HAVE_X11 1)
|
||||
#X11_Xrender discovery is done by FindX11
|
||||
#add_feature_info("X Rendering Extension (libXrender)" X11_Xrender_FOUND "Support for compositing, rendering operations, and alpha-blending. STRONGLY RECOMMENDED")
|
||||
else()
|
||||
set(HAVE_X11 0)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
find_package(OpenGL)
|
||||
set_package_properties(OpenGL PROPERTIES DESCRIPTION "The OpenGL libraries"
|
||||
URL "https://www.opengl.org/"
|
||||
TYPE OPTIONAL
|
||||
)
|
||||
|
||||
find_package(EGL)
|
||||
set_package_properties(EGL PROPERTIES
|
||||
PURPOSE "Fallback when OpenGL not available because of missing GLVND"
|
||||
TYPE OPTIONAL
|
||||
)
|
||||
|
||||
get_target_property(QtGui_Enabled_Features Qt6::Gui QT_ENABLED_PUBLIC_FEATURES)
|
||||
if(OpenGL_GLX_FOUND AND HAVE_X11 AND (QtGui_Enabled_Features MATCHES "opengl"))
|
||||
add_feature_info(GLX OpenGL_GLX_FOUND "OpenGL GLX libraries.")
|
||||
set(HAVE_GLX 1)
|
||||
else()
|
||||
set(HAVE_GLX 0)
|
||||
endif()
|
||||
|
||||
# OpenGL_EGL_FOUND is defined by FindOpenGL
|
||||
if(TARGET OpenGL::EGL)
|
||||
add_feature_info(EGL OpenGL_EGL_FOUND
|
||||
"A platform-agnostic mechanism for creating rendering surfaces for use with other graphics libraries, such as OpenGL|ES and OpenVG.")
|
||||
set(HAVE_EGL 1)
|
||||
else()
|
||||
set(HAVE_EGL 0)
|
||||
message(STATUS "OpenGL::EGL is not available")
|
||||
endif()
|
||||
|
||||
ecm_find_qmlmodule(Qt5Compat.GraphicalEffects REQUIRED)
|
||||
|
||||
ecm_find_qmlmodule(org.kde.config REQUIRED)
|
||||
ecm_find_qmlmodule(org.kde.kirigami REQUIRED)
|
||||
ecm_find_qmlmodule(org.kde.ksvg REQUIRED)
|
||||
|
||||
#########################################################################
|
||||
|
||||
ecm_set_disabled_deprecation_versions(
|
||||
QT 6.11.0
|
||||
KF 6.23.0
|
||||
)
|
||||
|
||||
#add_definitions(-Wno-deprecated)
|
||||
|
||||
include(PlasmaMacros.cmake)
|
||||
|
||||
#########################################################################
|
||||
|
||||
|
||||
option(BUILD_EXAMPLES "Build and install Plasma examples." OFF)
|
||||
option(BUILD_COVERAGE "Build Plasma Frameworks with gcov support" OFF)
|
||||
|
||||
if (BUILD_EXAMPLES)
|
||||
find_package(KF6DBusAddons ${KF6_MIN_VERSION})
|
||||
endif()
|
||||
|
||||
if(BUILD_COVERAGE)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov")
|
||||
endif()
|
||||
|
||||
# make plasma_version.h available
|
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
################# list the subdirectories #################
|
||||
add_definitions(-DTRANSLATION_DOMAIN=\"libplasma6\")
|
||||
add_definitions(
|
||||
-DQT_NO_CONTEXTLESS_CONNECT
|
||||
)
|
||||
ki18n_install(po)
|
||||
add_subdirectory(src)
|
||||
|
||||
if (BUILD_EXAMPLES)
|
||||
add_subdirectory(examples)
|
||||
endif()
|
||||
|
||||
if (BUILD_TESTING)
|
||||
add_subdirectory(autotests)
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
add_subdirectory(templates)
|
||||
|
||||
################ create PlasmaConfig.cmake and install it ###########################
|
||||
|
||||
# create a Config.cmake and a ConfigVersion.cmake file and install them
|
||||
|
||||
set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/Plasma")
|
||||
|
||||
configure_package_config_file(
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/PlasmaConfig.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/PlasmaConfig.cmake"
|
||||
INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
|
||||
PATH_VARS CMAKE_INSTALL_PREFIX
|
||||
)
|
||||
|
||||
install(FILES
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/PlasmaConfig.cmake"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/PlasmaConfigVersion.cmake"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/PlasmaMacros.cmake"
|
||||
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
|
||||
COMPONENT Devel
|
||||
)
|
||||
|
||||
install(EXPORT PlasmaTargets
|
||||
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
|
||||
FILE PlasmaTargets.cmake
|
||||
NAMESPACE Plasma::
|
||||
COMPONENT Devel)
|
||||
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/plasma_version.h
|
||||
DESTINATION ${KDE_INSTALL_INCLUDEDIR}/Plasma COMPONENT Devel )
|
||||
|
||||
include(ECMFeatureSummary)
|
||||
ecm_feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||
|
||||
# add clang-format target for all our source files
|
||||
file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h)
|
||||
kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
|
||||
kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
|
||||
@@ -0,0 +1,4 @@
|
||||
#! /bin/sh
|
||||
#This file outputs in a separate line each file with a .desktop syntax
|
||||
#that needs to be translated but has a non .desktop extension
|
||||
find -name \*.kdevtemplate -print
|
||||
@@ -0,0 +1,26 @@
|
||||
Copyright (c) <year> <owner>. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -0,0 +1,121 @@
|
||||
Creative Commons Legal Code
|
||||
|
||||
CC0 1.0 Universal
|
||||
|
||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||
HEREUNDER.
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically confer
|
||||
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||
authorship and/or a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work for
|
||||
the purpose of contributing to a commons of creative, cultural and
|
||||
scientific works ("Commons") that the public can reliably and without fear
|
||||
of later claims of infringement build upon, modify, incorporate in other
|
||||
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||
and for any purposes, including without limitation commercial purposes.
|
||||
These owners may contribute to the Commons to promote the ideal of a free
|
||||
culture and the further production of creative, cultural and scientific
|
||||
works, or to gain reputation or greater distribution for their Work in
|
||||
part through the use and efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any
|
||||
expectation of additional consideration or compensation, the person
|
||||
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||
protected by copyright and related or neighboring rights ("Copyright and
|
||||
Related Rights"). Copyright and Related Rights include, but are not
|
||||
limited to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display,
|
||||
communicate, and translate a Work;
|
||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||
iii. publicity and privacy rights pertaining to a person's image or
|
||||
likeness depicted in a Work;
|
||||
iv. rights protecting against unfair competition in regards to a Work,
|
||||
subject to the limitations in paragraph 4(a), below;
|
||||
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||
in a Work;
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||
European Parliament and of the Council of 11 March 1996 on the legal
|
||||
protection of databases, and under any national implementation
|
||||
thereof, including any amended or successor version of such
|
||||
directive); and
|
||||
vii. other similar, equivalent or corresponding rights throughout the
|
||||
world based on applicable law or treaty, and any national
|
||||
implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||
of action, whether now known or unknown (including existing as well as
|
||||
future claims and causes of action), in the Work (i) in all territories
|
||||
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||
treaty (including future time extensions), (iii) in any current or future
|
||||
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||
including without limitation commercial, advertising or promotional
|
||||
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||
member of the public at large and to the detriment of Affirmer's heirs and
|
||||
successors, fully intending that such Waiver shall not be subject to
|
||||
revocation, rescission, cancellation, termination, or any other legal or
|
||||
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||
as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||
be judged legally invalid or ineffective under applicable law, then the
|
||||
Waiver shall be preserved to the maximum extent permitted taking into
|
||||
account Affirmer's express Statement of Purpose. In addition, to the
|
||||
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||
maximum duration provided by applicable law or treaty (including future
|
||||
time extensions), (iii) in any current or future medium and for any number
|
||||
of copies, and (iv) for any purpose whatsoever, including without
|
||||
limitation commercial, advertising or promotional purposes (the
|
||||
"License"). The License shall be deemed effective as of the date CC0 was
|
||||
applied by Affirmer to the Work. Should any part of the License for any
|
||||
reason be judged legally invalid or ineffective under applicable law, such
|
||||
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||
of the License, and in such case Affirmer hereby affirms that he or she
|
||||
will not (i) exercise any of his or her remaining Copyright and Related
|
||||
Rights in the Work or (ii) assert any associated claims and causes of
|
||||
action with respect to the Work, in either case contrary to Affirmer's
|
||||
express Statement of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||
surrendered, licensed or otherwise affected by this document.
|
||||
b. Affirmer offers the Work as-is and makes no representations or
|
||||
warranties of any kind concerning the Work, express, implied,
|
||||
statutory or otherwise, including without limitation warranties of
|
||||
title, merchantability, fitness for a particular purpose, non
|
||||
infringement, or the absence of latent or other defects, accuracy, or
|
||||
the present or absence of errors, whether or not discoverable, all to
|
||||
the greatest extent permissible under applicable law.
|
||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||
that may apply to the Work or any use thereof, including without
|
||||
limitation any person's Copyright and Related Rights in the Work.
|
||||
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||
consents, permissions or other rights required for any use of the
|
||||
Work.
|
||||
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||
party to this document and has no duty or obligation with respect to
|
||||
this CC0 or use of the Work.
|
||||
@@ -0,0 +1,319 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||
document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your freedom to share
|
||||
and change it. By contrast, the GNU General Public License is intended to
|
||||
guarantee your freedom to share and change free software--to make sure the
|
||||
software is free for all its users. This General Public License applies to
|
||||
most of the Free Software Foundation's software and to any other program whose
|
||||
authors commit to using it. (Some other Free Software Foundation software
|
||||
is covered by the GNU Lesser General Public License instead.) You can apply
|
||||
it to your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not price. Our
|
||||
General Public Licenses are designed to make sure that you have the freedom
|
||||
to distribute copies of free software (and charge for this service if you
|
||||
wish), that you receive source code or can get it if you want it, that you
|
||||
can change the software or use pieces of it in new free programs; and that
|
||||
you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid anyone to
|
||||
deny you these rights or to ask you to surrender the rights. These restrictions
|
||||
translate to certain responsibilities for you if you distribute copies of
|
||||
the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether gratis or
|
||||
for a fee, you must give the recipients all the rights that you have. You
|
||||
must make sure that they, too, receive or can get the source code. And you
|
||||
must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and (2)
|
||||
offer you this license which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain that
|
||||
everyone understands that there is no warranty for this free software. If
|
||||
the software is modified by someone else and passed on, we want its recipients
|
||||
to know that what they have is not the original, so that any problems introduced
|
||||
by others will not reflect on the original authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software patents. We
|
||||
wish to avoid the danger that redistributors of a free program will individually
|
||||
obtain patent licenses, in effect making the program proprietary. To prevent
|
||||
this, we have made it clear that any patent must be licensed for everyone's
|
||||
free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification
|
||||
follow.
|
||||
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains a notice
|
||||
placed by the copyright holder saying it may be distributed under the terms
|
||||
of this General Public License. The "Program", below, refers to any such program
|
||||
or work, and a "work based on the Program" means either the Program or any
|
||||
derivative work under copyright law: that is to say, a work containing the
|
||||
Program or a portion of it, either verbatim or with modifications and/or translated
|
||||
into another language. (Hereinafter, translation is included without limitation
|
||||
in the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not covered
|
||||
by this License; they are outside its scope. The act of running the Program
|
||||
is not restricted, and the output from the Program is covered only if its
|
||||
contents constitute a work based on the Program (independent of having been
|
||||
made by running the Program). Whether that is true depends on what the Program
|
||||
does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's source code
|
||||
as you receive it, in any medium, provided that you conspicuously and appropriately
|
||||
publish on each copy an appropriate copyright notice and disclaimer of warranty;
|
||||
keep intact all the notices that refer to this License and to the absence
|
||||
of any warranty; and give any other recipients of the Program a copy of this
|
||||
License along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and you
|
||||
may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion of it,
|
||||
thus forming a work based on the Program, and copy and distribute such modifications
|
||||
or work under the terms of Section 1 above, provided that you also meet all
|
||||
of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices stating that
|
||||
you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in whole or
|
||||
in part contains or is derived from the Program or any part thereof, to be
|
||||
licensed as a whole at no charge to all third parties under the terms of this
|
||||
License.
|
||||
|
||||
c) If the modified program normally reads commands interactively when run,
|
||||
you must cause it, when started running for such interactive use in the most
|
||||
ordinary way, to print or display an announcement including an appropriate
|
||||
copyright notice and a notice that there is no warranty (or else, saying that
|
||||
you provide a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this License.
|
||||
(Exception: if the Program itself is interactive but does not normally print
|
||||
such an announcement, your work based on the Program is not required to print
|
||||
an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If identifiable
|
||||
sections of that work are not derived from the Program, and can be reasonably
|
||||
considered independent and separate works in themselves, then this License,
|
||||
and its terms, do not apply to those sections when you distribute them as
|
||||
separate works. But when you distribute the same sections as part of a whole
|
||||
which is a work based on the Program, the distribution of the whole must be
|
||||
on the terms of this License, whose permissions for other licensees extend
|
||||
to the entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest your
|
||||
rights to work written entirely by you; rather, the intent is to exercise
|
||||
the right to control the distribution of derivative or collective works based
|
||||
on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program with
|
||||
the Program (or with a work based on the Program) on a volume of a storage
|
||||
or distribution medium does not bring the other work under the scope of this
|
||||
License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it, under Section
|
||||
2) in object code or executable form under the terms of Sections 1 and 2 above
|
||||
provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable source code,
|
||||
which must be distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three years, to give
|
||||
any third party, for a charge no more than your cost of physically performing
|
||||
source distribution, a complete machine-readable copy of the corresponding
|
||||
source code, to be distributed under the terms of Sections 1 and 2 above on
|
||||
a medium customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer to distribute
|
||||
corresponding source code. (This alternative is allowed only for noncommercial
|
||||
distribution and only if you received the program in object code or executable
|
||||
form with such an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for making
|
||||
modifications to it. For an executable work, complete source code means all
|
||||
the source code for all modules it contains, plus any associated interface
|
||||
definition files, plus the scripts used to control compilation and installation
|
||||
of the executable. However, as a special exception, the source code distributed
|
||||
need not include anything that is normally distributed (in either source or
|
||||
binary form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component itself
|
||||
accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering access to
|
||||
copy from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place counts as distribution of the source code,
|
||||
even though third parties are not compelled to copy the source along with
|
||||
the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program except
|
||||
as expressly provided under this License. Any attempt otherwise to copy, modify,
|
||||
sublicense or distribute the Program is void, and will automatically terminate
|
||||
your rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses terminated
|
||||
so long as such parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not signed
|
||||
it. However, nothing else grants you permission to modify or distribute the
|
||||
Program or its derivative works. These actions are prohibited by law if you
|
||||
do not accept this License. Therefore, by modifying or distributing the Program
|
||||
(or any work based on the Program), you indicate your acceptance of this License
|
||||
to do so, and all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the Program),
|
||||
the recipient automatically receives a license from the original licensor
|
||||
to copy, distribute or modify the Program subject to these terms and conditions.
|
||||
You may not impose any further restrictions on the recipients' exercise of
|
||||
the rights granted herein. You are not responsible for enforcing compliance
|
||||
by third parties to this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent infringement
|
||||
or for any other reason (not limited to patent issues), conditions are imposed
|
||||
on you (whether by court order, agreement or otherwise) that contradict the
|
||||
conditions of this License, they do not excuse you from the conditions of
|
||||
this License. If you cannot distribute so as to satisfy simultaneously your
|
||||
obligations under this License and any other pertinent obligations, then as
|
||||
a consequence you may not distribute the Program at all. For example, if a
|
||||
patent license would not permit royalty-free redistribution of the Program
|
||||
by all those who receive copies directly or indirectly through you, then the
|
||||
only way you could satisfy both it and this License would be to refrain entirely
|
||||
from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply and
|
||||
the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any patents
|
||||
or other property right claims or to contest validity of any such claims;
|
||||
this section has the sole purpose of protecting the integrity of the free
|
||||
software distribution system, which is implemented by public license practices.
|
||||
Many people have made generous contributions to the wide range of software
|
||||
distributed through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing to
|
||||
distribute software through any other system and a licensee cannot impose
|
||||
that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to be a
|
||||
consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in certain
|
||||
countries either by patents or by copyrighted interfaces, the original copyright
|
||||
holder who places the Program under this License may add an explicit geographical
|
||||
distribution limitation excluding those countries, so that distribution is
|
||||
permitted only in or among countries not thus excluded. In such case, this
|
||||
License incorporates the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions of
|
||||
the General Public License from time to time. Such new versions will be similar
|
||||
in spirit to the present version, but may differ in detail to address new
|
||||
problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program specifies
|
||||
a version number of this License which applies to it and "any later version",
|
||||
you have the option of following the terms and conditions either of that version
|
||||
or of any later version published by the Free Software Foundation. If the
|
||||
Program does not specify a version number of this License, you may choose
|
||||
any version ever published by the Free Software Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free programs
|
||||
whose distribution conditions are different, write to the author to ask for
|
||||
permission. For software which is copyrighted by the Free Software Foundation,
|
||||
write to the Free Software Foundation; we sometimes make exceptions for this.
|
||||
Our decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing and reuse
|
||||
of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
|
||||
THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
|
||||
STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
|
||||
"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
|
||||
OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
|
||||
OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
|
||||
OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
|
||||
OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
|
||||
HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest possible
|
||||
use to the public, the best way to achieve this is to make it free software
|
||||
which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest to attach
|
||||
them to the start of each source file to most effectively convey the exclusion
|
||||
of warranty; and each file should have at least the "copyright" line and a
|
||||
pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and an idea of what it does.>
|
||||
|
||||
Copyright (C)< yyyy> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
|
||||
Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this when
|
||||
it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
|
||||
with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software,
|
||||
and you are welcome to redistribute it under certain conditions; type `show
|
||||
c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may be
|
||||
called something other than `show w' and `show c'; they could even be mouse-clicks
|
||||
or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary. Here
|
||||
is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision'
|
||||
(which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon >, 1 April 1989 Ty Coon, President of Vice This General
|
||||
Public License does not permit incorporating your program into proprietary
|
||||
programs. If your program is a subroutine library, you may consider it more
|
||||
useful to permit linking proprietary applications with the library. If this
|
||||
is what you want to do, use the GNU Lesser General Public License instead
|
||||
of this License.
|
||||
@@ -0,0 +1,319 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||
document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your freedom to share
|
||||
and change it. By contrast, the GNU General Public License is intended to
|
||||
guarantee your freedom to share and change free software--to make sure the
|
||||
software is free for all its users. This General Public License applies to
|
||||
most of the Free Software Foundation's software and to any other program whose
|
||||
authors commit to using it. (Some other Free Software Foundation software
|
||||
is covered by the GNU Lesser General Public License instead.) You can apply
|
||||
it to your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not price. Our
|
||||
General Public Licenses are designed to make sure that you have the freedom
|
||||
to distribute copies of free software (and charge for this service if you
|
||||
wish), that you receive source code or can get it if you want it, that you
|
||||
can change the software or use pieces of it in new free programs; and that
|
||||
you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid anyone to
|
||||
deny you these rights or to ask you to surrender the rights. These restrictions
|
||||
translate to certain responsibilities for you if you distribute copies of
|
||||
the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether gratis or
|
||||
for a fee, you must give the recipients all the rights that you have. You
|
||||
must make sure that they, too, receive or can get the source code. And you
|
||||
must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and (2)
|
||||
offer you this license which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain that
|
||||
everyone understands that there is no warranty for this free software. If
|
||||
the software is modified by someone else and passed on, we want its recipients
|
||||
to know that what they have is not the original, so that any problems introduced
|
||||
by others will not reflect on the original authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software patents. We
|
||||
wish to avoid the danger that redistributors of a free program will individually
|
||||
obtain patent licenses, in effect making the program proprietary. To prevent
|
||||
this, we have made it clear that any patent must be licensed for everyone's
|
||||
free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification
|
||||
follow.
|
||||
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains a notice
|
||||
placed by the copyright holder saying it may be distributed under the terms
|
||||
of this General Public License. The "Program", below, refers to any such program
|
||||
or work, and a "work based on the Program" means either the Program or any
|
||||
derivative work under copyright law: that is to say, a work containing the
|
||||
Program or a portion of it, either verbatim or with modifications and/or translated
|
||||
into another language. (Hereinafter, translation is included without limitation
|
||||
in the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not covered
|
||||
by this License; they are outside its scope. The act of running the Program
|
||||
is not restricted, and the output from the Program is covered only if its
|
||||
contents constitute a work based on the Program (independent of having been
|
||||
made by running the Program). Whether that is true depends on what the Program
|
||||
does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's source code
|
||||
as you receive it, in any medium, provided that you conspicuously and appropriately
|
||||
publish on each copy an appropriate copyright notice and disclaimer of warranty;
|
||||
keep intact all the notices that refer to this License and to the absence
|
||||
of any warranty; and give any other recipients of the Program a copy of this
|
||||
License along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and you
|
||||
may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion of it,
|
||||
thus forming a work based on the Program, and copy and distribute such modifications
|
||||
or work under the terms of Section 1 above, provided that you also meet all
|
||||
of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices stating that
|
||||
you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in whole or
|
||||
in part contains or is derived from the Program or any part thereof, to be
|
||||
licensed as a whole at no charge to all third parties under the terms of this
|
||||
License.
|
||||
|
||||
c) If the modified program normally reads commands interactively when run,
|
||||
you must cause it, when started running for such interactive use in the most
|
||||
ordinary way, to print or display an announcement including an appropriate
|
||||
copyright notice and a notice that there is no warranty (or else, saying that
|
||||
you provide a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this License.
|
||||
(Exception: if the Program itself is interactive but does not normally print
|
||||
such an announcement, your work based on the Program is not required to print
|
||||
an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If identifiable
|
||||
sections of that work are not derived from the Program, and can be reasonably
|
||||
considered independent and separate works in themselves, then this License,
|
||||
and its terms, do not apply to those sections when you distribute them as
|
||||
separate works. But when you distribute the same sections as part of a whole
|
||||
which is a work based on the Program, the distribution of the whole must be
|
||||
on the terms of this License, whose permissions for other licensees extend
|
||||
to the entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest your
|
||||
rights to work written entirely by you; rather, the intent is to exercise
|
||||
the right to control the distribution of derivative or collective works based
|
||||
on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program with
|
||||
the Program (or with a work based on the Program) on a volume of a storage
|
||||
or distribution medium does not bring the other work under the scope of this
|
||||
License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it, under Section
|
||||
2) in object code or executable form under the terms of Sections 1 and 2 above
|
||||
provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable source code,
|
||||
which must be distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three years, to give
|
||||
any third party, for a charge no more than your cost of physically performing
|
||||
source distribution, a complete machine-readable copy of the corresponding
|
||||
source code, to be distributed under the terms of Sections 1 and 2 above on
|
||||
a medium customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer to distribute
|
||||
corresponding source code. (This alternative is allowed only for noncommercial
|
||||
distribution and only if you received the program in object code or executable
|
||||
form with such an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for making
|
||||
modifications to it. For an executable work, complete source code means all
|
||||
the source code for all modules it contains, plus any associated interface
|
||||
definition files, plus the scripts used to control compilation and installation
|
||||
of the executable. However, as a special exception, the source code distributed
|
||||
need not include anything that is normally distributed (in either source or
|
||||
binary form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component itself
|
||||
accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering access to
|
||||
copy from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place counts as distribution of the source code,
|
||||
even though third parties are not compelled to copy the source along with
|
||||
the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program except
|
||||
as expressly provided under this License. Any attempt otherwise to copy, modify,
|
||||
sublicense or distribute the Program is void, and will automatically terminate
|
||||
your rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses terminated
|
||||
so long as such parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not signed
|
||||
it. However, nothing else grants you permission to modify or distribute the
|
||||
Program or its derivative works. These actions are prohibited by law if you
|
||||
do not accept this License. Therefore, by modifying or distributing the Program
|
||||
(or any work based on the Program), you indicate your acceptance of this License
|
||||
to do so, and all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the Program),
|
||||
the recipient automatically receives a license from the original licensor
|
||||
to copy, distribute or modify the Program subject to these terms and conditions.
|
||||
You may not impose any further restrictions on the recipients' exercise of
|
||||
the rights granted herein. You are not responsible for enforcing compliance
|
||||
by third parties to this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent infringement
|
||||
or for any other reason (not limited to patent issues), conditions are imposed
|
||||
on you (whether by court order, agreement or otherwise) that contradict the
|
||||
conditions of this License, they do not excuse you from the conditions of
|
||||
this License. If you cannot distribute so as to satisfy simultaneously your
|
||||
obligations under this License and any other pertinent obligations, then as
|
||||
a consequence you may not distribute the Program at all. For example, if a
|
||||
patent license would not permit royalty-free redistribution of the Program
|
||||
by all those who receive copies directly or indirectly through you, then the
|
||||
only way you could satisfy both it and this License would be to refrain entirely
|
||||
from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply and
|
||||
the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any patents
|
||||
or other property right claims or to contest validity of any such claims;
|
||||
this section has the sole purpose of protecting the integrity of the free
|
||||
software distribution system, which is implemented by public license practices.
|
||||
Many people have made generous contributions to the wide range of software
|
||||
distributed through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing to
|
||||
distribute software through any other system and a licensee cannot impose
|
||||
that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to be a
|
||||
consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in certain
|
||||
countries either by patents or by copyrighted interfaces, the original copyright
|
||||
holder who places the Program under this License may add an explicit geographical
|
||||
distribution limitation excluding those countries, so that distribution is
|
||||
permitted only in or among countries not thus excluded. In such case, this
|
||||
License incorporates the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions of
|
||||
the General Public License from time to time. Such new versions will be similar
|
||||
in spirit to the present version, but may differ in detail to address new
|
||||
problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program specifies
|
||||
a version number of this License which applies to it and "any later version",
|
||||
you have the option of following the terms and conditions either of that version
|
||||
or of any later version published by the Free Software Foundation. If the
|
||||
Program does not specify a version number of this License, you may choose
|
||||
any version ever published by the Free Software Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free programs
|
||||
whose distribution conditions are different, write to the author to ask for
|
||||
permission. For software which is copyrighted by the Free Software Foundation,
|
||||
write to the Free Software Foundation; we sometimes make exceptions for this.
|
||||
Our decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing and reuse
|
||||
of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
|
||||
THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
|
||||
STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
|
||||
"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
|
||||
OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
|
||||
OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
|
||||
OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
|
||||
OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
|
||||
HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest possible
|
||||
use to the public, the best way to achieve this is to make it free software
|
||||
which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest to attach
|
||||
them to the start of each source file to most effectively convey the exclusion
|
||||
of warranty; and each file should have at least the "copyright" line and a
|
||||
pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and an idea of what it does.>
|
||||
|
||||
Copyright (C) <yyyy> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
|
||||
Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this when
|
||||
it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
|
||||
with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software,
|
||||
and you are welcome to redistribute it under certain conditions; type `show
|
||||
c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may be
|
||||
called something other than `show w' and `show c'; they could even be mouse-clicks
|
||||
or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary. Here
|
||||
is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision'
|
||||
(which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General
|
||||
Public License does not permit incorporating your program into proprietary
|
||||
programs. If your program is a subroutine library, you may consider it more
|
||||
useful to permit linking proprietary applications with the library. If this
|
||||
is what you want to do, use the GNU Lesser General Public License instead
|
||||
of this License.
|
||||
@@ -0,0 +1,625 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||
document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for software and
|
||||
other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed to take
|
||||
away your freedom to share and change the works. By contrast, the GNU General
|
||||
Public License is intended to guarantee your freedom to share and change all
|
||||
versions of a program--to make sure it remains free software for all its users.
|
||||
We, the Free Software Foundation, use the GNU General Public License for most
|
||||
of our software; it applies also to any other work released this way by its
|
||||
authors. You can apply it to your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not price. Our
|
||||
General Public Licenses are designed to make sure that you have the freedom
|
||||
to distribute copies of free software (and charge for them if you wish), that
|
||||
you receive source code or can get it if you want it, that you can change
|
||||
the software or use pieces of it in new free programs, and that you know you
|
||||
can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you these rights
|
||||
or asking you to surrender the rights. Therefore, you have certain responsibilities
|
||||
if you distribute copies of the software, or if you modify it: responsibilities
|
||||
to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether gratis or
|
||||
for a fee, you must pass on to the recipients the same freedoms that you received.
|
||||
You must make sure that they, too, receive or can get the source code. And
|
||||
you must show them these terms so they know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps: (1) assert
|
||||
copyright on the software, and (2) offer you this License giving you legal
|
||||
permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains that
|
||||
there is no warranty for this free software. For both users' and authors'
|
||||
sake, the GPL requires that modified versions be marked as changed, so that
|
||||
their problems will not be attributed erroneously to authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run modified
|
||||
versions of the software inside them, although the manufacturer can do so.
|
||||
This is fundamentally incompatible with the aim of protecting users' freedom
|
||||
to change the software. The systematic pattern of such abuse occurs in the
|
||||
area of products for individuals to use, which is precisely where it is most
|
||||
unacceptable. Therefore, we have designed this version of the GPL to prohibit
|
||||
the practice for those products. If such problems arise substantially in other
|
||||
domains, we stand ready to extend this provision to those domains in future
|
||||
versions of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents. States
|
||||
should not allow patents to restrict development and use of software on general-purpose
|
||||
computers, but in those that do, we wish to avoid the special danger that
|
||||
patents applied to a free program could make it effectively proprietary. To
|
||||
prevent this, the GPL assures that patents cannot be used to render the program
|
||||
non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification
|
||||
follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of works,
|
||||
such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this License.
|
||||
Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals
|
||||
or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work in
|
||||
a fashion requiring copyright permission, other than the making of an exact
|
||||
copy. The resulting work is called a "modified version" of the earlier work
|
||||
or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based on the
|
||||
Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without permission,
|
||||
would make you directly or secondarily liable for infringement under applicable
|
||||
copyright law, except executing it on a computer or modifying a private copy.
|
||||
Propagation includes copying, distribution (with or without modification),
|
||||
making available to the public, and in some countries other activities as
|
||||
well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other parties
|
||||
to make or receive copies. Mere interaction with a user through a computer
|
||||
network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices" to the
|
||||
extent that it includes a convenient and prominently visible feature that
|
||||
(1) displays an appropriate copyright notice, and (2) tells the user that
|
||||
there is no warranty for the work (except to the extent that warranties are
|
||||
provided), that licensees may convey the work under this License, and how
|
||||
to view a copy of this License. If the interface presents a list of user commands
|
||||
or options, such as a menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work for making
|
||||
modifications to it. "Object code" means any non-source form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official standard
|
||||
defined by a recognized standards body, or, in the case of interfaces specified
|
||||
for a particular programming language, one that is widely used among developers
|
||||
working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other than
|
||||
the work as a whole, that (a) is included in the normal form of packaging
|
||||
a Major Component, but which is not part of that Major Component, and (b)
|
||||
serves only to enable use of the work with that Major Component, or to implement
|
||||
a Standard Interface for which an implementation is available to the public
|
||||
in source code form. A "Major Component", in this context, means a major essential
|
||||
component (kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to produce
|
||||
the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all the source
|
||||
code needed to generate, install, and (for an executable work) run the object
|
||||
code and to modify the work, including scripts to control those activities.
|
||||
However, it does not include the work's System Libraries, or general-purpose
|
||||
tools or generally available free programs which are used unmodified in performing
|
||||
those activities but which are not part of the work. For example, Corresponding
|
||||
Source includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically linked
|
||||
subprograms that the work is specifically designed to require, such as by
|
||||
intimate data communication or control flow between those subprograms and
|
||||
other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users can regenerate
|
||||
automatically from other parts of the Corresponding Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of copyright
|
||||
on the Program, and are irrevocable provided the stated conditions are met.
|
||||
This License explicitly affirms your unlimited permission to run the unmodified
|
||||
Program. The output from running a covered work is covered by this License
|
||||
only if the output, given its content, constitutes a covered work. This License
|
||||
acknowledges your rights of fair use or other equivalent, as provided by copyright
|
||||
law.
|
||||
|
||||
You may make, run and propagate covered works that you do not convey, without
|
||||
conditions so long as your license otherwise remains in force. You may convey
|
||||
covered works to others for the sole purpose of having them make modifications
|
||||
exclusively for you, or provide you with facilities for running those works,
|
||||
provided that you comply with the terms of this License in conveying all material
|
||||
for which you do not control copyright. Those thus making or running the covered
|
||||
works for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of your copyrighted
|
||||
material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under the conditions
|
||||
stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological measure
|
||||
under any applicable law fulfilling obligations under article 11 of the WIPO
|
||||
copyright treaty adopted on 20 December 1996, or similar laws prohibiting
|
||||
or restricting circumvention of such measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid circumvention
|
||||
of technological measures to the extent such circumvention is effected by
|
||||
exercising rights under this License with respect to the covered work, and
|
||||
you disclaim any intention to limit operation or modification of the work
|
||||
as a means of enforcing, against the work's users, your or third parties'
|
||||
legal rights to forbid circumvention of technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you receive
|
||||
it, in any medium, provided that you conspicuously and appropriately publish
|
||||
on each copy an appropriate copyright notice; keep intact all notices stating
|
||||
that this License and any non-permissive terms added in accord with section
|
||||
7 apply to the code; keep intact all notices of the absence of any warranty;
|
||||
and give all recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey, and you
|
||||
may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to produce
|
||||
it from the Program, in the form of source code under the terms of section
|
||||
4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified it, and
|
||||
giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is released under
|
||||
this License and any conditions added under section 7. This requirement modifies
|
||||
the requirement in section 4 to "keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this License to anyone
|
||||
who comes into possession of a copy. This License will therefore apply, along
|
||||
with any applicable section 7 additional terms, to the whole of the work,
|
||||
and all its parts, regardless of how they are packaged. This License gives
|
||||
no permission to license the work in any other way, but it does not invalidate
|
||||
such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display Appropriate
|
||||
Legal Notices; however, if the Program has interactive interfaces that do
|
||||
not display Appropriate Legal Notices, your work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent works,
|
||||
which are not by their nature extensions of the covered work, and which are
|
||||
not combined with it such as to form a larger program, in or on a volume of
|
||||
a storage or distribution medium, is called an "aggregate" if the compilation
|
||||
and its resulting copyright are not used to limit the access or legal rights
|
||||
of the compilation's users beyond what the individual works permit. Inclusion
|
||||
of a covered work in an aggregate does not cause this License to apply to
|
||||
the other parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms of sections
|
||||
4 and 5, provided that you also convey the machine-readable Corresponding
|
||||
Source under the terms of this License, in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product (including
|
||||
a physical distribution medium), accompanied by the Corresponding Source fixed
|
||||
on a durable physical medium customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product (including
|
||||
a physical distribution medium), accompanied by a written offer, valid for
|
||||
at least three years and valid for as long as you offer spare parts or customer
|
||||
support for that product model, to give anyone who possesses the object code
|
||||
either (1) a copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical medium customarily
|
||||
used for software interchange, for a price no more than your reasonable cost
|
||||
of physically performing this conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the written
|
||||
offer to provide the Corresponding Source. This alternative is allowed only
|
||||
occasionally and noncommercially, and only if you received the object code
|
||||
with such an offer, in accord with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated place (gratis
|
||||
or for a charge), and offer equivalent access to the Corresponding Source
|
||||
in the same way through the same place at no further charge. You need not
|
||||
require recipients to copy the Corresponding Source along with the object
|
||||
code. If the place to copy the object code is a network server, the Corresponding
|
||||
Source may be on a different server (operated by you or a third party) that
|
||||
supports equivalent copying facilities, provided you maintain clear directions
|
||||
next to the object code saying where to find the Corresponding Source. Regardless
|
||||
of what server hosts the Corresponding Source, you remain obligated to ensure
|
||||
that it is available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided you inform
|
||||
other peers where the object code and Corresponding Source of the work are
|
||||
being offered to the general public at no charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded from
|
||||
the Corresponding Source as a System Library, need not be included in conveying
|
||||
the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any tangible
|
||||
personal property which is normally used for personal, family, or household
|
||||
purposes, or (2) anything designed or sold for incorporation into a dwelling.
|
||||
In determining whether a product is a consumer product, doubtful cases shall
|
||||
be resolved in favor of coverage. For a particular product received by a particular
|
||||
user, "normally used" refers to a typical or common use of that class of product,
|
||||
regardless of the status of the particular user or of the way in which the
|
||||
particular user actually uses, or expects or is expected to use, the product.
|
||||
A product is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent the
|
||||
only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods, procedures,
|
||||
authorization keys, or other information required to install and execute modified
|
||||
versions of a covered work in that User Product from a modified version of
|
||||
its Corresponding Source. The information must suffice to ensure that the
|
||||
continued functioning of the modified object code is in no case prevented
|
||||
or interfered with solely because modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or specifically
|
||||
for use in, a User Product, and the conveying occurs as part of a transaction
|
||||
in which the right of possession and use of the User Product is transferred
|
||||
to the recipient in perpetuity or for a fixed term (regardless of how the
|
||||
transaction is characterized), the Corresponding Source conveyed under this
|
||||
section must be accompanied by the Installation Information. But this requirement
|
||||
does not apply if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has been installed
|
||||
in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a requirement
|
||||
to continue to provide support service, warranty, or updates for a work that
|
||||
has been modified or installed by the recipient, or for the User Product in
|
||||
which it has been modified or installed. Access to a network may be denied
|
||||
when the modification itself materially and adversely affects the operation
|
||||
of the network or violates the rules and protocols for communication across
|
||||
the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided, in accord
|
||||
with this section must be in a format that is publicly documented (and with
|
||||
an implementation available to the public in source code form), and must require
|
||||
no special password or key for unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this License
|
||||
by making exceptions from one or more of its conditions. Additional permissions
|
||||
that are applicable to the entire Program shall be treated as though they
|
||||
were included in this License, to the extent that they are valid under applicable
|
||||
law. If additional permissions apply only to part of the Program, that part
|
||||
may be used separately under those permissions, but the entire Program remains
|
||||
governed by this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option remove any
|
||||
additional permissions from that copy, or from any part of it. (Additional
|
||||
permissions may be written to require their own removal in certain cases when
|
||||
you modify the work.) You may place additional permissions on material, added
|
||||
by you to a covered work, for which you have or can give appropriate copyright
|
||||
permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you add
|
||||
to a covered work, you may (if authorized by the copyright holders of that
|
||||
material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the terms of
|
||||
sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or author
|
||||
attributions in that material or in the Appropriate Legal Notices displayed
|
||||
by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or requiring
|
||||
that modified versions of such material be marked in reasonable ways as different
|
||||
from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or authors
|
||||
of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some trade names,
|
||||
trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that material by
|
||||
anyone who conveys the material (or modified versions of it) with contractual
|
||||
assumptions of liability to the recipient, for any liability that these contractual
|
||||
assumptions directly impose on those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further restrictions"
|
||||
within the meaning of section 10. If the Program as you received it, or any
|
||||
part of it, contains a notice stating that it is governed by this License
|
||||
along with a term that is a further restriction, you may remove that term.
|
||||
If a license document contains a further restriction but permits relicensing
|
||||
or conveying under this License, you may add to a covered work material governed
|
||||
by the terms of that license document, provided that the further restriction
|
||||
does not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you must place,
|
||||
in the relevant source files, a statement of the additional terms that apply
|
||||
to those files, or a notice indicating where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the form
|
||||
of a separately written license, or stated as exceptions; the above requirements
|
||||
apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly provided
|
||||
under this License. Any attempt otherwise to propagate or modify it is void,
|
||||
and will automatically terminate your rights under this License (including
|
||||
any patent licenses granted under the third paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your license from
|
||||
a particular copyright holder is reinstated (a) provisionally, unless and
|
||||
until the copyright holder explicitly and finally terminates your license,
|
||||
and (b) permanently, if the copyright holder fails to notify you of the violation
|
||||
by some reasonable means prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is reinstated permanently
|
||||
if the copyright holder notifies you of the violation by some reasonable means,
|
||||
this is the first time you have received notice of violation of this License
|
||||
(for any work) from that copyright holder, and you cure the violation prior
|
||||
to 30 days after your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the licenses
|
||||
of parties who have received copies or rights from you under this License.
|
||||
If your rights have been terminated and not permanently reinstated, you do
|
||||
not qualify to receive new licenses for the same material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or run a copy
|
||||
of the Program. Ancillary propagation of a covered work occurring solely as
|
||||
a consequence of using peer-to-peer transmission to receive a copy likewise
|
||||
does not require acceptance. However, nothing other than this License grants
|
||||
you permission to propagate or modify any covered work. These actions infringe
|
||||
copyright if you do not accept this License. Therefore, by modifying or propagating
|
||||
a covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically receives
|
||||
a license from the original licensors, to run, modify and propagate that work,
|
||||
subject to this License. You are not responsible for enforcing compliance
|
||||
by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an organization,
|
||||
or substantially all assets of one, or subdividing an organization, or merging
|
||||
organizations. If propagation of a covered work results from an entity transaction,
|
||||
each party to that transaction who receives a copy of the work also receives
|
||||
whatever licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the Corresponding
|
||||
Source of the work from the predecessor in interest, if the predecessor has
|
||||
it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the rights
|
||||
granted or affirmed under this License. For example, you may not impose a
|
||||
license fee, royalty, or other charge for exercise of rights granted under
|
||||
this License, and you may not initiate litigation (including a cross-claim
|
||||
or counterclaim in a lawsuit) alleging that any patent claim is infringed
|
||||
by making, using, selling, offering for sale, or importing the Program or
|
||||
any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this License
|
||||
of the Program or a work on which the Program is based. The work thus licensed
|
||||
is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims owned or controlled
|
||||
by the contributor, whether already acquired or hereafter acquired, that would
|
||||
be infringed by some manner, permitted by this License, of making, using,
|
||||
or selling its contributor version, but do not include claims that would be
|
||||
infringed only as a consequence of further modification of the contributor
|
||||
version. For purposes of this definition, "control" includes the right to
|
||||
grant patent sublicenses in a manner consistent with the requirements of this
|
||||
License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free patent
|
||||
license under the contributor's essential patent claims, to make, use, sell,
|
||||
offer for sale, import and otherwise run, modify and propagate the contents
|
||||
of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express agreement
|
||||
or commitment, however denominated, not to enforce a patent (such as an express
|
||||
permission to practice a patent or covenant not to sue for patent infringement).
|
||||
To "grant" such a patent license to a party means to make such an agreement
|
||||
or commitment not to enforce a patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license, and the
|
||||
Corresponding Source of the work is not available for anyone to copy, free
|
||||
of charge and under the terms of this License, through a publicly available
|
||||
network server or other readily accessible means, then you must either (1)
|
||||
cause the Corresponding Source to be so available, or (2) arrange to deprive
|
||||
yourself of the benefit of the patent license for this particular work, or
|
||||
(3) arrange, in a manner consistent with the requirements of this License,
|
||||
to extend the patent license to downstream recipients. "Knowingly relying"
|
||||
means you have actual knowledge that, but for the patent license, your conveying
|
||||
the covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that country
|
||||
that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or arrangement,
|
||||
you convey, or propagate by procuring conveyance of, a covered work, and grant
|
||||
a patent license to some of the parties receiving the covered work authorizing
|
||||
them to use, propagate, modify or convey a specific copy of the covered work,
|
||||
then the patent license you grant is automatically extended to all recipients
|
||||
of the covered work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within the scope
|
||||
of its coverage, prohibits the exercise of, or is conditioned on the non-exercise
|
||||
of one or more of the rights that are specifically granted under this License.
|
||||
You may not convey a covered work if you are a party to an arrangement with
|
||||
a third party that is in the business of distributing software, under which
|
||||
you make payment to the third party based on the extent of your activity of
|
||||
conveying the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory patent
|
||||
license (a) in connection with copies of the covered work conveyed by you
|
||||
(or copies made from those copies), or (b) primarily for and in connection
|
||||
with specific products or compilations that contain the covered work, unless
|
||||
you entered into that arrangement, or that patent license was granted, prior
|
||||
to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting any implied
|
||||
license or other defenses to infringement that may otherwise be available
|
||||
to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If 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 convey a covered work so as
|
||||
to satisfy simultaneously your obligations under this License and any other
|
||||
pertinent obligations, then as a consequence you may not convey it at all.
|
||||
For example, if you agree to terms that obligate you to collect a royalty
|
||||
for further conveying from those to whom you convey the Program, the only
|
||||
way you could satisfy both those terms and this License would be to refrain
|
||||
entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have permission to
|
||||
link or combine any covered work with a work licensed under version 3 of the
|
||||
GNU Affero General Public License into a single combined work, and to convey
|
||||
the resulting work. The terms of this License will continue to apply to the
|
||||
part which is the covered work, but the special requirements of the GNU Affero
|
||||
General Public License, section 13, concerning interaction through a network
|
||||
will apply to the combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of the
|
||||
GNU General Public License from time to time. Such new versions will be similar
|
||||
in spirit to the present version, but may differ in detail to address new
|
||||
problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program specifies
|
||||
that a certain numbered version of the GNU General Public License "or any
|
||||
later version" applies to it, you have the option of following the terms and
|
||||
conditions either of that numbered version or of any later version published
|
||||
by the Free Software Foundation. If the Program does not specify a version
|
||||
number of the GNU General Public License, you may choose any version ever
|
||||
published by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future versions of
|
||||
the GNU General Public License can be used, that proxy's public statement
|
||||
of acceptance of a version permanently authorizes you to choose that version
|
||||
for the Program.
|
||||
|
||||
Later license versions may give you additional or different permissions. However,
|
||||
no additional obligations are imposed on any author or copyright holder as
|
||||
a result of your choosing to follow a later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
|
||||
LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM
|
||||
PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
|
||||
CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
|
||||
ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM
|
||||
AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
|
||||
INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO
|
||||
USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
|
||||
INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
|
||||
PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
|
||||
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided above cannot
|
||||
be given local legal effect according to their terms, reviewing courts shall
|
||||
apply local law that most closely approximates an absolute waiver of all civil
|
||||
liability in connection with the Program, unless a warranty or assumption
|
||||
of liability accompanies a copy of the Program in return for a fee. END OF
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest possible
|
||||
use to the public, the best way to achieve this is to make it free software
|
||||
which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest to attach
|
||||
them to the start of each source file to most effectively state the exclusion
|
||||
of warranty; and each file should have at least the "copyright" line and a
|
||||
pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation, either version 3 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short notice like
|
||||
this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
|
||||
This is free software, and you are welcome to redistribute it under certain
|
||||
conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands might
|
||||
be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary. For
|
||||
more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General Public
|
||||
License instead of this License. But first, please read <https://www.gnu.org/
|
||||
licenses /why-not-lgpl.html>.
|
||||
@@ -0,0 +1,446 @@
|
||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
|
||||
51 Franklin St, 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 library GPL. It is numbered 2 because
|
||||
it goes with version 2 of the ordinary GPL.]
|
||||
|
||||
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 Library General Public License, applies to some specially
|
||||
designated Free Software Foundation software, and to any other libraries whose
|
||||
authors decide to use it. You can use it for your libraries, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not price. Our
|
||||
General Public Licenses are designed to make sure that you have the freedom
|
||||
to distribute copies of free software (and charge for this service if you
|
||||
wish), that you receive source code or can get it if you want it, that you
|
||||
can change the software or use pieces of it in new free programs; and that
|
||||
you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid anyone to
|
||||
deny you these rights or to ask you to surrender the rights. These restrictions
|
||||
translate to certain responsibilities for you if you distribute copies of
|
||||
the 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
|
||||
a program 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.
|
||||
|
||||
Our method of protecting your rights has two steps: (1) copyright the library,
|
||||
and (2) offer you this license which gives you legal permission to copy, distribute
|
||||
and/or modify the library.
|
||||
|
||||
Also, for each distributor's protection, we want to make certain that everyone
|
||||
understands that there is no warranty for this free library. If the library
|
||||
is modified by someone else and passed on, we want its recipients to know
|
||||
that what they have is not the original version, so that any problems introduced
|
||||
by others will not reflect on the original authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software patents. We
|
||||
wish to avoid the danger that companies distributing free software will individually
|
||||
obtain patent licenses, thus in effect transforming the program into proprietary
|
||||
software. To prevent this, we have made it clear that any patent must be licensed
|
||||
for everyone's free use or not licensed at all.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the ordinary GNU
|
||||
General Public License, which was designed for utility programs. This license,
|
||||
the GNU Library General Public License, applies to certain designated libraries.
|
||||
This license is quite different from the ordinary one; be sure to read it
|
||||
in full, and don't assume that anything in it is the same as in the ordinary
|
||||
license.
|
||||
|
||||
The reason we have a separate public license for some libraries is that they
|
||||
blur the distinction we usually make between modifying or adding to a program
|
||||
and simply using it. Linking a program with a library, without changing the
|
||||
library, is in some sense simply using the library, and is analogous to running
|
||||
a utility program or application program. However, in a textual and legal
|
||||
sense, the linked executable is a combined work, a derivative of the original
|
||||
library, and the ordinary General Public License treats it as such.
|
||||
|
||||
Because of this blurred distinction, using the ordinary General Public License
|
||||
for libraries did not effectively promote software sharing, because most developers
|
||||
did not use the libraries. We concluded that weaker conditions might promote
|
||||
sharing better.
|
||||
|
||||
However, unrestricted linking of non-free programs would deprive the users
|
||||
of those programs of all benefit from the free status of the libraries themselves.
|
||||
This Library General Public License is intended to permit developers of non-free
|
||||
programs to use free libraries, while preserving your freedom as a user of
|
||||
such programs to change the free libraries that are incorporated in them.
|
||||
(We have not seen how to achieve this as regards changes in header files,
|
||||
but we have achieved it as regards changes in the actual functions of the
|
||||
Library.) The hope is that this will lead to faster development of free libraries.
|
||||
|
||||
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, while the latter only works together with the library.
|
||||
|
||||
Note that it is possible for a library to be covered by the ordinary General
|
||||
Public License rather than by this special one.
|
||||
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library which contains a
|
||||
notice placed by the copyright holder or other authorized party saying it
|
||||
may be distributed under the terms of this Library 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 compile 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) 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.
|
||||
|
||||
c) 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.
|
||||
|
||||
d) 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 source code distributed need
|
||||
not include anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the operating
|
||||
system on which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
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 to 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 Library 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
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest possible
|
||||
use to the public, we recommend making it free software that everyone can
|
||||
redistribute and change. You can do so by permitting redistribution under
|
||||
these terms (or, alternatively, under the terms of the ordinary General Public
|
||||
License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is safest
|
||||
to attach them to the start of each source file to most effectively convey
|
||||
the exclusion of warranty; and each file should have at least the "copyright"
|
||||
line and a pointer to where the full notice is found.
|
||||
|
||||
one line to give the library's name and an idea of what it does.
|
||||
|
||||
Copyright (C) year name of author
|
||||
|
||||
This library is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU Library General Public License as published by the Free
|
||||
Software Foundation; either version 2 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 Library General Public License for more
|
||||
details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public License
|
||||
along with this library; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your school,
|
||||
if any, to sign a "copyright disclaimer" for the library, if necessary. Here
|
||||
is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in
|
||||
|
||||
the library `Frob' (a library for tweaking knobs) written
|
||||
|
||||
by James Random Hacker.
|
||||
|
||||
signature of Ty Coon, 1 April 1990
|
||||
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
@@ -0,0 +1,467 @@
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest possible
|
||||
use to the public, we recommend making it free software that everyone can
|
||||
redistribute and change. You can do so by permitting redistribution under
|
||||
these terms (or, alternatively, under the terms of the ordinary General Public
|
||||
License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is safest
|
||||
to attach them to the start of each source file to most effectively convey
|
||||
the exclusion of warranty; and each file should have at least the "copyright"
|
||||
line and a pointer to where the full notice is found.
|
||||
|
||||
< one line to give the library's name and an idea of what it does. >
|
||||
|
||||
Copyright (C) < year > < name of author >
|
||||
|
||||
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 Also add information
|
||||
on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your school,
|
||||
if any, to sign a "copyright disclaimer" for the library, if necessary. Here
|
||||
is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in
|
||||
|
||||
the library `Frob' (a library for tweaking knobs) written
|
||||
|
||||
by James Random Hacker.
|
||||
|
||||
< signature of Ty Coon > , 1 April 1990
|
||||
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
@@ -0,0 +1,468 @@
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest possible
|
||||
use to the public, we recommend making it free software that everyone can
|
||||
redistribute and change. You can do so by permitting redistribution under
|
||||
these terms (or, alternatively, under the terms of the ordinary General Public
|
||||
License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is safest
|
||||
to attach them to the start of each source file to most effectively convey
|
||||
the exclusion of warranty; and each file should have at least the "copyright"
|
||||
line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the library's name and an idea of what it does.>
|
||||
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
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
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your school,
|
||||
if any, to sign a "copyright disclaimer" for the library, if necessary. Here
|
||||
is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in
|
||||
|
||||
the library `Frob' (a library for tweaking knobs) written
|
||||
|
||||
by James Random Hacker.
|
||||
|
||||
< signature of Ty Coon > , 1 April 1990
|
||||
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
@@ -0,0 +1,163 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||
document, but changing it is not allowed.
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates the terms
|
||||
and conditions of version 3 of the GNU General Public License, supplemented
|
||||
by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser General
|
||||
Public License, and the "GNU GPL" refers to version 3 of the GNU General Public
|
||||
License.
|
||||
|
||||
|
||||
|
||||
"The Library" refers to a covered work governed by this License, other than
|
||||
an Application or a Combined Work as defined below.
|
||||
|
||||
|
||||
|
||||
An "Application" is any work that makes use of an interface provided by the
|
||||
Library, but which is not otherwise based on the Library. Defining a subclass
|
||||
of a class defined by the Library is deemed a mode of using an interface provided
|
||||
by the Library.
|
||||
|
||||
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an Application
|
||||
with the Library. The particular version of the Library with which the Combined
|
||||
Work was made is also called the "Linked Version".
|
||||
|
||||
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the Corresponding
|
||||
Source for the Combined Work, excluding any source code for portions of the
|
||||
Combined Work that, considered in isolation, are based on the Application,
|
||||
and not on the Linked Version.
|
||||
|
||||
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the object
|
||||
code and/or source code for the Application, including any data and utility
|
||||
programs needed for reproducing the Combined Work from the Application, but
|
||||
excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License without
|
||||
being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a facility
|
||||
refers to a function or data to be supplied by an Application that uses the
|
||||
facility (other than as an argument passed when the facility is invoked),
|
||||
then you may convey a copy of the modified version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to ensure
|
||||
that, in the event an Application does not supply the function or data, the
|
||||
facility still operates, and performs whatever part of its purpose remains
|
||||
meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of this License
|
||||
applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from a header
|
||||
file that is part of the Library. You may convey such object code under terms
|
||||
of your choice, provided that, if the incorporated material is not limited
|
||||
to numerical parameters, data structure layouts and accessors, or small macros,
|
||||
inline functions and templates (ten or fewer lines in length), you do both
|
||||
of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the Library
|
||||
is used in it and that the Library and its use are covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that, taken together,
|
||||
effectively do not restrict modification of the portions of the Library contained
|
||||
in the Combined Work and reverse engineering for debugging such modifications,
|
||||
if you also do each of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that the Library
|
||||
is used in it and that the Library and its use are covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during execution, include
|
||||
the copyright notice for the Library among these notices, as well as a reference
|
||||
directing the user to the copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this License,
|
||||
and the Corresponding Application Code in a form suitable for, and under terms
|
||||
that permit, the user to recombine or relink the Application with a modified
|
||||
version of the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the Library. A
|
||||
suitable mechanism is one that (a) uses at run time a copy of the Library
|
||||
already present on the user's computer system, and (b) will operate properly
|
||||
with a modified version of the Library that is interface-compatible with the
|
||||
Linked Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise be required
|
||||
to provide such information under section 6 of the GNU GPL, and only to the
|
||||
extent that such information is necessary to install and execute a modified
|
||||
version of the Combined Work produced by recombining or relinking the Application
|
||||
with a modified version of the Linked Version. (If you use option 4d0, the
|
||||
Installation Information must accompany the Minimal Corresponding Source and
|
||||
Corresponding Application Code. If you use option 4d1, you must provide the
|
||||
Installation Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
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 that are
|
||||
not Applications and are not covered by this License, and convey such a combined
|
||||
library under terms of your choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based on the
|
||||
Library, uncombined with any other library facilities, conveyed under the
|
||||
terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it is a work
|
||||
based on the Library, and explaining where to find the accompanying uncombined
|
||||
form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of the
|
||||
GNU 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 as you
|
||||
received it specifies that a certain numbered version of the GNU Lesser General
|
||||
Public License "or any later version" applies to it, you have the option of
|
||||
following the terms and conditions either of that published version or of
|
||||
any later version published by the Free Software Foundation. If the Library
|
||||
as you received it does not specify a version number of the GNU Lesser General
|
||||
Public License, you may choose any version of the GNU Lesser General Public
|
||||
License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide whether
|
||||
future versions of the GNU Lesser General Public License shall apply, that
|
||||
proxy's public statement of acceptance of any version is permanent authorization
|
||||
for you to choose that version for the Library.
|
||||
@@ -0,0 +1,12 @@
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 3 of
|
||||
the license or (at your option) at any later version that is
|
||||
accepted by the membership of KDE e.V. (or its successor
|
||||
approved by the membership of KDE e.V.), which shall act as a
|
||||
proxy as defined in Section 14 of version 3 of the license.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
@@ -0,0 +1,12 @@
|
||||
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 3 of the license or (at your option) any later version
|
||||
that is accepted by the membership of KDE e.V. (or its successor
|
||||
approved by the membership of KDE e.V.), which shall act as a
|
||||
proxy as defined in Section 6 of version 3 of the license.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
@@ -0,0 +1,7 @@
|
||||
Commercial License Usage
|
||||
Licensees holding valid commercial Qt licenses may use this file in
|
||||
accordance with the commercial license agreement provided with the
|
||||
Software or, alternatively, in accordance with the terms contained in
|
||||
a written agreement between you and The Qt Company. For licensing terms
|
||||
and conditions see https://www.qt.io/terms-conditions. For further
|
||||
information use the contact form at https://www.qt.io/contact-us.
|
||||
@@ -0,0 +1,21 @@
|
||||
The Qt Company Qt LGPL Exception version 1.1
|
||||
|
||||
As an additional permission to the GNU Lesser General Public License version 2.1, the object code form of a "work that uses the Library" may incorporate material from a header file that is part of the Library. You may distribute such object code under terms of your choice, provided that:
|
||||
|
||||
(i) the header files of the Library have not been modified; and
|
||||
|
||||
(ii) the incorporated material is limited to numerical parameters, data structure layouts, accessors, macros, inline functions and templates; and
|
||||
|
||||
(iii) you comply with the terms of Section 6 of the GNU Lesser General Public License version 2.1.
|
||||
|
||||
Moreover, you may apply this exception to a modified version of the Library, provided that such modification does not involve copying material from the Library into the modified Library's header files unless such material is limited to
|
||||
|
||||
(i) numerical parameters;
|
||||
|
||||
(ii) data structure layouts;
|
||||
|
||||
(iii) accessors; and
|
||||
|
||||
(iv) small macros, templates and inline functions of five lines or less in length.
|
||||
|
||||
Furthermore, you are not required to apply this additional permission to a modified version of the Library.
|
||||
@@ -0,0 +1,23 @@
|
||||
@PACKAGE_INIT@
|
||||
|
||||
# Any changes in this ".cmake" file will be overwritten by CMake, the source is the ".cmake.in" file.
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/PlasmaTargets.cmake")
|
||||
|
||||
set(Plasma_INSTALL_PREFIX "@PACKAGE_CMAKE_INSTALL_PREFIX@")
|
||||
|
||||
set(Plasma_LIBRARIES Plasma::Plasma)
|
||||
|
||||
set(PLASMA_PLASMOIDS_PLUGINDIR ${KDE_INSTALL_PLUGINDIR}/plasma/applets)
|
||||
set(PLASMA_CONTAINMENTACTIONS_PLUGINDIR ${KDE_INSTALL_PLUGINDIR}/plasma/containmentactions)
|
||||
|
||||
include(CMakeFindDependencyMacro)
|
||||
find_dependency(Qt6Qml "@REQUIRED_QT_VERSION@")
|
||||
find_dependency(Qt6Gui "@REQUIRED_QT_VERSION@")
|
||||
find_dependency(KF6Package "@KF_DEP_VERSION@")
|
||||
find_dependency(KF6KirigamiPlatform "@KF_DEP_VERSION@")
|
||||
find_dependency(KF6WindowSystem "@KF_DEP_VERSION@")
|
||||
|
||||
@PACKAGE_SETUP_AUTOMOC_VARIABLES@
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/PlasmaMacros.cmake")
|
||||
@@ -0,0 +1,112 @@
|
||||
set(PLASMA_RELATIVE_DATA_INSTALL_DIR "plasma")
|
||||
set(PLASMA_DATA_INSTALL_DIR "${KDE_INSTALL_DATADIR}/${PLASMA_RELATIVE_DATA_INSTALL_DIR}")
|
||||
|
||||
# plasma_install_package(path componentname [root] [type])
|
||||
#
|
||||
# Installs a Plasma package to the system path
|
||||
# @arg path The source path to install from, location of metadata.desktop
|
||||
# @arg componentname The plugin name of the component, corresponding to the
|
||||
# X-KDE-PluginInfo-Name key in metadata.desktop
|
||||
# @arg root The subdirectory to install to, default: plasmoids
|
||||
# @arg type The type, default to applet, or applet, package, containment,
|
||||
# wallpaper, shell, lookandfeel, etc.
|
||||
# @see Types column in kpackagetool6 --list-types
|
||||
#
|
||||
# Examples:
|
||||
# plasma_install_package(mywidget org.kde.plasma.mywidget) # installs an applet
|
||||
# plasma_install_package(declarativetoolbox org.kde.toolbox packages package) # installs a generic package
|
||||
#
|
||||
macro(plasma_install_package dir component)
|
||||
set(root ${ARGV2})
|
||||
set(type ${ARGV3})
|
||||
if(NOT root)
|
||||
set(root plasmoids)
|
||||
endif()
|
||||
if(NOT type)
|
||||
set(type applet)
|
||||
endif()
|
||||
|
||||
kpackage_install_package(${dir} ${component} ${root} ${PLASMA_RELATIVE_DATA_INSTALL_DIR} NO_DEPRECATED_WARNING)
|
||||
endmacro()
|
||||
|
||||
# plasma_add_applet(id QML_SOURCES ... [CPP_SOURCES] [RESOURCES])
|
||||
#
|
||||
# Creates a plasma applet.
|
||||
#
|
||||
# An applet consists of one or more QML files and optionally C++ sources.
|
||||
#
|
||||
# QML_SOURCES: A list of QML files for this applet
|
||||
# CPP_SOURCES: A list of C++ sources for this applet
|
||||
# RESOURCES: A list of files to be added to the applet's QRC
|
||||
# GENERATE_APPLET_CLASS: Pass this to automatically generate a Plasma::Applet subclass if no non-trivial class is needed
|
||||
# GENERATE_CONTAINMENT_CLASS: Pass this to automatically generate a Plasma::Containment subclass if no non-trivial class is needed.
|
||||
# QML_ARGS: These will be forwarded as arguments to the interal qt_add_qml_module call. See https://doc.qt.io/qt-6/qt-add-qml-module.html for available arguments
|
||||
#
|
||||
# This creates a CMake target named after the given id which can be manipulated further using CMake API
|
||||
#
|
||||
# Example:
|
||||
# plasma_add_applet(org.kde.plasma.calculator
|
||||
# QML_SOURCES main.qml
|
||||
# CPP_SOURCES calculator.cpp
|
||||
# GENERATE_APPLET_CLASS
|
||||
# )
|
||||
#
|
||||
function(plasma_add_applet id)
|
||||
set(options GENERATE_APPLET_CLASS GENERATE_CONTAINMENT_CLASS)
|
||||
set(oneValueArgs)
|
||||
set(multiValueArgs QML_SOURCES CPP_SOURCES RESOURCES QML_ARGS)
|
||||
cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
|
||||
# not using MODULE because of https://bugreports.qt.io/browse/QTBUG-117159
|
||||
add_library(${id} SHARED)
|
||||
|
||||
set_target_properties(${id} PROPERTIES PREFIX "")
|
||||
|
||||
include(ECMQmlModule)
|
||||
ecm_add_qml_module(${id} URI "plasma.applet.${id}" QT_NO_PLUGIN ${ARGS_QML_ARGS})
|
||||
|
||||
ecm_target_qml_sources(${id} SOURCES ${ARGS_QML_SOURCES} RESOURCES ${ARGS_RESOURCES})
|
||||
|
||||
set_target_properties(${id} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/plasma/applets")
|
||||
|
||||
if(ARGS_GENERATE_APPLET_CLASS OR ARGS_GENERATE_CONTAINMENT_CLASS)
|
||||
|
||||
string(REPLACE "." "_" CLASS_NAME ${id})
|
||||
string(REPLACE "-" "_" CLASS_NAME ${CLASS_NAME})
|
||||
|
||||
if (ARGS_GENERATE_APPLET_CLASS)
|
||||
set(CLASS_TYPE "Applet")
|
||||
elseif (ARGS_GENERATE_CONTAINMENT_CLASS)
|
||||
set(CLASS_TYPE "Containment")
|
||||
endif()
|
||||
|
||||
set(PLUGIN_SRC
|
||||
"
|
||||
#include <KPluginFactory>
|
||||
#include <Plasma/${CLASS_TYPE}>
|
||||
|
||||
class ${CLASS_NAME}_Plugin : public Plasma::${CLASS_TYPE} {
|
||||
Q_OBJECT
|
||||
public:
|
||||
${CLASS_NAME}_Plugin(QObject *parent, const KPluginMetaData &data, const QVariantList &args)
|
||||
: Plasma::${CLASS_TYPE}(parent, data, args) {}
|
||||
}\;
|
||||
|
||||
K_PLUGIN_CLASS_WITH_JSON(${CLASS_NAME}_Plugin, \"metadata.json\")
|
||||
|
||||
#include \"${id}.moc\"
|
||||
")
|
||||
|
||||
file(GENERATE OUTPUT ${id}.cpp CONTENT ${PLUGIN_SRC})
|
||||
|
||||
target_sources(${id} PRIVATE ${id}.cpp)
|
||||
|
||||
target_link_libraries(${id} PRIVATE KF6::CoreAddons Plasma::Plasma)
|
||||
endif()
|
||||
|
||||
target_sources(${id} PRIVATE ${ARGS_CPP_SOURCES})
|
||||
|
||||
if (NOT PLASMA_SKIP_APPLET_INSTALL)
|
||||
install(TARGETS ${id} DESTINATION ${KDE_INSTALL_PLUGINDIR}/plasma/applets)
|
||||
endif()
|
||||
endfunction()
|
||||
@@ -0,0 +1,36 @@
|
||||
# libplasma
|
||||
|
||||
Foundational libraries, components, and tools of the Plasma workspaces
|
||||
|
||||
## Introduction
|
||||
libplasma provides the following:
|
||||
- QML components that can be used by any Plasma shell
|
||||
- A C++ library: `libplasma` itself
|
||||
- Script engines
|
||||
|
||||
## QML components
|
||||
### org.kde.plasma.core
|
||||
|
||||
Bindings for libplasma functionality, such FrameSvg, see @ref core.
|
||||
|
||||
### org.kde.plasma.components
|
||||
Graphical components for common items such as buttons, lineedits, tabbars and so on. Compatible subset of the MeeGo components used on the N9, see @ref plasmacomponents.
|
||||
|
||||
### org.kde.plasma.extras
|
||||
Extra graphical components that extend org.kde.plasma.components but are not in the standard api, see @ref plasmaextracomponents.
|
||||
|
||||
### org.kde.plasma.plasmoid
|
||||
Attached properties for manipulating the current applet or containment, see @ref libplasmaquick
|
||||
|
||||
## libplasma
|
||||
This C++ library provides:
|
||||
- rendering of SVG themes
|
||||
- loading of files from a certain filesystem structure: packages
|
||||
- data access through data engines
|
||||
- loading of the plugin structure of the workspace: containments and applets
|
||||
|
||||
See @ref libplasma.
|
||||
|
||||
## Script engines
|
||||
Provides support to create applets or containments in various scripting languages.
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
find_package(Qt6Test ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE)
|
||||
set_package_properties(Qt6Test PROPERTIES PURPOSE "Required for tests")
|
||||
|
||||
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
|
||||
remove_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_STRICT_ITERATORS -DQT_NO_CAST_FROM_BYTEARRAY -DQT_NO_KEYWORDS)
|
||||
|
||||
include(ECMMarkAsTest)
|
||||
include(ECMAddTests)
|
||||
|
||||
find_package(KF6Archive REQUIRED)
|
||||
find_package(Qt6 COMPONENTS QuickTest Widgets REQUIRED)
|
||||
|
||||
MACRO(PLASMA_UNIT_TESTS)
|
||||
FOREACH(_testname ${ARGN})
|
||||
set(libs Qt6::Qml Qt6::Test Plasma::Plasma Plasma::PlasmaQuick
|
||||
KF6::Archive KF6::CoreAddons KF6::ConfigGui KF6::I18n KF6::IconThemes KF6::Svg)
|
||||
if(QT_QTOPENGL_FOUND)
|
||||
list(APPEND libs Qt6::OpenGL)
|
||||
endif()
|
||||
ecm_add_test(${_testname}.cpp
|
||||
LINK_LIBRARIES ${libs}
|
||||
NAME_PREFIX "plasma-")
|
||||
target_include_directories(${_testname} PRIVATE "$<BUILD_INTERFACE:$<TARGET_PROPERTY:PlasmaQuick,INCLUDE_DIRECTORIES>>;")
|
||||
ENDFOREACH(_testname)
|
||||
ENDMACRO(PLASMA_UNIT_TESTS)
|
||||
|
||||
PLASMA_UNIT_TESTS(
|
||||
dialogqmltest
|
||||
dialogstatetest
|
||||
pluginloadertest
|
||||
themetest
|
||||
sharedqmlenginetest
|
||||
)
|
||||
|
||||
kcoreaddons_add_plugin(dummycontainmentaction SOURCES dummycontainmentaction.cpp INSTALL_NAMESPACE "plasma/containmentactions" STATIC)
|
||||
target_link_libraries(dummycontainmentaction Plasma::Plasma)
|
||||
kcoreaddons_target_static_plugins(pluginloadertest NAMESPACE "plasma/containmentactions")
|
||||
|
||||
if(HAVE_X11)
|
||||
ecm_add_test(
|
||||
dialognativetest.cpp
|
||||
TEST_NAME dialognativetest
|
||||
LINK_LIBRARIES Qt6::Gui Qt6::Test Qt6::Qml Qt6::Quick KF6::WindowSystem Plasma::Plasma Plasma::PlasmaQuick
|
||||
)
|
||||
endif()
|
||||
|
||||
ecm_add_test(
|
||||
coronatest.cpp
|
||||
coronatestresources.qrc
|
||||
TEST_NAME coronatest
|
||||
LINK_LIBRARIES Qt6::Gui Qt6::Qml Qt6::Widgets Qt6::Test Plasma::Plasma KF6::CoreAddons
|
||||
)
|
||||
|
||||
ecm_add_test(
|
||||
quickviewsharedenginetest.cpp
|
||||
LINK_LIBRARIES Qt6::Test Plasma::PlasmaQuick
|
||||
)
|
||||
|
||||
|
||||
#Add a test that i18n is not used directly in any import.
|
||||
# It should /always/ be i18nd
|
||||
find_program(SH bash)
|
||||
if(SH)
|
||||
add_test(i18ndcheck ${SH} ${CMAKE_CURRENT_SOURCE_DIR}/i18ndcheck.sh ${CMAKE_SOURCE_DIR}/src/declarativeimports)
|
||||
endif()
|
||||
|
||||
add_subdirectory(applet)
|
||||
add_subdirectory(declarativetests)
|
||||
@@ -0,0 +1,30 @@
|
||||
This file enumerates which classes and methods needs test. Please feel free to
|
||||
add a specific test you'd like to see for a class/method.
|
||||
|
||||
// Finished (as in has test for each method)
|
||||
package
|
||||
packagemetadata
|
||||
packagestructure
|
||||
|
||||
// No tests written atm.
|
||||
abstractrunner
|
||||
animator
|
||||
appletbrowser
|
||||
applet
|
||||
configxml
|
||||
containment
|
||||
corona
|
||||
datacontainer
|
||||
datacontainer_p
|
||||
glapplet
|
||||
packages_p
|
||||
phase
|
||||
plasma_export
|
||||
plasma
|
||||
scriptengine
|
||||
searchaction
|
||||
searchcontext
|
||||
shadowitem_p
|
||||
svg
|
||||
theme
|
||||
uiloader
|
||||
@@ -0,0 +1,8 @@
|
||||
# Don't install test applets
|
||||
set(PLASMA_SKIP_APPLET_INSTALL ON)
|
||||
|
||||
add_subdirectory(simple)
|
||||
add_subdirectory(withcpp)
|
||||
add_subdirectory(simplecontainment)
|
||||
|
||||
ecm_add_test(applettest.cpp LINK_LIBRARIES Qt::Test Plasma::Plasma Plasma::PlasmaQuick)
|
||||
@@ -0,0 +1,196 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 Nicolas Fella <nicolas.fella@gmx.de>
|
||||
*
|
||||
* SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include <QDirIterator>
|
||||
#include <QStandardPaths>
|
||||
#include <QTest>
|
||||
|
||||
#include <KPluginMetaData>
|
||||
|
||||
#include <Plasma/Applet>
|
||||
#include <Plasma/PluginLoader>
|
||||
#include <PlasmaQuick/AppletQuickItem>
|
||||
|
||||
using namespace Qt::StringLiterals;
|
||||
|
||||
class AppletTest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private Q_SLOTS:
|
||||
|
||||
void copyDirectory(const QString &srcDir, const QString &dstDir)
|
||||
{
|
||||
QDir targetDir(dstDir);
|
||||
targetDir.mkpath(".");
|
||||
QDirIterator it(srcDir, QDir::Filters(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::Name), QDirIterator::Subdirectories);
|
||||
while (it.hasNext()) {
|
||||
it.next();
|
||||
QString path = it.filePath();
|
||||
QString relDestPath = path.last(it.filePath().length() - srcDir.length() - 1);
|
||||
if (it.fileInfo().isDir()) {
|
||||
QVERIFY(targetDir.mkpath(relDestPath));
|
||||
} else {
|
||||
QVERIFY(QFile::copy(path, dstDir + '/' + relDestPath));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void initTestCase()
|
||||
{
|
||||
QStandardPaths::setTestModeEnabled(true);
|
||||
|
||||
// Copy pure kpackage
|
||||
QString appletDir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/plasma/plasmoids/org.kde.plasma.testkpackage";
|
||||
QDir(appletDir).mkpath(".");
|
||||
QDir(appletDir).removeRecursively();
|
||||
|
||||
copyDirectory(QFINDTESTDATA("kpackage/package"), appletDir);
|
||||
|
||||
// Copy the kpackage falling back to simple
|
||||
appletDir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/plasma/plasmoids/org.kde.plasma.testrootpath";
|
||||
QDir(appletDir).mkpath(".");
|
||||
QDir(appletDir).removeRecursively();
|
||||
|
||||
copyDirectory(QFINDTESTDATA("rootpath/package"), appletDir);
|
||||
}
|
||||
|
||||
void testLoad_data()
|
||||
{
|
||||
QTest::addColumn<QString>("id");
|
||||
|
||||
QTest::addRow("simple") << u"org.kde.plasma.testapplet"_s;
|
||||
QTest::addRow("withcpp") << u"org.kde.plasma.testapplet2"_s;
|
||||
QTest::addRow("simplecontainment") << u"org.kde.plasma.testcontainment"_s;
|
||||
QTest::addRow("kpackage") << u"org.kde.plasma.testkpackage"_s;
|
||||
QTest::addRow("rootpath") << u"org.kde.plasma.testrootpath"_s;
|
||||
}
|
||||
|
||||
void testLoad()
|
||||
{
|
||||
QFETCH(QString, id);
|
||||
|
||||
auto applets = Plasma::PluginLoader::self()->listAppletMetaData(QString());
|
||||
|
||||
auto testApplet = std::find_if(applets.cbegin(), applets.cend(), [id](const KPluginMetaData &md) {
|
||||
return md.pluginId() == id;
|
||||
});
|
||||
|
||||
QVERIFY(testApplet != applets.cend());
|
||||
|
||||
Plasma::Applet *applet = Plasma::PluginLoader::self()->loadApplet(id);
|
||||
QVERIFY(applet);
|
||||
|
||||
QCOMPARE(applet->pluginName(), id);
|
||||
|
||||
QVERIFY(applet->launchErrorMessage().isEmpty());
|
||||
|
||||
PlasmaQuick::AppletQuickItem *item = PlasmaQuick::AppletQuickItem::itemForApplet(applet);
|
||||
|
||||
QVERIFY(item);
|
||||
|
||||
QCOMPARE(item->applet(), applet);
|
||||
|
||||
delete applet;
|
||||
}
|
||||
|
||||
void testListContainment()
|
||||
{
|
||||
auto containments = Plasma::PluginLoader::listContainmentsMetaData();
|
||||
QVERIFY(!containments.isEmpty());
|
||||
|
||||
auto testContainment = std::find_if(containments.cbegin(), containments.cend(), [](const KPluginMetaData &md) {
|
||||
return md.pluginId() == "org.kde.plasma.testcontainment";
|
||||
});
|
||||
|
||||
QVERIFY(testContainment != containments.cend());
|
||||
|
||||
auto notAContainment = std::find_if(containments.cbegin(), containments.cend(), [](const KPluginMetaData &md) {
|
||||
return md.pluginId() == "org.kde.plasma.testapplet";
|
||||
});
|
||||
|
||||
QVERIFY(notAContainment == containments.cend());
|
||||
}
|
||||
|
||||
void testListContainmentOfType()
|
||||
{
|
||||
auto containments = Plasma::PluginLoader::listContainmentsMetaDataOfType("Custom");
|
||||
QVERIFY(!containments.isEmpty());
|
||||
|
||||
auto testContainment = std::find_if(containments.cbegin(), containments.cend(), [](const KPluginMetaData &md) {
|
||||
return md.pluginId() == "org.kde.plasma.testcontainment";
|
||||
});
|
||||
|
||||
QVERIFY(testContainment != containments.cend());
|
||||
|
||||
auto notAContainment = std::find_if(containments.cbegin(), containments.cend(), [](const KPluginMetaData &md) {
|
||||
return md.pluginId() == "org.kde.plasma.testapplet";
|
||||
});
|
||||
|
||||
QVERIFY(notAContainment == containments.cend());
|
||||
}
|
||||
|
||||
void testDropMime()
|
||||
{
|
||||
auto applets = Plasma::PluginLoader::self()->listAppletMetaDataForMimeType("image/jpeg");
|
||||
|
||||
auto shouldBeFound = std::find_if(applets.cbegin(), applets.cend(), [](const KPluginMetaData &md) {
|
||||
return md.pluginId() == "org.kde.plasma.testapplet2";
|
||||
});
|
||||
|
||||
QVERIFY(shouldBeFound != applets.cend());
|
||||
|
||||
auto shouldNotBeFound = std::find_if(applets.cbegin(), applets.cend(), [](const KPluginMetaData &md) {
|
||||
return md.pluginId() == "org.kde.plasma.testapplet";
|
||||
});
|
||||
|
||||
QVERIFY(shouldNotBeFound == applets.cend());
|
||||
}
|
||||
|
||||
void testDropPattern()
|
||||
{
|
||||
auto applets = Plasma::PluginLoader::self()->listAppletMetaDataForUrl(QUrl("test:/"));
|
||||
|
||||
auto shouldBeFound = std::find_if(applets.cbegin(), applets.cend(), [](const KPluginMetaData &md) {
|
||||
return md.pluginId() == "org.kde.plasma.testapplet";
|
||||
});
|
||||
|
||||
QVERIFY(shouldBeFound != applets.cend());
|
||||
|
||||
auto shouldNotBeFound = std::find_if(applets.cbegin(), applets.cend(), [](const KPluginMetaData &md) {
|
||||
return md.pluginId() == "org.kde.plasma.testapplet2";
|
||||
});
|
||||
|
||||
QVERIFY(shouldNotBeFound == applets.cend());
|
||||
}
|
||||
|
||||
void actionsTest()
|
||||
{
|
||||
auto applet = Plasma::PluginLoader::self()->loadApplet("org.kde.plasma.testapplet");
|
||||
|
||||
auto action = std::make_unique<QAction>("Hello");
|
||||
|
||||
// verify that double assignment isn't causing issues
|
||||
applet->setInternalAction("foo", action.get());
|
||||
applet->setInternalAction("foo", action.get());
|
||||
|
||||
delete applet;
|
||||
}
|
||||
|
||||
void testArgs()
|
||||
{
|
||||
QVariantList args{1, u"Foo"_s, 3};
|
||||
auto applet = Plasma::PluginLoader::self()->loadApplet("org.kde.plasma.testapplet", 1, args);
|
||||
|
||||
QCOMPARE(applet->startupArguments(), args);
|
||||
|
||||
delete applet;
|
||||
}
|
||||
};
|
||||
|
||||
QTEST_MAIN(AppletTest);
|
||||
|
||||
#include "applettest.moc"
|
||||
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 Nicolas Fella <nicolas.fella@gmx.de>
|
||||
*
|
||||
* SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick 2.15
|
||||
import org.kde.plasma.plasmoid 2.0
|
||||
|
||||
PlasmoidItem {
|
||||
id: root
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "plasma-devel@kde.org",
|
||||
"Name": "The Plasma Team"
|
||||
}
|
||||
],
|
||||
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=plasmashell&component=Pager%20widget",
|
||||
"Category": "Windows and Tasks",
|
||||
"Description": "A test applet",
|
||||
"Icon": "user-desktop",
|
||||
"Id": "org.kde.plasma.testkpackage",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Test KPackage"
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "plasma-devel@kde.org",
|
||||
"Name": "The Plasma Team"
|
||||
}
|
||||
],
|
||||
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=plasmashell&component=Pager%20widget",
|
||||
"Category": "Windows and Tasks",
|
||||
"Description": "A fallback test applet",
|
||||
"Icon": "user-desktop",
|
||||
"Id": "org.kde.plasma.testrootpath",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Test KPackage"
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-RootPath": "org.kde.plasma.testapplet"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
plasma_add_applet(org.kde.plasma.testapplet QML_SOURCES main.qml GENERATE_APPLET_CLASS)
|
||||
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 Nicolas Fella <nicolas.fella@gmx.de>
|
||||
*
|
||||
* SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
|
||||
PlasmoidItem {
|
||||
|
||||
compactRepresentation: Item {}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "konqi@kde.org",
|
||||
"Name": "Konqi Konqueror"
|
||||
}
|
||||
],
|
||||
"Category": "",
|
||||
"Description": "A test applet",
|
||||
"Icon": "user-desktop",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Test",
|
||||
"Version": "",
|
||||
"Website": "https://www.kde.org/plasma-desktop"
|
||||
},
|
||||
"Keywords": "",
|
||||
"X-KDE-ParentApp": "org.kde.plasmashell",
|
||||
"X-Plasma-APIVersion": "2",
|
||||
"X-Plasma-DropUrlPatterns": [
|
||||
"test:/"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
plasma_add_applet(org.kde.plasma.testcontainment QML_SOURCES main.qml GENERATE_CONTAINMENT_CLASS)
|
||||
@@ -0,0 +1,13 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 Nicolas Fella <nicolas.fella@gmx.de>
|
||||
*
|
||||
* SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
|
||||
ContainmentItem {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "konqi@kde.org",
|
||||
"Name": "Konqi Konqueror"
|
||||
}
|
||||
],
|
||||
"Category": "",
|
||||
"Description": "A test containment",
|
||||
"Icon": "user-desktop",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Test containment",
|
||||
"Version": "",
|
||||
"Website": "https://www.kde.org/plasma-desktop"
|
||||
},
|
||||
"Keywords": "",
|
||||
"X-KDE-ParentApp": "org.kde.plasmashell",
|
||||
"X-Plasma-APIVersion": "2",
|
||||
"X-Plasma-ContainmentType": "Custom"
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
plasma_add_applet(org.kde.plasma.testapplet2 QML_SOURCES main.qml CPP_SOURCES main.cpp)
|
||||
|
||||
target_link_libraries(org.kde.plasma.testapplet2 PRIVATE Plasma::Plasma)
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 Nicolas Fella <nicolas.fella@gmx.de>
|
||||
*
|
||||
* SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include <Plasma/Applet>
|
||||
|
||||
#include <KPluginFactory>
|
||||
|
||||
class MyApplet : public Plasma::Applet
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MyApplet(QObject *parent, const KPluginMetaData &md, const QVariantList &args)
|
||||
: Plasma::Applet(parent, md, args)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
K_PLUGIN_CLASS_WITH_JSON(MyApplet, "metadata.json")
|
||||
|
||||
#include "main.moc"
|
||||
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 Nicolas Fella <nicolas.fella@gmx.de>
|
||||
*
|
||||
* SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
|
||||
PlasmoidItem {
|
||||
|
||||
compactRepresentation: Item {}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "konqi@kde.org",
|
||||
"Name": "Konqi Konqueror"
|
||||
}
|
||||
],
|
||||
"Category": "",
|
||||
"Description": "A test applet",
|
||||
"Icon": "user-desktop",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Test",
|
||||
"Version": "",
|
||||
"Website": "https://www.kde.org/plasma-desktop"
|
||||
},
|
||||
"Keywords": "",
|
||||
"X-KDE-ParentApp": "org.kde.plasmashell",
|
||||
"X-Plasma-APIVersion": "2",
|
||||
"X-Plasma-DropMimeTypes": [
|
||||
"image/jpeg"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,206 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014 Marco Martin <mart@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "coronatest.h"
|
||||
|
||||
#include <QAction>
|
||||
#include <QApplication>
|
||||
#include <QProcess>
|
||||
#include <QRandomGenerator>
|
||||
#include <QSignalSpy>
|
||||
#include <QStandardPaths>
|
||||
|
||||
SimpleCorona::SimpleCorona(QObject *parent)
|
||||
: Plasma::Corona(parent)
|
||||
{
|
||||
}
|
||||
|
||||
SimpleCorona::~SimpleCorona()
|
||||
{
|
||||
}
|
||||
|
||||
QRect SimpleCorona::screenGeometry(int screen) const
|
||||
{
|
||||
// completely arbitrary, still not tested
|
||||
return QRect(100 * screen, 100, 100, 100);
|
||||
}
|
||||
|
||||
int SimpleCorona::screenForContainment(const Plasma::Containment *c) const
|
||||
{
|
||||
if (qobject_cast<const SimpleNoScreenContainment *>(c)) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
SimpleApplet::SimpleApplet(QObject *parentObject, const KPluginMetaData &data, const QVariantList &args)
|
||||
: Plasma::Applet(parentObject, data, args)
|
||||
{
|
||||
// updateConstraints(Plasma::Types::UiReadyConstraint);
|
||||
m_timer.setSingleShot(true);
|
||||
m_timer.setInterval(QRandomGenerator::global()->bounded((500 + 1) - 100) + 100);
|
||||
m_timer.start();
|
||||
connect(&m_timer, &QTimer::timeout, this, [this]() {
|
||||
updateConstraints(Plasma::Applet::UiReadyConstraint);
|
||||
});
|
||||
}
|
||||
|
||||
SimpleContainment::SimpleContainment(QObject *parentObject, const KPluginMetaData &data, const QVariantList &args)
|
||||
: Plasma::Containment(parentObject, data, args)
|
||||
{
|
||||
// updateConstraints(Plasma::Types::UiReadyConstraint);
|
||||
m_timer.setSingleShot(true);
|
||||
m_timer.setInterval(QRandomGenerator::global()->bounded((500 + 1) - 100) + 100);
|
||||
m_timer.start();
|
||||
connect(&m_timer, &QTimer::timeout, this, [this]() {
|
||||
updateConstraints(Plasma::Applet::UiReadyConstraint);
|
||||
});
|
||||
}
|
||||
|
||||
SimpleNoScreenContainment::SimpleNoScreenContainment(QObject *parentObject, const KPluginMetaData &data, const QVariantList &args)
|
||||
: Plasma::Containment(parentObject, data, args)
|
||||
{
|
||||
// This containment will *never* be isUiReady()
|
||||
}
|
||||
|
||||
void CoronaTest::initTestCase()
|
||||
{
|
||||
QStandardPaths::setTestModeEnabled(true);
|
||||
m_corona = new SimpleCorona;
|
||||
|
||||
m_configDir = QDir(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation));
|
||||
m_configDir.removeRecursively();
|
||||
|
||||
QVERIFY(m_configDir.mkpath(QStringLiteral(".")));
|
||||
|
||||
QVERIFY(QFile::copy(QStringLiteral(":/plasma-test-appletsrc"), m_configDir.filePath(QStringLiteral("plasma-test-appletsrc"))));
|
||||
}
|
||||
|
||||
void CoronaTest::cleanupTestCase()
|
||||
{
|
||||
m_configDir.removeRecursively();
|
||||
delete m_corona;
|
||||
}
|
||||
|
||||
void CoronaTest::restore()
|
||||
{
|
||||
m_corona->loadLayout(QStringLiteral("plasma-test-appletsrc"));
|
||||
QCOMPARE(m_corona->containments().count(), 3);
|
||||
|
||||
const auto containments = m_corona->containments();
|
||||
for (auto cont : containments) {
|
||||
switch (cont->id()) {
|
||||
case 1:
|
||||
QCOMPARE(cont->applets().count(), 2);
|
||||
break;
|
||||
default:
|
||||
QCOMPARE(cont->applets().count(), 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CoronaTest::checkOrder()
|
||||
{
|
||||
QCOMPARE(m_corona->containments().count(), 3);
|
||||
|
||||
// check containments order
|
||||
QCOMPARE(m_corona->containments().at(0)->id(), (uint)1);
|
||||
QCOMPARE(m_corona->containments().at(1)->id(), (uint)4);
|
||||
QCOMPARE(m_corona->containments().at(2)->id(), (uint)5);
|
||||
|
||||
// check applets order
|
||||
QCOMPARE(m_corona->containments().at(0)->applets().count(), 2);
|
||||
QCOMPARE(m_corona->containments().at(0)->applets().at(0)->id(), (uint)2);
|
||||
QCOMPARE(m_corona->containments().at(0)->applets().at(1)->id(), (uint)3);
|
||||
}
|
||||
|
||||
void CoronaTest::startupCompletion()
|
||||
{
|
||||
QVERIFY(!m_corona->isStartupCompleted());
|
||||
QVERIFY(!m_corona->containments().at(0)->isUiReady());
|
||||
|
||||
QSignalSpy spy(m_corona, SIGNAL(startupCompleted()));
|
||||
QVERIFY(spy.wait(1000));
|
||||
|
||||
QVERIFY(m_corona->isStartupCompleted());
|
||||
QVERIFY(m_corona->containments().at(0)->isUiReady());
|
||||
}
|
||||
|
||||
void CoronaTest::addRemoveApplets()
|
||||
{
|
||||
m_corona->containments().at(0)->createApplet(QStringLiteral("invalid"));
|
||||
QCOMPARE(m_corona->containments().at(0)->applets().count(), 3);
|
||||
|
||||
// remove action present
|
||||
QVERIFY(m_corona->containments().at(0)->applets().at(0)->internalAction(QStringLiteral("remove")));
|
||||
// kill an applet
|
||||
m_corona->containments().at(0)->applets().at(0)->destroy();
|
||||
|
||||
QSignalSpy spy(m_corona->containments().at(0)->applets().at(0), SIGNAL(destroyed()));
|
||||
QVERIFY(spy.wait(1000));
|
||||
QCOMPARE(m_corona->containments().at(0)->applets().count(), 2);
|
||||
}
|
||||
|
||||
// this test has to be the last, since systemimmutability
|
||||
// can't be programmatically unlocked
|
||||
void CoronaTest::immutability()
|
||||
{
|
||||
// immutability
|
||||
QCOMPARE(m_corona->immutability(), Plasma::Types::Mutable);
|
||||
m_corona->setImmutability(Plasma::Types::UserImmutable);
|
||||
QCOMPARE(m_corona->immutability(), Plasma::Types::UserImmutable);
|
||||
|
||||
auto containments = m_corona->containments();
|
||||
for (Plasma::Containment *cont : std::as_const(containments)) {
|
||||
QCOMPARE(cont->immutability(), Plasma::Types::UserImmutable);
|
||||
const auto lstApplets = cont->applets();
|
||||
for (Plasma::Applet *app : lstApplets) {
|
||||
QCOMPARE(app->immutability(), Plasma::Types::UserImmutable);
|
||||
}
|
||||
}
|
||||
|
||||
m_corona->setImmutability(Plasma::Types::Mutable);
|
||||
QCOMPARE(m_corona->immutability(), Plasma::Types::Mutable);
|
||||
|
||||
containments = m_corona->containments();
|
||||
for (Plasma::Containment *cont : std::as_const(containments)) {
|
||||
QCOMPARE(cont->immutability(), Plasma::Types::Mutable);
|
||||
const auto lstApplets = cont->applets();
|
||||
for (Plasma::Applet *app : lstApplets) {
|
||||
QCOMPARE(app->immutability(), Plasma::Types::Mutable);
|
||||
}
|
||||
}
|
||||
|
||||
m_corona->setImmutability(Plasma::Types::SystemImmutable);
|
||||
QCOMPARE(m_corona->immutability(), Plasma::Types::SystemImmutable);
|
||||
|
||||
containments = m_corona->containments();
|
||||
for (Plasma::Containment *cont : std::as_const(containments)) {
|
||||
QCOMPARE(cont->immutability(), Plasma::Types::SystemImmutable);
|
||||
const auto lstApplets = cont->applets();
|
||||
for (Plasma::Applet *app : lstApplets) {
|
||||
QCOMPARE(app->immutability(), Plasma::Types::SystemImmutable);
|
||||
}
|
||||
}
|
||||
|
||||
// can't unlock systemimmutable
|
||||
m_corona->setImmutability(Plasma::Types::Mutable);
|
||||
QCOMPARE(m_corona->immutability(), Plasma::Types::SystemImmutable);
|
||||
|
||||
containments = m_corona->containments();
|
||||
for (Plasma::Containment *cont : std::as_const(containments)) {
|
||||
QCOMPARE(cont->immutability(), Plasma::Types::SystemImmutable);
|
||||
const auto lstApplets = cont->applets();
|
||||
for (Plasma::Applet *app : lstApplets) {
|
||||
QCOMPARE(app->immutability(), Plasma::Types::SystemImmutable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QTEST_MAIN(CoronaTest)
|
||||
|
||||
#include "moc_coronatest.cpp"
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014 Marco Martin <mart@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
#ifndef CORONATEST_H
|
||||
#define CORONATEST_H
|
||||
|
||||
#include <QTest>
|
||||
|
||||
#include <QTimer>
|
||||
|
||||
#include "plasma/corona.h"
|
||||
#include "plasma/pluginloader.h"
|
||||
|
||||
class SimpleCorona : public Plasma::Corona
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit SimpleCorona(QObject *parent = nullptr);
|
||||
~SimpleCorona() override;
|
||||
|
||||
QRect screenGeometry(int) const override;
|
||||
int screenForContainment(const Plasma::Containment *) const override;
|
||||
};
|
||||
|
||||
class SimpleApplet : public Plasma::Applet
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit SimpleApplet(QObject *parentObject, const KPluginMetaData &data, const QVariantList &args);
|
||||
|
||||
private:
|
||||
QTimer m_timer;
|
||||
};
|
||||
|
||||
class SimpleContainment : public Plasma::Containment
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit SimpleContainment(QObject *parentObject, const KPluginMetaData &data, const QVariantList &args);
|
||||
|
||||
private:
|
||||
QTimer m_timer;
|
||||
};
|
||||
|
||||
class SimpleNoScreenContainment : public Plasma::Containment
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit SimpleNoScreenContainment(QObject *parentObject, const KPluginMetaData &data, const QVariantList &args);
|
||||
};
|
||||
|
||||
class CoronaTest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public Q_SLOTS:
|
||||
void initTestCase();
|
||||
void cleanupTestCase();
|
||||
|
||||
private Q_SLOTS:
|
||||
void restore();
|
||||
void checkOrder();
|
||||
void startupCompletion();
|
||||
void addRemoveApplets();
|
||||
void immutability();
|
||||
|
||||
private:
|
||||
SimpleCorona *m_corona;
|
||||
QDir m_configDir;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,5 @@
|
||||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource>
|
||||
<file>plasma-test-appletsrc</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="22" height="22" id="svg2" version="1.1" inkscape:version="0.91pre2 r" viewBox="0 0 22 22" sodipodi:docname="plasma.svg">
|
||||
<defs id="defs4">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
.ColorScheme-Background {
|
||||
color:#eff0f1;
|
||||
}
|
||||
.ColorScheme-Highlight {
|
||||
color:#3daee9;
|
||||
}
|
||||
.ColorScheme-ViewText {
|
||||
color:#31363b;
|
||||
}
|
||||
.ColorScheme-ViewBackground {
|
||||
color:#fcfcfc;
|
||||
}
|
||||
.ColorScheme-ViewHover {
|
||||
color:#93cee9;
|
||||
}
|
||||
.ColorScheme-ViewFocus{
|
||||
color:#3daee9;
|
||||
}
|
||||
.ColorScheme-ButtonText {
|
||||
color:#31363b;
|
||||
}
|
||||
.ColorScheme-ButtonBackground {
|
||||
color:#eff0f1;
|
||||
}
|
||||
.ColorScheme-ButtonHover {
|
||||
color:#93cee9;
|
||||
}
|
||||
.ColorScheme-ButtonFocus{
|
||||
color:#3daee9;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="22.627417" inkscape:cx="7.6662963" inkscape:cy="11.508125" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" units="px" inkscape:showpageshadow="false" inkscape:window-width="1366" inkscape:window-height="669" inkscape:window-x="-4" inkscape:window-y="25" inkscape:window-maximized="1" showguides="true">
|
||||
<inkscape:grid type="xygrid" id="grid4101"/>
|
||||
<sodipodi:guide position="2,20.000017" orientation="18,0" id="guide4107"/>
|
||||
<sodipodi:guide position="2,2.0000174" orientation="0,18" id="guide4109"/>
|
||||
<sodipodi:guide position="20,2.0000174" orientation="-18,0" id="guide4111"/>
|
||||
<sodipodi:guide position="20,20.000017" orientation="0,-18" id="guide4113"/>
|
||||
<sodipodi:guide position="3,19.000017" orientation="16,0" id="guide4115"/>
|
||||
<sodipodi:guide position="3,3.0000174" orientation="0,16" id="guide4117"/>
|
||||
<sodipodi:guide position="19,3.0000174" orientation="-16,0" id="guide4119"/>
|
||||
<sodipodi:guide position="19,19.000017" orientation="0,-16" id="guide4121"/>
|
||||
<sodipodi:guide position="10,6.0000174" orientation="-7,0" id="guide4162"/>
|
||||
<sodipodi:guide position="11,12.000017" orientation="5,0" id="guide4280"/>
|
||||
<sodipodi:guide position="11,7.0000174" orientation="0,5" id="guide4282"/>
|
||||
<sodipodi:guide position="16,7.0000174" orientation="-5,0" id="guide4284"/>
|
||||
<sodipodi:guide position="16,12.000017" orientation="0,-5" id="guide4286"/>
|
||||
<sodipodi:guide position="5,13.000017" orientation="6,0" id="guide4294"/>
|
||||
<sodipodi:guide position="5,7.0000174" orientation="0,6" id="guide4296"/>
|
||||
<sodipodi:guide position="11,7.0000174" orientation="-6,0" id="guide4298"/>
|
||||
</sodipodi:namedview>
|
||||
<metadata id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g inkscape:label="Capa 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-1030.3622)">
|
||||
<path style="opacity:1;fill:currentColor;fill-opacity:1;stroke:none" d="M 7 3 C 6.446 3 6 3.446 6 4 C 6 4.554 6.446 5 7 5 C 7.554 5 8 4.554 8 4 C 8 3.446 7.554 3 7 3 z M 14 3 L 12 5 L 15 8 L 12 11 L 14 13 L 17 10 L 19 8 L 14 3 z M 4.5 9 C 3.669 9 3 9.669 3 10.5 C 3 11.331 3.669 12 4.5 12 C 5.331 12 6 11.331 6 10.5 C 6 9.669 5.331 9 4.5 9 z M 9 15 C 7.892 15 7 15.892 7 17 C 7 18.108 7.892 19 9 19 C 10.108 19 11 18.108 11 17 C 11 15.892 10.108 15 9 15 z " transform="translate(0,1030.3622)" id="rect4231" class="ColorScheme-Text"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="22" height="22" id="svg2" version="1.1" inkscape:version="0.91pre2 r" viewBox="0 0 22 22" sodipodi:docname="plasma.svg">
|
||||
<defs id="defs4">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
.ColorScheme-Background {
|
||||
color:#eff0f1;
|
||||
}
|
||||
.ColorScheme-Highlight {
|
||||
color:#3daee9;
|
||||
}
|
||||
.ColorScheme-ViewText {
|
||||
color:#31363b;
|
||||
}
|
||||
.ColorScheme-ViewBackground {
|
||||
color:#fcfcfc;
|
||||
}
|
||||
.ColorScheme-ViewHover {
|
||||
color:#93cee9;
|
||||
}
|
||||
.ColorScheme-ViewFocus{
|
||||
color:#3daee9;
|
||||
}
|
||||
.ColorScheme-ButtonText {
|
||||
color:#31363b;
|
||||
}
|
||||
.ColorScheme-ButtonBackground {
|
||||
color:#eff0f1;
|
||||
}
|
||||
.ColorScheme-ButtonHover {
|
||||
color:#93cee9;
|
||||
}
|
||||
.ColorScheme-ButtonFocus{
|
||||
color:#3daee9;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="22.627417" inkscape:cx="7.6662963" inkscape:cy="11.508125" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" units="px" inkscape:showpageshadow="false" inkscape:window-width="1366" inkscape:window-height="669" inkscape:window-x="-4" inkscape:window-y="25" inkscape:window-maximized="1" showguides="true">
|
||||
<inkscape:grid type="xygrid" id="grid4101"/>
|
||||
<sodipodi:guide position="2,20.000017" orientation="18,0" id="guide4107"/>
|
||||
<sodipodi:guide position="2,2.0000174" orientation="0,18" id="guide4109"/>
|
||||
<sodipodi:guide position="20,2.0000174" orientation="-18,0" id="guide4111"/>
|
||||
<sodipodi:guide position="20,20.000017" orientation="0,-18" id="guide4113"/>
|
||||
<sodipodi:guide position="3,19.000017" orientation="16,0" id="guide4115"/>
|
||||
<sodipodi:guide position="3,3.0000174" orientation="0,16" id="guide4117"/>
|
||||
<sodipodi:guide position="19,3.0000174" orientation="-16,0" id="guide4119"/>
|
||||
<sodipodi:guide position="19,19.000017" orientation="0,-16" id="guide4121"/>
|
||||
<sodipodi:guide position="10,6.0000174" orientation="-7,0" id="guide4162"/>
|
||||
<sodipodi:guide position="11,12.000017" orientation="5,0" id="guide4280"/>
|
||||
<sodipodi:guide position="11,7.0000174" orientation="0,5" id="guide4282"/>
|
||||
<sodipodi:guide position="16,7.0000174" orientation="-5,0" id="guide4284"/>
|
||||
<sodipodi:guide position="16,12.000017" orientation="0,-5" id="guide4286"/>
|
||||
<sodipodi:guide position="5,13.000017" orientation="6,0" id="guide4294"/>
|
||||
<sodipodi:guide position="5,7.0000174" orientation="0,6" id="guide4296"/>
|
||||
<sodipodi:guide position="11,7.0000174" orientation="-6,0" id="guide4298"/>
|
||||
</sodipodi:namedview>
|
||||
<metadata id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g inkscape:label="Capa 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-1030.3622)">
|
||||
<path style="opacity:1;fill:currentColor;fill-opacity:1;stroke:none" d="M 7 3 C 6.446 3 6 3.446 6 4 C 6 4.554 6.446 5 7 5 C 7.554 5 8 4.554 8 4 C 8 3.446 7.554 3 7 3 z M 14 3 L 12 5 L 15 8 L 12 11 L 14 13 L 17 10 L 19 8 L 14 3 z M 4.5 9 C 3.669 9 3 9.669 3 10.5 C 3 11.331 3.669 12 4.5 12 C 5.331 12 6 11.331 6 10.5 C 6 9.669 5.331 9 4.5 9 z M 9 15 C 7.892 15 7 15.892 7 17 C 7 18.108 7.892 19 9 19 C 10.108 19 11 18.108 11 17 C 11 15.892 10.108 15 9 15 z " transform="translate(0,1030.3622)" id="rect4231" class="ColorScheme-Text"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
@@ -0,0 +1,28 @@
|
||||
[Icon Theme]
|
||||
Name=Unittest Theme two
|
||||
|
||||
DisplayDepth=32
|
||||
|
||||
DesktopDefault=48
|
||||
DesktopSizes=16,22,32,48,64,128,256
|
||||
ToolbarDefault=22
|
||||
ToolbarSizes=16,22,32,48
|
||||
MainToolbarDefault=22
|
||||
MainToolbarSizes=16,22,32,48
|
||||
SmallDefault=16
|
||||
SmallSizes=16,22,32,48
|
||||
PanelDefault=32
|
||||
PanelSizes=16,22,32,48,64,128,256
|
||||
DialogDefault=32
|
||||
DialogSizes=16,22,32,48,64,128,256
|
||||
|
||||
########## Directories
|
||||
########## ordered by category and alphabetically
|
||||
|
||||
Directories=apps/22
|
||||
|
||||
[apps/22]
|
||||
Size=22
|
||||
Context=Applications
|
||||
Type=Fixed
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="22" height="22" id="svg2" version="1.1" inkscape:version="0.91pre2 r" viewBox="0 0 22 22" sodipodi:docname="plasma.svg">
|
||||
<defs id="defs4">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
.ColorScheme-Background {
|
||||
color:#eff0f1;
|
||||
}
|
||||
.ColorScheme-Highlight {
|
||||
color:#3daee9;
|
||||
}
|
||||
.ColorScheme-ViewText {
|
||||
color:#31363b;
|
||||
}
|
||||
.ColorScheme-ViewBackground {
|
||||
color:#fcfcfc;
|
||||
}
|
||||
.ColorScheme-ViewHover {
|
||||
color:#93cee9;
|
||||
}
|
||||
.ColorScheme-ViewFocus{
|
||||
color:#3daee9;
|
||||
}
|
||||
.ColorScheme-ButtonText {
|
||||
color:#31363b;
|
||||
}
|
||||
.ColorScheme-ButtonBackground {
|
||||
color:#eff0f1;
|
||||
}
|
||||
.ColorScheme-ButtonHover {
|
||||
color:#93cee9;
|
||||
}
|
||||
.ColorScheme-ButtonFocus{
|
||||
color:#3daee9;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="22.627417" inkscape:cx="7.6662963" inkscape:cy="11.508125" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" units="px" inkscape:showpageshadow="false" inkscape:window-width="1366" inkscape:window-height="669" inkscape:window-x="-4" inkscape:window-y="25" inkscape:window-maximized="1" showguides="true">
|
||||
<inkscape:grid type="xygrid" id="grid4101"/>
|
||||
<sodipodi:guide position="2,20.000017" orientation="18,0" id="guide4107"/>
|
||||
<sodipodi:guide position="2,2.0000174" orientation="0,18" id="guide4109"/>
|
||||
<sodipodi:guide position="20,2.0000174" orientation="-18,0" id="guide4111"/>
|
||||
<sodipodi:guide position="20,20.000017" orientation="0,-18" id="guide4113"/>
|
||||
<sodipodi:guide position="3,19.000017" orientation="16,0" id="guide4115"/>
|
||||
<sodipodi:guide position="3,3.0000174" orientation="0,16" id="guide4117"/>
|
||||
<sodipodi:guide position="19,3.0000174" orientation="-16,0" id="guide4119"/>
|
||||
<sodipodi:guide position="19,19.000017" orientation="0,-16" id="guide4121"/>
|
||||
<sodipodi:guide position="10,6.0000174" orientation="-7,0" id="guide4162"/>
|
||||
<sodipodi:guide position="11,12.000017" orientation="5,0" id="guide4280"/>
|
||||
<sodipodi:guide position="11,7.0000174" orientation="0,5" id="guide4282"/>
|
||||
<sodipodi:guide position="16,7.0000174" orientation="-5,0" id="guide4284"/>
|
||||
<sodipodi:guide position="16,12.000017" orientation="0,-5" id="guide4286"/>
|
||||
<sodipodi:guide position="5,13.000017" orientation="6,0" id="guide4294"/>
|
||||
<sodipodi:guide position="5,7.0000174" orientation="0,6" id="guide4296"/>
|
||||
<sodipodi:guide position="11,7.0000174" orientation="-6,0" id="guide4298"/>
|
||||
</sodipodi:namedview>
|
||||
<metadata id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g inkscape:label="Capa 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-1030.3622)">
|
||||
<path style="opacity:1;fill:currentColor;fill-opacity:1;stroke:none" d="M 7 3 C 6.446 3 6 3.446 6 4 C 6 4.554 6.446 5 7 5 C 7.554 5 8 4.554 8 4 C 8 3.446 7.554 3 7 3 z M 14 3 L 12 5 L 15 8 L 12 11 L 14 13 L 17 10 L 19 8 L 14 3 z M 4.5 9 C 3.669 9 3 9.669 3 10.5 C 3 11.331 3.669 12 4.5 12 C 5.331 12 6 11.331 6 10.5 C 6 9.669 5.331 9 4.5 9 z M 9 15 C 7.892 15 7 15.892 7 17 C 7 18.108 7.892 19 9 19 C 10.108 19 11 18.108 11 17 C 11 15.892 10.108 15 9 15 z " transform="translate(0,1030.3622)" id="rect4231" class="ColorScheme-Text"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
@@ -0,0 +1,763 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="32"
|
||||
height="32"
|
||||
id="svg5453"
|
||||
version="1.1"
|
||||
inkscape:version="0.91+devel r"
|
||||
sodipodi:docname="preferences-desktop-plasma.svg">
|
||||
<defs
|
||||
id="defs5455">
|
||||
<linearGradient
|
||||
id="linearGradient4219"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4221"
|
||||
offset="0"
|
||||
style="stop-color:#c3ced7;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop4223"
|
||||
offset="1"
|
||||
style="stop-color:#e2f4f4;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4219"
|
||||
id="linearGradient5010"
|
||||
x1="400.57144"
|
||||
y1="536.79797"
|
||||
x2="400.57144"
|
||||
y2="522.79797"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4227-9"
|
||||
id="linearGradient5093"
|
||||
x1="9.0000114"
|
||||
y1="7"
|
||||
x2="23"
|
||||
y2="21"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(384.57143,515.798)" />
|
||||
<linearGradient
|
||||
id="linearGradient4227-9"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4229-5"
|
||||
offset="0"
|
||||
style="stop-color:#292c2f;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop4231-6"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4591"
|
||||
id="linearGradient4971"
|
||||
x1="400.57144"
|
||||
y1="545.79797"
|
||||
x2="400.57144"
|
||||
y2="517.79797"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4591">
|
||||
<stop
|
||||
style="stop-color:#7e8f9e;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4593" />
|
||||
<stop
|
||||
style="stop-color:#84ced5;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4595" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4834-8"
|
||||
id="linearGradient5082"
|
||||
x1="403.57144"
|
||||
y1="531.79797"
|
||||
x2="413.57144"
|
||||
y2="531.79797"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4834-8">
|
||||
<stop
|
||||
style="stop-color:#89ad8b;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4836" />
|
||||
<stop
|
||||
style="stop-color:#82b3c7;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4838-3" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4754"
|
||||
id="linearGradient5108"
|
||||
x1="29"
|
||||
y1="7"
|
||||
x2="32"
|
||||
y2="10"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4754">
|
||||
<stop
|
||||
style="stop-color:#768fac;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4756" />
|
||||
<stop
|
||||
style="stop-color:#9fabc4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4758" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4762"
|
||||
id="linearGradient5106"
|
||||
x1="30.000011"
|
||||
y1="4"
|
||||
x2="32.000011"
|
||||
y2="2"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4762">
|
||||
<stop
|
||||
style="stop-color:#7d95ae;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4764" />
|
||||
<stop
|
||||
style="stop-color:#8ba3ba;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4766" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4770"
|
||||
id="linearGradient5090"
|
||||
x1="409.57144"
|
||||
y1="520.79797"
|
||||
x2="413.57147"
|
||||
y2="524.79797"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4770">
|
||||
<stop
|
||||
style="stop-color:#5c7b9e;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4772" />
|
||||
<stop
|
||||
style="stop-color:#839dc0;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4774" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4810-4"
|
||||
id="linearGradient5039"
|
||||
x1="19"
|
||||
y1="5"
|
||||
x2="9"
|
||||
y2="5"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4810-4">
|
||||
<stop
|
||||
style="stop-color:#7fbcc6;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4812" />
|
||||
<stop
|
||||
style="stop-color:#8ee4e3;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4814" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4802-1"
|
||||
id="linearGradient5041"
|
||||
x1="393.57144"
|
||||
y1="522.79797"
|
||||
x2="403.57144"
|
||||
y2="522.79797"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4802-1">
|
||||
<stop
|
||||
style="stop-color:#75d5c7;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4804" />
|
||||
<stop
|
||||
style="stop-color:#66afb9;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4806-3" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4794"
|
||||
id="linearGradient4979"
|
||||
x1="1.1650391e-05"
|
||||
y1="4"
|
||||
x2="9.0000114"
|
||||
y2="4"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4794">
|
||||
<stop
|
||||
style="stop-color:#d1e6b7;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4796" />
|
||||
<stop
|
||||
style="stop-color:#ade8e1;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4798-2" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4786"
|
||||
id="linearGradient5007"
|
||||
x1="9.0000114"
|
||||
y1="12"
|
||||
x2="3.0000114"
|
||||
y2="6"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4786">
|
||||
<stop
|
||||
style="stop-color:#99c487;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4788" />
|
||||
<stop
|
||||
style="stop-color:#b4d99e;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4790" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4778"
|
||||
id="linearGradient5015"
|
||||
x1="0"
|
||||
y1="22"
|
||||
x2="9"
|
||||
y2="16"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4778">
|
||||
<stop
|
||||
style="stop-color:#e1b16f;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4780" />
|
||||
<stop
|
||||
style="stop-color:#99bf83;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4782" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4667"
|
||||
id="linearGradient5031"
|
||||
x1="1.1650391e-05"
|
||||
y1="25"
|
||||
x2="9.0000114"
|
||||
y2="25"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4667">
|
||||
<stop
|
||||
style="stop-color:#f2a686;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4669" />
|
||||
<stop
|
||||
style="stop-color:#f1a67c;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4671" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4675"
|
||||
id="linearGradient5023"
|
||||
x1="4"
|
||||
y1="27"
|
||||
x2="9.0000114"
|
||||
y2="19"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4675">
|
||||
<stop
|
||||
style="stop-color:#e4a56d;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4677" />
|
||||
<stop
|
||||
style="stop-color:#a7bd78;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4679" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4683"
|
||||
id="linearGradient5058"
|
||||
x1="393.57144"
|
||||
y1="538.79797"
|
||||
x2="403.57144"
|
||||
y2="538.79797"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4683">
|
||||
<stop
|
||||
style="stop-color:#c3a278;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4685" />
|
||||
<stop
|
||||
style="stop-color:#6688aa;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4687" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4699"
|
||||
id="linearGradient5074"
|
||||
x1="19"
|
||||
y1="25"
|
||||
x2="29"
|
||||
y2="25"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4699">
|
||||
<stop
|
||||
style="stop-color:#7c8f9d;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4701" />
|
||||
<stop
|
||||
style="stop-color:#7690ac;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4703" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4722"
|
||||
id="linearGradient5124"
|
||||
x1="406.57144"
|
||||
y1="540.79797"
|
||||
x2="413.57141"
|
||||
y2="533.79797"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4722">
|
||||
<stop
|
||||
style="stop-color:#6588af;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4724" />
|
||||
<stop
|
||||
style="stop-color:#8ba8cd;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4726" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4730-0"
|
||||
id="linearGradient5132"
|
||||
x1="29"
|
||||
y1="23"
|
||||
x2="32.000011"
|
||||
y2="23"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4730-0">
|
||||
<stop
|
||||
style="stop-color:#7ea0c5;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4732" />
|
||||
<stop
|
||||
style="stop-color:#a1b1cd;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4734" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4746"
|
||||
id="linearGradient5116"
|
||||
x1="29"
|
||||
y1="18"
|
||||
x2="32.000011"
|
||||
y2="14.999988"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4746">
|
||||
<stop
|
||||
style="stop-color:#91a2c6;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4748" />
|
||||
<stop
|
||||
style="stop-color:#b9b2c5;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4750" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4818"
|
||||
id="linearGradient5098"
|
||||
x1="19"
|
||||
y1="4"
|
||||
x2="29"
|
||||
y2="4"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4818">
|
||||
<stop
|
||||
style="stop-color:#84d5d7;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4820" />
|
||||
<stop
|
||||
style="stop-color:#84a8ba;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4822-2" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4691"
|
||||
id="linearGradient5066"
|
||||
x1="19"
|
||||
y1="25"
|
||||
x2="9"
|
||||
y2="25"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4691">
|
||||
<stop
|
||||
style="stop-color:#748898;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4693" />
|
||||
<stop
|
||||
style="stop-color:#e09c6d;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4695" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4738"
|
||||
id="linearGradient5140"
|
||||
x1="31"
|
||||
y1="29.999973"
|
||||
x2="31"
|
||||
y2="28"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4738">
|
||||
<stop
|
||||
style="stop-color:#889bba;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4740" />
|
||||
<stop
|
||||
style="stop-color:#98a6c3;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4742" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="16"
|
||||
inkscape:cx="14.950779"
|
||||
inkscape:cy="15.256011"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="670"
|
||||
inkscape:window-x="-4"
|
||||
inkscape:window-y="29"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:showpageshadow="false"
|
||||
borderlayer="true"
|
||||
showguides="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4063" />
|
||||
<sodipodi:guide
|
||||
position="1.1650391e-05,32.000026"
|
||||
orientation="32,0"
|
||||
id="guide4157" />
|
||||
<sodipodi:guide
|
||||
position="1.1650391e-05,2.6367188e-05"
|
||||
orientation="0,32"
|
||||
id="guide4159" />
|
||||
<sodipodi:guide
|
||||
position="32.000012,2.6367188e-05"
|
||||
orientation="-32,0"
|
||||
id="guide4161" />
|
||||
<sodipodi:guide
|
||||
position="32.000012,32.000026"
|
||||
orientation="0,-32"
|
||||
id="guide4163" />
|
||||
<sodipodi:guide
|
||||
position="2.0000117,30.000026"
|
||||
orientation="28,0"
|
||||
id="guide4167" />
|
||||
<sodipodi:guide
|
||||
position="34,2.0000264"
|
||||
orientation="0,28"
|
||||
id="guide4169" />
|
||||
<sodipodi:guide
|
||||
position="30.000012,2.0000264"
|
||||
orientation="-28,0"
|
||||
id="guide4171" />
|
||||
<sodipodi:guide
|
||||
position="30.000012,30.000026"
|
||||
orientation="0,-28"
|
||||
id="guide4173" />
|
||||
<sodipodi:guide
|
||||
position="2.0000117,30.000026"
|
||||
orientation="28,0"
|
||||
id="guide4181" />
|
||||
<sodipodi:guide
|
||||
position="2.0000117,2.0000264"
|
||||
orientation="0,14"
|
||||
id="guide4183" />
|
||||
<sodipodi:guide
|
||||
position="16.000012,2.0000264"
|
||||
orientation="-28,0"
|
||||
id="guide4185" />
|
||||
<sodipodi:guide
|
||||
position="16.000012,30.000026"
|
||||
orientation="0,-14"
|
||||
id="guide4187" />
|
||||
<sodipodi:guide
|
||||
position="9.0000117,23.000026"
|
||||
orientation="14,0"
|
||||
id="guide4193" />
|
||||
<sodipodi:guide
|
||||
position="22,11"
|
||||
orientation="0,14.000031"
|
||||
id="guide4195" />
|
||||
<sodipodi:guide
|
||||
position="23.000042,9.0000264"
|
||||
orientation="-14,0"
|
||||
id="guide4197" />
|
||||
<sodipodi:guide
|
||||
position="21,25"
|
||||
orientation="0,-14.000031"
|
||||
id="guide4199" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5458">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Capa 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-384.57143,-515.798)">
|
||||
<g
|
||||
transform="translate(-5.8251953e-6,1.3183594e-5)"
|
||||
id="g5142">
|
||||
<rect
|
||||
y="517.79797"
|
||||
x="384.57144"
|
||||
height="28"
|
||||
width="32"
|
||||
id="rect4963"
|
||||
style="fill:url(#linearGradient4971);fill-opacity:1;stroke:none" />
|
||||
<path
|
||||
style="fill:url(#linearGradient5082);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 403.57144,538.798 9.99999,-7 -9.99999,-7 z"
|
||||
id="path4829"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(384.57143,515.798)"
|
||||
id="path4905"
|
||||
d="M 29,2 29,16 32,13.900391 32,4.0996094 29,2 Z"
|
||||
style="fill:url(#linearGradient5108);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(384.57143,515.798)"
|
||||
id="path4907"
|
||||
d="M 29,2 32,4.0996094 32,2 29,2 Z"
|
||||
style="fill:url(#linearGradient5106);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:url(#linearGradient5090);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 413.57143,531.798 -9.99999,-7 9.99999,-7 z"
|
||||
id="path4833"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(384.57143,515.798)"
|
||||
id="path4843"
|
||||
d="M 9,2 19,9 19,2 9,2 Z"
|
||||
style="fill:url(#linearGradient5039);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4841"
|
||||
d="m 393.57144,531.798 9.99999,-7 -9.99999,-7 z"
|
||||
style="fill:url(#linearGradient5041);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(384.57143,515.798)"
|
||||
id="path4863"
|
||||
d="M 0,2 0,8.3007812 9,2 0,2 Z"
|
||||
style="fill:url(#linearGradient4979);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(384.57143,515.798)"
|
||||
id="path4861"
|
||||
d="M 9,2 0,8.3007812 0,9.6992188 9,16 9,2 Z"
|
||||
style="fill:url(#linearGradient5007);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(384.57143,515.798)"
|
||||
id="path4857"
|
||||
d="M 0,9.6992188 0,22.300781 9,16 0,9.6992188 Z"
|
||||
style="fill:url(#linearGradient5015);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(384.57143,515.798)"
|
||||
id="path4865"
|
||||
d="M 0,23.699219 0,30 9,30 0,23.699219 Z"
|
||||
style="fill:url(#linearGradient5031);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(384.57143,515.798)"
|
||||
id="path4859"
|
||||
d="M 9,16 0,22.300781 0,23.699219 9,30 9,16 Z"
|
||||
style="fill:url(#linearGradient5023);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:url(#linearGradient5058);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 393.57144,545.798 9.99999,-7 -9.99999,-7 z"
|
||||
id="path4839"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(384.57143,515.798)"
|
||||
id="path4837"
|
||||
d="m 19,23 0,7 10,0 -10,-7 z"
|
||||
style="fill:url(#linearGradient5074);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4831"
|
||||
d="m 413.57143,545.798 -9.99999,-7 9.99999,-7 z"
|
||||
style="fill:url(#linearGradient5124);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(384.57143,515.798)"
|
||||
id="path4903"
|
||||
d="m 29,16 0,14 3,-2.099609 0,-9.800782 L 29,16 Z"
|
||||
style="fill:url(#linearGradient5132);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(384.57143,515.798)"
|
||||
id="path4891"
|
||||
d="M 32,13.900391 29,16 l 3,2.099609 0,-4.199218 z"
|
||||
style="fill:url(#linearGradient5116);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(384.57143,515.798)"
|
||||
id="path4835"
|
||||
d="M 19,2 19,9 29,2 19,2 Z"
|
||||
style="fill:url(#linearGradient5098);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(384.57143,515.798)"
|
||||
id="path4845"
|
||||
d="m 19,23 -10,7 10,0 0,-7 z"
|
||||
style="fill:url(#linearGradient5066);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(384.57143,515.798)"
|
||||
id="path4909"
|
||||
d="M 32,27.900391 29,30 l 3,0 0,-2.099609 z"
|
||||
style="fill:url(#linearGradient5140);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot4170"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
transform="translate(389.57143,520.79802)"><flowRegion
|
||||
id="flowRegion4172"><rect
|
||||
id="rect4174"
|
||||
width="27"
|
||||
height="15"
|
||||
x="22"
|
||||
y="3" /></flowRegion><flowPara
|
||||
id="flowPara4176">Plasm</flowPara></flowRoot> <g
|
||||
id="g4480">
|
||||
<path
|
||||
id="path5074"
|
||||
d="m 396.57143,522.89761 0,1.5 7.2168,7.18359 -1.2168,1.2168 13,13 1,0 0,-1.49219 0,-2.49023 0,-5.01758 -9,-9 -2.5332,2.5332 -7.4668,-7.43359 -1,0 z m -2,5.40039 0,2.19922 4,3.97461 0,2.32617 9,9 5.59961,0 -17.59961,-17.5 -1,0 z"
|
||||
style="opacity:0.2;fill:url(#linearGradient5093);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4783"
|
||||
d="m 397.07143,522.798 c -0.48475,0 -0.875,0.39025 -0.875,0.875 0,0.48475 0.39025,0.875 0.875,0.875 0.48475,0 0.875,-0.39025 0.875,-0.875 0,-0.48475 -0.39025,-0.875 -0.875,-0.875 z m 5.5,0 -2,2 3,3 -3,3 2,2 3,-3 2,-2 -2,-2 -3,-3 z m -7.6875,5.25 c -0.72712,0 -1.3125,0.58537 -1.3125,1.3125 0,0.72712 0.58538,1.3125 1.3125,1.3125 0.72713,0 1.3125,-0.58538 1.3125,-1.3125 0,-0.72713 -0.58537,-1.3125 -1.3125,-1.3125 z m 3.9375,5.25 c -0.9695,0 -1.75,0.7805 -1.75,1.75 0,0.9695 0.7805,1.75 1.75,1.75 0.9695,0 1.75,-0.7805 1.75,-1.75 0,-0.9695 -0.7805,-1.75 -1.75,-1.75 z"
|
||||
style="opacity:1;fill:url(#linearGradient5010);fill-opacity:1.0;stroke:none" />
|
||||
</g>
|
||||
<g
|
||||
id="g4783"
|
||||
transform="translate(0,-6.3278198e-5)">
|
||||
<rect
|
||||
y="541.7981"
|
||||
x="384.57144"
|
||||
height="3.9999676"
|
||||
width="31.999952"
|
||||
id="rect4267"
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:0.78431373;stroke:none" />
|
||||
<circle
|
||||
r="1"
|
||||
cy="543.79797"
|
||||
cx="414.57144"
|
||||
id="path4166"
|
||||
style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-opacity:1" />
|
||||
<path
|
||||
id="rect4183"
|
||||
transform="translate(384.57143,515.798)"
|
||||
d="m 2,27 0,1 1,0 0,-1 -1,0 z m 1,1 0,1 1,0 0,-1 -1,0 z"
|
||||
style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,317 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48"
|
||||
height="48"
|
||||
id="svg5453"
|
||||
version="1.1"
|
||||
inkscape:version="0.91+devel r"
|
||||
sodipodi:docname="konversation.svg"
|
||||
inkscape:export-filename="/home/phil/Projects/KDE/Konversation/new/Render/konversation 48x48.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
viewBox="0 0 48 48">
|
||||
<defs
|
||||
id="defs5455">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4984">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0.28627452"
|
||||
offset="0"
|
||||
id="stop4986" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0"
|
||||
offset="1"
|
||||
id="stop4988" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4207"
|
||||
osb:paint="gradient">
|
||||
<stop
|
||||
style="stop-color:#3498db;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3371" />
|
||||
<stop
|
||||
style="stop-color:#3498db;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3373" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4290"
|
||||
id="linearGradient4961"
|
||||
x1="34"
|
||||
y1="34"
|
||||
x2="34"
|
||||
y2="4"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4984"
|
||||
id="linearGradient4990"
|
||||
x1="405.57144"
|
||||
y1="509.798"
|
||||
x2="427.57144"
|
||||
y2="533.79797"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4984"
|
||||
id="linearGradient6136"
|
||||
x1="412.57144"
|
||||
y1="514.79797"
|
||||
x2="425.57144"
|
||||
y2="527.79797"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4143">
|
||||
<stop
|
||||
style="stop-color:#197cf1;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4145" />
|
||||
<stop
|
||||
style="stop-color:#20bcfa;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4147" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4214">
|
||||
<stop
|
||||
style="stop-color:#2f74c8;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4216" />
|
||||
<stop
|
||||
style="stop-color:#4699d7;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4218" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="matrix(-1,0,0,1,432.57143,499.798)"
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4214"
|
||||
id="linearGradient4416"
|
||||
x1="26"
|
||||
y1="43.999973"
|
||||
x2="26"
|
||||
y2="4"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4143"
|
||||
id="linearGradient4149"
|
||||
x1="400.57144"
|
||||
y1="545.79797"
|
||||
x2="400.57144"
|
||||
y2="517.79797"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.92857108,0,0,0.92857057,28.612354,37.986142)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4290">
|
||||
<stop
|
||||
style="stop-color:#7cbaf8;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4292" />
|
||||
<stop
|
||||
style="stop-color:#f4fcff;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4294" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4290"
|
||||
id="linearGradient3077"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.3793103,0,0,1.3793103,1.2413794,1005.6035)"
|
||||
x1="16"
|
||||
y1="29.999973"
|
||||
x2="16"
|
||||
y2="2" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4143"
|
||||
id="linearGradient3083"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.2807877,0,0,1.280787,-450.11598,346.31133)"
|
||||
x1="400.57144"
|
||||
y1="545.79797"
|
||||
x2="400.57144"
|
||||
y2="517.79797" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4290"
|
||||
id="linearGradient3870"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.3793103,0,0,1.3793103,-18.758621,1005.6035)"
|
||||
x1="16"
|
||||
y1="29.999973"
|
||||
x2="16"
|
||||
y2="2" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="9.5134105"
|
||||
inkscape:cx="-12.575111"
|
||||
inkscape:cy="27.618757"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="964"
|
||||
inkscape:window-x="-4"
|
||||
inkscape:window-y="34"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:showpageshadow="false"
|
||||
borderlayer="true"
|
||||
showguides="false"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-others="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4063" />
|
||||
<sodipodi:guide
|
||||
position="1.1650391e-05,47.999996"
|
||||
orientation="4,0"
|
||||
id="guide4146" />
|
||||
<sodipodi:guide
|
||||
position="1.1650391e-05,43.999996"
|
||||
orientation="0,48"
|
||||
id="guide4148" />
|
||||
<sodipodi:guide
|
||||
position="48.000012,43.999996"
|
||||
orientation="-4,0"
|
||||
id="guide4150" />
|
||||
<sodipodi:guide
|
||||
position="48.000012,47.999996"
|
||||
orientation="0,-48"
|
||||
id="guide4152" />
|
||||
<sodipodi:guide
|
||||
position="1.1650391e-05,4.0000264"
|
||||
orientation="4,0"
|
||||
id="guide4154" />
|
||||
<sodipodi:guide
|
||||
position="1.1650391e-05,2.6367188e-05"
|
||||
orientation="0,48"
|
||||
id="guide4156" />
|
||||
<sodipodi:guide
|
||||
position="48.000012,2.6367188e-05"
|
||||
orientation="-4,0"
|
||||
id="guide4158" />
|
||||
<sodipodi:guide
|
||||
position="48.000012,4.0000264"
|
||||
orientation="0,-48"
|
||||
id="guide4160" />
|
||||
<sodipodi:guide
|
||||
position="48.000012,48.000026"
|
||||
orientation="0,-4"
|
||||
id="guide4162" />
|
||||
<sodipodi:guide
|
||||
position="44.000012,48.000026"
|
||||
orientation="48,0"
|
||||
id="guide4164" />
|
||||
<sodipodi:guide
|
||||
position="44.000012,2.6367188e-05"
|
||||
orientation="0,4"
|
||||
id="guide4166" />
|
||||
<sodipodi:guide
|
||||
position="48.000012,2.6367188e-05"
|
||||
orientation="-48,0"
|
||||
id="guide4168" />
|
||||
<sodipodi:guide
|
||||
position="4.0000422,48.000026"
|
||||
orientation="0,-4"
|
||||
id="guide4170" />
|
||||
<sodipodi:guide
|
||||
position="4.2167969e-05,48.000026"
|
||||
orientation="48,0"
|
||||
id="guide4172" />
|
||||
<sodipodi:guide
|
||||
position="4.2167969e-05,2.6367188e-05"
|
||||
orientation="0,4"
|
||||
id="guide4174" />
|
||||
<sodipodi:guide
|
||||
position="4,7"
|
||||
orientation="-48,0"
|
||||
id="guide4176" />
|
||||
<sodipodi:guide
|
||||
position="4.0000422,43.999996"
|
||||
orientation="29.999969,0"
|
||||
id="guide4437" />
|
||||
<sodipodi:guide
|
||||
position="4.0000422,14.000026"
|
||||
orientation="0,39.999969"
|
||||
id="guide4439" />
|
||||
<sodipodi:guide
|
||||
position="44.000012,14.000026"
|
||||
orientation="-29.999969,0"
|
||||
id="guide4441" />
|
||||
<sodipodi:guide
|
||||
position="44.000012,43.999996"
|
||||
orientation="0,-39.999969"
|
||||
id="guide4443" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5458">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Capa 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-384.57143,-499.798)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:url(#linearGradient4416);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 428.57143,503.798 v 30 h -20 l -11,10 v -10 h -9 v -30 z"
|
||||
id="path4445-0" />
|
||||
<path
|
||||
style="opacity:0.2;fill:url(#linearGradient4990);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 402.57143,534.798 -6,-6 v -3 l -3,-3 v -9 h 4 l 1,1 v -1 l 20,-6 10,7.46136 V 533.798 h -26 z"
|
||||
id="path4982"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccc" />
|
||||
<path
|
||||
style="fill:url(#linearGradient6136);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:0.2"
|
||||
d="m 419.57143,521.798 9,9 v -11 l -5,-5 h -4 z"
|
||||
id="path6128"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:url(#linearGradient4961);fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="M 34 8 L 14 14 L 14 23 L 34 29 L 34 23 L 34 14 L 34 8 z M 9 14 L 9 23 L 13 23 L 13 14 L 9 14 z M 35 15 L 35 22 L 39 22 L 39 15 L 35 15 z M 12 24 L 12 29 L 15 29 L 15 24 L 12 24 z "
|
||||
transform="translate(384.57143,499.798)"
|
||||
id="rect3794" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.7 KiB |
@@ -0,0 +1,37 @@
|
||||
[Icon Theme]
|
||||
Name=Unittest Theme
|
||||
|
||||
DisplayDepth=32
|
||||
|
||||
DesktopDefault=48
|
||||
DesktopSizes=16,22,32,48,64,128,256
|
||||
ToolbarDefault=22
|
||||
ToolbarSizes=16,22,32,48
|
||||
MainToolbarDefault=22
|
||||
MainToolbarSizes=16,22,32,48
|
||||
SmallDefault=16
|
||||
SmallSizes=16,22,32,48
|
||||
PanelDefault=32
|
||||
PanelSizes=16,22,32,48,64,128,256
|
||||
DialogDefault=32
|
||||
DialogSizes=16,22,32,48,64,128,256
|
||||
|
||||
########## Directories
|
||||
########## ordered by category and alphabetically
|
||||
|
||||
Directories=apps/22,apps/32,apps/48
|
||||
|
||||
[apps/22]
|
||||
Size=22
|
||||
Context=Applications
|
||||
Type=Fixed
|
||||
|
||||
[apps/32]
|
||||
Size=32
|
||||
Context=Applications
|
||||
Type=Fixed
|
||||
|
||||
[apps/48]
|
||||
Size=48
|
||||
Context=Applications
|
||||
Type=Fixed
|
||||
@@ -0,0 +1,19 @@
|
||||
[Desktop Entry]
|
||||
Name=Plasma test theme
|
||||
|
||||
|
||||
X-KDE-PluginInfo-Author=KDE Visual Design Group
|
||||
X-KDE-PluginInfo-Email=kde-artists@kde.org
|
||||
X-KDE-PluginInfo-Name=default
|
||||
X-KDE-PluginInfo-Version=5.20
|
||||
X-KDE-PluginInfo-Website=https://plasma.kde.org
|
||||
X-KDE-PluginInfo-Category=
|
||||
X-KDE-PluginInfo-License=LGPL
|
||||
X-KDE-PluginInfo-EnabledByDefault=true
|
||||
X-Plasma-API=5.0
|
||||
|
||||
[ContrastEffect]
|
||||
enabled=true
|
||||
contrast=0.23
|
||||
intensity=2.0
|
||||
saturation=1.7
|
||||
@@ -0,0 +1,119 @@
|
||||
[ColorEffects:Disabled]
|
||||
Color=56,56,56
|
||||
ColorAmount=0
|
||||
ColorEffect=0
|
||||
ContrastAmount=0.65
|
||||
ContrastEffect=1
|
||||
IntensityAmount=0.1
|
||||
IntensityEffect=2
|
||||
|
||||
[ColorEffects:Inactive]
|
||||
ChangeSelectionColor=true
|
||||
Color=112,111,110
|
||||
ColorAmount=0.025
|
||||
ColorEffect=2
|
||||
ContrastAmount=0.1
|
||||
ContrastEffect=2
|
||||
Enable=false
|
||||
IntensityAmount=0
|
||||
IntensityEffect=0
|
||||
|
||||
[Colors:Button]
|
||||
BackgroundAlternate=224,223,222
|
||||
BackgroundNormal=239,240,241
|
||||
DecorationFocus=30,146,255
|
||||
DecorationHover=61,174,230
|
||||
ForegroundActive=246,116,0
|
||||
ForegroundInactive=175,176,179
|
||||
ForegroundLink=61,174,230
|
||||
ForegroundNegative=237,21,22
|
||||
ForegroundNeutral=201,206,60
|
||||
ForegroundNormal=49,54,59
|
||||
ForegroundPositive=17,209,23
|
||||
ForegroundVisited=61,174,230
|
||||
|
||||
[Colors:Selection]
|
||||
BackgroundAlternate=48,138,183
|
||||
BackgroundNormal=61,174,230
|
||||
DecorationFocus=30,146,255
|
||||
DecorationHover=61,174,230
|
||||
ForegroundActive=246,116,0
|
||||
ForegroundInactive=146,204,230
|
||||
ForegroundLink=252,252,252
|
||||
ForegroundNegative=237,21,21
|
||||
ForegroundNeutral=201,206,59
|
||||
ForegroundNormal=252,252,252
|
||||
ForegroundPositive=17,209,22
|
||||
ForegroundVisited=252,252,252
|
||||
|
||||
[Colors:Tooltip]
|
||||
BackgroundAlternate=196,224,255
|
||||
BackgroundNormal=239,240,241
|
||||
DecorationFocus=30,146,255
|
||||
DecorationHover=61,174,230
|
||||
ForegroundActive=246,116,0
|
||||
ForegroundInactive=175,176,179
|
||||
ForegroundLink=61,174,230
|
||||
ForegroundNegative=237,21,21
|
||||
ForegroundNeutral=201,206,59
|
||||
ForegroundNormal=49,54,59
|
||||
ForegroundPositive=17,209,22
|
||||
ForegroundVisited=61,174,230
|
||||
|
||||
[Colors:View]
|
||||
BackgroundAlternate=248,247,246
|
||||
BackgroundNormal=252,252,252
|
||||
DecorationFocus=30,146,255
|
||||
DecorationHover=61,174,230
|
||||
ForegroundActive=246,116,0
|
||||
ForegroundInactive=175,176,179
|
||||
ForegroundLink=61,174,230
|
||||
ForegroundNegative=237,21,23
|
||||
ForegroundNeutral=201,206,61
|
||||
ForegroundNormal=49,54,59
|
||||
ForegroundPositive=17,209,24
|
||||
ForegroundVisited=61,174,230
|
||||
|
||||
[Colors:Window]
|
||||
BackgroundAlternate=218,217,216
|
||||
BackgroundNormal=239,240,241
|
||||
DecorationFocus=30,146,255
|
||||
DecorationHover=61,174,230
|
||||
ForegroundActive=246,116,0
|
||||
ForegroundInactive=175,176,179
|
||||
ForegroundLink=61,174,230
|
||||
ForegroundNegative=237,21,21
|
||||
ForegroundNeutral=201,206,59
|
||||
ForegroundNormal=49,54,59
|
||||
ForegroundPositive=17,209,22
|
||||
ForegroundVisited=61,174,230
|
||||
|
||||
[Colors:Complementary]
|
||||
BackgroundAlternate=59,64,69
|
||||
BackgroundNormal=49,54,59
|
||||
DecorationFocus=40,146,255
|
||||
DecorationHover=71,174,230
|
||||
ForegroundActive=246,116,20
|
||||
ForegroundInactive=185,176,179
|
||||
ForegroundLink=71,174,230
|
||||
ForegroundNegative=237,21,24
|
||||
ForegroundNeutral=201,206,62
|
||||
ForegroundNormal=239,240,241
|
||||
ForegroundPositive=17,209,25
|
||||
ForegroundVisited=71,174,230
|
||||
|
||||
[General]
|
||||
ColorScheme=Breeze
|
||||
Name=Breeze
|
||||
shadeSortColumn=true
|
||||
|
||||
[KDE]
|
||||
contrast=7
|
||||
|
||||
[WM]
|
||||
activeBackground=61,174,230
|
||||
activeBlend=252,252,252
|
||||
activeForeground=252,252,252
|
||||
inactiveBackground=123,124,126
|
||||
inactiveBlend=123,124,126
|
||||
inactiveForeground=252,252,252
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "kde-artists@kde.org",
|
||||
"Name": "KDE Visual Design Group"
|
||||
}
|
||||
],
|
||||
"Category": "",
|
||||
"EnabledByDefault": true,
|
||||
"Id": "default",
|
||||
"License": "LGPL",
|
||||
"Name": "Plasma test theme",
|
||||
"Version": "5.20",
|
||||
"Website": "https://www.kde.org/"
|
||||
},
|
||||
"X-Plasma-API": "5.0"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
[ContrastEffect]
|
||||
enabled=true
|
||||
contrast=0.23
|
||||
intensity=2.0
|
||||
saturation=1.7
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"KPlugin": {
|
||||
"Id": "simplecontainment",
|
||||
"Name": "Testcontainment",
|
||||
"Category": "System Information"
|
||||
},
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"X-Plasma-ContainmentType": "Desktop"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
5fd34038c612b9ee59ba9b8199594a370009f7ff
|
||||
@@ -0,0 +1,45 @@
|
||||
// because we put the following line in the metadata.desktop file, we have access
|
||||
// to the HTTP extension in this Plasmoid.
|
||||
//
|
||||
// X-Plasma-RequiredExtensions=http
|
||||
//
|
||||
// More documentation can be found here:
|
||||
//
|
||||
// https://techbase.kde.org/Development/Tutorials/Plasma/JavaScript/API#Extensions
|
||||
|
||||
output = new TextEdit
|
||||
output.readOnly = true
|
||||
|
||||
layout = new LinearLayout
|
||||
layout.orientation = QtVertical
|
||||
layout.addItem(output)
|
||||
|
||||
// in case our request for HTTP urls in the metadata.desktop was rejected (e.g. due
|
||||
// to security restrictions) we won't have a plasmoid.get, so let's check for it
|
||||
// before using it!
|
||||
if (plasmoid.getUrl) {
|
||||
var getJob = plasmoid.getUrl("https://dot.kde.org/rss.xml");
|
||||
function recv(job, data)
|
||||
{
|
||||
if (job == getJob) {
|
||||
print("we have our job")
|
||||
if (data.length) {
|
||||
output.append(data.toUtf8())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fini(job)
|
||||
{
|
||||
if (job == getJob) {
|
||||
print("our job is finished")
|
||||
} else {
|
||||
print("some other job is finished?")
|
||||
}
|
||||
}
|
||||
|
||||
getJob.data.connect(recv)
|
||||
getJob.finished.connect(fini)
|
||||
} else {
|
||||
output.text = i18n("HTTP access denied!")
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "aseigo@kde.org",
|
||||
"Name": "Aaron Seigo"
|
||||
}
|
||||
],
|
||||
"Category": "Examples",
|
||||
"Description": "Demonstrates accessing data via HTTP in JavaScript",
|
||||
"Description[bs]": "Demonstrira pristupanje padacima preko HTTP u JavaScript",
|
||||
"Description[ca@valencia]": "Demostra l'accés a dades via HTTP en JavaScript",
|
||||
"Description[ca]": "Demostra l'accés a dades via HTTP en JavaScript",
|
||||
"Description[cs]": "Ukazuje jak v JavaScriptu přistupovat k datům přes HTTP",
|
||||
"Description[da]": "Demonstrerer tilgang til data via HTTP i JavaScript",
|
||||
"Description[de]": "Demonstriert den Zugriff auf Daten über HTTP in JavaScript",
|
||||
"Description[en_GB]": "Demonstrates accessing data via HTTP in JavaScript",
|
||||
"Description[es]": "Demuestra el acceso a datos usando HTTP en JavaScript",
|
||||
"Description[fi]": "Demonstroi datan hakemista HTTP:n välityksellä käyttäen JavaScriptiä",
|
||||
"Description[fr]": "Illustre l'accès aux données via HTTP en JavaScript",
|
||||
"Description[gd]": "Seallaidh seo mar a nì thu inntrigeadh air dàta le HTTP ann an JavaScript",
|
||||
"Description[gl]": "Demostra o acceso a datos mediante HTTP en JavaScript",
|
||||
"Description[hu]": "Demonstrálja adatok elérését HTTP-n keresztül JavaScriptben",
|
||||
"Description[ia]": "Il demonstra como acceder datos via HTTP inJavaScript",
|
||||
"Description[it]": "Dimostra l'accesso ai dati tramite HTTP in JavaScript",
|
||||
"Description[ko]": "JavaScript 내에서 데이터를 HTTP로 접근하는 과정 시연",
|
||||
"Description[lt]": "Demonstruoja duomenų pasiekimą per HTTP su JavaScript",
|
||||
"Description[mr]": "जावास्क्रिप्ट मध्ये डेटा HTTP ने बघण्याचे प्रदर्शन",
|
||||
"Description[nb]": "Demonstrerer tilgang til data via HTTP i JavaScript",
|
||||
"Description[nds]": "Wiest, wodennig een op Daten över HTTP in JavaScript togriepen kann",
|
||||
"Description[nl]": "Demonstreert toegang tot gegevens via HTTP in JavaScript",
|
||||
"Description[nn]": "Demonstrerer JavaScript-tilgang til data via HTTP",
|
||||
"Description[pl]": "Przedstawia uzyskiwanie dostępu do danych przez HTTP w JavaScript",
|
||||
"Description[pt]": "Demonstra o acesso a dados por HTTP em JavaScript",
|
||||
"Description[pt_BR]": "Demonstra o acesso a dados por HTTP em JavaScript",
|
||||
"Description[ru]": "Демонстрация доступа к данным по HTTP в JavaScript",
|
||||
"Description[sk]": "Demonštruje prístup k údajom cez HTTP v JavaScripte",
|
||||
"Description[sl]": "Predstavi dostopanje do podatkov preko HTTP v JavaScript",
|
||||
"Description[sr@ijekavian]": "Демонстрира приступање подацима преко ХТТП‑а у јаваскрипту",
|
||||
"Description[sr@ijekavianlatin]": "Demonstrira pristupanje podacima preko HTTP‑a u JavaScriptu",
|
||||
"Description[sr@latin]": "Demonstrira pristupanje podacima preko HTTP‑a u JavaScriptu",
|
||||
"Description[sr]": "Демонстрира приступање подацима преко ХТТП‑а у јаваскрипту",
|
||||
"Description[sv]": "Förevisar åtkomst av data via HTTP i Javascript",
|
||||
"Description[tr]": "JavaScript HTTP üzerinden veri erişimini gösterir",
|
||||
"Description[uk]": "Демонстрації доступу до даних за допомогою HTTP мовою JavaScript",
|
||||
"Description[x-test]": "xxDemonstrates accessing data via HTTP in JavaScriptxx",
|
||||
"Description[zh_CN]": "展示在 JavaScript 中通过 HTTP 访问数据",
|
||||
"Description[zh_TW]": "展示如何在 JavaScript 中透過 HTTP 存取資料",
|
||||
"Icon": "text-x-generic",
|
||||
"Id": "org.kde.plasma.simpified-javascript-http-example",
|
||||
"License": "GPL",
|
||||
"Name": "JavaScript File Operations",
|
||||
"Name[bs]": "JavaScript operacije s datotekama",
|
||||
"Name[ca@valencia]": "Operacions amb fitxers en JavaScript",
|
||||
"Name[ca]": "Operacions amb fitxers en JavaScript",
|
||||
"Name[cs]": "Operace souboru JavaScript",
|
||||
"Name[da]": "JavaScript filoperationer",
|
||||
"Name[de]": "JavaScript-Datei-Aktionen",
|
||||
"Name[en_GB]": "JavaScript File Operations",
|
||||
"Name[es]": "Operaciones de archivo JavaScript",
|
||||
"Name[fi]": "JavaScript-tiedostotoiminnot",
|
||||
"Name[fr]": "Opérations sur les fichiers en JavaScript",
|
||||
"Name[gd]": "Obrachaidhean faidhle JavaScript",
|
||||
"Name[gl]": "Operacións de ficheiro JavaScript",
|
||||
"Name[hu]": "JavaScript fájlműveletek",
|
||||
"Name[ia]": "Operationes de file de JavaScript",
|
||||
"Name[it]": "Operazioni su file JavaScript",
|
||||
"Name[ko]": "JavaScript 파일 작업",
|
||||
"Name[lt]": "JavaScript failo operacijos",
|
||||
"Name[mr]": "जावास्क्रिप्ट फाईलच्या क्रिया",
|
||||
"Name[nb]": "JavaScript filhandlinger",
|
||||
"Name[nds]": "JavaScript-Dateiakschonen",
|
||||
"Name[nl]": "Bestandsbewerkingen in JavaScript",
|
||||
"Name[nn]": "JavaScript-filoperasjonar",
|
||||
"Name[pl]": "Operacje plikowe JavaScript",
|
||||
"Name[pt]": "Operações com Ficheiros em JavaScript",
|
||||
"Name[pt_BR]": "Operações com arquivos JavaScript",
|
||||
"Name[ru]": "Операции с файлами в JavaScript",
|
||||
"Name[sk]": "JavaScriptové súborové operácie",
|
||||
"Name[sl]": "Datotečna opravila v JavaScript",
|
||||
"Name[sr@ijekavian]": "Јаваскриптне операције над фајловима",
|
||||
"Name[sr@ijekavianlatin]": "JavaScript operacije nad fajlovima",
|
||||
"Name[sr@latin]": "JavaScript operacije nad fajlovima",
|
||||
"Name[sr]": "Јаваскриптне операције над фајловима",
|
||||
"Name[sv]": "Filåtgärder för Javascript",
|
||||
"Name[tr]": "JavaScript Dosya Operatörleri",
|
||||
"Name[uk]": "Дії з файлами за допомогою JavaScript",
|
||||
"Name[x-test]": "xxJavaScript File Operationsxx",
|
||||
"Name[zh_CN]": "JavaScript 文件操作",
|
||||
"Name[zh_TW]": "JavaScript 檔案操作",
|
||||
"Version": "0.1",
|
||||
"Website": "https://www.kde.org/"
|
||||
},
|
||||
"X-Plasma-OptionalExtensions": "http",
|
||||
"KPackageStructure": "Plasma/Applet"
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2016 David Rosca <nowrep@gmail.com>
|
||||
* SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||
*/
|
||||
import QtQuick
|
||||
import org.kde.plasma.configuration
|
||||
|
||||
ConfigModel {
|
||||
ConfigCategory {
|
||||
name: "General"
|
||||
icon: "plasma"
|
||||
source: "ConfigGeneral.qml"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
|
||||
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
|
||||
<kcfgfile name=""/>
|
||||
|
||||
<group name="General">
|
||||
<entry name="testIntEntry" type="Int">
|
||||
<default>23</default>
|
||||
</entry>
|
||||
<entry name="testStringEntry" type="String">
|
||||
<default>string-value</default>
|
||||
</entry>
|
||||
</group>
|
||||
|
||||
</kcfg>
|
||||
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2016 David Rosca <nowrep@gmail.com>
|
||||
* SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||
*/
|
||||
import QtQuick 2.0
|
||||
|
||||
Rectangle {
|
||||
id: root
|
||||
color: "darkblue"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2016 David Rosca <nowrep@gmail.com>
|
||||
* SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||
*/
|
||||
import QtQuick 2.0
|
||||
|
||||
Rectangle {
|
||||
id: root
|
||||
color: "darkblue"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "jblow@kde.org",
|
||||
"Name": "Joe Blow"
|
||||
}
|
||||
],
|
||||
"Category": "",
|
||||
"Id": "org.kde.configtestpackage",
|
||||
"License": "GPLv2+",
|
||||
"Name": "Config Test Package",
|
||||
"Version": "",
|
||||
"Website": "https://www.kde.org/"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2014 Marco Martin <notmart@gmail.com>
|
||||
* SPDX-FileCopyrightText: 2014 Vishesh Handa <me@vhanda.in>
|
||||
* SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||
*/
|
||||
import QtQuick 2.0
|
||||
|
||||
Rectangle {
|
||||
id: root
|
||||
color: "darkblue"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "mart@kde.org",
|
||||
"Name": "Marco Martin"
|
||||
}
|
||||
],
|
||||
"Category": "",
|
||||
"Id": "org.kde.testfallbackpackage",
|
||||
"License": "GPLv2+",
|
||||
"Name": "Test Fallback Package",
|
||||
"Name[ca@valencia]": "Paquet de proves alternatiu",
|
||||
"Name[ca]": "Paquet de proves alternatiu",
|
||||
"Name[da]": "Test af fallback-pakke",
|
||||
"Name[de]": "Test-Ausweichpaket",
|
||||
"Name[en_GB]": "Test Fallback Package",
|
||||
"Name[es]": "Probar el paquete al que recurrir",
|
||||
"Name[fi]": "Testivarapaketti",
|
||||
"Name[fr]": "Tester le paquet de repli",
|
||||
"Name[gd]": "Pacaid dheuchainneach èiginneach",
|
||||
"Name[gl]": "Paquete de probas por omisión",
|
||||
"Name[hu]": "Tartalék tesztcsomag",
|
||||
"Name[it]": "Pacchetto di ripiego di test",
|
||||
"Name[ko]": "테스트 폴백 패키지",
|
||||
"Name[lt]": "Bandomasis surogatinis paketas",
|
||||
"Name[nb]": "Test reservepakke",
|
||||
"Name[nds]": "Test-Torüchfallpaket",
|
||||
"Name[nl]": "Testterugvalpakket",
|
||||
"Name[nn]": "Test-reservepakke",
|
||||
"Name[pl]": "Zapasowy pakiet próbny",
|
||||
"Name[pt]": "Pacote de Salvaguarda de Testes",
|
||||
"Name[pt_BR]": "Pacote de teste secundário",
|
||||
"Name[ru]": "Тестовый резервный пакет",
|
||||
"Name[sk]": "Testovací záchranný balík",
|
||||
"Name[sl]": "Preizkusni zasilni paket",
|
||||
"Name[sr@ijekavian]": "Пробни одступни пакет",
|
||||
"Name[sr@ijekavianlatin]": "Probni odstupni paket",
|
||||
"Name[sr@latin]": "Probni odstupni paket",
|
||||
"Name[sr]": "Пробни одступни пакет",
|
||||
"Name[sv]": "Reservtestpaket",
|
||||
"Name[tr]": "Yedek Paketi Denetle",
|
||||
"Name[uk]": "Тестовий резервний пакунок",
|
||||
"Name[x-test]": "xxTest Fallback Packagexx",
|
||||
"Name[zh_CN]": "测试回退包",
|
||||
"Name[zh_TW]": "測試預設套件",
|
||||
"Version": "",
|
||||
"Website": "https://www.kde.org/"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
88a45736f27b7b477a470feaacd9e725232c47cc
|
||||
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2014 Marco Martin <notmart@gmail.com>
|
||||
* SPDX-FileCopyrightText: 2014 Sebastian Kügler <sebas@kde.org>
|
||||
* SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||
*/
|
||||
import QtQuick 2.0
|
||||
|
||||
Rectangle {
|
||||
id: root
|
||||
color: "darkblue"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2014 Marco Martin <notmart@gmail.com>
|
||||
* SPDX-FileCopyrightText: 2014 Vishesh Handa <me@vhanda.in>
|
||||
* SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||
*/
|
||||
import QtQuick 2.0
|
||||
|
||||
Rectangle {
|
||||
id: root
|
||||
color: "darkblue"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "jblow@kde.org",
|
||||
"Name": "Joe Blow"
|
||||
}
|
||||
],
|
||||
"Category": "",
|
||||
"Id": "org.kde.testpackage",
|
||||
"License": "GPLv2+",
|
||||
"Name": "Test Package",
|
||||
"Name[ar]": "حزمة اختبارية",
|
||||
"Name[bs]": "Testni paket",
|
||||
"Name[ca@valencia]": "Paquet de proves",
|
||||
"Name[ca]": "Paquet de proves",
|
||||
"Name[cs]": "Testovací balíček",
|
||||
"Name[da]": "Testpakke",
|
||||
"Name[de]": "Test-Paket",
|
||||
"Name[en_GB]": "Test Package",
|
||||
"Name[es]": "Probar el paquete",
|
||||
"Name[fi]": "Testipaketti",
|
||||
"Name[fr]": "Paquet de test",
|
||||
"Name[gd]": "Pacaid dheuchainneach",
|
||||
"Name[gl]": "Paquete de probas",
|
||||
"Name[hu]": "Tesztcsomag",
|
||||
"Name[ia]": "Pacchetto de prova",
|
||||
"Name[it]": "Pacchetto di prova",
|
||||
"Name[ko]": "테스트 패키지",
|
||||
"Name[lt]": "Bandomasis paketas",
|
||||
"Name[mr]": "चाचणी पॅकेज",
|
||||
"Name[nb]": "Test pakke",
|
||||
"Name[nds]": "Testpaket",
|
||||
"Name[nl]": "Testpakket",
|
||||
"Name[nn]": "Testpakke",
|
||||
"Name[pa]": "ਟੈਸਟ ਪੈਕੇਜ",
|
||||
"Name[pl]": "Pakiet próbny",
|
||||
"Name[pt]": "Pacote de Teste",
|
||||
"Name[pt_BR]": "Pacote de teste",
|
||||
"Name[ru]": "Тестовый пакет",
|
||||
"Name[sk]": "Testovací balík",
|
||||
"Name[sl]": "Preizkusni paket",
|
||||
"Name[sr@ijekavian]": "Пробни пакет",
|
||||
"Name[sr@ijekavianlatin]": "Probni paket",
|
||||
"Name[sr@latin]": "Probni paket",
|
||||
"Name[sr]": "Пробни пакет",
|
||||
"Name[sv]": "Testpaket",
|
||||
"Name[tr]": "Paketi Denetle",
|
||||
"Name[uk]": "Тестовий пакунок",
|
||||
"Name[x-test]": "xxTest Packagexx",
|
||||
"Name[zh_CN]": "测试包",
|
||||
"Name[zh_TW]": "測試套件"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2016 David Rosca <nowrep@gmail.com>
|
||||
* SPDX-FileCopyrightText: 2016 Marco Martin <notmart@gmail.com>
|
||||
* SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||
*/
|
||||
import QtQuick
|
||||
Item {
|
||||
width: 100
|
||||
height: 100
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
# SPDX-FileCopyrightText: 2024 Fushan Wen <qydwhotmail@gmail.com>
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
add_executable(qmltest qmltest.cpp)
|
||||
target_link_libraries(qmltest Qt::QuickTest Qt::Qml Plasma::Plasma)
|
||||
|
||||
add_test(
|
||||
NAME bug485688test
|
||||
COMMAND qmltest -import ${CMAKE_BINARY_DIR}/bin -input "${CMAKE_CURRENT_SOURCE_DIR}/bug485688.qml"
|
||||
)
|
||||
@@ -0,0 +1,31 @@
|
||||
// SPDX-FileCopyrightText: 2024 Fushan Wen <qydwhotmail@gmail.com>
|
||||
// SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
|
||||
import QtQuick
|
||||
import QtTest
|
||||
|
||||
import org.kde.plasma.components as PC3
|
||||
import org.kde.plasma.extras as PlasmaExtras
|
||||
|
||||
// Make sure the text field and the button have (almost) the same height
|
||||
TestCase {
|
||||
id: root
|
||||
width: 640
|
||||
height: 480
|
||||
when: windowShown
|
||||
|
||||
PlasmaExtras.SearchField {
|
||||
id: searchField
|
||||
}
|
||||
PC3.ToolButton {
|
||||
id: pinButton
|
||||
icon.name: "window-pin"
|
||||
text: "Keep Open"
|
||||
display: PC3.ToolButton.IconOnly
|
||||
}
|
||||
|
||||
function test_compareHeight() {
|
||||
verify(searchField.implicitBackgroundHeight > 0);
|
||||
compare(searchField.implicitBackgroundHeight, pinButton.implicitBackgroundHeight + 4);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
// SPDX-FileCopyrightText: 2024 Fushan Wen <qydwhotmail@gmail.com>
|
||||
// SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
|
||||
#include <QQmlEngine>
|
||||
#include <QtQuickTest>
|
||||
|
||||
#include <Plasma/Plasma>
|
||||
|
||||
class Setup : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_DISABLE_COPY_MOVE(Setup)
|
||||
|
||||
public:
|
||||
explicit Setup()
|
||||
{
|
||||
}
|
||||
|
||||
public Q_SLOTS:
|
||||
void applicationAvailable()
|
||||
{
|
||||
}
|
||||
|
||||
void qmlEngineAvailable(QQmlEngine *engine)
|
||||
{
|
||||
// Initialization requiring the QQmlEngine to be constructed
|
||||
Plasma::setupPlasmaStyle(engine);
|
||||
}
|
||||
|
||||
void cleanupTestCase()
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
QUICK_TEST_MAIN_WITH_SETUP(QuickTest, Setup)
|
||||
|
||||
#include "qmltest.moc"
|
||||
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014 Marco Martin <mart@kde.org>
|
||||
SPDX-FileCopyrightText: 2023 Harald Sitter <sitter@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "dialognativetest.h"
|
||||
|
||||
#include "utils.h"
|
||||
|
||||
#include <KWindowSystem>
|
||||
#include <KX11Extras>
|
||||
|
||||
namespace
|
||||
{
|
||||
constexpr auto panelHeight = 50;
|
||||
constexpr auto panelWidth = panelHeight;
|
||||
constexpr qreal content1Width = 100;
|
||||
constexpr qreal content1Height = content1Width;
|
||||
constexpr qreal content2Width = 50;
|
||||
constexpr qreal content2Height = 25;
|
||||
} // namespace
|
||||
|
||||
void DialogNativeTest::initTestCase()
|
||||
{
|
||||
QStandardPaths::setTestModeEnabled(true);
|
||||
Plasma::TestUtils::installPlasmaTheme();
|
||||
|
||||
m_cacheDir = QDir(QStandardPaths::writableLocation(QStandardPaths::CacheLocation));
|
||||
m_cacheDir.removeRecursively();
|
||||
|
||||
m_dialog = new PlasmaQuick::Dialog;
|
||||
m_dialog->setLocation(Plasma::Types::TopEdge);
|
||||
|
||||
m_panel = new QQuickView;
|
||||
m_panel->setColor(Qt::red);
|
||||
m_panel->setGeometry(0, 0, panelHeight, panelWidth);
|
||||
m_panel->setFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
|
||||
|
||||
m_panel2 = new QQuickView;
|
||||
m_panel2->setColor(Qt::green);
|
||||
m_panel2->setGeometry(panelWidth * 2, 0, panelHeight, panelWidth);
|
||||
m_panel2->setFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
|
||||
|
||||
m_panel3 = new QQuickView;
|
||||
m_panel3->setColor(Qt::blue);
|
||||
m_panel3->setGeometry(panelWidth * 4, 0, panelHeight, panelWidth);
|
||||
m_panel3->setFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
|
||||
|
||||
m_content = new QQuickItem;
|
||||
m_content->setWidth(content1Width);
|
||||
m_content->setHeight(content1Height);
|
||||
m_dialog->setMainItem(m_content);
|
||||
|
||||
m_content2 = new QQuickItem(m_panel3->contentItem());
|
||||
m_content2->setWidth(content2Width);
|
||||
m_content2->setHeight(content2Height);
|
||||
|
||||
m_panel->show();
|
||||
m_panel2->show();
|
||||
m_panel3->show();
|
||||
KX11Extras::setType(m_panel->winId(), NET::Dock);
|
||||
KX11Extras::setType(m_panel3->winId(), NET::Dock);
|
||||
m_dialog->setVisualParent(m_panel->contentItem());
|
||||
m_dialog->show();
|
||||
}
|
||||
|
||||
void DialogNativeTest::cleanupTestCase()
|
||||
{
|
||||
delete m_dialog;
|
||||
delete m_panel;
|
||||
delete m_panel2;
|
||||
delete m_panel3;
|
||||
delete m_content;
|
||||
|
||||
m_cacheDir.removeRecursively();
|
||||
}
|
||||
|
||||
void DialogNativeTest::size()
|
||||
{
|
||||
QVERIFY(QTest::qWaitForWindowExposed(m_dialog));
|
||||
|
||||
QCOMPARE(m_content->width(), content1Width);
|
||||
QCOMPARE(m_content->height(), content1Height);
|
||||
|
||||
constexpr qreal themeFixedMargin = 6.0;
|
||||
QCOMPARE(m_dialog->margins()->property("left").value<qreal>(), themeFixedMargin);
|
||||
QCOMPARE(m_dialog->margins()->property("top").value<qreal>(), themeFixedMargin);
|
||||
QCOMPARE(m_dialog->margins()->property("right").value<qreal>(), themeFixedMargin);
|
||||
QCOMPARE(m_dialog->margins()->property("bottom").value<qreal>(), themeFixedMargin);
|
||||
|
||||
QCOMPARE(m_dialog->width(), content1Width + themeFixedMargin * 2);
|
||||
QCOMPARE(m_dialog->height(), content1Height + themeFixedMargin * 2);
|
||||
|
||||
QCOMPARE(m_content2->width(), content2Width);
|
||||
QCOMPARE(m_content2->height(), content2Height);
|
||||
}
|
||||
|
||||
void DialogNativeTest::position()
|
||||
{
|
||||
QVERIFY(QTest::qWaitForWindowExposed(m_dialog));
|
||||
|
||||
// Find where the outermost test-panel lives. Normally that would be
|
||||
// at x,y = (0,0) but if the test is run on a desktop with a
|
||||
// left-hand-edge panel, then the test-panel is placed next to it.
|
||||
const auto upper_left_x = m_panel->x();
|
||||
const auto upper_left_y = m_panel->y();
|
||||
|
||||
constexpr auto offset = 1;
|
||||
constexpr auto anchorY = panelHeight - offset;
|
||||
|
||||
QCOMPARE(m_dialog->x(), upper_left_x + 0);
|
||||
QCOMPARE(m_dialog->y(), upper_left_y + anchorY);
|
||||
|
||||
m_dialog->setVisualParent(m_panel2->contentItem());
|
||||
// this derives from the center point of the current panel, I am too lazy to calculate this - sitter, 2023
|
||||
QCOMPARE(m_dialog->x(), 69);
|
||||
QCOMPARE(m_dialog->y(), anchorY);
|
||||
|
||||
m_panel3->setMask(QRect(0, 0, panelWidth, panelHeight / 2));
|
||||
m_dialog->setVisualParent(m_content2);
|
||||
QCOMPARE(m_dialog->x(), 169);
|
||||
QCOMPARE(m_dialog->y(), panelHeight / 2 - offset);
|
||||
}
|
||||
|
||||
QTEST_MAIN(DialogNativeTest)
|
||||
|
||||
#include "moc_dialognativetest.cpp"
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014 Marco Martin <mart@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
#ifndef DIALOGNATIVETEST_H
|
||||
#define DIALOGNATIVETEST_H
|
||||
|
||||
#include <QQuickItem>
|
||||
#include <QQuickView>
|
||||
#include <QTest>
|
||||
|
||||
#include "plasmaquick/dialog.h"
|
||||
|
||||
class DialogNativeTest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public Q_SLOTS:
|
||||
void initTestCase();
|
||||
void cleanupTestCase();
|
||||
|
||||
private Q_SLOTS:
|
||||
void size();
|
||||
void position();
|
||||
|
||||
private:
|
||||
QQuickView *m_panel;
|
||||
QQuickView *m_panel2;
|
||||
QQuickView *m_panel3;
|
||||
QQuickItem *m_content;
|
||||
QQuickItem *m_content2;
|
||||
PlasmaQuick::Dialog *m_dialog;
|
||||
QDir m_cacheDir;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014 David Edmundson <davidedmundson@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "dialogqmltest.h"
|
||||
|
||||
#include <plasma.h>
|
||||
|
||||
#include <QQmlContext>
|
||||
#include <QQmlEngine>
|
||||
|
||||
#include <QSignalSpy>
|
||||
|
||||
// this test checks that we don't set visible to true until after we set the window flags
|
||||
void DialogQmlTest::loadAndShow()
|
||||
{
|
||||
QQmlEngine engine;
|
||||
|
||||
QByteArray dialogQml =
|
||||
"import QtQuick 2.0\n"
|
||||
"import org.kde.plasma.core as PlasmaCore\n"
|
||||
"\n"
|
||||
"PlasmaCore.Dialog {\n"
|
||||
" id: root\n"
|
||||
"\n"
|
||||
" location: true && PlasmaCore.Types.TopEdge\n"
|
||||
" visible: true && true\n"
|
||||
" type: true && PlasmaCore.Dialog.Notification\n"
|
||||
"\n"
|
||||
" mainItem: Rectangle {\n"
|
||||
" width: 200\n"
|
||||
" height: 200\n"
|
||||
" }\n"
|
||||
"}\n";
|
||||
|
||||
// we use true && Value to force it to be a complex binding, which won't be evaluated in
|
||||
// component.beginCreate
|
||||
// the bug still appears without this, but we need to delay it in this test
|
||||
// so we can connect to the visibleChanged signal
|
||||
|
||||
QQmlComponent component(&engine);
|
||||
|
||||
QSignalSpy spy(&component, SIGNAL(statusChanged(QQmlComponent::Status)));
|
||||
component.setData(dialogQml, QUrl(QStringLiteral("test://dialogTest")));
|
||||
spy.wait();
|
||||
|
||||
PlasmaQuick::Dialog *dialog = qobject_cast<PlasmaQuick::Dialog *>(component.beginCreate(engine.rootContext()));
|
||||
qDebug() << component.errorString();
|
||||
Q_ASSERT(dialog);
|
||||
|
||||
m_dialogShown = false;
|
||||
|
||||
// this will be called during component.completeCreate
|
||||
auto c = connect(dialog, &QWindow::visibleChanged, this, [this, dialog]() {
|
||||
m_dialogShown = true;
|
||||
QCOMPARE(dialog->type(), PlasmaQuick::Dialog::Notification);
|
||||
QCOMPARE(dialog->location(), Plasma::Types::TopEdge);
|
||||
});
|
||||
|
||||
component.completeCreate();
|
||||
QCOMPARE(m_dialogShown, true);
|
||||
|
||||
// disconnect on visible changed before we delete the dialog
|
||||
disconnect(c);
|
||||
|
||||
delete dialog;
|
||||
}
|
||||
|
||||
QTEST_MAIN(DialogQmlTest)
|
||||
|
||||
#include "moc_dialogqmltest.cpp"
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014 Marco Martin <mart@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
#ifndef DIALOGQMLTEST_H
|
||||
#define DIALOGQMLTEST_H
|
||||
|
||||
#include <QTest>
|
||||
|
||||
#include "plasmaquick/dialog.h"
|
||||
|
||||
class DialogQmlTest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private Q_SLOTS:
|
||||
void loadAndShow();
|
||||
|
||||
private:
|
||||
bool m_dialogShown;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2016 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "dialogstatetest.h"
|
||||
#include <KWindowInfo>
|
||||
#include <KX11Extras>
|
||||
|
||||
#include <QSignalSpy>
|
||||
|
||||
void DialogStateTest::initTestCase()
|
||||
{
|
||||
m_dialog = new PlasmaQuick::Dialog;
|
||||
m_dialog->setLocation(Plasma::Types::TopEdge);
|
||||
m_dialog->setGeometry(0, 0, 50, 50);
|
||||
|
||||
qRegisterMetaType<WId>("WId");
|
||||
}
|
||||
|
||||
void DialogStateTest::cleanupTestCase()
|
||||
{
|
||||
delete m_dialog;
|
||||
}
|
||||
|
||||
void DialogStateTest::windowState()
|
||||
{
|
||||
if (QGuiApplication::platformName() == "wayland") {
|
||||
QEXPECT_FAIL("windowState", "KX11Extras::windowAdded doesn't work on wayland", Continue);
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i <= 100; ++i) {
|
||||
m_dialog->show();
|
||||
|
||||
QSignalSpy windowAddedSpy(KX11Extras::self(), &KX11Extras::windowAdded);
|
||||
QVERIFY(windowAddedSpy.isValid());
|
||||
QVERIFY(windowAddedSpy.wait());
|
||||
|
||||
bool windowAdded = false;
|
||||
|
||||
while (windowAddedSpy.count()) {
|
||||
const QVariantList &arguments = windowAddedSpy.takeFirst();
|
||||
|
||||
if (arguments.at(0).value<WId>() == m_dialog->winId()) {
|
||||
windowAdded = true;
|
||||
break;
|
||||
}
|
||||
if (windowAddedSpy.isEmpty()) {
|
||||
QVERIFY(windowAddedSpy.wait());
|
||||
}
|
||||
}
|
||||
|
||||
QVERIFY(windowAdded);
|
||||
|
||||
QVERIFY(verifyState(m_dialog));
|
||||
|
||||
m_dialog->hide();
|
||||
|
||||
QSignalSpy windowRemovedSpy(KX11Extras::self(), &KX11Extras::windowRemoved);
|
||||
QVERIFY(windowRemovedSpy.isValid());
|
||||
QVERIFY(windowRemovedSpy.wait());
|
||||
|
||||
bool windowRemoved = false;
|
||||
|
||||
while (windowRemovedSpy.count()) {
|
||||
const QVariantList &arguments = windowRemovedSpy.takeFirst();
|
||||
|
||||
if (arguments.at(0).value<WId>() == m_dialog->winId()) {
|
||||
windowRemoved = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
QVERIFY(windowRemoved);
|
||||
}
|
||||
}
|
||||
|
||||
bool DialogStateTest::verifyState(PlasmaQuick::Dialog *dialog) const
|
||||
{
|
||||
KWindowInfo info(dialog->winId(), NET::WMState);
|
||||
|
||||
if (!(info.state() & NET::SkipTaskbar)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!info.hasState(NET::SkipPager)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
QTEST_MAIN(DialogStateTest)
|
||||
|
||||
#include "moc_dialogstatetest.cpp"
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2016 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
#ifndef DIALOGSTATETEST_H
|
||||
#define DIALOGSTATETEST_H
|
||||
|
||||
#include <QTest>
|
||||
|
||||
#include "plasmaquick/dialog.h"
|
||||
|
||||
class DialogStateTest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public Q_SLOTS:
|
||||
void initTestCase();
|
||||
void cleanupTestCase();
|
||||
|
||||
private Q_SLOTS:
|
||||
void windowState();
|
||||
|
||||
private:
|
||||
bool verifyState(PlasmaQuick::Dialog *dialog) const;
|
||||
|
||||
PlasmaQuick::Dialog *m_dialog;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,17 @@
|
||||
#include "containmentactions.h"
|
||||
#include <KPluginFactory>
|
||||
|
||||
class DummyContainmentAction : public Plasma::ContainmentActions
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit DummyContainmentAction(QObject *parent)
|
||||
: Plasma::ContainmentActions(parent)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
K_PLUGIN_CLASS_WITH_JSON(DummyContainmentAction, "dummycontainmentaction.json")
|
||||
|
||||
#include "dummycontainmentaction.moc"
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"KPlugin": {
|
||||
"Name": "DummyContainmentActions"
|
||||
},
|
||||
"X-KDE-ParentApp": "plasma-shell"
|
||||
}
|
||||
@@ -0,0 +1,292 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2009 Stephen Kelly <steveire@gmail.com>
|
||||
SPDX-FileCopyrightText: 2009 Nokia Corporation and /or its subsidiary(-ies) <qt-info@nokia.com>
|
||||
|
||||
This file is part of the test suite of the Qt Toolkit.
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.1-only WITH Qt-LGPL-exception-1.1
|
||||
*/
|
||||
|
||||
#include "dynamictreemodel.h"
|
||||
|
||||
#include <QTimer>
|
||||
|
||||
DynamicTreeModel::DynamicTreeModel(QObject *parent)
|
||||
: QAbstractItemModel(parent)
|
||||
, nextId(1)
|
||||
{
|
||||
}
|
||||
|
||||
QModelIndex DynamicTreeModel::index(int row, int column, const QModelIndex &parent) const
|
||||
{
|
||||
// if (column != 0)
|
||||
// return QModelIndex();
|
||||
|
||||
if (column < 0 || row < 0) {
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
QList<QList<qint64>> childIdColumns = m_childItems.value(parent.internalId());
|
||||
|
||||
const qint64 grandParent = findParentId(parent.internalId());
|
||||
if (grandParent >= 0) {
|
||||
QList<QList<qint64>> parentTable = m_childItems.value(grandParent);
|
||||
Q_ASSERT(parent.column() < parentTable.size());
|
||||
QList<qint64> parentSiblings = parentTable.at(parent.column());
|
||||
Q_ASSERT(parent.row() < parentSiblings.size());
|
||||
}
|
||||
|
||||
if (childIdColumns.size() == 0) {
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
if (column >= childIdColumns.size()) {
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
QList<qint64> rowIds = childIdColumns.at(column);
|
||||
|
||||
if (row >= rowIds.size()) {
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
qint64 id = rowIds.at(row);
|
||||
|
||||
return createIndex(row, column, reinterpret_cast<void *>(id));
|
||||
}
|
||||
|
||||
qint64 DynamicTreeModel::findParentId(qint64 searchId) const
|
||||
{
|
||||
if (searchId <= 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
QHashIterator<qint64, QList<QList<qint64>>> i(m_childItems);
|
||||
while (i.hasNext()) {
|
||||
i.next();
|
||||
QListIterator<QList<qint64>> j(i.value());
|
||||
while (j.hasNext()) {
|
||||
QList<qint64> l = j.next();
|
||||
if (l.contains(searchId)) {
|
||||
return i.key();
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
QModelIndex DynamicTreeModel::parent(const QModelIndex &index) const
|
||||
{
|
||||
if (!index.isValid()) {
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
qint64 searchId = index.internalId();
|
||||
qint64 parentId = findParentId(searchId);
|
||||
// Will never happen for valid index, but what the hey...
|
||||
if (parentId <= 0) {
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
qint64 grandParentId = findParentId(parentId);
|
||||
if (grandParentId < 0) {
|
||||
grandParentId = 0;
|
||||
}
|
||||
|
||||
int column = 0;
|
||||
QList<qint64> childList = m_childItems.value(grandParentId).at(column);
|
||||
|
||||
int row = childList.indexOf(parentId);
|
||||
|
||||
return createIndex(row, column, reinterpret_cast<void *>(parentId));
|
||||
}
|
||||
|
||||
int DynamicTreeModel::rowCount(const QModelIndex &index) const
|
||||
{
|
||||
QList<QList<qint64>> cols = m_childItems.value(index.internalId());
|
||||
|
||||
if (cols.size() == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (index.column() > 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return cols.at(0).size();
|
||||
}
|
||||
|
||||
int DynamicTreeModel::columnCount(const QModelIndex &index) const
|
||||
{
|
||||
// Q_UNUSED(index);
|
||||
return m_childItems.value(index.internalId()).size();
|
||||
}
|
||||
|
||||
QVariant DynamicTreeModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if (!index.isValid()) {
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
if (Qt::DisplayRole == role) {
|
||||
return m_items.value(index.internalId());
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
void DynamicTreeModel::clear()
|
||||
{
|
||||
beginResetModel();
|
||||
m_items.clear();
|
||||
m_childItems.clear();
|
||||
nextId = 1;
|
||||
endResetModel();
|
||||
}
|
||||
|
||||
ModelChangeCommand::ModelChangeCommand(DynamicTreeModel *model, QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_model(model)
|
||||
, m_numCols(1)
|
||||
, m_startRow(-1)
|
||||
, m_endRow(-1)
|
||||
{
|
||||
}
|
||||
|
||||
QModelIndex ModelChangeCommand::findIndex(QList<int> rows)
|
||||
{
|
||||
const int col = 0;
|
||||
QModelIndex parent = QModelIndex();
|
||||
QListIterator<int> i(rows);
|
||||
while (i.hasNext()) {
|
||||
parent = m_model->index(i.next(), col, parent);
|
||||
Q_ASSERT(parent.isValid());
|
||||
}
|
||||
return parent;
|
||||
}
|
||||
|
||||
ModelInsertCommand::ModelInsertCommand(DynamicTreeModel *model, QObject *parent)
|
||||
: ModelChangeCommand(model, parent)
|
||||
{
|
||||
}
|
||||
|
||||
void ModelInsertCommand::doCommand()
|
||||
{
|
||||
QModelIndex parent = findIndex(m_rowNumbers);
|
||||
m_model->beginInsertRows(parent, m_startRow, m_endRow);
|
||||
qint64 parentId = parent.internalId();
|
||||
for (int row = m_startRow; row <= m_endRow; row++) {
|
||||
for (int col = 0; col < m_numCols; col++) {
|
||||
if (m_model->m_childItems[parentId].size() <= col) {
|
||||
m_model->m_childItems[parentId].append(QList<qint64>());
|
||||
}
|
||||
// QString name = QUuid::createUuid().toString();
|
||||
qint64 id = m_model->newId();
|
||||
QString name = QString::number(id);
|
||||
|
||||
m_model->m_items.insert(id, name);
|
||||
m_model->m_childItems[parentId][col].insert(row, id);
|
||||
}
|
||||
}
|
||||
m_model->endInsertRows();
|
||||
}
|
||||
|
||||
ModelMoveCommand::ModelMoveCommand(DynamicTreeModel *model, QObject *parent)
|
||||
: ModelChangeCommand(model, parent)
|
||||
{
|
||||
}
|
||||
bool ModelMoveCommand::emitPreSignal(const QModelIndex &srcParent, int srcStart, int srcEnd, const QModelIndex &destParent, int destRow)
|
||||
{
|
||||
return m_model->beginMoveRows(srcParent, srcStart, srcEnd, destParent, destRow);
|
||||
}
|
||||
|
||||
void ModelMoveCommand::doCommand()
|
||||
{
|
||||
QModelIndex srcParent = findIndex(m_rowNumbers);
|
||||
QModelIndex destParent = findIndex(m_destRowNumbers);
|
||||
|
||||
if (!emitPreSignal(srcParent, m_startRow, m_endRow, destParent, m_destRow)) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (int column = 0; column < m_numCols; ++column) {
|
||||
const QList<qint64> lst = m_model->m_childItems.value(srcParent.internalId())[column].mid(m_startRow, m_endRow - m_startRow + 1);
|
||||
|
||||
for (int i = m_startRow; i <= m_endRow; i++) {
|
||||
m_model->m_childItems[srcParent.internalId()][column].removeAt(m_startRow);
|
||||
}
|
||||
int d;
|
||||
if (m_destRow < m_startRow) {
|
||||
d = m_destRow;
|
||||
} else {
|
||||
if (srcParent == destParent) {
|
||||
d = m_destRow - (m_endRow - m_startRow + 1);
|
||||
} else {
|
||||
d = m_destRow - (m_endRow - m_startRow) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
for (const qint64 id : lst) {
|
||||
m_model->m_childItems[destParent.internalId()][column].insert(d++, id);
|
||||
}
|
||||
}
|
||||
|
||||
emitPostSignal();
|
||||
}
|
||||
|
||||
void ModelMoveCommand::emitPostSignal()
|
||||
{
|
||||
m_model->endMoveRows();
|
||||
}
|
||||
|
||||
ModelResetCommand::ModelResetCommand(DynamicTreeModel *model, QObject *parent)
|
||||
: ModelMoveCommand(model, parent)
|
||||
{
|
||||
}
|
||||
|
||||
ModelResetCommand::~ModelResetCommand()
|
||||
{
|
||||
}
|
||||
|
||||
bool ModelResetCommand::emitPreSignal(const QModelIndex &srcParent, int srcStart, int srcEnd, const QModelIndex &destParent, int destRow)
|
||||
{
|
||||
Q_UNUSED(srcParent);
|
||||
Q_UNUSED(srcStart);
|
||||
Q_UNUSED(srcEnd);
|
||||
Q_UNUSED(destParent);
|
||||
Q_UNUSED(destRow);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void ModelResetCommand::emitPostSignal()
|
||||
{
|
||||
m_model->reset();
|
||||
}
|
||||
|
||||
ModelResetCommandFixed::ModelResetCommandFixed(DynamicTreeModel *model, QObject *parent)
|
||||
: ModelMoveCommand(model, parent)
|
||||
{
|
||||
}
|
||||
|
||||
ModelResetCommandFixed::~ModelResetCommandFixed()
|
||||
{
|
||||
}
|
||||
|
||||
bool ModelResetCommandFixed::emitPreSignal(const QModelIndex &srcParent, int srcStart, int srcEnd, const QModelIndex &destParent, int destRow)
|
||||
{
|
||||
Q_UNUSED(srcParent);
|
||||
Q_UNUSED(srcStart);
|
||||
Q_UNUSED(srcEnd);
|
||||
Q_UNUSED(destParent);
|
||||
Q_UNUSED(destRow);
|
||||
|
||||
m_model->beginResetModel();
|
||||
return true;
|
||||
}
|
||||
|
||||
void ModelResetCommandFixed::emitPostSignal()
|
||||
{
|
||||
m_model->endResetModel();
|
||||
}
|
||||
|
||||
#include "moc_dynamictreemodel.cpp"
|
||||
@@ -0,0 +1,182 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2009 Stephen Kelly <steveire@gmail.com>
|
||||
SPDX-FileCopyrightText: 2009 Nokia Corporation and /or its subsidiary(-ies) <qt-info@nokia.com>
|
||||
|
||||
This file is part of the test suite of the Qt Toolkit.
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.1-only WITH Qt-LGPL-exception-1.1
|
||||
*/
|
||||
|
||||
#ifndef DYNAMICTREEMODEL_H
|
||||
#define DYNAMICTREEMODEL_H
|
||||
|
||||
#include <QAbstractItemModel>
|
||||
|
||||
#include <QHash>
|
||||
#include <QList>
|
||||
|
||||
class DynamicTreeModel : public QAbstractItemModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DynamicTreeModel(QObject *parent = nullptr);
|
||||
|
||||
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
|
||||
QModelIndex parent(const QModelIndex &index) const;
|
||||
int rowCount(const QModelIndex &index = QModelIndex()) const;
|
||||
int columnCount(const QModelIndex &index = QModelIndex()) const;
|
||||
|
||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
|
||||
|
||||
void clear();
|
||||
|
||||
protected Q_SLOTS:
|
||||
|
||||
/*!
|
||||
Finds the parent id of the string with id @p searchId.
|
||||
|
||||
Returns -1 if not found.
|
||||
*/
|
||||
qint64 findParentId(qint64 searchId) const;
|
||||
|
||||
private:
|
||||
QHash<qint64, QString> m_items;
|
||||
QHash<qint64, QList<QList<qint64>>> m_childItems;
|
||||
qint64 nextId;
|
||||
qint64 newId()
|
||||
{
|
||||
return nextId++;
|
||||
};
|
||||
|
||||
QModelIndex m_nextParentIndex;
|
||||
int m_nextRow;
|
||||
|
||||
int m_depth;
|
||||
int maxDepth;
|
||||
|
||||
friend class ModelInsertCommand;
|
||||
friend class ModelMoveCommand;
|
||||
friend class ModelResetCommand;
|
||||
friend class ModelResetCommandFixed;
|
||||
};
|
||||
|
||||
class ModelChangeCommand : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit ModelChangeCommand(DynamicTreeModel *model, QObject *parent = nullptr);
|
||||
|
||||
virtual ~ModelChangeCommand()
|
||||
{
|
||||
}
|
||||
|
||||
void setAncestorRowNumbers(QList<int> rowNumbers)
|
||||
{
|
||||
m_rowNumbers = rowNumbers;
|
||||
}
|
||||
|
||||
QModelIndex findIndex(QList<int> rows);
|
||||
|
||||
void setStartRow(int row)
|
||||
{
|
||||
m_startRow = row;
|
||||
}
|
||||
|
||||
void setEndRow(int row)
|
||||
{
|
||||
m_endRow = row;
|
||||
}
|
||||
|
||||
void setNumCols(int cols)
|
||||
{
|
||||
m_numCols = cols;
|
||||
}
|
||||
|
||||
virtual void doCommand() = 0;
|
||||
|
||||
protected:
|
||||
DynamicTreeModel *m_model;
|
||||
QList<int> m_rowNumbers;
|
||||
int m_numCols;
|
||||
int m_startRow;
|
||||
int m_endRow;
|
||||
};
|
||||
|
||||
typedef QList<ModelChangeCommand *> ModelChangeCommandList;
|
||||
|
||||
class ModelInsertCommand : public ModelChangeCommand
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ModelInsertCommand(DynamicTreeModel *model, QObject *parent = nullptr);
|
||||
virtual ~ModelInsertCommand()
|
||||
{
|
||||
}
|
||||
|
||||
void doCommand() override;
|
||||
};
|
||||
|
||||
class ModelMoveCommand : public ModelChangeCommand
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
ModelMoveCommand(DynamicTreeModel *model, QObject *parent);
|
||||
|
||||
virtual ~ModelMoveCommand()
|
||||
{
|
||||
}
|
||||
|
||||
virtual bool emitPreSignal(const QModelIndex &srcParent, int srcStart, int srcEnd, const QModelIndex &destParent, int destRow);
|
||||
|
||||
void doCommand() override;
|
||||
|
||||
virtual void emitPostSignal();
|
||||
|
||||
void setDestAncestors(QList<int> rows)
|
||||
{
|
||||
m_destRowNumbers = rows;
|
||||
}
|
||||
|
||||
void setDestRow(int row)
|
||||
{
|
||||
m_destRow = row;
|
||||
}
|
||||
|
||||
protected:
|
||||
QList<int> m_destRowNumbers;
|
||||
int m_destRow;
|
||||
};
|
||||
|
||||
/*!
|
||||
A command which does a move and emits a reset signal.
|
||||
*/
|
||||
class ModelResetCommand : public ModelMoveCommand
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit ModelResetCommand(DynamicTreeModel *model, QObject *parent = nullptr);
|
||||
|
||||
virtual ~ModelResetCommand();
|
||||
|
||||
bool emitPreSignal(const QModelIndex &srcParent, int srcStart, int srcEnd, const QModelIndex &destParent, int destRow) override;
|
||||
void emitPostSignal() override;
|
||||
};
|
||||
|
||||
/*!
|
||||
A command which does a move and emits a beginResetModel and endResetModel signals.
|
||||
*/
|
||||
class ModelResetCommandFixed : public ModelMoveCommand
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit ModelResetCommandFixed(DynamicTreeModel *model, QObject *parent = nullptr);
|
||||
|
||||
virtual ~ModelResetCommandFixed();
|
||||
|
||||
bool emitPreSignal(const QModelIndex &srcParent, int srcStart, int srcEnd, const QModelIndex &destParent, int destRow) override;
|
||||
void emitPostSignal() override;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
#If this test fails it means you are probably using i18n() in your QML code
|
||||
#This should be replaced by i18nd in order to for i18n to load the correct catalog
|
||||
|
||||
#First arg should be the directory to check
|
||||
|
||||
! find "$1" -name '*.qml' -print0 | xargs -0 grep 'i18n[^d]*('
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
import QtQuick
|
||||
Item {
|
||||
width: 200
|
||||
height: 200
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
|
||||
[Containments][1]
|
||||
formfactor=0
|
||||
immutability=1
|
||||
lastScreen=0
|
||||
location=0
|
||||
plugin=simplecontainment
|
||||
|
||||
#those two applets are not ordered by id
|
||||
#but applets() should be ordered anyways
|
||||
[Containments][1][Applets][3]
|
||||
immutability=1
|
||||
plugin=simpleapplet
|
||||
|
||||
[Containments][1][Applets][2]
|
||||
immutability=1
|
||||
plugin=invalid
|
||||
|
||||
#empty panel: should emit complete even if empty
|
||||
[Containments][4]
|
||||
formfactor=2
|
||||
immutability=1
|
||||
lastScreen=0
|
||||
location=4
|
||||
plugin=simplecontainment
|
||||
|
||||
#this is a desktop containment that even if has lastScreen=0
|
||||
#its screen will be -1: this is the case of a containment of
|
||||
#another activity, not the current one
|
||||
[Containments][5]
|
||||
formfactor=0
|
||||
immutability=1
|
||||
lastScreen=0
|
||||
location=0
|
||||
plugin=simplenoscreencontainment
|
||||
|
||||
[General]
|
||||
immutability=1
|
||||
@@ -0,0 +1,38 @@
|
||||
Type=Plasmoid
|
||||
|
||||
[images]
|
||||
Path=images
|
||||
Name=Images
|
||||
Mimetypes=image/svg+xml,image/png,image/jpeg
|
||||
Directory=true
|
||||
|
||||
[config]
|
||||
Path=config/xml
|
||||
Name=Configuration Definitions
|
||||
Mimetypes=text/xml
|
||||
Directory=true
|
||||
|
||||
[configui]
|
||||
Path=config/ui
|
||||
Name=Configuration UI
|
||||
Mimetypes=text/xml
|
||||
Directory=true
|
||||
|
||||
[scripts]
|
||||
Path=code
|
||||
Name=Executable Scripts
|
||||
Mimetypes=text/*
|
||||
Directory=true
|
||||
|
||||
[mainconfiggui]
|
||||
Path=config/ui/main.ui
|
||||
Name=Main Config UI File
|
||||
|
||||
[mainconfigxml]
|
||||
Path=config/ui/main.xml
|
||||
Name=Configuration XML File
|
||||
|
||||
[mainscript]
|
||||
Path=code/main
|
||||
Name=Main Script File
|
||||
Required=true
|
||||
@@ -0,0 +1,287 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2007 Bertjan Broeksema <b.broeksema@kdemail.net>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "plasmoidpackagetest.h"
|
||||
#include "../config-plasma.h"
|
||||
|
||||
#include <KJob>
|
||||
#include <QDir>
|
||||
#include <QFile>
|
||||
#include <QStandardPaths>
|
||||
#include <kzip.h>
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
#include "applet.h"
|
||||
#include "pluginloader.h"
|
||||
|
||||
void PlasmoidPackageTest::initTestCase()
|
||||
{
|
||||
QStandardPaths::setTestModeEnabled(true);
|
||||
}
|
||||
|
||||
void PlasmoidPackageTest::init()
|
||||
{
|
||||
qDebug() << "PlasmoidPackage::init()";
|
||||
m_package = QString("Package");
|
||||
m_packageRoot = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/packageRoot";
|
||||
m_defaultPackage = Plasma::PluginLoader::self()->loadPackage("Plasma/Applet");
|
||||
cleanup(); // to prevent previous runs from interfering with this one
|
||||
}
|
||||
|
||||
void PlasmoidPackageTest::cleanup()
|
||||
{
|
||||
qDebug() << "cleaning up";
|
||||
// Clean things up.
|
||||
QDir(m_packageRoot).removeRecursively();
|
||||
}
|
||||
|
||||
void PlasmoidPackageTest::createTestPackage(const QString &packageName)
|
||||
{
|
||||
qDebug() << "Create test package" << m_packageRoot;
|
||||
QDir pRoot(m_packageRoot);
|
||||
// Create the root and package dir.
|
||||
if (!pRoot.exists()) {
|
||||
QVERIFY(QDir().mkpath(m_packageRoot));
|
||||
}
|
||||
|
||||
// Create the package dir
|
||||
QVERIFY(QDir().mkpath(m_packageRoot + "/" + packageName));
|
||||
qDebug() << "Created" << (m_packageRoot + "/" + packageName);
|
||||
|
||||
// Create the metadata.desktop file
|
||||
QFile file(m_packageRoot + "/" + packageName + "/metadata.desktop");
|
||||
|
||||
QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text));
|
||||
|
||||
QTextStream out(&file);
|
||||
out << "[Desktop Entry]\n";
|
||||
out << "Name=" << packageName << "\n";
|
||||
out << "X-KDE-PluginInfo-Name=" << packageName << "\n";
|
||||
file.flush();
|
||||
file.close();
|
||||
|
||||
qDebug() << "OUT: " << packageName;
|
||||
|
||||
// Create the ui dir.
|
||||
QVERIFY(QDir().mkpath(m_packageRoot + "/" + packageName + "/contents/ui"));
|
||||
|
||||
// Create the main file.
|
||||
file.setFileName(m_packageRoot + "/" + packageName + "/contents/ui/main.qml");
|
||||
QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text));
|
||||
|
||||
out << "THIS IS A PLASMOID SCRIPT.....";
|
||||
file.flush();
|
||||
file.close();
|
||||
|
||||
qDebug() << "THIS IS A PLASMOID SCRIPT THING";
|
||||
// Now we have a minimal plasmoid package which is valid. Let's add some
|
||||
// files to it for test purposes.
|
||||
|
||||
// Create the images dir.
|
||||
QVERIFY(QDir().mkpath(m_packageRoot + "/" + packageName + "/contents/images"));
|
||||
file.setFileName(m_packageRoot + "/" + packageName + "/contents/images/image-1.svg");
|
||||
|
||||
QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text));
|
||||
|
||||
out << "<svg>This is a test image</svg>";
|
||||
file.flush();
|
||||
file.close();
|
||||
|
||||
file.setFileName(m_packageRoot + "/" + packageName + "/contents/images/image-2.svg");
|
||||
|
||||
QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text));
|
||||
|
||||
out.setDevice(&file);
|
||||
out << "<svg>This is another test image</svg>";
|
||||
file.flush();
|
||||
file.close();
|
||||
}
|
||||
|
||||
void PlasmoidPackageTest::isValid()
|
||||
{
|
||||
Plasma::Package *p = new Plasma::Package(m_defaultPackage);
|
||||
p->setPath(m_packageRoot + '/' + m_package);
|
||||
|
||||
// A PlasmoidPackage is valid when:
|
||||
// - The package root exists.
|
||||
// - The package root consists an file named "ui/main.qml"
|
||||
QVERIFY(!p->isValid());
|
||||
|
||||
// Create the root and package dir.
|
||||
QVERIFY(QDir().mkpath(m_packageRoot));
|
||||
QVERIFY(QDir().mkpath(m_packageRoot + "/" + m_package));
|
||||
|
||||
// Should still be invalid.
|
||||
delete p;
|
||||
p = new Plasma::Package(m_defaultPackage);
|
||||
p->setPath(m_packageRoot + '/' + m_package);
|
||||
QVERIFY(!p->isValid());
|
||||
|
||||
// Create the metadata.desktop file.
|
||||
QFile file(m_packageRoot + "/" + m_package + "/metadata.desktop");
|
||||
QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text));
|
||||
|
||||
QTextStream out(&file);
|
||||
out << "[Desktop Entry]\n";
|
||||
out << "Name=test\n";
|
||||
out << "Description=Just a test desktop file";
|
||||
file.flush();
|
||||
file.close();
|
||||
|
||||
// Create the ui dir.
|
||||
QVERIFY(QDir().mkpath(m_packageRoot + "/" + m_package + "/contents/ui"));
|
||||
|
||||
// No main file yet so should still be invalid.
|
||||
delete p;
|
||||
p = new Plasma::Package(m_defaultPackage);
|
||||
p->setPath(m_packageRoot + '/' + m_package);
|
||||
QVERIFY(!p->isValid());
|
||||
|
||||
// Create the main file.
|
||||
file.setFileName(m_packageRoot + "/" + m_package + "/contents/ui/main.qml");
|
||||
QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text));
|
||||
|
||||
out.setDevice(&file);
|
||||
out << "THIS IS A PLASMOID SCRIPT.....\n";
|
||||
file.flush();
|
||||
file.close();
|
||||
|
||||
file.setPermissions(QFile::ReadUser | QFile::WriteUser);
|
||||
// Main file exists so should be valid now.
|
||||
delete p;
|
||||
p = new Plasma::Package(m_defaultPackage);
|
||||
p->setPath(m_packageRoot + '/' + m_package);
|
||||
QVERIFY(p->isValid());
|
||||
QCOMPARE(p->contentsHash(), QString("db0b38c2b4fe21a9f37923cc25152340de055f6d"));
|
||||
delete p;
|
||||
}
|
||||
|
||||
void PlasmoidPackageTest::filePath()
|
||||
{
|
||||
return;
|
||||
// Package::filePath() returns
|
||||
// - {package_root}/{package_name}/path/to/file if the file exists
|
||||
// - QString() otherwise.
|
||||
Plasma::Package *p = new Plasma::Package(m_defaultPackage);
|
||||
p->setPath(m_packageRoot + '/' + m_package);
|
||||
|
||||
QCOMPARE(p->filePath("scripts", "main"), QString());
|
||||
|
||||
QVERIFY(QDir().mkpath(m_packageRoot + "/" + m_package + "/contents/ui/main.qml"));
|
||||
QFile file(m_packageRoot + "/" + m_package + "/contents/ui/main.qml");
|
||||
QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text));
|
||||
|
||||
QTextStream out(&file);
|
||||
out << "THIS IS A PLASMOID SCRIPT.....";
|
||||
file.flush();
|
||||
file.close();
|
||||
|
||||
// The package is valid by now so a path for code/main should get returned.
|
||||
delete p;
|
||||
p = new Plasma::Package(m_defaultPackage);
|
||||
p->setPath(m_packageRoot + '/' + m_package);
|
||||
|
||||
const QString path = QFileInfo(m_packageRoot + "/" + m_package + "/contents/ui/main.qml").canonicalFilePath();
|
||||
|
||||
// Two ways to get the same info.
|
||||
// 1. Give the file type which refers to a class of files (a directory) in
|
||||
// the package structure and the file name.
|
||||
// 2. Give the file type which refers to a file in the package structure.
|
||||
//
|
||||
// NOTE: scripts, main and mainscript are defined in packages.cpp and are
|
||||
// specific for a PlasmoidPackage.
|
||||
QCOMPARE(p->filePath("scripts", "main"), path);
|
||||
QCOMPARE(p->filePath("mainscript"), path);
|
||||
delete p;
|
||||
}
|
||||
|
||||
void PlasmoidPackageTest::entryList()
|
||||
{
|
||||
// Create a package named @p packageName which is valid and has some images.
|
||||
createTestPackage(m_package);
|
||||
|
||||
// Create a package object and verify that it is valid.
|
||||
Plasma::Package *p = new Plasma::Package(m_defaultPackage);
|
||||
p->setPath(m_packageRoot + '/' + m_package);
|
||||
QVERIFY(p->isValid());
|
||||
|
||||
// Now we have a valid package that should contain the following files in
|
||||
// given filetypes:
|
||||
// fileTye - Files
|
||||
// scripts - {"main"}
|
||||
// images - {"image-1.svg", "image-2.svg"}
|
||||
QStringList files = p->entryList("scripts");
|
||||
QCOMPARE(files.size(), 1);
|
||||
QVERIFY(files.contains("main"));
|
||||
|
||||
files = p->entryList("images");
|
||||
QCOMPARE(files.size(), 2);
|
||||
QVERIFY(files.contains("image-1.svg"));
|
||||
QVERIFY(files.contains("image-2.svg"));
|
||||
delete p;
|
||||
}
|
||||
|
||||
void PlasmoidPackageTest::createAndInstallPackage()
|
||||
{
|
||||
qDebug() << " ";
|
||||
qDebug() << " CreateAndInstall ";
|
||||
createTestPackage("plasmoid_to_package");
|
||||
const QString packagePath = m_packageRoot + '/' + "testpackage.plasmoid";
|
||||
|
||||
KZip creator(packagePath);
|
||||
QVERIFY(creator.open(QIODevice::WriteOnly));
|
||||
creator.addLocalDirectory(m_packageRoot + '/' + "plasmoid_to_package", ".");
|
||||
creator.close();
|
||||
KIO::NetAccess::del(QUrl::fromLocalFile(m_packageRoot + "/plasmoid_to_package"), 0);
|
||||
|
||||
QVERIFY(QFile::exists(packagePath));
|
||||
|
||||
KZip package(packagePath);
|
||||
QVERIFY(package.open(QIODevice::ReadOnly));
|
||||
const KArchiveDirectory *dir = package.directory();
|
||||
QVERIFY(dir); //
|
||||
QVERIFY(dir->entry("metadata.desktop"));
|
||||
const KArchiveEntry *contentsEntry = dir->entry("contents");
|
||||
QVERIFY(contentsEntry);
|
||||
QVERIFY(contentsEntry->isDirectory());
|
||||
const KArchiveDirectory *contents = static_cast<const KArchiveDirectory *>(contentsEntry);
|
||||
QVERIFY(contents->entry("ui"));
|
||||
QVERIFY(contents->entry("images"));
|
||||
|
||||
m_defaultPackageStructure = new Plasma::PackageStructure(this);
|
||||
Plasma::Package *p = new Plasma::Package(m_defaultPackageStructure);
|
||||
qDebug() << "Installing " << archivePath;
|
||||
// const QString packageRoot = "plasma/plasmoids/";
|
||||
// const QString servicePrefix = "plasma-applet-";
|
||||
KJob *job = p->install(archivePath, m_packageRoot);
|
||||
connect(job, SIGNAL(finished(KJob *)), SLOT(packageInstalled(KJob *)));
|
||||
|
||||
// QVERIFY(p->isValid());
|
||||
delete p;
|
||||
}
|
||||
|
||||
void PlasmoidPackageTest::packageInstalled(KJob *j)
|
||||
{
|
||||
qDebug() << "!!!!!!!!!!!!!!!!!!!! package installed" << (j->error() == KJob::NoError);
|
||||
QVERIFY(j->error() == KJob::NoError);
|
||||
// QVERIFY(p->path());
|
||||
|
||||
Plasma::Package *p = new Plasma::Package(m_defaultPackageStructure);
|
||||
KJob *jj = p->uninstall("org.kde.microblog-qml", m_packageRoot);
|
||||
// QObject::disconnect(j, SIGNAL(finished(KJob*)), this, SLOT(packageInstalled(KJob*)));
|
||||
connect(jj, SIGNAL(finished(KJob *)), SLOT(packageInstalled(KJob *)));
|
||||
}
|
||||
|
||||
void PlasmoidPackageTest::packageUninstalled(KJob *j)
|
||||
{
|
||||
qDebug() << "!!!!!!!!!!!!!!!!!!!!! package uninstalled";
|
||||
QVERIFY(j->error() == KJob::NoError);
|
||||
}
|
||||
|
||||
QTEST_MAIN(PlasmoidPackageTest)
|
||||
|
||||
#include "moc_plasmoidpackagetest.cpp"
|
||||