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,3 @@
1
+ import QtQuick
2
+ import "Support" as Support
3
+ Support.AnimationDriver { renderer: null; animationType: "pause" }
@@ -0,0 +1,3 @@
1
+ import QtQuick
2
+ import "Support" as Support
3
+ Support.ChartCanvas { renderer: null; chartType: "pie" }
@@ -0,0 +1,23 @@
1
+ import QtQuick
2
+
3
+ Item {
4
+ id: pinchRoot
5
+ property var renderer: null
6
+ implicitWidth: Number(renderer ? renderer.prop("width", contentHost.childrenRect.width) : 200)
7
+ implicitHeight: Number(renderer ? renderer.prop("height", contentHost.childrenRect.height) : 160)
8
+ Item { id: contentHost; anchors.fill: parent; Repeater { model: renderer ? (renderer.node.children || []) : []; delegate: renderer.childDelegateComponent } }
9
+ PinchHandler {
10
+ id: nativePinch
11
+ enabled: renderer && renderer.prop("enabled", true) !== false
12
+ target: { var id = renderer ? String(renderer.prop("target", "")) : ""; return id === "" ? contentHost : renderer.findRenderedItem(id) }
13
+ minimumScale: Number(renderer ? renderer.prop("minimum_scale", 0.1) : 0.1); maximumScale: Number(renderer ? renderer.prop("maximum_scale", 10) : 10)
14
+ minimumRotation: Number(renderer ? renderer.prop("minimum_rotation", -Infinity) : -Infinity); maximumRotation: Number(renderer ? renderer.prop("maximum_rotation", Infinity) : Infinity)
15
+ xAxis.minimum: Number(renderer ? renderer.prop("minimum_x", -Infinity) : -Infinity); xAxis.maximum: Number(renderer ? renderer.prop("maximum_x", Infinity) : Infinity)
16
+ yAxis.minimum: Number(renderer ? renderer.prop("minimum_y", -Infinity) : -Infinity); yAxis.maximum: Number(renderer ? renderer.prop("maximum_y", Infinity) : Infinity)
17
+ function payload() { return { scale: activeScale, rotation: activeRotation, translation_x: activeTranslation.x, translation_y: activeTranslation.y, centroid_x: centroid.position.x, centroid_y: centroid.position.y } }
18
+ onActiveChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, active ? "pinch_start" : "pinch_end", payload())
19
+ onActiveScaleChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "pinch", payload())
20
+ onActiveRotationChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "pinch", payload())
21
+ onCanceled: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "cancel", {})
22
+ }
23
+ }
@@ -0,0 +1,130 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import "../../Theme"
4
+
5
+ QQC.Popup {
6
+ id: popupRoot
7
+
8
+ required property var renderer
9
+ readonly property bool requestedOpen: renderer.prop("opened", false) === true
10
+ && renderer.prop("visible", true) !== false
11
+ readonly property string contentLayout: String(renderer.prop("layout", "column"))
12
+
13
+ function closePolicyValue(value) {
14
+ var names = Array.isArray(value) ? value : [value || "escape_and_outside"]
15
+ var result = 0
16
+ for (var index = 0; index < names.length; index++) {
17
+ var name = String(names[index])
18
+ if (name === "escape" || name === "escape_and_outside") result |= QQC.Popup.CloseOnEscape
19
+ if (name === "outside" || name === "escape_and_outside") result |= QQC.Popup.CloseOnPressOutside
20
+ if (name === "outside_parent") result |= QQC.Popup.CloseOnPressOutsideParent
21
+ if (name === "release_outside") result |= QQC.Popup.CloseOnReleaseOutside
22
+ if (name === "release_outside_parent") result |= QQC.Popup.CloseOnReleaseOutsideParent
23
+ }
24
+ return result
25
+ }
26
+
27
+ function syncOpenState() {
28
+ if (requestedOpen === opened) return
29
+ if (requestedOpen) open()
30
+ else close()
31
+ }
32
+
33
+ x: Number(renderer.prop("x", 0))
34
+ y: Number(renderer.prop("y", 0))
35
+ width: Number(renderer.prop("width", 360))
36
+ height: Number(renderer.prop("height", 240))
37
+ modal: renderer.prop("modal", false) === true
38
+ dim: renderer.prop("dim", modal) !== false
39
+ focus: renderer.prop("focus", true) !== false
40
+ closePolicy: closePolicyValue(renderer.prop("close_policy", "escape_and_outside"))
41
+ enabled: renderer.prop("enabled", true) !== false
42
+ padding: Number(renderer.prop("padding", Style.spacing.lg))
43
+
44
+ background: Rectangle {
45
+ color: renderer.prop("background", Color.background)
46
+ radius: Number(renderer.prop("radius", Style.cornerRadius))
47
+ border.width: String(renderer.prop("border_color", "")).length > 0 ? Style.normalBorderWidth : 0
48
+ border.color: renderer.prop("border_color", "transparent")
49
+ }
50
+
51
+ contentItem: Loader {
52
+ sourceComponent: popupRoot.contentLayout === "row" ? rowContent
53
+ : (popupRoot.contentLayout === "stack" ? stackContent : columnContent)
54
+ }
55
+
56
+ Component {
57
+ id: columnContent
58
+ Column {
59
+ spacing: Number(renderer.prop("spacing", Style.spacing.md))
60
+ Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent }
61
+ }
62
+ }
63
+
64
+ Component {
65
+ id: rowContent
66
+ Row {
67
+ spacing: Number(renderer.prop("spacing", Style.spacing.md))
68
+ Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent }
69
+ }
70
+ }
71
+
72
+ Component {
73
+ id: stackContent
74
+ Item {
75
+ Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent }
76
+ }
77
+ }
78
+
79
+ enter: Transition {
80
+ ParallelAnimation {
81
+ NumberAnimation {
82
+ property: "opacity"; from: 0; to: 1
83
+ duration: renderer.prop("animated", true) !== false
84
+ ? Number(renderer.prop("duration", 160)) : 0
85
+ easing.type: renderer.easingType(renderer.prop("easing", "out_cubic"))
86
+ }
87
+ NumberAnimation {
88
+ property: "scale"; from: 0.96; to: 1
89
+ duration: renderer.prop("animated", true) !== false
90
+ ? Number(renderer.prop("duration", 160)) : 0
91
+ easing.type: renderer.easingType(renderer.prop("easing", "out_cubic"))
92
+ }
93
+ }
94
+ }
95
+ exit: Transition {
96
+ ParallelAnimation {
97
+ NumberAnimation {
98
+ property: "opacity"; from: 1; to: 0
99
+ duration: renderer.prop("animated", true) !== false
100
+ ? Number(renderer.prop("duration", 120)) : 0
101
+ easing.type: renderer.easingType(renderer.prop("easing", "in_cubic"))
102
+ }
103
+ NumberAnimation {
104
+ property: "scale"; from: 1; to: 0.96
105
+ duration: renderer.prop("animated", true) !== false
106
+ ? Number(renderer.prop("duration", 120)) : 0
107
+ easing.type: renderer.easingType(renderer.prop("easing", "in_cubic"))
108
+ }
109
+ }
110
+ }
111
+
112
+ Component.onCompleted: syncOpenState()
113
+ onRequestedOpenChanged: syncOpenState()
114
+ onOpened: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "open", {})
115
+ onClosed: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "close", {})
116
+ onAboutToShow: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "about_to_show", {})
117
+ onAboutToHide: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "about_to_hide", {})
118
+ onVisibleChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
119
+ visible ? "show" : "hide", {})
120
+ onActiveFocusChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
121
+ activeFocus ? "focus" : "blur", {})
122
+ onXChanged: {
123
+ if (renderer.subscribed("position_change"))
124
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "position_change", { x: x, y: y })
125
+ }
126
+ onYChanged: {
127
+ if (renderer.subscribed("position_change"))
128
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "position_change", { x: x, y: y })
129
+ }
130
+ }
@@ -0,0 +1,15 @@
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
+ Rectangle {
10
+ required property var renderer
11
+ property real minimum: Number(renderer.prop("minimum", 0)); property real maximum: Number(renderer.prop("maximum", 1))
12
+ implicitWidth: Number(renderer.prop("width", 200)); implicitHeight: Number(renderer.prop("height", 6)); radius: height / 2
13
+ color: Qt.rgba(renderer.foreground.r, renderer.foreground.g, renderer.foreground.b, 0.18)
14
+ Rectangle { width: parent.width * Math.max(0, Math.min(1, (Number(renderer.prop("value", 0)) - parent.minimum) / Math.max(0.000001, parent.maximum - parent.minimum))); height: parent.height; radius: parent.radius; color: renderer.prop("color", renderer.foreground) }
15
+ }
@@ -0,0 +1,120 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import "../../Theme"
4
+
5
+ QQC.Control {
6
+ id: ringRoot
7
+
8
+ required property var renderer
9
+ readonly property real minimumValue: Number(renderer.prop("minimum", 0))
10
+ readonly property real maximumValue: Number(renderer.prop("maximum", 1))
11
+ readonly property real currentValue: Number(renderer.prop("value", minimumValue))
12
+ readonly property bool indeterminate: renderer.prop("indeterminate", false) === true
13
+ readonly property real normalizedValue: Math.max(0, Math.min(1,
14
+ (currentValue - minimumValue) / Math.max(0.000001, maximumValue - minimumValue)))
15
+ readonly property color ringColor: renderer.prop("color", Color.accent)
16
+ readonly property color trackColor: renderer.prop("track_color",
17
+ Qt.rgba(ringColor.r, ringColor.g, ringColor.b, 0.2))
18
+ readonly property real ringThickness: Math.max(1, Number(renderer.prop("thickness", 5)))
19
+ readonly property real startAngle: Number(renderer.prop("start_angle", -90))
20
+ readonly property bool clockwise: renderer.prop("clockwise", true) !== false
21
+ property real displayedProgress: indeterminate ? 0.25 : normalizedValue
22
+
23
+ function labelText() {
24
+ var explicitLabel = String(renderer.prop("label", ""))
25
+ if (explicitLabel.length > 0) return explicitLabel
26
+ var format = String(renderer.prop("label_format", "{percent}%"))
27
+ return format
28
+ .replace(/\{percent\}/g, String(Math.round(normalizedValue * 100)))
29
+ .replace(/\{value\}/g, String(currentValue))
30
+ .replace(/\{minimum\}/g, String(minimumValue))
31
+ .replace(/\{maximum\}/g, String(maximumValue))
32
+ }
33
+
34
+ implicitWidth: Number(renderer.prop("width", renderer.prop("size", 64)))
35
+ implicitHeight: Number(renderer.prop("height", renderer.prop("size", 64)))
36
+ enabled: renderer.prop("enabled", true) !== false
37
+ opacity: Number(renderer.prop("opacity", enabled ? 1 : 0.5))
38
+ Accessible.name: String(renderer.prop("accessible_name", "Progress"))
39
+ Accessible.description: labelText()
40
+ Accessible.role: Accessible.ProgressBar
41
+
42
+ contentItem: Item {
43
+ Canvas {
44
+ id: ringCanvas
45
+ anchors.fill: parent
46
+ anchors.margins: ringRoot.ringThickness / 2
47
+
48
+ onPaint: {
49
+ var context = getContext("2d")
50
+ context.clearRect(0, 0, width, height)
51
+ var centerX = width / 2
52
+ var centerY = height / 2
53
+ var radius = Math.max(0, Math.min(width, height) / 2)
54
+ var start = ringRoot.startAngle * Math.PI / 180
55
+ var direction = ringRoot.clockwise ? 1 : -1
56
+ var end = start + direction * Math.PI * 2 * ringRoot.displayedProgress
57
+
58
+ context.lineWidth = ringRoot.ringThickness
59
+ context.lineCap = "round"
60
+ context.strokeStyle = ringRoot.trackColor
61
+ context.beginPath()
62
+ context.arc(centerX, centerY, radius, 0, Math.PI * 2, false)
63
+ context.stroke()
64
+
65
+ context.strokeStyle = ringRoot.ringColor
66
+ context.beginPath()
67
+ context.arc(centerX, centerY, radius, start, end, !ringRoot.clockwise)
68
+ context.stroke()
69
+ }
70
+ }
71
+
72
+ Text {
73
+ anchors.centerIn: parent
74
+ visible: renderer.prop("show_label", false) === true && !ringRoot.indeterminate
75
+ text: ringRoot.labelText()
76
+ color: renderer.prop("foreground", renderer.foreground)
77
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
78
+ font.pixelSize: Number(renderer.prop("font_size", Style.font.caption))
79
+ horizontalAlignment: Text.AlignHCenter
80
+ verticalAlignment: Text.AlignVCenter
81
+ }
82
+ }
83
+
84
+ RotationAnimator {
85
+ target: ringCanvas
86
+ from: 0
87
+ to: ringRoot.clockwise ? 360 : -360
88
+ duration: Number(renderer.prop("duration", 900))
89
+ loops: Animation.Infinite
90
+ running: ringRoot.indeterminate && ringRoot.visible && ringRoot.enabled
91
+ }
92
+
93
+ Behavior on displayedProgress {
94
+ enabled: !ringRoot.indeterminate && renderer.prop("animated", true) !== false
95
+ NumberAnimation {
96
+ duration: Number(renderer.prop("duration", 240))
97
+ easing.type: renderer.easingType(renderer.prop("easing", "out_cubic"))
98
+ }
99
+ }
100
+
101
+ onNormalizedValueChanged: {
102
+ if (!indeterminate) displayedProgress = normalizedValue
103
+ ringCanvas.requestPaint()
104
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "value_change", {
105
+ value: currentValue, normalized: normalizedValue
106
+ })
107
+ }
108
+ onIndeterminateChanged: {
109
+ displayedProgress = indeterminate ? 0.25 : normalizedValue
110
+ ringCanvas.requestPaint()
111
+ }
112
+ onDisplayedProgressChanged: ringCanvas.requestPaint()
113
+ onRingColorChanged: ringCanvas.requestPaint()
114
+ onTrackColorChanged: ringCanvas.requestPaint()
115
+ onRingThicknessChanged: ringCanvas.requestPaint()
116
+ onStartAngleChanged: ringCanvas.requestPaint()
117
+ onClockwiseChanged: ringCanvas.requestPaint()
118
+ onVisibleChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
119
+ visible ? "show" : "hide", {})
120
+ }
@@ -0,0 +1,11 @@
1
+ import QtQuick
2
+
3
+ Item {
4
+ id: actionRoot
5
+ property var renderer: null
6
+ property int handledRevision: -1
7
+ readonly property var targetItem: renderer ? renderer.findRenderedItem(renderer.prop("target", "")) : null
8
+ function run() { if (!renderer || !targetItem) return; var revision=Number(renderer.prop("revision",0));if(revision===handledRevision)return;handledRevision=revision;nativeAction.start() }
9
+ PropertyAction { id: nativeAction; target: actionRoot.targetItem; property: String(renderer ? renderer.prop("property", "") : ""); value: renderer ? renderer.prop("value", null) : null; onFinished: { renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "apply", { property: property, value: value }); renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "finish", {}) } }
10
+ Component.onCompleted: run(); Connections { target: renderer; function onNodeChanged(){actionRoot.run()} }
11
+ }
@@ -0,0 +1,3 @@
1
+ import QtQuick
2
+ import "Support" as Support
3
+ Support.AnimationDriver { renderer: null; animationType: "property" }
@@ -0,0 +1,10 @@
1
+ import QtQuick
2
+
3
+ Item {
4
+ id: changesRoot
5
+ property var renderer: null
6
+ property int handledRevision: -1
7
+ function apply(){if(!renderer)return;var revision=Number(renderer.prop("revision",0));if(revision===handledRevision)return;var target=renderer.findRenderedItem(renderer.prop("target",""));if(!target)return;handledRevision=revision;var values=renderer.prop("properties",{});for(var key in values)if(target.hasOwnProperty(key))target[key]=values[key];renderer.bridge.sendEvent(renderer.surfaceName,renderer.controlId,"apply",{properties:values,revision:revision})}
8
+ Connections{target:renderer;function onNodeChanged(){changesRoot.apply()}}
9
+ Component.onCompleted:apply()
10
+ }
@@ -0,0 +1,3 @@
1
+ import QtQuick
2
+ import "Support" as Support
3
+ Support.ChartCanvas { renderer: null; chartType: "radar" }
@@ -0,0 +1,3 @@
1
+ import QtQuick
2
+ import "Support" as Support
3
+ Support.ChartCanvas { renderer: null; chartType: "radial_gauge" }
@@ -0,0 +1,46 @@
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.RadioButton {
10
+ required property var renderer
11
+ id: nativeRadioButton
12
+ text: String(renderer.prop("label", ""))
13
+ checked: renderer.prop("checked", false) === true
14
+ enabled: renderer.prop("enabled", true) !== false
15
+ spacing: Number(renderer.prop("spacing", 8))
16
+ indicator: Rectangle {
17
+ implicitWidth: Number(renderer.prop("indicator_size", 20))
18
+ implicitHeight: implicitWidth
19
+ x: nativeRadioButton.leftPadding
20
+ y: nativeRadioButton.topPadding + (nativeRadioButton.availableHeight - height) / 2
21
+ radius: width / 2
22
+ color: renderer.prop("background", "transparent")
23
+ border.width: Style.normalBorderWidth
24
+ border.color: nativeRadioButton.checked ? renderer.prop("accent", Color.accent) : renderer.prop("foreground", renderer.foreground)
25
+ Rectangle {
26
+ anchors.centerIn: parent
27
+ width: parent.width * 0.5
28
+ height: width
29
+ radius: width / 2
30
+ visible: nativeRadioButton.checked
31
+ color: renderer.prop("accent", Color.accent)
32
+ }
33
+ }
34
+ contentItem: Text {
35
+ leftPadding: nativeRadioButton.indicator.width + nativeRadioButton.spacing
36
+ text: nativeRadioButton.text
37
+ textFormat: Text.PlainText
38
+ color: renderer.prop("foreground", renderer.foreground)
39
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
40
+ font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
41
+ verticalAlignment: Text.AlignVCenter
42
+ }
43
+ onClicked: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "click", { value: renderer.prop("value", null) })
44
+ onToggled: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "change", { value: checked, option: renderer.prop("value", null) })
45
+ onHoveredChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "hover", { value: hovered })
46
+ }
@@ -0,0 +1,115 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import QtQuick.Layouts
4
+ import "../../Theme"
5
+
6
+ QQC.RadioDelegate {
7
+ id: radioRoot
8
+
9
+ required property var renderer
10
+ readonly property bool selected: renderer.prop("selected", false) === true
11
+ readonly property real indicatorSize: Number(renderer.prop("indicator_size", 22))
12
+
13
+ function eventPayload() {
14
+ return {
15
+ text: text,
16
+ value: renderer.prop("value", text),
17
+ checked: checked,
18
+ selected: selected
19
+ }
20
+ }
21
+
22
+ text: String(renderer.prop("text", ""))
23
+ checked: renderer.prop("checked", false) === true
24
+ autoExclusive: renderer.prop("auto_exclusive", true) !== false
25
+ highlighted: renderer.prop("highlighted", selected) === true
26
+ enabled: renderer.prop("enabled", true) !== false
27
+ visible: renderer.prop("visible", true) !== false
28
+ hoverEnabled: true
29
+ implicitWidth: Number(renderer.prop("width", 320))
30
+ implicitHeight: Number(renderer.prop("height", 56))
31
+ padding: Number(renderer.prop("padding", Style.spacing.md))
32
+ rightPadding: padding + indicatorSize + Number(renderer.prop("spacing", Style.spacing.md))
33
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
34
+ font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
35
+ Accessible.name: String(renderer.prop("accessible_name", text))
36
+
37
+ background: Rectangle {
38
+ color: radioRoot.highlighted
39
+ ? renderer.prop("highlighted_background", renderer.prop("selected_background", Color.popups.background))
40
+ : (radioRoot.selected
41
+ ? renderer.prop("selected_background", Color.popups.background)
42
+ : renderer.prop("background", "transparent"))
43
+ radius: Number(renderer.prop("radius", Style.cornerRadius))
44
+ border.width: Number(renderer.prop("border_width",
45
+ String(renderer.prop("border_color", "")).length > 0 ? Style.normalBorderWidth : 0))
46
+ border.color: renderer.prop("border_color", "transparent")
47
+ }
48
+
49
+ contentItem: ColumnLayout {
50
+ spacing: Style.spacing.xs
51
+
52
+ Text {
53
+ Layout.fillWidth: true
54
+ text: radioRoot.text
55
+ textFormat: Text.PlainText
56
+ color: radioRoot.selected
57
+ ? renderer.prop("selected_foreground", renderer.prop("foreground", renderer.foreground))
58
+ : renderer.prop("foreground", renderer.foreground)
59
+ font: radioRoot.font
60
+ elide: Text.ElideRight
61
+ }
62
+
63
+ Text {
64
+ Layout.fillWidth: true
65
+ visible: text.length > 0
66
+ text: String(renderer.prop("description", ""))
67
+ textFormat: Text.PlainText
68
+ color: renderer.prop("muted", Color.muted)
69
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
70
+ font.pixelSize: Number(renderer.prop("description_size", Style.font.caption))
71
+ elide: Text.ElideRight
72
+ }
73
+ }
74
+
75
+ indicator: Rectangle {
76
+ x: radioRoot.width - radioRoot.rightPadding + Number(renderer.prop("spacing", Style.spacing.md))
77
+ y: (radioRoot.height - height) / 2
78
+ width: radioRoot.indicatorSize
79
+ height: radioRoot.indicatorSize
80
+ radius: width / 2
81
+ color: renderer.prop("indicator_background", "transparent")
82
+ border.width: Style.normalBorderWidth
83
+ border.color: renderer.prop("indicator_border",
84
+ radioRoot.checked ? renderer.prop("accent", Color.accent) : renderer.foreground)
85
+
86
+ Rectangle {
87
+ anchors.centerIn: parent
88
+ width: Number(renderer.prop("dot_size", Math.max(8, parent.width * 0.48)))
89
+ height: width
90
+ radius: width / 2
91
+ visible: radioRoot.checked
92
+ color: renderer.prop("dot_color", renderer.prop("accent", Color.accent))
93
+ }
94
+ }
95
+
96
+ onClicked: {
97
+ var payload = eventPayload()
98
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "click", payload)
99
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "activate", payload)
100
+ if (checked) renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "select", payload)
101
+ }
102
+ onToggled: {
103
+ var payload = eventPayload()
104
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "toggle", payload)
105
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "change", payload)
106
+ }
107
+ onPressed: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "press", eventPayload())
108
+ onReleased: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "release", eventPayload())
109
+ onHoveredChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
110
+ "hover", { value: hovered })
111
+ onActiveFocusChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
112
+ activeFocus ? "focus" : "blur", {})
113
+ onVisibleChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
114
+ visible ? "show" : "hide", {})
115
+ }
@@ -0,0 +1,58 @@
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
+ Grid {
10
+ required property var renderer
11
+ id: nativeRadioGroup
12
+ readonly property bool horizontal: String(renderer.prop("orientation", "vertical")) === "horizontal"
13
+ columns: horizontal ? Math.max(1, radioOptions.count) : 1
14
+ rows: horizontal ? 1 : Math.max(1, radioOptions.count)
15
+ spacing: Number(renderer.prop("spacing", 10))
16
+ QQC.ButtonGroup { id: exclusiveRadioGroup }
17
+ Repeater {
18
+ id: radioOptions
19
+ model: renderer.prop("options", [])
20
+ delegate: QQC.RadioButton {
21
+ id: groupedRadioButton
22
+ required property var modelData
23
+ readonly property var optionValue: renderer.optionValue(modelData)
24
+ text: String(renderer.optionLabel(modelData))
25
+ checked: String(optionValue) === String(renderer.prop("value", ""))
26
+ enabled: renderer.prop("enabled", true) !== false
27
+ spacing: Number(renderer.prop("item_spacing", 8))
28
+ QQC.ButtonGroup.group: exclusiveRadioGroup
29
+ indicator: Rectangle {
30
+ implicitWidth: Number(renderer.prop("indicator_size", 20))
31
+ implicitHeight: implicitWidth
32
+ radius: width / 2
33
+ color: renderer.prop("background", "transparent")
34
+ border.width: Style.normalBorderWidth
35
+ border.color: groupedRadioButton.checked ? renderer.prop("accent", Color.accent) : renderer.prop("foreground", renderer.foreground)
36
+ Rectangle {
37
+ anchors.centerIn: parent
38
+ width: parent.width * 0.5
39
+ height: width
40
+ radius: width / 2
41
+ visible: groupedRadioButton.checked
42
+ color: renderer.prop("accent", Color.accent)
43
+ }
44
+ }
45
+ contentItem: Text {
46
+ leftPadding: groupedRadioButton.indicator.width + groupedRadioButton.spacing
47
+ text: groupedRadioButton.text
48
+ textFormat: Text.PlainText
49
+ color: renderer.prop("foreground", renderer.foreground)
50
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
51
+ font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
52
+ verticalAlignment: Text.AlignVCenter
53
+ }
54
+ onClicked: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "change", { value: optionValue, index: index })
55
+ onHoveredChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "hover", { value: optionValue, index: index, hovered: hovered })
56
+ }
57
+ }
58
+ }
@@ -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
+ QQC.RangeSlider {
10
+ required property var renderer
11
+ id: nativeRangeSlider
12
+ from: Number(renderer.prop("minimum", 0))
13
+ to: Number(renderer.prop("maximum", 1))
14
+ stepSize: Number(renderer.prop("step", 0))
15
+ first.value: Number(renderer.prop("lower", from))
16
+ second.value: Number(renderer.prop("upper", to))
17
+ orientation: String(renderer.prop("orientation", "horizontal")) === "vertical" ? Qt.Vertical : Qt.Horizontal
18
+ snapMode: {
19
+ var mode = String(renderer.prop("snap", "none"))
20
+ if (mode === "always") return QQC.RangeSlider.SnapAlways
21
+ if (mode === "release") return QQC.RangeSlider.SnapOnRelease
22
+ return QQC.RangeSlider.NoSnap
23
+ }
24
+ live: renderer.prop("live", true) !== false
25
+ implicitWidth: Number(renderer.prop("width", orientation === Qt.Horizontal ? 240 : 40))
26
+ implicitHeight: Number(renderer.prop("height", orientation === Qt.Horizontal ? 40 : 240))
27
+ palette.windowText: renderer.prop("foreground", renderer.foreground)
28
+ palette.button: renderer.prop("background", Color.popups.background)
29
+ palette.highlight: renderer.prop("accent", Color.accent)
30
+ function payload() { return { lower: first.value, upper: second.value } }
31
+ first.onMoved: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "input", payload())
32
+ second.onMoved: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "input", payload())
33
+ first.onPressedChanged: {
34
+ if (!first.pressed) renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "change", payload())
35
+ }
36
+ second.onPressedChanged: {
37
+ if (!second.pressed) renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "change", payload())
38
+ }
39
+ }
@@ -0,0 +1,23 @@
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
+ Rectangle {
10
+ required property var renderer
11
+ readonly property int pad: Number(renderer.prop("padding", 0))
12
+ implicitWidth: Number(renderer.prop("width", contentColumn.implicitWidth + pad * 2))
13
+ implicitHeight: Number(renderer.prop("height", contentColumn.implicitHeight + pad * 2))
14
+ color: renderer.prop("color", "transparent")
15
+ radius: Number(renderer.prop("radius", 0))
16
+ border.color: renderer.prop("border_color", "transparent")
17
+ border.width: Number(renderer.prop("border_width", 0))
18
+ Column {
19
+ id: contentColumn
20
+ anchors.centerIn: parent
21
+ Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent }
22
+ }
23
+ }
@@ -0,0 +1,23 @@
1
+ import QtQuick
2
+ import QtQuick.Effects
3
+
4
+ Item {
5
+ id: shadowRoot
6
+ required property var renderer
7
+ implicitWidth: Number(renderer.prop("width", 240))
8
+ implicitHeight: Number(renderer.prop("height", 160))
9
+ RectangularShadow {
10
+ anchors.fill: parent
11
+ blur: Number(renderer.prop("blur", 20))
12
+ spread: Number(renderer.prop("spread", 0))
13
+ radius: Number(renderer.prop("radius", 0))
14
+ offset: Qt.vector2d(Number(renderer.prop("offset_x", 0)), Number(renderer.prop("offset_y", 4)))
15
+ color: renderer.prop("color", "#80000000")
16
+ cached: renderer.prop("cached", true) !== false
17
+ antialiasing: renderer.prop("antialiasing", true) !== false
18
+ }
19
+ Item {
20
+ anchors.fill: parent
21
+ Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent }
22
+ }
23
+ }