Begin move to kde configuration
This commit is contained in:
parent
a068fe8afc
commit
a6f818864a
11 changed files with 58 additions and 198 deletions
|
@ -1,14 +1,20 @@
|
||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
project(tutorial_kirigami2)
|
project(tutorial_kirigami2 VERSION 0.1.0 LANGUAGES CXX)
|
||||||
|
|
||||||
find_package(ECM REQUIRED NO_MODULE)
|
set(KF_MIN_VERSION "6.0.0")
|
||||||
|
set(QT_MIN_VERSION "6.6")
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
|
find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE)
|
||||||
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
||||||
|
|
||||||
include(KDEInstallDirs)
|
include(KDEInstallDirs)
|
||||||
include(KDECMakeSettings)
|
include(KDECMakeSettings)
|
||||||
include(KDECompilerSettings NO_POLICY_SCOPE)
|
include(KDECompilerSettings NO_POLICY_SCOPE)
|
||||||
|
|
||||||
find_package(Qt${QT_MAJOR_VERSION} REQUIRED NO_MODULE COMPONENTS
|
find_package(Qt6 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS
|
||||||
Core
|
Core
|
||||||
Quick
|
Quick
|
||||||
Test
|
Test
|
||||||
|
@ -17,7 +23,7 @@ find_package(Qt${QT_MAJOR_VERSION} REQUIRED NO_MODULE COMPONENTS
|
||||||
Widgets
|
Widgets
|
||||||
)
|
)
|
||||||
|
|
||||||
find_package(KF${QT_MAJOR_VERSION} REQUIRED COMPONENTS
|
find_package(KF6 ${KF_MIN_VERSION} REQUIRED COMPONENTS
|
||||||
Kirigami2
|
Kirigami2
|
||||||
I18n
|
I18n
|
||||||
CoreAddons
|
CoreAddons
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
2. `cmake $cmakeFlags -B build -G Ninja .`
|
2. `cmake $cmakeFlags -B build -G Ninja .`
|
||||||
3. `cd build`
|
3. `cd build`
|
||||||
3. `ninja`
|
3. `ninja`
|
||||||
4. `./src/tutorial_kirigami2`
|
4. `./bin/tutorial_kirigami2`
|
||||||
|
|
||||||
For use gammaray, you need to disable yama security.
|
For use gammaray, you need to disable yama security.
|
||||||
|
|
||||||
|
@ -15,5 +15,5 @@ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
|
||||||
Then run with,
|
Then run with,
|
||||||
|
|
||||||
```
|
```
|
||||||
gammaray ./src/tutorial_kirigami2
|
gammaray ./bin/tutorial_kirigami2
|
||||||
```
|
```
|
||||||
|
|
|
@ -43,7 +43,6 @@
|
||||||
|
|
||||||
dontFixCmake = true;
|
dontFixCmake = true;
|
||||||
cmakeFlags = [
|
cmakeFlags = [
|
||||||
"-DQT_MAJOR_VERSION=6"
|
|
||||||
"-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON"
|
"-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON"
|
||||||
"-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo"
|
"-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo"
|
||||||
];
|
];
|
||||||
|
|
|
@ -2,6 +2,7 @@ add_executable(tutorial_kirigami2)
|
||||||
|
|
||||||
target_sources(tutorial_kirigami2 PRIVATE
|
target_sources(tutorial_kirigami2 PRIVATE
|
||||||
main.cpp
|
main.cpp
|
||||||
|
counter.cpp
|
||||||
resources.qrc
|
resources.qrc
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,91 +0,0 @@
|
||||||
import QtQuick
|
|
||||||
import QtQuick.Controls as Controls
|
|
||||||
import QtQuick.Layouts
|
|
||||||
import org.kde.kirigami as Kirigami
|
|
||||||
|
|
||||||
// Overlay sheets appear over a part of the window
|
|
||||||
Kirigami.OverlaySheet {
|
|
||||||
id: addEditSheet
|
|
||||||
|
|
||||||
// Sheet mode
|
|
||||||
property string mode: "add"
|
|
||||||
|
|
||||||
property int index: -1
|
|
||||||
property alias name: nameField.text
|
|
||||||
property alias description: descriptionField.text
|
|
||||||
property alias kdate: dateField.text
|
|
||||||
|
|
||||||
// Signals can be read and certain actions performed when these happen
|
|
||||||
signal added(string name, string description, var kdate)
|
|
||||||
signal edited(int index, string name, string description, var kdate)
|
|
||||||
signal removed(int index)
|
|
||||||
|
|
||||||
header: Kirigami.Heading {
|
|
||||||
// i18nc is useful for adding context for translators
|
|
||||||
text: mode === "add" ? i18nc("@title:window", "Add kountdown") :
|
|
||||||
i18nc("@title:window", "Edit kountdown")
|
|
||||||
}
|
|
||||||
// Form layouts help align and structure a layout with several inputs
|
|
||||||
Kirigami.FormLayout {
|
|
||||||
// Textfields let you input text in a thin textbox
|
|
||||||
Controls.TextField {
|
|
||||||
id: nameField
|
|
||||||
// Provides label attached to the textfield
|
|
||||||
Kirigami.FormData.label: i18nc("@label:textbox", "Name:")
|
|
||||||
// Placeholder text is visible before you enter anything
|
|
||||||
placeholderText: i18n("Event name (required)")
|
|
||||||
// What to do after input is accepted (i.e. pressed enter)
|
|
||||||
// In this case, it moves the focus to the next field
|
|
||||||
onAccepted: descriptionField.forceActiveFocus()
|
|
||||||
}
|
|
||||||
Controls.TextField {
|
|
||||||
id: descriptionField
|
|
||||||
Kirigami.FormData.label: i18nc("@label:textbox", "Description:")
|
|
||||||
placeholderText: i18n("Optional")
|
|
||||||
onAccepted: dateField.forceActiveFocus()
|
|
||||||
}
|
|
||||||
Controls.TextField {
|
|
||||||
id: dateField
|
|
||||||
Kirigami.FormData.label: i18nc("@label:textbox", "Date:")
|
|
||||||
inputMask: "0000-00-00"
|
|
||||||
placeholderText: i18n("YYYY-MM-DD")
|
|
||||||
}
|
|
||||||
// This is a button.
|
|
||||||
Controls.Button {
|
|
||||||
id: deleteButton
|
|
||||||
Layout.fillWidth: true
|
|
||||||
text: i18nc("@action:button", "Delete")
|
|
||||||
visible: mode === "edit"
|
|
||||||
onClicked: {
|
|
||||||
addEditSheet.removed(addEditSheet.index)
|
|
||||||
close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Controls.Button {
|
|
||||||
id: doneButton
|
|
||||||
Layout.fillWidth: true
|
|
||||||
text: i18nc("@action:button", "Done")
|
|
||||||
// Button is only enabled if the user has entered something into the nameField
|
|
||||||
enabled: nameField.text.length > 0
|
|
||||||
onClicked: {
|
|
||||||
// Add a listelement to the kountdownModel ListModel
|
|
||||||
if(mode === "add") {
|
|
||||||
addEditSheet.added(
|
|
||||||
nameField.text,
|
|
||||||
descriptionField.text,
|
|
||||||
dateField.text
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
addEditSheet.edited(
|
|
||||||
index,
|
|
||||||
nameField.text,
|
|
||||||
descriptionField.text,
|
|
||||||
dateField.text
|
|
||||||
);
|
|
||||||
}
|
|
||||||
close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,54 +0,0 @@
|
||||||
import QtQuick
|
|
||||||
import QtQuick.Controls as Controls
|
|
||||||
import QtQuick.Layouts
|
|
||||||
import org.kde.kirigami as Kirigami
|
|
||||||
|
|
||||||
Kirigami.AbstractCard {
|
|
||||||
id: kountdownDelegate
|
|
||||||
contentItem: Item {
|
|
||||||
implicitWidth: delegateLayout.implicitWidth
|
|
||||||
implicitHeight: delegateLayout.implicitHeight
|
|
||||||
GridLayout {
|
|
||||||
id: delegateLayout
|
|
||||||
anchors {
|
|
||||||
left: parent.left
|
|
||||||
top: parent.top
|
|
||||||
right: parent.right
|
|
||||||
}
|
|
||||||
rowSpacing: Kirigami.Units.largeSpacing
|
|
||||||
columnSpacing: Kirigami.Units.largeSpacing
|
|
||||||
columns: root.wideScreen ? 4 : 2
|
|
||||||
|
|
||||||
Kirigami.Heading {
|
|
||||||
Layout.fillHeight: true
|
|
||||||
level: 1
|
|
||||||
text: i18n("%1 days", Math.round((date-Date.now())/86400000))
|
|
||||||
}
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
Kirigami.Heading {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
level: 2
|
|
||||||
text: name
|
|
||||||
}
|
|
||||||
Kirigami.Separator {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
visible: description.length > 0
|
|
||||||
}
|
|
||||||
Controls.Label {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
wrapMode: Text.WordWrap
|
|
||||||
text: description
|
|
||||||
visible: description.length > 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Controls.Button {
|
|
||||||
Layout.alignment: Qt.AlignRight
|
|
||||||
// Column spanning within grid layout (vertically in this case)
|
|
||||||
Layout.columnSpan: 2
|
|
||||||
text: i18n("Edit")
|
|
||||||
onClicked: openPopulatedSheet("edit", index, name, description, new Date(date).toISOString().slice(0,10))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -6,7 +6,7 @@ import org.kde.kirigami as Kirigami
|
||||||
Kirigami.ApplicationWindow {
|
Kirigami.ApplicationWindow {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
title: i18nc("@title:window", "Hello World")
|
title: i18nc("@title:window", "My Application")
|
||||||
|
|
||||||
globalDrawer: Kirigami.GlobalDrawer {
|
globalDrawer: Kirigami.GlobalDrawer {
|
||||||
isMenu: true
|
isMenu: true
|
||||||
|
@ -20,51 +20,12 @@ Kirigami.ApplicationWindow {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
ListModel {
|
|
||||||
id: kountdownModel
|
|
||||||
}
|
|
||||||
|
|
||||||
AddEditSheet {
|
|
||||||
id: addEditSheet
|
|
||||||
onAdded: kountdownModel.append({
|
|
||||||
"name": name,
|
|
||||||
"description": description,
|
|
||||||
"date": Date.parse(kdate)
|
|
||||||
});
|
|
||||||
onEdited: kountdownModel.set(index, {
|
|
||||||
"name": name,
|
|
||||||
"description": description,
|
|
||||||
"date": Date.parse(kdate)
|
|
||||||
});
|
|
||||||
onRemoved: kountdownModel.remove(index, 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
function openPopulatedSheet(mode, index = -1, listName = "", listDesc = "", listDate = "") {
|
|
||||||
addEditSheet.mode = mode
|
|
||||||
addEditSheet.index = index;
|
|
||||||
addEditSheet.name = listName
|
|
||||||
addEditSheet.description = listDesc
|
|
||||||
addEditSheet.kdate = listDate
|
|
||||||
|
|
||||||
addEditSheet.open()
|
|
||||||
}
|
|
||||||
|
|
||||||
pageStack.initialPage: Kirigami.ScrollablePage {
|
pageStack.initialPage: Kirigami.ScrollablePage {
|
||||||
title: i18nc("@title", "Kountdown")
|
title: i18nc("@title", "Main Page")
|
||||||
|
|
||||||
actions: [
|
actions: [
|
||||||
Kirigami.Action {
|
|
||||||
id: addAction
|
|
||||||
icon.name: "list-add"
|
|
||||||
text: i18nc("@action:button", "Add kountdown")
|
|
||||||
onTriggered:openPopulatedSheet("add")
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
|
|
||||||
Kirigami.CardsListView {
|
Item {}
|
||||||
id: cardsView
|
|
||||||
model: kountdownModel
|
|
||||||
delegate: KountdownDelegate {}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
18
src/counter.cpp
Normal file
18
src/counter.cpp
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#include "counter.h"
|
||||||
|
|
||||||
|
Counter::Counter(QObject *parent)
|
||||||
|
: QObject(parent)
|
||||||
|
{
|
||||||
|
// Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
uint Counter::counter() const
|
||||||
|
{
|
||||||
|
return m_counter;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Counter::setCounter(const uint counter)
|
||||||
|
{
|
||||||
|
m_counter = counter;
|
||||||
|
Q_EMIT counterChanged();
|
||||||
|
}
|
22
src/counter.h
Normal file
22
src/counter.h
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <qobject.h>
|
||||||
|
#include <qqmlintegration.h>
|
||||||
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
class Counter: QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(uint counter READ counter WRITE setCounter NOTIFY counterChanged)
|
||||||
|
QML_ELEMENT
|
||||||
|
public:
|
||||||
|
explicit Counter(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
[[nodiscard]] uint counter() const;
|
||||||
|
void setCounter(const uint counter);
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void counterChanged();
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint m_counter;
|
||||||
|
};
|
|
@ -10,10 +10,10 @@
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
KLocalizedString::setApplicationDomain("helloworld");
|
KLocalizedString::setApplicationDomain("myapplication");
|
||||||
QCoreApplication::setOrganizationName(QStringLiteral("KDE"));
|
QCoreApplication::setOrganizationName(QStringLiteral("KDE"));
|
||||||
QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org"));
|
QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org"));
|
||||||
QCoreApplication::setApplicationName(QStringLiteral("Hello World"));
|
QCoreApplication::setApplicationName(QStringLiteral("My application of test"));
|
||||||
QCoreApplication::setApplicationVersion(QStringLiteral("0.1.0"));
|
QCoreApplication::setApplicationVersion(QStringLiteral("0.1.0"));
|
||||||
|
|
||||||
if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE")) {
|
if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE")) {
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="/">
|
<qresource prefix="/">
|
||||||
<file alias="main.qml">contents/ui/main.qml</file>
|
<file alias="main.qml">contents/ui/main.qml</file>
|
||||||
<file alias="AddEditSheet.qml">contents/ui/AddEditSheet.qml</file>
|
|
||||||
<file alias="KountdownDelegate.qml">contents/ui/KountdownDelegate.qml</file>
|
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue