Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
LayoutUtils.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 fuddlesworth
2// SPDX-License-Identifier: LGPL-2.1-or-later
3
4#pragma once
5
6#include <phosphorzones_export.h>
7#include <QFlags>
8#include <QHash>
9#include <QJsonObject>
10#include <QList>
11#include <QRectF>
12#include <QString>
13#include <QStringList>
14#include <QVariantList>
15#include <QVariantMap>
16#include <QVector>
17
18namespace PhosphorZones {
19
20class Layout;
21class Zone;
22
29enum class ZoneField {
30 None = 0,
31 Name = 1 << 0,
32 Appearance = 1 << 1,
33
34 Minimal = None,
36};
37Q_DECLARE_FLAGS(ZoneFields, ZoneField)
38Q_DECLARE_OPERATORS_FOR_FLAGS(ZoneFields)
39
40
51namespace LayoutUtils {
52
53// ═══════════════════════════════════════════════════════════════════════════
54// Allow-list serialization (shared by Layout, LayoutAdaptor, EditorController)
55// ═══════════════════════════════════════════════════════════════════════════
56
60PHOSPHORZONES_EXPORT void serializeAllowLists(QJsonObject& json, const QStringList& screens, const QList<int>& desktops,
61 const QStringList& activities);
62
66PHOSPHORZONES_EXPORT void deserializeAllowLists(const QJsonObject& json, QStringList& screens, QList<int>& desktops,
67 QStringList& activities);
68
69// ═══════════════════════════════════════════════════════════════════════════
70// Zone conversion utilities
71// ═══════════════════════════════════════════════════════════════════════════
72
81PHOSPHORZONES_EXPORT QVariantList zonesToVariantList(Layout* layout, ZoneFields fields = ZoneField::Minimal,
82 const QRectF& referenceGeometry = QRectF());
83
90PHOSPHORZONES_EXPORT QVariantMap layoutToVariantMap(Layout* layout, ZoneFields zoneFields = ZoneField::Minimal);
91
92PHOSPHORZONES_EXPORT void sortZonesByNumber(QVector<Zone*>& zones);
93PHOSPHORZONES_EXPORT QHash<QString, int> buildZonePositionMap(Layout* layout);
94
104PHOSPHORZONES_EXPORT QHash<QString, int> buildGlobalZonePositionMap(const QList<Layout*>& layouts);
105
106} // namespace LayoutUtils
107
108} // namespace PhosphorZones
Represents a collection of zones that form a layout.
Definition Layout.h:74
PHOSPHORZONES_EXPORT void serializeAllowLists(QJsonObject &json, const QStringList &screens, const QList< int > &desktops, const QStringList &activities)
Serialize visibility allow-lists to JSON (only writes non-empty lists)
PHOSPHORZONES_EXPORT QHash< QString, int > buildZonePositionMap(Layout *layout)
PHOSPHORZONES_EXPORT QVariantMap layoutToVariantMap(Layout *layout, ZoneFields zoneFields=ZoneField::Minimal)
Convert a layout to a QVariantMap (metadata + zones)
PHOSPHORZONES_EXPORT QHash< QString, int > buildGlobalZonePositionMap(const QList< Layout * > &layouts)
Build a global zoneId → position map merged across every layout in layouts.
PHOSPHORZONES_EXPORT void deserializeAllowLists(const QJsonObject &json, QStringList &screens, QList< int > &desktops, QStringList &activities)
Deserialize visibility allow-lists from JSON (clears output params first)
PHOSPHORZONES_EXPORT void sortZonesByNumber(QVector< Zone * > &zones)
PHOSPHORZONES_EXPORT QVariantList zonesToVariantList(Layout *layout, ZoneFields fields=ZoneField::Minimal, const QRectF &referenceGeometry=QRectF())
Convert all zones in a layout to QVariantList.
Definition IWindowTrackingService.h:22
ZoneField
Flags controlling which zone fields to include in conversion (OCP-compliant)
Definition LayoutUtils.h:29
@ Minimal
Id, ZoneNumber, RelativeGeometry only (for previews)
@ Name
Include zone name.
@ Appearance
Include colors, opacities, border properties.
@ Full
All fields (for overlay rendering)