zui 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. checksums.yaml +7 -0
  2. data/Components/Builtins/Accordion.qml +208 -0
  3. data/Components/Builtins/Action.qml +43 -0
  4. data/Components/Builtins/ActionButton.qml +19 -0
  5. data/Components/Builtins/ActionGroup.qml +81 -0
  6. data/Components/Builtins/AlertDialog.qml +398 -0
  7. data/Components/Builtins/AnchorAnimation.qml +3 -0
  8. data/Components/Builtins/AnchorChanges.qml +11 -0
  9. data/Components/Builtins/AnimatedImage.qml +39 -0
  10. data/Components/Builtins/Animation.qml +3 -0
  11. data/Components/Builtins/AnimationController.qml +11 -0
  12. data/Components/Builtins/ApplicationWindow.qml +103 -0
  13. data/Components/Builtins/AreaChart.qml +70 -0
  14. data/Components/Builtins/AspectRatio.qml +30 -0
  15. data/Components/Builtins/Audio.qml +85 -0
  16. data/Components/Builtins/AudioInput.qml +10 -0
  17. data/Components/Builtins/AudioOutput.qml +10 -0
  18. data/Components/Builtins/Avatar.qml +46 -0
  19. data/Components/Builtins/Badge.qml +38 -0
  20. data/Components/Builtins/Banner.qml +133 -0
  21. data/Components/Builtins/BarChart.qml +67 -0
  22. data/Components/Builtins/BarIconButton.qml +30 -0
  23. data/Components/Builtins/BarIndicator.qml +26 -0
  24. data/Components/Builtins/Behavior.qml +13 -0
  25. data/Components/Builtins/Blur.qml +14 -0
  26. data/Components/Builtins/BorderImage.qml +38 -0
  27. data/Components/Builtins/BorderOverlay.qml +25 -0
  28. data/Components/Builtins/BottomSheet.qml +211 -0
  29. data/Components/Builtins/Breadcrumb.qml +169 -0
  30. data/Components/Builtins/BubbleChart.qml +3 -0
  31. data/Components/Builtins/BusyIndicator.qml +24 -0
  32. data/Components/Builtins/Button.qml +55 -0
  33. data/Components/Builtins/ButtonGroup.qml +18 -0
  34. data/Components/Builtins/Calendar.qml +55 -0
  35. data/Components/Builtins/Camera.qml +18 -0
  36. data/Components/Builtins/CandlestickChart.qml +3 -0
  37. data/Components/Builtins/Canvas.qml +159 -0
  38. data/Components/Builtins/CaptureSession.qml +19 -0
  39. data/Components/Builtins/Card.qml +23 -0
  40. data/Components/Builtins/Carousel.qml +72 -0
  41. data/Components/Builtins/Center.qml +20 -0
  42. data/Components/Builtins/CheckDelegate.qml +132 -0
  43. data/Components/Builtins/Checkbox.qml +62 -0
  44. data/Components/Builtins/Chip.qml +65 -0
  45. data/Components/Builtins/Circle.qml +35 -0
  46. data/Components/Builtins/Clipboard.qml +29 -0
  47. data/Components/Builtins/ColorAnimation.qml +3 -0
  48. data/Components/Builtins/ColorPicker.qml +70 -0
  49. data/Components/Builtins/Colorize.qml +14 -0
  50. data/Components/Builtins/Column.qml +17 -0
  51. data/Components/Builtins/ColumnLayout.qml +13 -0
  52. data/Components/Builtins/ConfirmDialog.qml +20 -0
  53. data/Components/Builtins/ConstrainedBox.qml +28 -0
  54. data/Components/Builtins/Container.qml +30 -0
  55. data/Components/Builtins/ContextMenu.qml +140 -0
  56. data/Components/Builtins/CursorSurface.qml +18 -0
  57. data/Components/Builtins/DataTable.qml +69 -0
  58. data/Components/Builtins/DatePicker.qml +180 -0
  59. data/Components/Builtins/DayOfWeekRow.qml +11 -0
  60. data/Components/Builtins/DelayButton.qml +47 -0
  61. data/Components/Builtins/DelegateModel.qml +10 -0
  62. data/Components/Builtins/DelegateModelGroup.qml +10 -0
  63. data/Components/Builtins/Dial.qml +42 -0
  64. data/Components/Builtins/Dialog.qml +128 -0
  65. data/Components/Builtins/DialogButtonBox.qml +137 -0
  66. data/Components/Builtins/Divider.qml +26 -0
  67. data/Components/Builtins/DonutChart.qml +3 -0
  68. data/Components/Builtins/DoubleSpinBox.qml +58 -0
  69. data/Components/Builtins/DragArea.qml +43 -0
  70. data/Components/Builtins/Drawer.qml +107 -0
  71. data/Components/Builtins/DropArea.qml +19 -0
  72. data/Components/Builtins/DropShadow.qml +16 -0
  73. data/Components/Builtins/Dropdown.qml +19 -0
  74. data/Components/Builtins/ExpansionPanel.qml +157 -0
  75. data/Components/Builtins/FilePicker.qml +140 -0
  76. data/Components/Builtins/FittedBox.qml +40 -0
  77. data/Components/Builtins/Flickable.qml +40 -0
  78. data/Components/Builtins/Flipable.qml +45 -0
  79. data/Components/Builtins/Flow.qml +16 -0
  80. data/Components/Builtins/FocusScope.qml +29 -0
  81. data/Components/Builtins/FolderListModel.qml +9 -0
  82. data/Components/Builtins/FolderPicker.qml +93 -0
  83. data/Components/Builtins/FontLoader.qml +21 -0
  84. data/Components/Builtins/FontPicker.qml +91 -0
  85. data/Components/Builtins/Frame.qml +71 -0
  86. data/Components/Builtins/FrameAnimation.qml +13 -0
  87. data/Components/Builtins/Gauge.qml +3 -0
  88. data/Components/Builtins/Glow.qml +15 -0
  89. data/Components/Builtins/Gradient.qml +93 -0
  90. data/Components/Builtins/Grid.qml +16 -0
  91. data/Components/Builtins/GridLayout.qml +16 -0
  92. data/Components/Builtins/GridView.qml +226 -0
  93. data/Components/Builtins/GroupBox.qml +95 -0
  94. data/Components/Builtins/Heatmap.qml +3 -0
  95. data/Components/Builtins/Histogram.qml +3 -0
  96. data/Components/Builtins/HorizontalHeader.qml +23 -0
  97. data/Components/Builtins/HorizontalHeaderDelegate.qml +39 -0
  98. data/Components/Builtins/HoverArea.qml +19 -0
  99. data/Components/Builtins/Icon.qml +16 -0
  100. data/Components/Builtins/Image.qml +110 -0
  101. data/Components/Builtins/ImageCapture.qml +14 -0
  102. data/Components/Builtins/ItemDelegate.qml +152 -0
  103. data/Components/Builtins/KeyCatcher.qml +25 -0
  104. data/Components/Builtins/Label.qml +43 -0
  105. data/Components/Builtins/LayoutItemProxy.qml +51 -0
  106. data/Components/Builtins/Legend.qml +86 -0
  107. data/Components/Builtins/Line.qml +28 -0
  108. data/Components/Builtins/LineChart.qml +87 -0
  109. data/Components/Builtins/ListModel.qml +8 -0
  110. data/Components/Builtins/ListView.qml +65 -0
  111. data/Components/Builtins/Loader.qml +33 -0
  112. data/Components/Builtins/Markdown.qml +23 -0
  113. data/Components/Builtins/MediaDevices.qml +10 -0
  114. data/Components/Builtins/MediaPlayer.qml +27 -0
  115. data/Components/Builtins/MediaRecorder.qml +16 -0
  116. data/Components/Builtins/Menu.qml +119 -0
  117. data/Components/Builtins/MenuBar.qml +128 -0
  118. data/Components/Builtins/MenuItem.qml +77 -0
  119. data/Components/Builtins/MenuSeparator.qml +30 -0
  120. data/Components/Builtins/MessageDialog.qml +104 -0
  121. data/Components/Builtins/ModalSheet.qml +222 -0
  122. data/Components/Builtins/ModelView3d.qml +50 -0
  123. data/Components/Builtins/MonthGrid.qml +23 -0
  124. data/Components/Builtins/MultiEffect.qml +48 -0
  125. data/Components/Builtins/MultiSelect.qml +23 -0
  126. data/Components/Builtins/NavigationRail.qml +154 -0
  127. data/Components/Builtins/NumberAnimation.qml +3 -0
  128. data/Components/Builtins/NumberField.qml +18 -0
  129. data/Components/Builtins/OpacityAnimator.qml +3 -0
  130. data/Components/Builtins/OpacityMask.qml +21 -0
  131. data/Components/Builtins/OpticalGlyph.qml +16 -0
  132. data/Components/Builtins/Page.qml +111 -0
  133. data/Components/Builtins/PageIndicator.qml +63 -0
  134. data/Components/Builtins/Pagination.qml +158 -0
  135. data/Components/Builtins/Pane.qml +72 -0
  136. data/Components/Builtins/PanelHero.qml +15 -0
  137. data/Components/Builtins/ParallelAnimation.qml +3 -0
  138. data/Components/Builtins/ParentAnimation.qml +3 -0
  139. data/Components/Builtins/ParentChange.qml +10 -0
  140. data/Components/Builtins/ParticleSystem.qml +81 -0
  141. data/Components/Builtins/PasswordField.qml +58 -0
  142. data/Components/Builtins/Path.qml +35 -0
  143. data/Components/Builtins/PathAnimation.qml +3 -0
  144. data/Components/Builtins/PauseAnimation.qml +3 -0
  145. data/Components/Builtins/PieChart.qml +3 -0
  146. data/Components/Builtins/PinchArea.qml +23 -0
  147. data/Components/Builtins/Popup.qml +130 -0
  148. data/Components/Builtins/Progress.qml +15 -0
  149. data/Components/Builtins/ProgressRing.qml +120 -0
  150. data/Components/Builtins/PropertyAction.qml +11 -0
  151. data/Components/Builtins/PropertyAnimation.qml +3 -0
  152. data/Components/Builtins/PropertyChanges.qml +10 -0
  153. data/Components/Builtins/RadarChart.qml +3 -0
  154. data/Components/Builtins/RadialGauge.qml +3 -0
  155. data/Components/Builtins/RadioButton.qml +46 -0
  156. data/Components/Builtins/RadioDelegate.qml +115 -0
  157. data/Components/Builtins/RadioGroup.qml +58 -0
  158. data/Components/Builtins/RangeSlider.qml +39 -0
  159. data/Components/Builtins/Rectangle.qml +23 -0
  160. data/Components/Builtins/RectangularShadow.qml +23 -0
  161. data/Components/Builtins/ReorderableList.qml +204 -0
  162. data/Components/Builtins/RichText.qml +23 -0
  163. data/Components/Builtins/RotationAnimation.qml +3 -0
  164. data/Components/Builtins/RotationAnimator.qml +3 -0
  165. data/Components/Builtins/RoundButton.qml +42 -0
  166. data/Components/Builtins/Row.qml +17 -0
  167. data/Components/Builtins/RowLayout.qml +13 -0
  168. data/Components/Builtins/ScaleAnimator.qml +3 -0
  169. data/Components/Builtins/ScatterChart.qml +3 -0
  170. data/Components/Builtins/ScreenCapture.qml +78 -0
  171. data/Components/Builtins/ScriptAction.qml +15 -0
  172. data/Components/Builtins/Scroll.qml +18 -0
  173. data/Components/Builtins/ScrollBar.qml +18 -0
  174. data/Components/Builtins/ScrollIndicator.qml +15 -0
  175. data/Components/Builtins/SearchField.qml +178 -0
  176. data/Components/Builtins/SearchableDropdown.qml +21 -0
  177. data/Components/Builtins/SectionHeader.qml +14 -0
  178. data/Components/Builtins/SelectableText.qml +33 -0
  179. data/Components/Builtins/SelectionRectangle.qml +17 -0
  180. data/Components/Builtins/Separator.qml +13 -0
  181. data/Components/Builtins/SequentialAnimation.qml +3 -0
  182. data/Components/Builtins/Settings.qml +10 -0
  183. data/Components/Builtins/ShaderEffect.qml +115 -0
  184. data/Components/Builtins/ShaderEffectSource.qml +61 -0
  185. data/Components/Builtins/Shaders/grayscale.frag +14 -0
  186. data/Components/Builtins/Shaders/grayscale.frag.qsb +0 -0
  187. data/Components/Builtins/Shaders/passthrough.frag +11 -0
  188. data/Components/Builtins/Shaders/passthrough.frag.qsb +0 -0
  189. data/Components/Builtins/Shaders/pixelate.frag +16 -0
  190. data/Components/Builtins/Shaders/pixelate.frag.qsb +0 -0
  191. data/Components/Builtins/Shaders/vignette.frag +18 -0
  192. data/Components/Builtins/Shaders/vignette.frag.qsb +0 -0
  193. data/Components/Builtins/Shaders/wave.frag +18 -0
  194. data/Components/Builtins/Shaders/wave.frag.qsb +0 -0
  195. data/Components/Builtins/Shape.qml +53 -0
  196. data/Components/Builtins/Skeleton.qml +78 -0
  197. data/Components/Builtins/Slider.qml +21 -0
  198. data/Components/Builtins/SmoothedAnimation.qml +3 -0
  199. data/Components/Builtins/Snackbar.qml +181 -0
  200. data/Components/Builtins/SortFilterProxyModel.qml +16 -0
  201. data/Components/Builtins/SoundEffect.qml +10 -0
  202. data/Components/Builtins/Spacer.qml +13 -0
  203. data/Components/Builtins/Sparkline.qml +3 -0
  204. data/Components/Builtins/SpinBox.qml +44 -0
  205. data/Components/Builtins/SplitView.qml +31 -0
  206. data/Components/Builtins/SpringAnimation.qml +3 -0
  207. data/Components/Builtins/Stack.qml +14 -0
  208. data/Components/Builtins/StackLayout.qml +19 -0
  209. data/Components/Builtins/StackView.qml +122 -0
  210. data/Components/Builtins/StackedBarChart.qml +3 -0
  211. data/Components/Builtins/StandardPaths.qml +9 -0
  212. data/Components/Builtins/State.qml +13 -0
  213. data/Components/Builtins/StateGroup.qml +11 -0
  214. data/Components/Builtins/Support/AnimationDriver.qml +79 -0
  215. data/Components/Builtins/Support/AnimationGroupDriver.qml +32 -0
  216. data/Components/Builtins/Support/ChartCanvas.qml +629 -0
  217. data/Components/Builtins/Support/ModelView3dScene.qml +292 -0
  218. data/Components/Builtins/Support/OptionalModuleState.js +5 -0
  219. data/Components/Builtins/SwipeDelegate.qml +231 -0
  220. data/Components/Builtins/SwipeView.qml +69 -0
  221. data/Components/Builtins/SwitchDelegate.qml +140 -0
  222. data/Components/Builtins/TabBar.qml +117 -0
  223. data/Components/Builtins/TabButton.qml +105 -0
  224. data/Components/Builtins/TableView.qml +388 -0
  225. data/Components/Builtins/TableViewDelegate.qml +17 -0
  226. data/Components/Builtins/Tabs.qml +138 -0
  227. data/Components/Builtins/Text.qml +24 -0
  228. data/Components/Builtins/TextArea.qml +59 -0
  229. data/Components/Builtins/TextField.qml +21 -0
  230. data/Components/Builtins/TextMetrics.qml +39 -0
  231. data/Components/Builtins/TimePicker.qml +213 -0
  232. data/Components/Builtins/Timer.qml +13 -0
  233. data/Components/Builtins/Toast.qml +213 -0
  234. data/Components/Builtins/Toggle.qml +19 -0
  235. data/Components/Builtins/ToggleSwitch.qml +22 -0
  236. data/Components/Builtins/ToolBar.qml +61 -0
  237. data/Components/Builtins/ToolButton.qml +41 -0
  238. data/Components/Builtins/ToolSeparator.qml +36 -0
  239. data/Components/Builtins/Tooltip.qml +20 -0
  240. data/Components/Builtins/Transition.qml +3 -0
  241. data/Components/Builtins/TreeView.qml +423 -0
  242. data/Components/Builtins/TreeViewDelegate.qml +46 -0
  243. data/Components/Builtins/Tumbler.qml +18 -0
  244. data/Components/Builtins/UniformAnimator.qml +3 -0
  245. data/Components/Builtins/VectorAnimation.qml +3 -0
  246. data/Components/Builtins/VectorImage.qml +62 -0
  247. data/Components/Builtins/VerticalHeader.qml +21 -0
  248. data/Components/Builtins/VerticalHeaderDelegate.qml +35 -0
  249. data/Components/Builtins/Video.qml +54 -0
  250. data/Components/Builtins/VideoOutput.qml +54 -0
  251. data/Components/Builtins/WebView.qml +57 -0
  252. data/Components/Builtins/WeekNumberColumn.qml +13 -0
  253. data/Components/Builtins/WidgetButton.qml +26 -0
  254. data/Components/Builtins/Window.qml +90 -0
  255. data/Components/Builtins/WindowCapture.qml +11 -0
  256. data/Components/Builtins/Wrap.qml +18 -0
  257. data/Components/Builtins/XAnimator.qml +3 -0
  258. data/Components/Builtins/YAnimator.qml +3 -0
  259. data/Components/README.md +45 -0
  260. data/ControlNode.qml +1369 -0
  261. data/Controls/BarIconButton.qml +27 -0
  262. data/Controls/BarIndicator.qml +22 -0
  263. data/Controls/BorderOverlay.qml +10 -0
  264. data/Controls/BorderSurface.qml +10 -0
  265. data/Controls/Button.qml +78 -0
  266. data/Controls/ButtonGroup.qml +19 -0
  267. data/Controls/ConfirmDialog.qml +37 -0
  268. data/Controls/CursorSurface.qml +29 -0
  269. data/Controls/Dropdown.qml +59 -0
  270. data/Controls/MultiSelect.qml +32 -0
  271. data/Controls/NumberField.qml +24 -0
  272. data/Controls/OpticalGlyph.qml +14 -0
  273. data/Controls/PanelActionButton.qml +10 -0
  274. data/Controls/PanelHero.qml +18 -0
  275. data/Controls/PanelKeyCatcher.qml +25 -0
  276. data/Controls/PanelSectionHeader.qml +11 -0
  277. data/Controls/PanelSeparator.qml +10 -0
  278. data/Controls/PanelSlider.qml +36 -0
  279. data/Controls/PanelToolTip.qml +13 -0
  280. data/Controls/SearchableDropdown.qml +11 -0
  281. data/Controls/TextField.qml +25 -0
  282. data/Controls/Toggle.qml +22 -0
  283. data/Controls/ToggleSwitch.qml +26 -0
  284. data/Controls/WidgetButton.qml +35 -0
  285. data/Controls/qmldir +25 -0
  286. data/Desktop.qml +76 -0
  287. data/LICENSE +22 -0
  288. data/README.md +112 -0
  289. data/Service.qml +430 -0
  290. data/Theme/Border.qml +22 -0
  291. data/Theme/Color.qml +22 -0
  292. data/Theme/Style.qml +47 -0
  293. data/Theme/Util.qml +6 -0
  294. data/Theme/qmldir +5 -0
  295. data/bin/zui +7 -0
  296. data/lib/zui/animation.rb +24 -0
  297. data/lib/zui/application.rb +327 -0
  298. data/lib/zui/builder.rb +725 -0
  299. data/lib/zui/cli.rb +91 -0
  300. data/lib/zui/command.rb +101 -0
  301. data/lib/zui/component_registry.rb +91 -0
  302. data/lib/zui/components.rb +262 -0
  303. data/lib/zui/distribution.rb +200 -0
  304. data/lib/zui/generator.rb +84 -0
  305. data/lib/zui/host.rb +123 -0
  306. data/lib/zui/node.rb +30 -0
  307. data/lib/zui/platform.rb +40 -0
  308. data/lib/zui/protocol.rb +29 -0
  309. data/lib/zui/runner.rb +37 -0
  310. data/lib/zui/runtime.rb +23 -0
  311. data/lib/zui/scheduler.rb +136 -0
  312. data/lib/zui/source_bundle.rb +63 -0
  313. data/lib/zui/state_store.rb +100 -0
  314. data/lib/zui/value.rb +44 -0
  315. data/lib/zui.rb +33 -0
  316. data/native/CMakeLists.txt +45 -0
  317. data/native/ZuiClipboard.cpp +16 -0
  318. data/native/ZuiClipboard.h +16 -0
  319. data/native/ZuiProcess.cpp +84 -0
  320. data/native/ZuiProcess.h +34 -0
  321. data/native/main.cpp +64 -0
  322. data/vendor/host/linux-x86_64/PROVENANCE.md +15 -0
  323. data/vendor/host/linux-x86_64/zui-host +0 -0
  324. data/vendor/host/linux-x86_64/zui-host.sha256 +1 -0
  325. metadata +365 -0
@@ -0,0 +1,39 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import QtQuick.Layouts
4
+ import QtMultimedia
5
+ import QtQuick.VectorImage
6
+ import "../../Theme"
7
+ import "../../Controls" as ZuiControls
8
+
9
+ Item {
10
+ required property var renderer
11
+ implicitWidth: 0
12
+ implicitHeight: 0
13
+ TextMetrics {
14
+ id: nativeTextMetrics
15
+ text: String(renderer.prop("text", ""))
16
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
17
+ font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
18
+ font.bold: renderer.prop("bold", false) === true
19
+ font.italic: renderer.prop("italic", false) === true
20
+ font.letterSpacing: Number(renderer.prop("letter_spacing", 0))
21
+ font.wordSpacing: Number(renderer.prop("word_spacing", 0))
22
+ elide: {
23
+ var mode = String(renderer.prop("elide", "none"))
24
+ if (mode === "left") return Text.ElideLeft
25
+ if (mode === "middle") return Text.ElideMiddle
26
+ if (mode === "right") return Text.ElideRight
27
+ return Text.ElideNone
28
+ }
29
+ elideWidth: Number(renderer.prop("elide_width", 0))
30
+ onMetricsChanged: {
31
+ if (!renderer.subscribed("metrics")) return
32
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "metrics", {
33
+ width: width, height: height, advance_width: advanceWidth, elided_text: elidedText,
34
+ bounding_rect: { x: boundingRect.x, y: boundingRect.y, width: boundingRect.width, height: boundingRect.height },
35
+ tight_bounding_rect: { x: tightBoundingRect.x, y: tightBoundingRect.y, width: tightBoundingRect.width, height: tightBoundingRect.height }
36
+ })
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,213 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import "../../Theme"
4
+
5
+ QQC.Button {
6
+ id: picker
7
+
8
+ required property var renderer
9
+ property string externalTime: String(renderer.prop("time", ""))
10
+ property int hours: 0
11
+ property int minutes: 0
12
+ property int seconds: 0
13
+ property bool syncing: false
14
+
15
+ function pad(value) { return value < 10 ? "0" + value : String(value) }
16
+
17
+ function parseTime(value) {
18
+ var match = /^(\d{1,2}):(\d{2})(?::(\d{2}))?$/.exec(String(value || ""))
19
+ if (!match) return false
20
+ var nextHours = Number(match[1])
21
+ var nextMinutes = Number(match[2])
22
+ var nextSeconds = match[3] === undefined ? 0 : Number(match[3])
23
+ if (nextHours > 23 || nextMinutes > 59 || nextSeconds > 59) return false
24
+ syncing = true
25
+ hours = nextHours
26
+ minutes = nextMinutes
27
+ seconds = nextSeconds
28
+ syncing = false
29
+ syncControls()
30
+ return true
31
+ }
32
+
33
+ function displayedHour() {
34
+ if (renderer.prop("use_24_hour", true) !== false) return hours
35
+ var value = hours % 12
36
+ return value === 0 ? 12 : value
37
+ }
38
+
39
+ function formattedTime() {
40
+ var value = pad(hours) + ":" + pad(minutes)
41
+ return renderer.prop("show_seconds", false) === true ? value + ":" + pad(seconds) : value
42
+ }
43
+
44
+ function displayText() {
45
+ if (!externalTime.length) return String(renderer.prop("placeholder", "Choose a time"))
46
+ if (renderer.prop("use_24_hour", true) !== false) return formattedTime()
47
+ return pad(displayedHour()) + ":" + pad(minutes)
48
+ + (renderer.prop("show_seconds", false) === true ? ":" + pad(seconds) : "")
49
+ + (hours >= 12 ? " PM" : " AM")
50
+ }
51
+
52
+ function syncControls() {
53
+ if (!hourSpin || !minuteSpin || !secondSpin || !meridiem) return
54
+ hourSpin.value = displayedHour()
55
+ minuteSpin.value = minutes
56
+ secondSpin.value = seconds
57
+ meridiem.currentIndex = hours >= 12 ? 1 : 0
58
+ }
59
+
60
+ function emitInput() {
61
+ if (syncing) return
62
+ var value = formattedTime()
63
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "input", { value: value })
64
+ }
65
+
66
+ onExternalTimeChanged: parseTime(externalTime)
67
+ onHoursChanged: syncControls()
68
+ onMinutesChanged: syncControls()
69
+ onSecondsChanged: syncControls()
70
+ Component.onCompleted: parseTime(externalTime)
71
+
72
+ implicitWidth: Number(renderer.prop("width", 200))
73
+ implicitHeight: Number(renderer.prop("height", 40))
74
+ enabled: renderer.prop("enabled", true) !== false
75
+ onClicked: timePopup.open()
76
+
77
+ background: Rectangle {
78
+ color: renderer.prop("background", Color.popups.background)
79
+ radius: Number(renderer.prop("radius", Style.cornerRadius))
80
+ border.width: Style.normalBorderWidth
81
+ border.color: picker.activeFocus
82
+ ? renderer.prop("accent", Color.accent)
83
+ : renderer.prop("border_color", renderer.foreground)
84
+ opacity: picker.down ? 0.72 : 1
85
+ }
86
+
87
+ contentItem: Row {
88
+ spacing: Style.spacing.controlGap
89
+ Text {
90
+ anchors.verticalCenter: parent.verticalCenter
91
+ text: String(renderer.prop("label", ""))
92
+ visible: text.length > 0
93
+ color: renderer.prop("muted", Color.muted)
94
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
95
+ font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
96
+ }
97
+ Text {
98
+ anchors.verticalCenter: parent.verticalCenter
99
+ text: picker.displayText()
100
+ color: renderer.prop("foreground", renderer.foreground)
101
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
102
+ font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
103
+ }
104
+ }
105
+
106
+ QQC.Popup {
107
+ id: timePopup
108
+ width: Number(renderer.prop("popup_width", 300))
109
+ height: timeColumn.implicitHeight + topPadding + bottomPadding
110
+ visible: renderer.prop("opened", false) === true
111
+ closePolicy: QQC.Popup.CloseOnEscape | QQC.Popup.CloseOnPressOutside
112
+ padding: Style.spacing.md
113
+
114
+ onOpened: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "open", {})
115
+ onClosed: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "close", {})
116
+
117
+ background: Rectangle {
118
+ color: renderer.prop("popup_background", Color.popups.background)
119
+ radius: Number(renderer.prop("radius", Style.cornerRadius))
120
+ border.width: Style.normalBorderWidth
121
+ border.color: renderer.prop("border_color", renderer.foreground)
122
+ }
123
+
124
+ contentItem: Column {
125
+ id: timeColumn
126
+ spacing: Style.spacing.md
127
+
128
+ Row {
129
+ anchors.horizontalCenter: parent.horizontalCenter
130
+ spacing: Style.spacing.sm
131
+
132
+ QQC.SpinBox {
133
+ id: hourSpin
134
+ from: renderer.prop("use_24_hour", true) !== false ? 0 : 1
135
+ to: renderer.prop("use_24_hour", true) !== false ? 23 : 12
136
+ editable: true
137
+ onValueModified: {
138
+ if (renderer.prop("use_24_hour", true) !== false) picker.hours = value
139
+ else picker.hours = (value % 12) + (meridiem.currentIndex === 1 ? 12 : 0)
140
+ picker.emitInput()
141
+ }
142
+ }
143
+ Text {
144
+ anchors.verticalCenter: parent.verticalCenter
145
+ text: ":"
146
+ color: renderer.prop("foreground", renderer.foreground)
147
+ }
148
+ QQC.SpinBox {
149
+ id: minuteSpin
150
+ from: 0
151
+ to: 59
152
+ stepSize: Math.max(1, Number(renderer.prop("minute_step", 1)))
153
+ editable: true
154
+ onValueModified: {
155
+ picker.minutes = value
156
+ picker.emitInput()
157
+ }
158
+ }
159
+ Text {
160
+ anchors.verticalCenter: parent.verticalCenter
161
+ visible: renderer.prop("show_seconds", false) === true
162
+ text: ":"
163
+ color: renderer.prop("foreground", renderer.foreground)
164
+ }
165
+ QQC.SpinBox {
166
+ id: secondSpin
167
+ visible: renderer.prop("show_seconds", false) === true
168
+ from: 0
169
+ to: 59
170
+ stepSize: Math.max(1, Number(renderer.prop("second_step", 1)))
171
+ editable: true
172
+ onValueModified: {
173
+ picker.seconds = value
174
+ picker.emitInput()
175
+ }
176
+ }
177
+ QQC.ComboBox {
178
+ id: meridiem
179
+ visible: renderer.prop("use_24_hour", true) === false
180
+ model: ["AM", "PM"]
181
+ onActivated: {
182
+ picker.hours = (picker.hours % 12) + (currentIndex === 1 ? 12 : 0)
183
+ picker.emitInput()
184
+ }
185
+ }
186
+ }
187
+
188
+ Row {
189
+ anchors.right: parent.right
190
+ spacing: Style.spacing.sm
191
+ QQC.Button {
192
+ text: String(renderer.prop("cancel_text", "Cancel"))
193
+ onClicked: {
194
+ picker.parseTime(picker.externalTime)
195
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "reject", {
196
+ value: picker.formattedTime()
197
+ })
198
+ timePopup.close()
199
+ }
200
+ }
201
+ QQC.Button {
202
+ text: String(renderer.prop("accept_text", "OK"))
203
+ onClicked: {
204
+ var value = picker.formattedTime()
205
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "change", { value: value })
206
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "accept", { value: value })
207
+ timePopup.close()
208
+ }
209
+ }
210
+ }
211
+ }
212
+ }
213
+ }
@@ -0,0 +1,13 @@
1
+ import QtQuick
2
+
3
+ Item {
4
+ id: timerRoot
5
+ property var renderer: null
6
+ Timer {
7
+ id: nativeTimer
8
+ interval: Math.max(0,Number(renderer?renderer.prop("interval",1000):1000));repeat:renderer&&renderer.prop("repeat",false)===true;running:renderer&&renderer.prop("running",false)===true;triggeredOnStart:renderer&&renderer.prop("triggered_on_start",false)===true
9
+ onTriggered:renderer.bridge.sendEvent(renderer.surfaceName,renderer.controlId,"trigger",{})
10
+ onRunningChanged:renderer.bridge.sendEvent(renderer.surfaceName,renderer.controlId,running?"start":"stop",{})
11
+ }
12
+ Connections{target:renderer;function onNodeChanged(){if(renderer.prop("restart",false)===true)nativeTimer.restart()}}
13
+ }
@@ -0,0 +1,213 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import QtQuick.Layouts
4
+ import "../../Theme"
5
+
6
+ QQC.Popup {
7
+ id: toastRoot
8
+
9
+ required property var renderer
10
+ readonly property bool requestedOpen: renderer.prop("opened", false) === true
11
+ && renderer.prop("visible", true) !== false
12
+ readonly property string severity: String(renderer.prop("severity", "info"))
13
+ readonly property string popupPosition: String(renderer.prop("position", "top_right"))
14
+ readonly property real popupMargin: Number(renderer.prop("margin", Style.spacing.lg))
15
+ readonly property real maximumWidth: Number(renderer.prop("max_width", 420))
16
+ property real remainingDuration: 0
17
+ property double timeoutDeadline: 0
18
+
19
+ function severityIcon() {
20
+ var explicitIcon = String(renderer.prop("icon", ""))
21
+ if (explicitIcon.length > 0) return explicitIcon
22
+ if (severity === "success") return "circle_check"
23
+ if (severity === "warning") return "warning"
24
+ if (severity === "error" || severity === "critical") return "circle_xmark"
25
+ return "circle_info"
26
+ }
27
+
28
+ function severityColor() {
29
+ if (severity === "success") return renderer.prop("success_color", renderer.prop("accent", Color.accent))
30
+ if (severity === "warning") return renderer.prop("warning_color", "#d8a657")
31
+ if (severity === "error" || severity === "critical") return renderer.prop("error_color", Color.urgent)
32
+ return renderer.prop("accent", Color.accent)
33
+ }
34
+
35
+ function syncOpenState() {
36
+ if (requestedOpen === opened) return
37
+ if (requestedOpen) open()
38
+ else close()
39
+ }
40
+
41
+ function timed() {
42
+ return renderer.prop("persistent", false) !== true
43
+ && Number(renderer.prop("duration", 3500)) > 0
44
+ }
45
+
46
+ function startTimeout() {
47
+ dismissTimer.stop()
48
+ if (!visible || !timed()) return
49
+ remainingDuration = Number(renderer.prop("duration", 3500))
50
+ resumeTimeout()
51
+ }
52
+
53
+ function pauseTimeout() {
54
+ if (!dismissTimer.running) return
55
+ remainingDuration = Math.max(1, timeoutDeadline - Date.now())
56
+ dismissTimer.stop()
57
+ }
58
+
59
+ function resumeTimeout() {
60
+ if (!visible || !timed() || remainingDuration <= 0) return
61
+ timeoutDeadline = Date.now() + remainingDuration
62
+ dismissTimer.interval = remainingDuration
63
+ dismissTimer.restart()
64
+ }
65
+
66
+ function dismiss(reason) {
67
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "dismiss", { reason: reason })
68
+ close()
69
+ }
70
+
71
+ x: {
72
+ if (!parent) return popupMargin
73
+ if (popupPosition.indexOf("left") >= 0) return popupMargin
74
+ if (popupPosition.indexOf("right") >= 0) return parent.width - width - popupMargin
75
+ return Math.max(popupMargin, (parent.width - width) / 2)
76
+ }
77
+ y: {
78
+ if (!parent) return popupMargin
79
+ if (popupPosition.indexOf("bottom") === 0) return parent.height - height - popupMargin
80
+ return popupMargin
81
+ }
82
+ width: {
83
+ var available = parent ? Math.max(0, parent.width - popupMargin * 2) : maximumWidth
84
+ return Math.min(Number(renderer.prop("width", 360)), available, maximumWidth)
85
+ }
86
+ modal: false
87
+ dim: false
88
+ focus: false
89
+ closePolicy: QQC.Popup.NoAutoClose
90
+ enabled: renderer.prop("enabled", true) !== false
91
+ padding: Number(renderer.prop("padding", Style.spacing.md))
92
+
93
+ background: Rectangle {
94
+ color: renderer.prop("background", Color.popups.background)
95
+ radius: Number(renderer.prop("radius", Style.cornerRadius))
96
+ border.width: Style.normalBorderWidth
97
+ border.color: renderer.prop("border_color", toastRoot.severityColor())
98
+ }
99
+
100
+ contentItem: RowLayout {
101
+ spacing: Number(renderer.prop("spacing", Style.spacing.md))
102
+
103
+ Text {
104
+ Layout.alignment: Qt.AlignTop
105
+ text: renderer.iconGlyph(toastRoot.severityIcon())
106
+ textFormat: Text.PlainText
107
+ color: toastRoot.severityColor()
108
+ font.family: renderer.fontFamily
109
+ font.pixelSize: Number(renderer.prop("icon_size", 22))
110
+ }
111
+
112
+ ColumnLayout {
113
+ Layout.fillWidth: true
114
+ spacing: Style.spacing.xs
115
+
116
+ Text {
117
+ Layout.fillWidth: true
118
+ visible: text.length > 0
119
+ text: String(renderer.prop("title", ""))
120
+ textFormat: Text.PlainText
121
+ color: renderer.prop("foreground", renderer.foreground)
122
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
123
+ font.pixelSize: Number(renderer.prop("title_size", Style.font.body))
124
+ font.bold: true
125
+ wrapMode: Text.Wrap
126
+ }
127
+
128
+ Text {
129
+ Layout.fillWidth: true
130
+ text: String(renderer.prop("message", ""))
131
+ textFormat: Text.PlainText
132
+ color: String(renderer.prop("title", "")).length > 0
133
+ ? renderer.prop("muted", Color.muted)
134
+ : renderer.prop("foreground", renderer.foreground)
135
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
136
+ font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
137
+ wrapMode: Text.Wrap
138
+ }
139
+ }
140
+ }
141
+
142
+ TapHandler {
143
+ onTapped: {
144
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "click", {})
145
+ if (renderer.prop("dismiss_on_click", true) !== false) toastRoot.dismiss("click")
146
+ }
147
+ }
148
+
149
+ HoverHandler {
150
+ enabled: renderer.prop("pause_on_hover", true) !== false
151
+ onHoveredChanged: {
152
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "hover", { value: hovered })
153
+ if (hovered) toastRoot.pauseTimeout()
154
+ else toastRoot.resumeTimeout()
155
+ }
156
+ }
157
+
158
+ Timer {
159
+ id: dismissTimer
160
+ repeat: false
161
+ onTriggered: {
162
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "timeout", {})
163
+ toastRoot.dismiss("timeout")
164
+ }
165
+ }
166
+
167
+ enter: Transition {
168
+ ParallelAnimation {
169
+ NumberAnimation {
170
+ property: "opacity"; from: 0; to: 1
171
+ duration: renderer.prop("animated", true) !== false
172
+ ? Number(renderer.prop("animation_duration", 180)) : 0
173
+ easing.type: renderer.easingType(renderer.prop("easing", "out_cubic"))
174
+ }
175
+ NumberAnimation {
176
+ property: "scale"; from: 0.94; to: 1
177
+ duration: renderer.prop("animated", true) !== false
178
+ ? Number(renderer.prop("animation_duration", 180)) : 0
179
+ easing.type: renderer.easingType(renderer.prop("easing", "out_cubic"))
180
+ }
181
+ }
182
+ }
183
+
184
+ exit: Transition {
185
+ ParallelAnimation {
186
+ NumberAnimation {
187
+ property: "opacity"; from: 1; to: 0
188
+ duration: renderer.prop("animated", true) !== false
189
+ ? Number(renderer.prop("animation_duration", 140)) : 0
190
+ easing.type: renderer.easingType("in_cubic")
191
+ }
192
+ NumberAnimation {
193
+ property: "scale"; from: 1; to: 0.94
194
+ duration: renderer.prop("animated", true) !== false
195
+ ? Number(renderer.prop("animation_duration", 140)) : 0
196
+ easing.type: renderer.easingType("in_cubic")
197
+ }
198
+ }
199
+ }
200
+
201
+ Component.onCompleted: syncOpenState()
202
+ onRequestedOpenChanged: syncOpenState()
203
+ onOpened: {
204
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "open", {})
205
+ startTimeout()
206
+ }
207
+ onClosed: {
208
+ dismissTimer.stop()
209
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "close", {})
210
+ }
211
+ onVisibleChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
212
+ visible ? "show" : "hide", {})
213
+ }
@@ -0,0 +1,19 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import QtQuick.Layouts
4
+ import QtMultimedia
5
+ import QtQuick.VectorImage
6
+ import "../../Theme"
7
+ import "../../Controls" as ZuiControls
8
+
9
+ ZuiControls.Toggle {
10
+ required property var renderer
11
+ label: renderer.escapeAutoText(renderer.prop("label", "")); description: renderer.escapeAutoText(renderer.prop("description", ""))
12
+ checked: renderer.prop("checked", false) === true; hasCursor: renderer.prop("cursor", false) === true
13
+ rounded: renderer.prop("rounded", Style.cornerRadius > 0) === true
14
+ foreground: renderer.prop("foreground", renderer.foreground); accent: renderer.prop("accent", Color.accent)
15
+ fontFamily: String(renderer.prop("font_family", renderer.fontFamily)); titleSize: Number(renderer.prop("title_size", Style.font.subtitle))
16
+ descriptionSize: Number(renderer.prop("description_size", Style.font.caption))
17
+ onClicked: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "change", { value: !checked })
18
+ onHovered: function(value) { renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "hover", { value: value }) }
19
+ }
@@ -0,0 +1,22 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import QtQuick.Layouts
4
+ import QtMultimedia
5
+ import QtQuick.VectorImage
6
+ import "../../Theme"
7
+ import "../../Controls" as ZuiControls
8
+
9
+ ZuiControls.ToggleSwitch {
10
+ required property var renderer
11
+ checked: renderer.prop("checked", false) === true; busy: renderer.prop("busy", false) === true
12
+ interactive: renderer.prop("interactive", renderer.prop("enabled", true)) !== false
13
+ hasCursor: renderer.prop("cursor", false) === true; cursorRing: renderer.prop("cursor_ring", true) !== false
14
+ cursorPad: Number(renderer.prop("cursor_pad", Style.space(6))); rounded: renderer.prop("rounded", Style.cornerRadius > 0) === true
15
+ foreground: renderer.prop("foreground", renderer.foreground); accent: renderer.prop("accent", Color.accent)
16
+ trackHeight: Number(renderer.prop("track_height", Math.max(22, Math.round(Style.spacing.controlHeight * 0.55))))
17
+ trackWidth: Number(renderer.prop("track_width", Math.round(trackHeight * 1.9)))
18
+ knobSize: Number(renderer.prop("knob_size", Math.max(6, Math.round(trackHeight * 0.72))))
19
+ knobInset: Number(renderer.prop("knob_inset", Math.max(1, Math.round((trackHeight - knobSize) / 2))))
20
+ onToggled: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "change", { value: !checked })
21
+ onHovered: function(value) { renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "hover", { value: value }) }
22
+ }
@@ -0,0 +1,61 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import "../../Theme"
4
+
5
+ QQC.ToolBar {
6
+ id: toolBarRoot
7
+
8
+ required property var renderer
9
+ readonly property string contentLayout: String(renderer.prop("layout", "row"))
10
+
11
+ position: String(renderer.prop("position", "header")) === "footer"
12
+ ? QQC.ToolBar.Footer : QQC.ToolBar.Header
13
+ implicitWidth: Number(renderer.prop("width", 640))
14
+ implicitHeight: Number(renderer.prop("height", 52))
15
+ enabled: renderer.prop("enabled", true) !== false
16
+ visible: renderer.prop("visible", true) !== false
17
+ padding: Number(renderer.prop("padding", Style.spacing.sm))
18
+ LayoutMirroring.enabled: String(renderer.prop("layout_direction", "left_to_right")) === "right_to_left"
19
+ LayoutMirroring.childrenInherit: true
20
+
21
+ background: Rectangle {
22
+ color: renderer.prop("background", Color.background)
23
+ radius: Number(renderer.prop("radius", 0))
24
+ border.width: String(renderer.prop("border_color", "")).length > 0 ? Style.normalBorderWidth : 0
25
+ border.color: renderer.prop("border_color", "transparent")
26
+ }
27
+
28
+ contentItem: Loader {
29
+ sourceComponent: toolBarRoot.contentLayout === "column" ? columnContent : rowContent
30
+ }
31
+
32
+ Component {
33
+ id: rowContent
34
+ Row {
35
+ spacing: Number(renderer.prop("spacing", Style.spacing.sm))
36
+ Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent }
37
+ }
38
+ }
39
+
40
+ Component {
41
+ id: columnContent
42
+ Column {
43
+ spacing: Number(renderer.prop("spacing", Style.spacing.sm))
44
+ Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent }
45
+ }
46
+ }
47
+
48
+ TapHandler {
49
+ enabled: renderer.subscribed("click")
50
+ onTapped: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "click", {})
51
+ }
52
+ onPositionChanged: {
53
+ if (renderer.subscribed("position_change"))
54
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "position_change",
55
+ { value: position === QQC.ToolBar.Footer ? "footer" : "header" })
56
+ }
57
+ onVisibleChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
58
+ visible ? "show" : "hide", {})
59
+ onActiveFocusChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
60
+ activeFocus ? "focus" : "blur", {})
61
+ }
@@ -0,0 +1,41 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import QtQuick.Layouts
4
+ import QtMultimedia
5
+ import QtQuick.VectorImage
6
+ import "../../Theme"
7
+ import "../../Controls" as ZuiControls
8
+
9
+ QQC.ToolButton {
10
+ required property var renderer
11
+ id: nativeToolButton
12
+ text: String(renderer.prop("text", ""))
13
+ checkable: renderer.prop("checkable", false) === true
14
+ checked: renderer.prop("checked", false) === true
15
+ enabled: renderer.prop("enabled", true) !== false
16
+ implicitWidth: Number(renderer.prop("width", 40))
17
+ implicitHeight: Number(renderer.prop("height", 36))
18
+ background: Rectangle {
19
+ radius: Style.cornerRadius
20
+ color: nativeToolButton.checked
21
+ ? renderer.prop("checked_background", renderer.prop("accent", Color.accent))
22
+ : renderer.prop("background", nativeToolButton.hovered ? Color.popups.background : "transparent")
23
+ border.width: nativeToolButton.activeFocus ? Style.normalBorderWidth : 0
24
+ border.color: renderer.prop("accent", Color.accent)
25
+ opacity: nativeToolButton.down ? 0.72 : 1
26
+ }
27
+ contentItem: Text {
28
+ text: String(renderer.prop("icon", "")).length > 0 ? renderer.iconGlyph(renderer.prop("icon", "")) : nativeToolButton.text
29
+ textFormat: Text.PlainText
30
+ color: nativeToolButton.checked ? Color.background : renderer.prop("foreground", renderer.foreground)
31
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
32
+ font.pixelSize: Number(String(renderer.prop("icon", "")).length > 0 ? renderer.prop("icon_size", Style.font.icon) : renderer.prop("font_size", Style.font.body))
33
+ horizontalAlignment: Text.AlignHCenter
34
+ verticalAlignment: Text.AlignVCenter
35
+ }
36
+ onClicked: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "click", { checked: checked })
37
+ onToggled: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "change", { value: checked })
38
+ onPressed: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "press", {})
39
+ onReleased: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "release", {})
40
+ onHoveredChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "hover", { value: hovered })
41
+ }
@@ -0,0 +1,36 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import "../../Theme"
4
+
5
+ QQC.ToolSeparator {
6
+ id: separatorRoot
7
+
8
+ required property var renderer
9
+ orientation: String(renderer.prop("orientation", "vertical")) === "vertical"
10
+ ? Qt.Vertical : Qt.Horizontal
11
+ implicitWidth: vertical
12
+ ? Number(renderer.prop("thickness", 1)) + Number(renderer.prop("padding", 8)) * 2
13
+ : Number(renderer.prop("length", 32))
14
+ implicitHeight: vertical
15
+ ? Number(renderer.prop("length", 32))
16
+ : Number(renderer.prop("thickness", 1)) + Number(renderer.prop("padding", 8)) * 2
17
+ enabled: renderer.prop("enabled", true) !== false
18
+ visible: renderer.prop("visible", true) !== false
19
+ opacity: Number(renderer.prop("opacity", 0.25))
20
+ padding: Number(renderer.prop("padding", 8))
21
+
22
+ contentItem: Item {}
23
+ background: Rectangle {
24
+ anchors.centerIn: parent
25
+ width: separatorRoot.vertical
26
+ ? Number(renderer.prop("thickness", 1))
27
+ : Number(renderer.prop("length", 32))
28
+ height: separatorRoot.vertical
29
+ ? Number(renderer.prop("length", 32))
30
+ : Number(renderer.prop("thickness", 1))
31
+ color: renderer.prop("color", renderer.foreground)
32
+ }
33
+
34
+ onVisibleChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
35
+ visible ? "show" : "hide", {})
36
+ }
@@ -0,0 +1,20 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import QtQuick.Layouts
4
+ import QtMultimedia
5
+ import QtQuick.VectorImage
6
+ import "../../Theme"
7
+ import "../../Controls" as ZuiControls
8
+
9
+ ZuiControls.PanelToolTip {
10
+ required property var renderer
11
+ text: renderer.escapeAutoText(renderer.prop("text", ""))
12
+ visible: renderer.prop("visible", false) === true
13
+ delay: Number(renderer.prop("delay", 400))
14
+ timeout: Number(renderer.prop("timeout", -1))
15
+ panelForeground: renderer.prop("foreground", Color.tooltip.text)
16
+ panelBackground: renderer.prop("background", Color.tooltip.background)
17
+ panelBorder: renderer.prop("border", Color.tooltip.border)
18
+ fontFamily: String(renderer.prop("font_family", renderer.fontFamily))
19
+ fontSize: Number(renderer.prop("font_size", Style.font.bodySmall))
20
+ }