v0.1.2: Preferences page, About page, full icon set, redesigned edit form
- Rework the add/edit form onto a generic, catalog-driven field model (JobFieldCatalog + JobEditModel), replacing the old hand-written ApplicationEditDialog with ApplicationEditPage - Add a Preferences page (reachable from the hamburger menu) with a KColorSchemeManager-backed color scheme switcher - Add an About page reading from KAboutData - Ship a full hicolor icon set (16-128px + scalable) via ecm_install_icons instead of a single flat SVG - Restyle the edit form after KDE System Settings' Audio page: Kirigami.ListSectionHeader per category, flat separated rows, no card borders - Explicitly declare Kirigami/KirigamiAddons/ColorScheme as CMake dependencies instead of relying on the QML import scanner alone - Add KDEClangFormat/KDEGitCommitHooks, a CMakePresets.json, and a REUSE + clang-format lint CI workflow - Reformat SPDX headers to include copyright, remove debug screenshot scaffolding
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2026 ToServeTheKing <[email protected]>
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "jobfieldcatalog.h"
|
||||
#include "jobsmodel.h"
|
||||
|
||||
#include <QAbstractListModel>
|
||||
#include <QHash>
|
||||
#include <QQmlEngine>
|
||||
#include <QVariant>
|
||||
|
||||
/**
|
||||
* Drives the add/edit form the way FlatKontrol's PermissionsController drives
|
||||
* PermissionsPage: a generic row model (one row per JobFieldCatalog::Field)
|
||||
* that QML renders via Repeater + DelegateChooser on rowType, instead of
|
||||
* each field being hand-written in QML.
|
||||
*/
|
||||
class JobEditModel : public QAbstractListModel
|
||||
{
|
||||
Q_OBJECT
|
||||
QML_ELEMENT
|
||||
|
||||
Q_PROPERTY(JobsModel *jobsModel READ jobsModel WRITE setJobsModel NOTIFY jobsModelChanged)
|
||||
Q_PROPERTY(int editingJobId READ editingJobId WRITE setEditingJobId NOTIFY editingJobIdChanged)
|
||||
Q_PROPERTY(QVariantList categories READ categories CONSTANT)
|
||||
Q_PROPERTY(QString lastError READ lastError NOTIFY lastErrorChanged)
|
||||
|
||||
public:
|
||||
enum Roles {
|
||||
FieldIdRole = Qt::UserRole + 1,
|
||||
CategoryIdRole,
|
||||
LabelRole,
|
||||
RowTypeRole,
|
||||
ValueRole,
|
||||
ComboOptionsRole,
|
||||
PlaceholderRole,
|
||||
SpinMinRole,
|
||||
SpinMaxRole,
|
||||
};
|
||||
Q_ENUM(Roles)
|
||||
|
||||
explicit JobEditModel(QObject *parent = nullptr);
|
||||
|
||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||
QVariant data(const QModelIndex &index, int role) const override;
|
||||
QHash<int, QByteArray> roleNames() const override;
|
||||
|
||||
JobsModel *jobsModel() const;
|
||||
void setJobsModel(JobsModel *model);
|
||||
|
||||
int editingJobId() const;
|
||||
void setEditingJobId(int id);
|
||||
|
||||
QVariantList categories() const;
|
||||
QString lastError() const;
|
||||
|
||||
/// Updates the value for the field at this row (called from the QML delegate).
|
||||
Q_INVOKABLE void setValue(int row, const QVariant &value);
|
||||
|
||||
/// Persists the current values via jobsModel; true on success.
|
||||
Q_INVOKABLE bool save();
|
||||
|
||||
Q_INVOKABLE bool deleteJob();
|
||||
|
||||
Q_SIGNALS:
|
||||
void jobsModelChanged();
|
||||
void editingJobIdChanged();
|
||||
void lastErrorChanged();
|
||||
|
||||
private:
|
||||
void resetValues();
|
||||
|
||||
JobsModel *m_jobsModel = nullptr;
|
||||
int m_editingJobId = -1;
|
||||
QHash<QString, QVariant> m_values;
|
||||
QString m_lastError;
|
||||
QList<JobFieldCatalog::Field> m_fields;
|
||||
};
|
||||
Reference in New Issue
Block a user