Loading...
Searching...
No Matches
WindowSettingsWidget.hpp
1#pragma once
2
3#include <Device/Protocol/ProtocolSettingsWidget.hpp>
4
5#include <QComboBox>
6#include <QDoubleSpinBox>
7#include <QFormLayout>
8#include <QGraphicsEllipseItem>
9#include <QGraphicsSceneMouseEvent>
10#include <QGuiApplication>
11#include <QHBoxLayout>
12#include <QLabel>
13#include <QLineEdit>
14#include <QMenu>
15#include <QMouseEvent>
16#include <QPainter>
17#include <QPushButton>
18#include <QScreen>
19#include <QScrollArea>
20#include <QSpinBox>
21#include <QStackedWidget>
22#include <QTabWidget>
23#include <QUrl>
24#include <QVBoxLayout>
25#include <qcheckbox.h>
26
27namespace Gfx
28{
29class DesktopLayoutCanvas;
30class OutputMappingCanvas;
31class OutputPreviewWindows;
32
34{
35public:
36 explicit WindowSettingsWidget(QWidget* parent = nullptr);
38
39 Device::DeviceSettings getSettings() const override;
40
41 void setSettings(const Device::DeviceSettings& settings) override;
42
43private:
44 void onModeChanged(int index);
45 void onSelectionChanged(int outputIndex);
46 void updatePropertiesFromSelection();
47 void applyPropertiesToSelection();
48 void applySourceRectToSelection();
49 void updatePixelLabels();
50
51 QLineEdit* m_deviceNameEdit{};
52 QComboBox* m_modeCombo{};
53 QStackedWidget* m_stack{};
54
55 // Multi-window UI
56 OutputMappingCanvas* m_canvas{};
57 QSpinBox* m_winPosX{};
58 QSpinBox* m_winPosY{};
59 QSpinBox* m_winWidth{};
60 QSpinBox* m_winHeight{};
61 QComboBox* m_screenCombo{};
62 QCheckBox* m_fullscreenCheck{};
63 QDoubleSpinBox* m_srcX{};
64 QDoubleSpinBox* m_srcY{};
65 QDoubleSpinBox* m_srcW{};
66 QDoubleSpinBox* m_srcH{};
67 QLabel* m_srcPosPixelLabel{};
68 QLabel* m_srcSizePixelLabel{};
69 QSpinBox* m_inputWidth{};
70 QSpinBox* m_inputHeight{};
71
72 // Soft-edge blending controls
73 QDoubleSpinBox* m_blendLeftW{};
74 QDoubleSpinBox* m_blendLeftG{};
75 QDoubleSpinBox* m_blendRightW{};
76 QDoubleSpinBox* m_blendRightG{};
77 QDoubleSpinBox* m_blendTopW{};
78 QDoubleSpinBox* m_blendTopG{};
79 QDoubleSpinBox* m_blendBottomW{};
80 QDoubleSpinBox* m_blendBottomG{};
81
82 QComboBox* m_lockModeCombo{};
83
84 int m_selectedOutput{-1};
85 bool m_syncing{false}; // guard against selection sync loops
86
87 // Two-column layout: tabs on left, inspector on right
88 QTabWidget* m_tabWidget{};
89 DesktopLayoutCanvas* m_desktopCanvas{};
90 QWidget* m_inspectorPanel{};
91
92 // Per-output sections (hidden when no selection)
93 QWidget* m_outputSectionsContainer{};
94
95 // Output selector button row
96 QHBoxLayout* m_outputButtonsLayout{};
97 void rebuildOutputButtons();
98 void selectOutput(int index);
99
100 // Preview windows
101 OutputPreviewWindows* m_preview{};
102 QComboBox* m_previewContentCombo{};
103 void syncPreview(bool syncPositions = false);
104 void syncDesktopCanvasFromMappingItem(int index);
105};
106
107}
Definition ProtocolSettingsWidget.hpp:22
Definition DesktopLayout.hpp:66
Definition OutputMapping.hpp:88
Definition OutputPreview.hpp:24
Definition WindowSettingsWidget.hpp:34
Binds the rendering pipeline to ossia processes.
Definition CameraDevice.cpp:30
Definition DeviceSettings.hpp:20