summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.clang-format91
-rw-r--r--.gitignore2
-rw-r--r--CMakeLists.txt72
-rw-r--r--LICENSES/BSD-3-Clause.txt26
-rw-r--r--LICENSES/CC0-1.0.txt121
-rw-r--r--LICENSES/FSFAP.txt3
-rw-r--r--LICENSES/GPL-2.0-or-later.txt311
-rw-r--r--org.kde.kue.desktop13
-rw-r--r--org.kde.kue.metainfo.xml25
-rw-r--r--src/CMakeLists.txt57
-rw-r--r--src/kueapplication.cpp73
-rw-r--r--src/kueapplication.h37
-rw-r--r--src/kueconfig.kcfg16
-rw-r--r--src/kueconfig.kcfgc10
-rw-r--r--src/main.cpp74
-rw-r--r--src/qml/Main.qml168
-rw-r--r--src/settings/CMakeLists.txt11
-rw-r--r--src/settings/GeneralPage.qml27
-rw-r--r--src/settings/KueConfigurationView.qml20
19 files changed, 1157 insertions, 0 deletions
diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..bb67ea6
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,91 @@
+---
+# SPDX-FileCopyrightText: 2019 Christoph Cullmann <cullmann@kde.org>
+# SPDX-FileCopyrightText: 2019 Gernot Gebhard <gebhard@absint.com>
+#
+# SPDX-License-Identifier: MIT
+
+# This file got automatically created by ECM, do not edit
+# See https://clang.llvm.org/docs/ClangFormatStyleOptions.html for the config options
+# and https://community.kde.org/Policies/Frameworks_Coding_Style#Clang-format_automatic_code_formatting
+# for clang-format tips & tricks
+---
+Language: JavaScript
+DisableFormat: true
+---
+
+# Style for C++
+Language: Cpp
+
+# base is WebKit coding style: https://webkit.org/code-style-guidelines/
+# below are only things set that diverge from this style!
+BasedOnStyle: WebKit
+
+# enforce C++11 (e.g. for std::vector<std::vector<lala>>
+Standard: Cpp11
+
+# 4 spaces indent
+TabWidth: 4
+
+# 2 * 80 wide lines
+ColumnLimit: 160
+
+# sort includes inside line separated groups
+SortIncludes: true
+
+# break before braces on function, namespace and class definitions.
+BreakBeforeBraces: Linux
+
+# CrlInstruction *a;
+PointerAlignment: Right
+
+# horizontally aligns arguments after an open bracket.
+AlignAfterOpenBracket: Align
+
+# don't move all parameters to new line
+AllowAllParametersOfDeclarationOnNextLine: false
+
+# no single line functions
+AllowShortFunctionsOnASingleLine: None
+
+# no single line enums
+AllowShortEnumsOnASingleLine: false
+
+# always break before you encounter multi line strings
+AlwaysBreakBeforeMultilineStrings: true
+
+# don't move arguments to own lines if they are not all on the same
+BinPackArguments: false
+
+# don't move parameters to own lines if they are not all on the same
+BinPackParameters: false
+
+# In case we have an if statement with multiple lines the operator should be at the beginning of the line
+# but we do not want to break assignments
+BreakBeforeBinaryOperators: NonAssignment
+
+# format C++11 braced lists like function calls
+Cpp11BracedListStyle: true
+
+# do not put a space before C++11 braced lists
+SpaceBeforeCpp11BracedList: false
+
+# remove empty lines
+KeepEmptyLinesAtTheStartOfBlocks: false
+
+# no namespace indentation to keep indent level low
+NamespaceIndentation: None
+
+# we use template< without space.
+SpaceAfterTemplateKeyword: false
+
+# Always break after template declaration
+AlwaysBreakTemplateDeclarations: true
+
+# macros for which the opening brace stays attached.
+ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH, forever, Q_FOREVER, QBENCHMARK, QBENCHMARK_ONCE , wl_resource_for_each, wl_resource_for_each_safe ]
+
+# keep lambda formatting multi-line if not empty
+AllowShortLambdasOnASingleLine: Empty
+
+# We do not want clang-format to put all arguments on a new line
+AllowAllArgumentsOnNextLine: false
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7194ea7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+.cache
+build
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..8c652ed
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,72 @@
+# SPDX-FileCopyrightText: 2024 Alexander Kavon <me+kue@alexkavon.com>
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(kue VERSION 0.1)
+
+include(FeatureSummary)
+
+set(QT6_MIN_VERSION 6.5.0)
+set(KF6_MIN_VERSION 6.0.0)
+set(KIRIGAMI_ADDONS_MIN_VERSION 1.2.40)
+
+find_package(ECM ${KF6_MIN_VERSION} REQUIRED NO_MODULE)
+
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH})
+
+include(FeatureSummary)
+
+include(KDEInstallDirs)
+include(KDECMakeSettings)
+include(KDECompilerSettings NO_POLICY_SCOPE)
+
+include(ECMSetupVersion)
+include(ECMFindQmlModule)
+include(ECMQmlModule)
+include(ECMQmlModule)
+
+include(KDEGitCommitHooks)
+include(KDEClangFormat)
+
+ecm_setup_version(${PROJECT_VERSION}
+ VARIABLE_PREFIX KUE
+ VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/src/version-kue.h"
+)
+
+set(QT_EXTRA_COMPONENTS)
+list(APPEND QT_EXTRA_COMPONENTS Widgets)
+
+find_package(Qt6 ${QT6_MIN_VERSION} REQUIRED COMPONENTS Core Gui Qml QuickControls2 Svg ${QT_EXTRA_COMPONENTS})
+find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS Kirigami CoreAddons Config I18n)
+
+# akonadi
+set(LIBKDEPIM_VERSION "6.2.3")
+find_package(KPim6Akonadi ${LIBKDEPIM_VERSION} CONFIG REQUIRED)
+find_package(KPim6Libkdepim ${LIBKDEPIM_VERSION} CONFIG REQUIRED)
+find_package(KPim6AkonadiMime ${LIBKDEPIM_VERSION} CONFIG REQUIRED)
+find_package(KPim6Mime ${LIBKDEPIM_VERSION} CONFIG REQUIRED)
+find_package(KPim6MailCommon ${LIBKDEPIM_VERSION} CONFIG REQUIRED)
+
+find_package(KF6KirigamiAddons ${KIRIGAMI_ADDONS_MIN_VERSION} REQUIRED)
+set_package_properties(KF6KirigamiAddons PROPERTIES
+ TYPE REQUIRED
+ PURPOSE "Required application components and runtime dependency"
+)
+
+qt_policy(SET QTP0001 NEW)
+
+ecm_find_qmlmodule(org.kde.kirigamiaddons.formcard)
+ecm_find_qmlmodule(org.kde.kirigamiaddons.statefulapp)
+
+add_subdirectory(src)
+
+install(FILES org.kde.kue.desktop DESTINATION ${KDE_INSTALL_APPDIR})
+install(FILES org.kde.kue.metainfo.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
+ki18n_install(po)
+
+feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
+
+file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES src/*.cpp src/*.h)
+kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
+kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
diff --git a/LICENSES/BSD-3-Clause.txt b/LICENSES/BSD-3-Clause.txt
new file mode 100644
index 0000000..0741db7
--- /dev/null
+++ b/LICENSES/BSD-3-Clause.txt
@@ -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.
diff --git a/LICENSES/CC0-1.0.txt b/LICENSES/CC0-1.0.txt
new file mode 100644
index 0000000..0e259d4
--- /dev/null
+++ b/LICENSES/CC0-1.0.txt
@@ -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.
diff --git a/LICENSES/FSFAP.txt b/LICENSES/FSFAP.txt
new file mode 100644
index 0000000..c96c65e
--- /dev/null
+++ b/LICENSES/FSFAP.txt
@@ -0,0 +1,3 @@
+Copying and distribution of this file, with or without modification, are permitted
+in any medium without royalty provided the copyright notice and this notice
+are preserved. This file is offered as-is, without any warranty.
diff --git a/LICENSES/GPL-2.0-or-later.txt b/LICENSES/GPL-2.0-or-later.txt
new file mode 100644
index 0000000..3b6070f
--- /dev/null
+++ b/LICENSES/GPL-2.0-or-later.txt
@@ -0,0 +1,311 @@
+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
diff --git a/org.kde.kue.desktop b/org.kde.kue.desktop
new file mode 100644
index 0000000..85e92c4
--- /dev/null
+++ b/org.kde.kue.desktop
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: CC0-1.0
+# SPDX-FileCopyrightText: 2024 Alexander Kavon <me+kue@alexkavon.com>
+[Desktop Entry]
+Name=Kue
+Comment=Kue Kirigami Application
+Version=1.0
+Exec=kue
+Icon=applications-development
+Type=Application
+Terminal=false
+# Add an actual main category here (and possibly applicable additional ones)
+# https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry
+Categories=Qt;KDE;
diff --git a/org.kde.kue.metainfo.xml b/org.kde.kue.metainfo.xml
new file mode 100644
index 0000000..e6f3662
--- /dev/null
+++ b/org.kde.kue.metainfo.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-License-Identifier: CC0-1.0
+ SPDX-FileCopyrightText: 2024 Alexander Kavon <me+kue@alexkavon.com>
+ -->
+<component type="desktop-application">
+ <id>org.kde.kue</id>
+ <name>Kue Kirigami Application</name>
+ <summary>A short summary describing what this software is about</summary>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>The license of this software as SPDX string, e.g. "GPL-2.0-or-later"</project_license>
+ <developer id="kde.org">
+ <name>The KDE Community</name>
+ <url>https://kde.org</url>
+ </developer>
+ <description>
+ <p>Multiple paragraphs of long description, describing this software component.</p>
+ <p>You can also use ordered and unordered lists:</p>
+ <ul>
+ <li>Feature 1</li>
+ <li>Feature 2</li>
+ </ul>
+ <p>Keep in mind to XML-escape characters, and that this is not HTML markup.</p>
+ </description>
+</component>
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000..e28db18
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,57 @@
+# SPDX-License-Identifier: BSD-2-Clause
+# SPDX-FileCopyrightText: 2024 Alexander Kavon <me+kue@alexkavon.com>
+
+add_subdirectory(settings)
+
+qt_add_library(kue_static STATIC)
+ecm_add_qml_module(kue_static
+ URI org.kde.kue
+ GENERATE_PLUGIN_SOURCE
+ VERSION 1.0
+ QML_FILES
+ qml/Main.qml
+ DEPENDENCIES
+ org.kde.kirigamiaddons.statefulapp
+ org.kde.kirigami
+ org.kde.kue.settings
+)
+
+target_sources(kue_static PUBLIC
+ kueapplication.cpp
+ kueapplication.h
+)
+
+target_link_libraries(kue_static PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+ Qt6::QuickControls2
+ Qt6::Svg
+ KF6::I18n
+ KF6::CoreAddons
+ KF6::ConfigCore
+ KF6::ConfigGui
+ KirigamiAddonsStatefulApp
+ KPim6::AkonadiCore
+ KPim6::AkonadiAgentBase
+ KPim6::AkonadiWidgets
+ KPim6::AkonadiXml
+ KPim6::AkonadiMime
+ KPim6::Mime
+ KPim6::MailCommon
+)
+target_include_directories(kue_static PUBLIC ${CMAKE_BINARY_DIR} /home/hawk/kde/usr/include)
+
+target_link_libraries(kue_static PUBLIC Qt::Widgets)
+
+kconfig_add_kcfg_files(kue_static GENERATE_MOC kueconfig.kcfgc)
+
+add_executable(kue main.cpp)
+target_link_libraries(kue PUBLIC
+ kue_static
+ kue_staticplugin
+ kue_settings
+ kue_settingsplugin
+)
+install(TARGETS kue ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
diff --git a/src/kueapplication.cpp b/src/kueapplication.cpp
new file mode 100644
index 0000000..b459acf
--- /dev/null
+++ b/src/kueapplication.cpp
@@ -0,0 +1,73 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+// SPDX-FileCopyrightText: 2024 Alexander Kavon <me+kue@alexkavon.com>
+
+#include "kueapplication.h"
+#include <KAuthorized>
+#include <KLocalizedString>
+#include <KDescendantsProxyModel>
+#include <Akonadi/ServerManager>
+#include <Akonadi/Session>
+#include <Akonadi/Monitor>
+#include <Akonadi/EntityTreeModel>
+#include <Akonadi/CollectionFilterProxyModel>
+#include <KMime/Message>
+#include <QApplication>
+#include <QDebug>
+
+using namespace Qt::StringLiterals;
+
+KueApplication::KueApplication(QObject *parent)
+ : AbstractKirigamiApplication(parent)
+ , m_loading(true)
+{
+ m_session = new Akonadi::Session(QByteArrayLiteral("Kue Kernel"), this);
+
+ auto monitor = new Akonadi::Monitor(this);
+
+ auto treeModel = new Akonadi::EntityTreeModel(monitor, this);
+ treeModel->setItemPopulationStrategy(Akonadi::EntityTreeModel::LazyPopulation);
+
+ auto entityTreeModel = new Akonadi::CollectionFilterProxyModel(this);
+ entityTreeModel->setSourceModel(treeModel);
+ entityTreeModel->addMimeTypeFilter(KMime::Message::mimeType());
+
+ m_descendantsProxyModel = new KDescendantsProxyModel(this);
+ m_descendantsProxyModel->setSourceModel(entityTreeModel);
+ qDebug() << m_descendantsProxyModel->rowCount();
+
+ if (Akonadi::ServerManager::isRunning()) {
+ m_loading = false;
+ } else {
+ connect(Akonadi::ServerManager::self(), &Akonadi::ServerManager::stateChanged, this, [this](Akonadi::ServerManager::State state) {
+ if (state == Akonadi::ServerManager::Broken) {
+ qDebug() << "ServerManager Broken";
+ qApp->exit(-1);
+ return;
+ }
+ bool loading = state != Akonadi::ServerManager::State::Running;
+ if (loading == m_loading) {
+ return;
+ }
+ m_loading = loading;
+ Q_EMIT loadingChanged();
+ disconnect(Akonadi::ServerManager::self(), &Akonadi::ServerManager::stateChanged, this, nullptr);
+ });
+ }
+}
+
+bool KueApplication::loading() const
+{
+ return m_loading;
+}
+
+KDescendantsProxyModel *KueApplication::descendantsProxyModel() const
+{
+ return m_descendantsProxyModel;
+}
+
+Akonadi::Session *KueApplication::session() const
+{
+ return m_session;
+}
+
+#include "moc_kueapplication.cpp"
diff --git a/src/kueapplication.h b/src/kueapplication.h
new file mode 100644
index 0000000..888c592
--- /dev/null
+++ b/src/kueapplication.h
@@ -0,0 +1,37 @@
+// SPDX-FileCopyrightText: 2024 Alexander Kavon <me+kue@alexkavon.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <QQmlEngine>
+#include <AbstractKirigamiApplication>
+#include <KDescendantsProxyModel>
+
+using namespace Qt::StringLiterals;
+
+namespace Akonadi {
+ class Session;
+}
+
+class KueApplication : public AbstractKirigamiApplication
+{
+ Q_OBJECT
+ QML_ELEMENT
+ Q_PROPERTY(bool loading READ loading NOTIFY loadingChanged)
+ Q_PROPERTY(KDescendantsProxyModel *descendantsProxyModel READ descendantsProxyModel CONSTANT)
+
+ bool loading() const;
+ Akonadi::Session *session() const;
+
+public:
+ explicit KueApplication(QObject *parent = nullptr);
+ KDescendantsProxyModel *descendantsProxyModel() const;
+
+Q_SIGNALS:
+ void loadingChanged();
+
+private:
+ bool m_loading;
+ Akonadi::Session *m_session;
+ KDescendantsProxyModel *m_descendantsProxyModel;
+};
diff --git a/src/kueconfig.kcfg b/src/kueconfig.kcfg
new file mode 100644
index 0000000..1ad1fd2
--- /dev/null
+++ b/src/kueconfig.kcfg
@@ -0,0 +1,16 @@
+<?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" >
+<!--
+SPDX-FileCopyrightText: 2024 Alexander Kavon <me+kue@alexkavon.com>
+SPDX-License-Identifier: LGPL-2.0-or-later
+-->
+ <group name="General">
+ <entry name="someSetting" type="Bool">
+ <label>Some setting description</label>
+ <default>true</default>
+ </entry>
+ </group>
+</kcfg>
diff --git a/src/kueconfig.kcfgc b/src/kueconfig.kcfgc
new file mode 100644
index 0000000..0a02a78
--- /dev/null
+++ b/src/kueconfig.kcfgc
@@ -0,0 +1,10 @@
+# SPDX-FileCopyrightText: 2024 Alexander Kavon <me+kue@alexkavon.com>
+# SPDX-License-Identifier: LGPL-2.0-or-later
+
+File=kueconfig.kcfg
+ClassName=KueConfig
+Mutators=true
+DefaultValueGetters=true
+GenerateProperties=true
+ParentInConstructor=true
+Singleton=true
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..41f7fef
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,74 @@
+/*
+ SPDX-License-Identifier: GPL-2.0-or-later
+ SPDX-FileCopyrightText: 2024 Alexander Kavon <me+kue@alexkavon.com>
+*/
+
+#include <QtGlobal>
+#include <QApplication>
+
+#include <QIcon>
+#include <QQmlApplicationEngine>
+#include <QQmlContext>
+#include <QQuickStyle>
+#include <QUrl>
+#include <QDebug>
+#include <KDescendantsProxyModel>
+
+#include "version-kue.h"
+#include <KAboutData>
+#include <KLocalizedContext>
+#include <KLocalizedString>
+
+#include "kueconfig.h"
+
+using namespace Qt::Literals::StringLiterals;
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ // Default to org.kde.desktop style unless the user forces another style
+ if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE")) {
+ QQuickStyle::setStyle(u"org.kde.desktop"_s);
+ }
+
+ KLocalizedString::setApplicationDomain("kue");
+ QCoreApplication::setOrganizationName(u"KDE"_s);
+
+ KAboutData aboutData(
+ // The program name used internally.
+ u"kue"_s,
+ // A displayable program name string.
+ i18nc("@title", "Kue"),
+ // The program version string.
+ QStringLiteral(KUE_VERSION_STRING),
+ // Short description of what the app does.
+ i18n("Application Description"),
+ // The license this code is released under.
+ KAboutLicense::GPL,
+ // Copyright Statement.
+ i18n("(c) 2024"));
+ aboutData.addAuthor(i18nc("@info:credit", "Alexander Kavon"),
+ i18nc("@info:credit", "Maintainer"),
+ u"me+kue@alexkavon.com"_s,
+ u"https://yourwebsite.com"_s);
+ aboutData.setTranslator(i18nc("NAME OF TRANSLATORS", "Your names"), i18nc("EMAIL OF TRANSLATORS", "Your emails"));
+ KAboutData::setApplicationData(aboutData);
+ QGuiApplication::setWindowIcon(QIcon::fromTheme(u"org.kde.kue"_s));
+
+ QQmlApplicationEngine engine;
+
+ auto config = KueConfig::self();
+
+ qRegisterMetaType<KDescendantsProxyModel*>("KDescendantsProxyModel*");
+ qmlRegisterSingletonInstance("org.kde.kue.private", 1, 0, "Kue", config);
+
+ engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
+ engine.loadFromModule("org.kde.kue", u"Main"_s);
+
+ if (engine.rootObjects().isEmpty()) {
+ return -1;
+ }
+
+ return app.exec();
+}
diff --git a/src/qml/Main.qml b/src/qml/Main.qml
new file mode 100644
index 0000000..cef37e9
--- /dev/null
+++ b/src/qml/Main.qml
@@ -0,0 +1,168 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+// SPDX-FileCopyrightText: 2024 Alexander Kavon <me+kue@alexkavon.com>
+
+import QtQuick
+import QtQuick.Controls as QQC2
+import QtQuick.Layouts
+
+import org.kde.kirigami as Kirigami
+import org.kde.kirigamiaddons.statefulapp as StatefulApp
+
+import org.kde.kue
+import org.kde.kue.settings as Settings
+
+StatefulApp.StatefulWindow {
+ id: root
+
+ property int counter: 0
+
+ title: i18nc("@title:window", "Kue")
+
+ windowName: "Kue"
+
+ minimumWidth: Kirigami.Units.gridUnit * 20
+ minimumHeight: Kirigami.Units.gridUnit * 20
+
+ application: KueApplication {
+ configurationView: Settings.KueConfigurationView {}
+ }
+
+ // Connections {
+ // target: root.application
+
+ // function onIncrementCounter(): void {
+ // root.counter += 1;
+ // }
+ // }
+
+ // globalDrawer: Kirigami.GlobalDrawer {
+ // // isMenu: !Kirigami.Settings.isMobile
+ // actions: [
+ // Kirigami.Action {
+ // id: incrementCounterAction
+ // fromQAction: root.application.action("increment_counter")
+ // },
+ // Kirigami.Action {
+ // separator: true
+ // },
+ // Kirigami.Action {
+ // fromQAction: root.application.action("options_configure")
+ // },
+ // Kirigami.Action {
+ // fromQAction: root.application.action("options_configure_keybinding")
+ // },
+ // Kirigami.Action {
+ // separator: true
+ // },
+ // Kirigami.Action {
+ // id: aboutAction
+ // fromQAction: root.application.action("open_about_page")
+ // },
+ // Kirigami.Action {
+ // fromQAction: root.application.action("open_about_kde_page")
+ // },
+ // Kirigami.Action {
+ // fromQAction: root.application.action("file_quit")
+ // }
+ // ]
+ // }
+
+ pageStack.initialPage: KueApplication.loading ? loadingPage : mainPage
+
+ Component {
+ id: loadingPage
+ Kirigami.Page {
+ Kirigami.PlaceholderMessage {
+ anchors.centerIn: parent
+ text: i18n("Loading, please wait...")
+ }
+ }
+ }
+
+ Kirigami.ScrollablePage {
+ id: mainPage
+
+ title: i18nc("@title", "Kue")
+
+ supportsRefreshing: true
+
+ ListView {
+ model: KueApplication.descendantsProxyModel
+ highlight: Rectangle {
+ width: parent.width
+ color: "blue"
+ }
+ delegate: Kirigami.SwipeListItem {
+ id: task
+
+ required property bool completed
+
+ contentItem: RowLayout {
+ QQC2.CheckBox {
+ id: control
+ checked: task.completed
+ onCheckedChanged: {
+ if (control.checked != task.completed) {
+ task.completed = control.checked;
+ }
+ }
+ indicator: Rectangle {
+ implicitWidth: 30
+ implicitHeight: 30
+ x: control.leftPadding
+ y: parent.height / 2 - height / 2
+ border.color: control.down ? "darkblue" : "gray"
+ border.width: 2
+ Rectangle {
+ visible: control.checked
+ color: "red"
+ radius: 1
+ width: 15
+ height: 15
+ anchors.margins: 5
+ anchors.fill: parent
+ }
+ }
+ }
+
+ QQC2.TextField {
+ id: taskEdit
+ Layout.fillWidth: true
+ height: Math.max(implicitHeight, Kirigami.Units.iconSizes.smallMedium)
+ placeholderText: "Task Info..."
+ text: model.display + " : " + task.completed
+ wrapMode: TextInput.Wrap
+ background: Rectangle {
+ id: taskEditBg
+ border.color: "transparent"
+ color: "transparent"
+ Rectangle {
+ visible: taskEdit.activeFocus
+ anchors.bottom: taskEditBg.bottom
+ height: 2
+ width: parent.width
+ color: "green"
+ }
+ }
+ }
+
+ Kirigami.Icon {
+ source: "view-list-details"
+ visible: taskEdit.activeFocus
+ implicitHeight: 20
+ implicitWidth: 20
+ }
+ }
+ }
+ section {
+ property: "section"
+ delegate: Kirigami.ListSectionHeader {
+ required property string section
+
+ text: qsTr("Section %1").arg(parseInt(section) + 1)
+ width: ListView.view.width - ListView.view.leftMargin - ListView.view.rightMargin
+ }
+ }
+ }
+ }
+}
diff --git a/src/settings/CMakeLists.txt b/src/settings/CMakeLists.txt
new file mode 100644
index 0000000..d4847a6
--- /dev/null
+++ b/src/settings/CMakeLists.txt
@@ -0,0 +1,11 @@
+# SPDX-FileCopyrightText: 2024 Alexander Kavon <me+kue@alexkavon.com>
+# SPDX-License-Identifier: BSD-2-Clause
+
+qt_add_library(kue_settings STATIC)
+ecm_add_qml_module(kue_settings
+ GENERATE_PLUGIN_SOURCE
+ URI org.kde.kue.settings
+ QML_FILES
+ KueConfigurationView.qml
+ GeneralPage.qml
+)
diff --git a/src/settings/GeneralPage.qml b/src/settings/GeneralPage.qml
new file mode 100644
index 0000000..3324c95
--- /dev/null
+++ b/src/settings/GeneralPage.qml
@@ -0,0 +1,27 @@
+// SPDX-FileCopyrightText: 2024 Alexander Kavon <me+kue@alexkavon.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+pragma ComponentBehavior: Bound
+
+import QtQuick
+import org.kde.kirigamiaddons.formcard as FormCard
+
+FormCard.FormCardPage {
+ id: root
+
+ title: i18nc("@title", "General")
+
+ FormCard.FormHeader {
+ title: i18nc("@title:group", "My Group")
+ }
+
+ FormCard.FormHeader {
+ title: i18nc("@title:group", "My Group:")
+ }
+
+ FormCard.FormCard {
+ FormCard.FormTextFieldDelegate {
+ label: i18nc("@label:textbox", "My Label:")
+ }
+ }
+}
diff --git a/src/settings/KueConfigurationView.qml b/src/settings/KueConfigurationView.qml
new file mode 100644
index 0000000..c93ec52
--- /dev/null
+++ b/src/settings/KueConfigurationView.qml
@@ -0,0 +1,20 @@
+// SPDX-FileCopyrightText: 2024 Alexander Kavon <me+kue@alexkavon.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+pragma ComponentBehavior: Bound
+
+import QtQuick
+import org.kde.kirigamiaddons.settings as KirigamiSettings
+
+KirigamiSettings.ConfigurationView {
+ id: root
+
+ modules: [
+ KirigamiSettings.ConfigurationModule {
+ moduleId: "general"
+ text: i18nc("@action:button", "General")
+ icon.name: "preferences-system-symbolic"
+ page: () => Qt.createComponent("org.kde.kue.settings", "GeneralPage")
+ }
+ ]
+}