3
0
mirror of https://github.com/Qortal/Brooklyn.git synced 2025-02-22 23:25:52 +00:00
Brooklyn/plasma/workspace/shell/shellcontainmentconfig.h
2022-03-05 22:41:29 +05:00

146 lines
3.7 KiB
C++

/*
SPDX-FileCopyrightText: 2021 Cyril Rossi <cyril.rossi@enioka.com>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#ifndef SHELLCONTAINMENTCONFIG_H
#define SHELLCONTAINMENTCONFIG_H
#include <QAbstractTableModel>
#include <QHash>
#include <QObject>
#include <QQmlApplicationEngine>
#include <QQuickView>
#include <plasma/plasma.h>
#include <plasma/containment.h>
namespace KActivities {
class Consumer;
class Info;
}
class ShellCorona;
class ShellContainmentModel;
class ScreenPoolModel : public QAbstractListModel
{
Q_OBJECT
public:
enum ScreenPoolModelRoles { ScreenIdRole = Qt::UserRole + 1, ScreenNameRole, ContainmentsRole, PrimaryRole, EnabledRole };
public:
explicit ScreenPoolModel(ShellCorona *corona, QObject *parent = nullptr);
~ScreenPoolModel() override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QHash<int, QByteArray> roleNames() const override;
public Q_SLOTS:
void load();
private:
ShellCorona *m_corona;
struct Data {
int id;
QString name;
bool primary;
bool enabled;
};
QTimer *m_reloadTimer = nullptr;
QVector<Data> m_screens;
QVector<ShellContainmentModel *> m_containments;
};
class ShellContainmentModel : public QAbstractListModel
{
Q_OBJECT
Q_PROPERTY(ScreenPoolModel *screenPoolModel READ screenPoolModel CONSTANT)
public:
enum ShellContainmentModelRoles {
ContainmentIdRole = Qt::UserRole + 1,
NameRole,
ScreenRole,
EdgeRole,
EdgePositionRole,
PanelCountAtRightRole,
PanelCountAtTopRole,
PanelCountAtLeftRole,
PanelCountAtBottomRole,
ActivityRole,
IsActiveRole,
ImageSourceRole,
DestroyedRole
};
public:
explicit ShellContainmentModel(ShellCorona *corona, int screenId, ScreenPoolModel *parent = nullptr);
~ShellContainmentModel() override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QHash<int, QByteArray> roleNames() const override;
ScreenPoolModel *screenPoolModel() const;
Q_INVOKABLE void remove(int contId);
Q_INVOKABLE void moveContainementToScreen(unsigned int contId, int newScreen);
bool findContainment(unsigned int containmentId) const;
void loadActivitiesInfos();
public Q_SLOTS:
void load();
private:
static QString plasmaLocationToString(const Plasma::Types::Location location);
static QString containmentTypeToString(const Plasma::Types::ContainmentType containmentType);
Plasma::Containment *containmentById(unsigned int id);
QString containmentPreview(Plasma::Containment *containment);
private:
int m_screenId = -1;
ShellCorona *m_corona;
struct Data {
unsigned int id;
QString name;
int screen;
Plasma::Types::Location edge;
QString activity;
bool changed = false;
bool isActive = true;
QString image;
const Plasma::Containment *containment;
};
QTimer *m_reloadTimer = nullptr;
QVector<Data> m_containments;
ScreenPoolModel *m_screenPoolModel;
QHash<QString, KActivities::Info *> m_activitiesInfos;
KActivities::Consumer *m_activityConsumer;
QHash<int, QHash<Plasma::Types::Location, QList<int>>> m_edgeCount;
};
class ShellContainmentConfig : public QQmlApplicationEngine
{
Q_OBJECT
public:
ShellContainmentConfig(ShellCorona *corona, QWindow *parent = nullptr);
~ShellContainmentConfig() override;
void init();
private:
ShellCorona *m_corona;
ScreenPoolModel *m_model;
};
#endif // SHELLCONTAINMENTCONFIG_H