Evan's Blog
EvanZhu0721 / 公开仓库

SBMS

镜像已同步

SBMS complete the calculation rules for the default logical desktop topology relationship and the physical dimensions of the displays in the Windows multi-screen collaboration system.

上游 GitHub
READ-ONLY MIRROR

README、源码与 Release 已保存到本站;源码视图固定到 commit a37d6c4b。

main/ root / ui
a37d6c4b· 固定源码快照
ui/quick-access.slint13.9 KB
1import { MainPage } from "pages/main.slint";
2import { ScreenSizePage } from "pages/screen-size.slint";
3import { StreamPage } from "pages/stream.slint";
4import { GeometryPage } from "pages/geometry.slint";
5import { DiagnosticsPage } from "pages/diagnostics.slint";
6import { RemoveGroupDialog } from "remove-group-dialog.slint";
7import { LaunchIntro } from "launch-intro.slint";
8import { MdTokens } from "theme.slint";
9
10export enum QuickAccessPage {
11 main,
12 screen-size,
13 stream,
14 geometry,
15 diagnostics,
16}
17
18export component QuickAccess inherits Window {
19 title: "SBMS Quick Access";
20 width: 384px;
21 height: 544px;
22 background: MdTokens.surface;
23 always-on-top: true;
24 no-frame: true;
25
26 in-out property <QuickAccessPage> page: QuickAccessPage.main;
27 in-out property <bool> intro-active: false;
28 in-out property <int> intro-stage: 0;
29 in-out property <[string]> display-names;
30 in-out property <[string]> display-labels;
31 in-out property <[string]> display-ids;
32 in-out property <int> selected-display: -1;
33 in property <bool> stream-only: false;
34 in-out property <[string]> tab-labels;
35 in-out property <[string]> tab-details;
36 in-out property <[int]> tab-indices;
37 in property <int> active-group-index: 0;
38 in property <int> group-count: 1;
39 in property <int> max-group-count: 1;
40 in-out property <int> pending-remove-index: -1;
41 in-out property <[string]> reference-names;
42 in-out property <[string]> reference-labels;
43 in-out property <[string]> reference-ids;
44 in-out property <int> selected-reference: -1;
45 in property <bool> reference-manual: false;
46 in property <bool> reference-action-enabled: false;
47 in-out property <int> sizing-strategy: 0;
48 in property <string> state: "Stopped";
49 in property <string> state-detail: "Choose a target screen to begin";
50 in property <bool> running: false;
51 in property <bool> busy: false;
52 in property <bool> restart-available: false;
53 in property <string> error-text: "";
54 in property <int> mapping-fps: 0;
55 in property <bool> mapping-fps-valid: false;
56 in property <bool> mapping-fps-error: false;
57 in property <bool> mapping-fps-nan: false;
58 in property <string> screen-size-target: "";
59 in property <string> screen-size-native-mode: "";
60 in property <string> screen-size-detected-mm: "Not reported";
61 in property <string> screen-size-detected-inches: "";
62 in-out property <string> screen-size-manual-inches: "";
63 in-out property <int> screen-size-aspect-ratio: 0;
64 in property <string> screen-size-effective-mm: "";
65 in property <string> screen-size-effective-inches: "";
66 in property <string> screen-size-source: "";
67 in property <string> screen-size-error: "";
68 in property <bool> screen-size-valid: true;
69 in property <bool> screen-size-save-blocked: false;
70 in property <string> diagnostic-summary: "";
71 in property <string> diagnostic-text: "No diagnostic records are available.";
72 in property <string> diagnostic-path: "";
73 in property <string> diagnostic-action-error: "";
74 in property <bool> geometry-valid: false;
75 in property <bool> geometry-save-blocked: false;
76 in property <bool> geometry-configured: false;
77 in property <string> geometry-summary: "3840 × 2160";
78 in property <string> geometry-summary-detail: "Driver · 240 Hz";
79 in property <string> geometry-result: "Enter display measurements";
80 in property <string> geometry-result-detail: "All values use pixels or millimetres";
81 in property <string> geometry-error: "";
82 in-out property <string> reference-width: "";
83 in-out property <string> reference-height: "";
84 in-out property <string> reference-diagonal: "";
85 in-out property <int> reference-aspect-ratio: 0;
86 in-out property <int> reference-rotation: 0;
87 in property <string> reference-width-suggestion: "";
88 in property <string> reference-width-suffix: "";
89 in property <string> reference-height-suggestion: "";
90 in property <string> reference-height-suffix: "";
91 in-out property <string> stream-width: "3840";
92 in-out property <string> stream-height: "2160";
93 in-out property <string> stream-diagonal: "";
94 in-out property <string> stream-refresh: "60";
95 in-out property <int> stream-aspect-ratio-index: 1;
96 in-out property <int> stream-rotation: 0;
97 in property <string> stream-width-suggestion: "";
98 in property <string> stream-width-suffix: "";
99 in property <string> stream-height-suggestion: "";
100 in property <string> stream-height-suffix: "";
101 in property <string> stream-aspect-ratio: "";
102 in property <string> stream-result: "Configure the streaming screen";
103 in property <string> stream-result-detail: "Reference geometry determines the virtual mode";
104 in property <string> stream-error: "";
105 in property <bool> sunshine-panel-enabled: false;
106 in property <int> sunshine-state: 0;
107 in property <int> sunshine-port: 0;
108 in property <string> sunshine-lan-ip: "--";
109 in property <[string]> profile-names;
110 in property <string> active-profile-name: "default";
111 in property <bool> profile-saving: false;
112 in property <int> max-profile-count: 3;
113
114 callback start();
115 callback stop();
116 callback restart-mapping();
117 callback display-selected();
118 callback reference-selected();
119 callback strategy-selected();
120 callback calculate-geometry();
121 callback open-manual-geometry();
122 callback dismiss();
123 callback close-geometry();
124 callback geometry-edited();
125 callback save-geometry();
126 callback open-diagnostics();
127 callback close-diagnostics();
128 callback open-log-folder();
129 callback tab-selected(int);
130 callback tab-wheel(int);
131 callback add-group();
132 callback remove-group(int);
133 callback open-stream-config();
134 callback close-stream-config();
135 callback stream-edited();
136 callback save-stream-config();
137 callback open-sunshine-panel();
138 callback open-display-settings();
139 callback disable-launch-intro();
140 callback open-project-home();
141 callback open-profile-directory();
142 callback open-screen-size();
143 callback close-screen-size();
144 callback screen-size-edited();
145 callback reset-screen-size();
146 callback reread-screen-size();
147 callback save-screen-size();
148 callback create-profile(string);
149 callback rename-profile(string, string);
150 callback delete-profile(string);
151 callback activate-profile(string);
152
153 if root.page == QuickAccessPage.main : MainPage {
154 visible: !root.intro-active;
155 width: parent.width;
156 height: parent.height;
157 display-names: root.display-names;
158 display-labels: root.display-labels;
159 display-ids: root.display-ids;
160 selected-display <=> root.selected-display;
161 stream-only: root.stream-only;
162 tab-labels: root.tab-labels;
163 tab-details: root.tab-details;
164 tab-indices: root.tab-indices;
165 active-group-index: root.active-group-index;
166 group-count: root.group-count;
167 max-group-count: root.max-group-count;
168 pending-remove-index <=> root.pending-remove-index;
169 reference-names: root.reference-names;
170 reference-labels: root.reference-labels;
171 reference-ids: root.reference-ids;
172 selected-reference <=> root.selected-reference;
173 reference-manual: root.reference-manual;
174 reference-action-enabled: root.reference-action-enabled;
175 sizing-strategy <=> root.sizing-strategy;
176 state: root.state;
177 state-detail: root.state-detail;
178 running: root.running;
179 busy: root.busy;
180 restart-available: root.restart-available;
181 error-text: root.error-text;
182 mapping-fps: root.mapping-fps;
183 mapping-fps-valid: root.mapping-fps-valid;
184 mapping-fps-error: root.mapping-fps-error;
185 mapping-fps-nan: root.mapping-fps-nan;
186 geometry-configured: root.geometry-configured;
187 geometry-summary: root.geometry-summary;
188 geometry-summary-detail: root.geometry-summary-detail;
189 sunshine-panel-enabled: root.sunshine-panel-enabled;
190 sunshine-state: root.sunshine-state;
191 sunshine-port: root.sunshine-port;
192 sunshine-lan-ip: root.sunshine-lan-ip;
193 profile-names: root.profile-names;
194 active-profile-name: root.active-profile-name;
195 profile-saving: root.profile-saving;
196 max-profile-count: root.max-profile-count;
197
198 start => { root.start(); }
199 stop => { root.stop(); }
200 restart-mapping => { root.restart-mapping(); }
201 display-selected => { root.display-selected(); }
202 reference-selected => { root.reference-selected(); }
203 strategy-selected => { root.strategy-selected(); }
204 calculate-geometry => { root.calculate-geometry(); }
205 open-manual-geometry => { root.open-manual-geometry(); }
206 dismiss => { root.dismiss(); }
207 open-diagnostics => { root.open-diagnostics(); }
208 tab-selected(index) => { root.tab-selected(index); }
209 tab-wheel(delta) => { root.tab-wheel(delta); }
210 add-group => { root.add-group(); }
211 open-stream-config => { root.open-stream-config(); }
212 open-sunshine-panel => { root.open-sunshine-panel(); }
213 open-display-settings => { root.open-display-settings(); }
214 open-profile-directory => { root.open-profile-directory(); }
215 open-screen-size => { root.open-screen-size(); }
216 create-profile(name) => { root.create-profile(name); }
217 rename-profile(old-name, new-name) => { root.rename-profile(old-name, new-name); }
218 delete-profile(name) => { root.delete-profile(name); }
219 activate-profile(name) => { root.activate-profile(name); }
220 }
221
222 if root.page == QuickAccessPage.screen-size : ScreenSizePage {
223 width: parent.width;
224 height: parent.height;
225 screen-size-target: root.screen-size-target;
226 screen-size-native-mode: root.screen-size-native-mode;
227 screen-size-detected-mm: root.screen-size-detected-mm;
228 screen-size-detected-inches: root.screen-size-detected-inches;
229 screen-size-manual-inches <=> root.screen-size-manual-inches;
230 screen-size-aspect-ratio <=> root.screen-size-aspect-ratio;
231 screen-size-effective-mm: root.screen-size-effective-mm;
232 screen-size-effective-inches: root.screen-size-effective-inches;
233 screen-size-source: root.screen-size-source;
234 screen-size-error: root.screen-size-error;
235 screen-size-valid: root.screen-size-valid;
236 screen-size-save-blocked: root.screen-size-save-blocked;
237
238 close-screen-size => { root.close-screen-size(); }
239 screen-size-edited => { root.screen-size-edited(); }
240 reset-screen-size => { root.reset-screen-size(); }
241 reread-screen-size => { root.reread-screen-size(); }
242 save-screen-size => { root.save-screen-size(); }
243 }
244
245 if root.page == QuickAccessPage.stream : StreamPage {
246 width: parent.width;
247 height: parent.height;
248 stream-width <=> root.stream-width;
249 stream-height <=> root.stream-height;
250 stream-diagonal <=> root.stream-diagonal;
251 stream-refresh <=> root.stream-refresh;
252 stream-aspect-ratio-index <=> root.stream-aspect-ratio-index;
253 stream-rotation <=> root.stream-rotation;
254 stream-width-suggestion: root.stream-width-suggestion;
255 stream-width-suffix: root.stream-width-suffix;
256 stream-height-suggestion: root.stream-height-suggestion;
257 stream-height-suffix: root.stream-height-suffix;
258 stream-aspect-ratio: root.stream-aspect-ratio;
259 stream-result: root.stream-result;
260 stream-result-detail: root.stream-result-detail;
261 stream-error: root.stream-error;
262
263 close-stream-config => { root.close-stream-config(); }
264 stream-edited => { root.stream-edited(); }
265 save-stream-config => { root.save-stream-config(); }
266 }
267
268 if root.page == QuickAccessPage.geometry : GeometryPage {
269 width: parent.width;
270 height: parent.height;
271 stream-only: root.stream-only;
272 geometry-valid: root.geometry-valid;
273 geometry-save-blocked: root.geometry-save-blocked;
274 geometry-result: root.geometry-result;
275 geometry-result-detail: root.geometry-result-detail;
276 geometry-error: root.geometry-error;
277 reference-width <=> root.reference-width;
278 reference-height <=> root.reference-height;
279 reference-diagonal <=> root.reference-diagonal;
280 reference-aspect-ratio <=> root.reference-aspect-ratio;
281 reference-rotation <=> root.reference-rotation;
282 reference-width-suggestion: root.reference-width-suggestion;
283 reference-width-suffix: root.reference-width-suffix;
284 reference-height-suggestion: root.reference-height-suggestion;
285 reference-height-suffix: root.reference-height-suffix;
286 sizing-strategy <=> root.sizing-strategy;
287
288 close-geometry => { root.close-geometry(); }
289 geometry-edited => { root.geometry-edited(); }
290 strategy-selected => { root.strategy-selected(); }
291 save-geometry => { root.save-geometry(); }
292 }
293
294 if root.page == QuickAccessPage.diagnostics : DiagnosticsPage {
295 width: parent.width;
296 height: parent.height;
297 diagnostic-summary: root.diagnostic-summary;
298 diagnostic-text: root.diagnostic-text;
299 diagnostic-path: root.diagnostic-path;
300 diagnostic-action-error: root.diagnostic-action-error;
301
302 close-diagnostics => { root.close-diagnostics(); }
303 open-log-folder => { root.open-log-folder(); }
304 }
305
306 if root.pending-remove-index >= 0 : RemoveGroupDialog {
307 width: parent.width;
308 height: parent.height;
309 pending-remove-index <=> root.pending-remove-index;
310 remove-group(index) => { root.remove-group(index); }
311 }
312
313 LaunchIntro {
314 z: 100;
315 width: parent.width;
316 height: parent.height;
317 active: root.intro-active;
318 stage: root.intro-stage;
319 disable-forever => { root.disable-launch-intro(); }
320 open-project-home => { root.open-project-home(); }
321 }
322}
323