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,70 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import QtQuick.Dialogs
4
+ import "../../Theme"
5
+
6
+ QQC.Button {
7
+ id: picker
8
+
9
+ required property var renderer
10
+ readonly property color selectedColor: dialog.selectedColor
11
+
12
+ implicitWidth: Number(renderer.prop("width", 180))
13
+ implicitHeight: Number(renderer.prop("height", 40))
14
+ enabled: renderer.prop("enabled", true) !== false
15
+ onClicked: dialog.open()
16
+
17
+ background: Rectangle {
18
+ color: renderer.prop("background", Color.popups.background)
19
+ radius: Number(renderer.prop("radius", Style.cornerRadius))
20
+ border.width: Style.normalBorderWidth
21
+ border.color: picker.activeFocus
22
+ ? Color.accent
23
+ : renderer.prop("border_color", renderer.prop("foreground", renderer.foreground))
24
+ opacity: picker.down ? 0.72 : 1
25
+ }
26
+
27
+ contentItem: Row {
28
+ spacing: Style.spacing.controlGap
29
+ Rectangle {
30
+ width: Math.max(20, picker.height - Style.spacing.controlPaddingY * 2)
31
+ height: width
32
+ radius: Math.min(Number(renderer.prop("radius", Style.cornerRadius)), width / 2)
33
+ color: picker.selectedColor
34
+ border.width: Style.normalBorderWidth
35
+ border.color: renderer.prop("border_color", renderer.foreground)
36
+ }
37
+ Text {
38
+ anchors.verticalCenter: parent.verticalCenter
39
+ text: String(renderer.prop("label", picker.selectedColor.toString()))
40
+ textFormat: Text.PlainText
41
+ color: renderer.prop("foreground", renderer.foreground)
42
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
43
+ font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
44
+ }
45
+ }
46
+
47
+ ColorDialog {
48
+ id: dialog
49
+ title: String(renderer.prop("title", "Choose a color"))
50
+ selectedColor: renderer.prop("color", "#ffffff")
51
+ visible: renderer.prop("opened", false) === true
52
+ options: (renderer.prop("show_alpha", false) === true ? ColorDialog.ShowAlphaChannel : 0)
53
+ | (renderer.prop("no_buttons", false) === true ? ColorDialog.NoButtons : 0)
54
+ | (renderer.prop("native_dialog", true) === false ? ColorDialog.DontUseNativeDialog : 0)
55
+
56
+ onSelectedColorChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "input", {
57
+ value: selectedColor.toString()
58
+ })
59
+ onAccepted: {
60
+ var value = selectedColor.toString()
61
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "change", { value: value })
62
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "accept", { value: value })
63
+ }
64
+ onRejected: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "reject", {
65
+ value: selectedColor.toString()
66
+ })
67
+ onVisibleChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
68
+ visible ? "open" : "close", { value: selectedColor.toString() })
69
+ }
70
+ }
@@ -0,0 +1,14 @@
1
+ import QtQuick
2
+ import QtQuick.Effects
3
+
4
+ Item {
5
+ required property var renderer
6
+ implicitWidth: Number(renderer.prop("width", 240)); implicitHeight: Number(renderer.prop("height", 160))
7
+ Item { id: sourceHost; anchors.fill: parent; Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent } }
8
+ ShaderEffectSource { id: sourceTexture; anchors.fill: parent; sourceItem: sourceHost; hideSource: true; visible: false }
9
+ MultiEffect {
10
+ anchors.fill: parent; source: sourceTexture
11
+ colorization: Number(renderer.prop("amount", 1)); colorizationColor: renderer.prop("color", "white")
12
+ brightness: Number(renderer.prop("brightness", 0)); contrast: Number(renderer.prop("contrast", 0)); saturation: Number(renderer.prop("saturation", 0))
13
+ }
14
+ }
@@ -0,0 +1,17 @@
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
+ Column {
10
+ required property var renderer
11
+ spacing: Number(renderer.prop("spacing", Style.spacing.panelGap))
12
+
13
+ Repeater {
14
+ model: renderer.node && Array.isArray(renderer.node.children) ? renderer.node.children : []
15
+ delegate: renderer.columnChildDelegateComponent
16
+ }
17
+ }
@@ -0,0 +1,13 @@
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
+ ColumnLayout {
10
+ required property var renderer
11
+ spacing: Number(renderer.prop("spacing", Style.spacing.panelGap))
12
+ Repeater { model: renderer.node.children || []; delegate: renderer.layoutChildDelegateComponent }
13
+ }
@@ -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.ConfirmDialog {
10
+ required property var renderer
11
+ opened: renderer.prop("opened", false) === true; message: String(renderer.prop("message", ""))
12
+ cancelText: String(renderer.prop("cancel_text", "Cancel")); confirmText: String(renderer.prop("confirm_text", "Confirm"))
13
+ selectedIndex: Number(renderer.prop("selected_index", 1)); visible: renderer.prop("visible", true) !== false
14
+ background: renderer.prop("background", Color.background); foreground: renderer.prop("foreground", renderer.foreground)
15
+ scrim: renderer.prop("scrim", Util.alpha(Color.background, 0.7)); selectedBackground: renderer.prop("selected_background", Util.alpha(renderer.foreground, 0.08))
16
+ selectedText: renderer.prop("selected_text", Color.accent); fontFamily: String(renderer.prop("font_family", renderer.fontFamily))
17
+ cornerRadius: Number(renderer.prop("corner_radius", Style.cornerRadius))
18
+ onCanceled: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "cancel", {})
19
+ onConfirmed: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "confirm", {})
20
+ }
@@ -0,0 +1,28 @@
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
+ function bounded(value, minimum, maximum) {
12
+ return Math.max(Number(minimum), Math.min(Number(maximum), Number(value)))
13
+ }
14
+ readonly property real naturalWidth: constrainedContent.implicitWidth
15
+ readonly property real naturalHeight: constrainedContent.implicitHeight
16
+ readonly property real desiredWidth: Number(renderer.prop("width", naturalWidth))
17
+ readonly property real desiredHeight: Number(renderer.prop("height", naturalHeight))
18
+ implicitWidth: bounded(desiredWidth, renderer.prop("min_width", 0), renderer.prop("max_width", Number.MAX_VALUE))
19
+ implicitHeight: bounded(desiredHeight, renderer.prop("min_height", 0), renderer.prop("max_height", Number.MAX_VALUE))
20
+ clip: renderer.prop("clip", false) === true
21
+ Item {
22
+ id: constrainedContent
23
+ anchors.centerIn: parent
24
+ implicitWidth: childrenRect.width
25
+ implicitHeight: childrenRect.height
26
+ Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent }
27
+ }
28
+ }
@@ -0,0 +1,30 @@
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.BorderSurface {
10
+ required property var renderer
11
+ readonly property int innerPadding: Number(renderer.prop("padding", 0))
12
+ implicitWidth: content.implicitWidth + innerPadding * 2
13
+ implicitHeight: content.implicitHeight + innerPadding * 2
14
+ color: "transparent"
15
+ borderSpec: renderer.prop("bordered", false)
16
+ ? Border.controlSpec("normal", renderer.foreground, Color.accent)
17
+ : Border.none()
18
+ radius: Style.cornerRadius
19
+
20
+ Column {
21
+ id: content
22
+ anchors.centerIn: parent
23
+ spacing: Number(renderer.prop("spacing", Style.spacing.panelGap))
24
+
25
+ Repeater {
26
+ model: renderer.node && Array.isArray(renderer.node.children) ? renderer.node.children : []
27
+ delegate: renderer.childDelegateComponent
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,140 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import Qt.labs.qmlmodels
4
+ import "../../Theme"
5
+
6
+ Item {
7
+ id: contextRoot
8
+
9
+ required property var renderer
10
+ readonly property var menuEntries: renderer.prop("items", [])
11
+ readonly property string targetId: String(renderer.prop("target", ""))
12
+ readonly property var targetItem: targetId.length > 0 ? renderer.findRenderedItem(targetId) : null
13
+ readonly property bool requestedOpen: renderer.prop("opened", false) === true
14
+ && renderer.prop("visible", true) !== false
15
+
16
+ function entryValue(entry, name, fallback) {
17
+ return entry !== null && typeof entry === "object" && entry[name] !== undefined
18
+ ? entry[name] : fallback
19
+ }
20
+
21
+ function entryLabel(entry) {
22
+ return entry !== null && typeof entry === "object"
23
+ ? String(entry.label === undefined ? (entry.text === undefined ? "" : entry.text) : entry.label)
24
+ : String(entry === null ? "" : entry)
25
+ }
26
+
27
+ function entryPayload(index, entry, item) {
28
+ var label = entryLabel(entry)
29
+ return {
30
+ index: index,
31
+ label: label,
32
+ value: entryValue(entry, "value", label),
33
+ checked: item ? item.checked : false
34
+ }
35
+ }
36
+
37
+ function closePolicyValue(value) {
38
+ var names = Array.isArray(value) ? value : [value || "escape_and_outside"]
39
+ var result = 0
40
+ for (var index = 0; index < names.length; index++) {
41
+ var name = String(names[index])
42
+ if (name === "escape" || name === "escape_and_outside") result |= QQC.Popup.CloseOnEscape
43
+ if (name === "outside" || name === "escape_and_outside") result |= QQC.Popup.CloseOnPressOutside
44
+ if (name === "outside_parent") result |= QQC.Popup.CloseOnPressOutsideParent
45
+ if (name === "release_outside") result |= QQC.Popup.CloseOnReleaseOutside
46
+ if (name === "release_outside_parent") result |= QQC.Popup.CloseOnReleaseOutsideParent
47
+ }
48
+ return result
49
+ }
50
+
51
+ function syncOpenState() {
52
+ if (requestedOpen === nativeMenu.opened) return
53
+ if (requestedOpen) {
54
+ nativeMenu.x = Number(renderer.prop("x", 0))
55
+ nativeMenu.y = Number(renderer.prop("y", 0))
56
+ nativeMenu.open()
57
+ } else nativeMenu.close()
58
+ }
59
+
60
+ width: Number(renderer.prop("activation_width", 0))
61
+ height: Number(renderer.prop("activation_height", 0))
62
+ visible: renderer.prop("visible", true) !== false
63
+
64
+ TapHandler {
65
+ id: contextHandler
66
+ parent: contextRoot.targetItem || contextRoot
67
+ enabled: contextRoot.visible && renderer.prop("enabled", true) !== false
68
+ acceptedButtons: Qt.RightButton
69
+ onTapped: function(eventPoint, button) {
70
+ var host = contextRoot.targetItem || contextRoot
71
+ var localPoint = host === contextRoot
72
+ ? eventPoint.position : host.mapToItem(contextRoot, eventPoint.position)
73
+ if (renderer.subscribed("request"))
74
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "request",
75
+ { x: localPoint.x, y: localPoint.y, button: button })
76
+ nativeMenu.popup(localPoint)
77
+ }
78
+ }
79
+
80
+ QQC.Menu {
81
+ id: nativeMenu
82
+ width: Number(renderer.prop("width", 240))
83
+ modal: renderer.prop("modal", false) === true
84
+ closePolicy: contextRoot.closePolicyValue(renderer.prop("close_policy", "escape_and_outside"))
85
+ enabled: renderer.prop("enabled", true) !== false
86
+
87
+ background: Rectangle {
88
+ color: renderer.prop("background", Color.background)
89
+ radius: Number(renderer.prop("radius", Style.cornerRadius))
90
+ border.width: String(renderer.prop("border_color", "")).length > 0 ? Style.normalBorderWidth : 0
91
+ border.color: renderer.prop("border_color", "transparent")
92
+ }
93
+
94
+ Instantiator {
95
+ model: Array.isArray(contextRoot.menuEntries) ? contextRoot.menuEntries : []
96
+ delegate: DelegateChooser {
97
+ role: "separator"
98
+ DelegateChoice { roleValue: true; QQC.MenuSeparator {} }
99
+ DelegateChoice {
100
+ QQC.MenuItem {
101
+ required property int index
102
+ required property var modelData
103
+ text: contextRoot.entryLabel(modelData)
104
+ enabled: nativeMenu.enabled && contextRoot.entryValue(modelData, "enabled", true) !== false
105
+ checkable: contextRoot.entryValue(modelData, "checkable", false) === true
106
+ checked: contextRoot.entryValue(modelData, "checked", false) === true
107
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
108
+ font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
109
+ icon.name: String(contextRoot.entryValue(modelData, "icon", ""))
110
+ icon.source: String(contextRoot.entryValue(modelData, "icon_source", ""))
111
+ icon.color: checked ? renderer.prop("accent", Color.accent)
112
+ : renderer.prop("foreground", renderer.foreground)
113
+ onClicked: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
114
+ "trigger", contextRoot.entryPayload(index, modelData, this))
115
+ onToggled: {
116
+ if (renderer.subscribed("toggle"))
117
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
118
+ "toggle", contextRoot.entryPayload(index, modelData, this))
119
+ }
120
+ onHighlightedChanged: {
121
+ if (highlighted && renderer.subscribed("highlight"))
122
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
123
+ "highlight", contextRoot.entryPayload(index, modelData, this))
124
+ }
125
+ }
126
+ }
127
+ }
128
+ onObjectAdded: function(index, object) { nativeMenu.insertItem(index, object) }
129
+ onObjectRemoved: function(index, object) { nativeMenu.removeItem(object) }
130
+ }
131
+
132
+ onOpened: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "open", {})
133
+ onClosed: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "close", {})
134
+ onAboutToShow: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "about_to_show", {})
135
+ onAboutToHide: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "about_to_hide", {})
136
+ }
137
+
138
+ Component.onCompleted: syncOpenState()
139
+ onRequestedOpenChanged: syncOpenState()
140
+ }
@@ -0,0 +1,18 @@
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.CursorSurface {
10
+ required property var renderer
11
+ implicitWidth: Number(renderer.prop("width", contentItem.implicitWidth)); implicitHeight: Number(renderer.prop("height", contentItem.implicitHeight))
12
+ current: renderer.prop("current", false) === true; outline: renderer.prop("outline", false) === true; bordered: renderer.prop("bordered", false) === true
13
+ hasCursor: renderer.prop("cursor", false) === true; foreground: renderer.prop("foreground", renderer.foreground)
14
+ accent: renderer.prop("accent", Color.accent); fill: renderer.prop("fill", Style.hoverFillFor(foreground, accent))
15
+ currentFill: renderer.prop("current_fill", Style.selectedFillFor(foreground, accent))
16
+ Column { id: contentItem; anchors.centerIn: parent; Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent } }
17
+ MouseArea { anchors.fill: parent; onClicked: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "click", {}) }
18
+ }
@@ -0,0 +1,69 @@
1
+ import QtQuick
2
+ import "." as Builtins
3
+
4
+ Item {
5
+ id: dataRoot
6
+ property var renderer: null
7
+ implicitWidth: Number(renderer ? renderer.prop("width", 720) : 720)
8
+ implicitHeight: Number(renderer ? renderer.prop("height", 440) : 440)
9
+
10
+ function valueFor(row, field) {
11
+ if (row === null || typeof row !== "object") return row
12
+ return row[String(field || "")]
13
+ }
14
+ function processedRows() {
15
+ if (!renderer) return []
16
+ var rows = renderer.prop("rows", []).slice()
17
+ var filter = String(renderer.prop("filter", "")).toLowerCase()
18
+ if (filter !== "") rows = rows.filter(function(row) { return JSON.stringify(row).toLowerCase().indexOf(filter) >= 0 })
19
+ var columns = renderer.prop("columns", [])
20
+ var sortColumn = Number(renderer.prop("sort_column", -1))
21
+ if (sortColumn >= 0 && sortColumn < columns.length) {
22
+ var column = columns[sortColumn]
23
+ var key = column && typeof column === "object" ? (column.key === undefined ? column.field : column.key) : column
24
+ var descending = String(renderer.prop("sort_order", "ascending")) === "descending"
25
+ rows.sort(function(left, right) {
26
+ var a = dataRoot.valueFor(left, key); var b = dataRoot.valueFor(right, key)
27
+ if (a === b) return 0
28
+ var result = a === null || a === undefined ? -1 : (b === null || b === undefined ? 1 : (a < b ? -1 : 1))
29
+ return descending ? -result : result
30
+ })
31
+ }
32
+ var pageSize = Math.max(0, Number(renderer.prop("page_size", 0)))
33
+ if (pageSize > 0) {
34
+ var page = Math.max(1, Number(renderer.prop("page", 1)))
35
+ rows = rows.slice((page - 1) * pageSize, page * pageSize)
36
+ }
37
+ return rows
38
+ }
39
+
40
+ QtObject {
41
+ id: proxyRenderer
42
+ readonly property var bridge: dataRoot.renderer ? dataRoot.renderer.bridge : null
43
+ readonly property string surfaceName: dataRoot.renderer ? dataRoot.renderer.surfaceName : ""
44
+ readonly property string controlId: dataRoot.renderer ? dataRoot.renderer.controlId : ""
45
+ readonly property color foreground: dataRoot.renderer ? dataRoot.renderer.foreground : "white"
46
+ readonly property string fontFamily: dataRoot.renderer ? dataRoot.renderer.fontFamily : ""
47
+ function prop(name, fallback) { return name === "rows" ? dataRoot.processedRows() : dataRoot.renderer.prop(name, fallback) }
48
+ }
49
+ Builtins.TableView { anchors.fill: parent; renderer: proxyRenderer }
50
+
51
+ TapHandler {
52
+ enabled: renderer && renderer.subscribed("sort") && renderer.prop("show_header", true) !== false
53
+ onTapped: function(eventPoint) {
54
+ var columns = renderer.prop("columns", [])
55
+ var x = eventPoint.position.x - Number(renderer.prop("padding", 0))
56
+ var cursor = 0
57
+ for (var index = 0; index < columns.length; index++) {
58
+ var width = Number(columns[index] && columns[index].width !== undefined ? columns[index].width : renderer.prop("column_width", 160))
59
+ if (x >= cursor && x < cursor + width) {
60
+ var current = Number(renderer.prop("sort_column", -1))
61
+ var order = current === index && String(renderer.prop("sort_order", "ascending")) === "ascending" ? "descending" : "ascending"
62
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "sort", { column: index, order: order })
63
+ break
64
+ }
65
+ cursor += width
66
+ }
67
+ }
68
+ }
69
+ }
@@ -0,0 +1,180 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import QtQuick.Controls.Basic as Basic
4
+ import "../../Theme"
5
+
6
+ QQC.Button {
7
+ id: picker
8
+
9
+ required property var renderer
10
+ property string externalDate: String(renderer.prop("date", ""))
11
+ property var selectedDate: parseDate(externalDate)
12
+ property int shownMonth: selectedDate ? selectedDate.getMonth() : new Date().getMonth()
13
+ property int shownYear: selectedDate ? selectedDate.getFullYear() : new Date().getFullYear()
14
+
15
+ function parseDate(value) {
16
+ var match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(String(value || ""))
17
+ if (!match) return null
18
+ var parsed = new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3]), 12, 0, 0)
19
+ return isNaN(parsed.getTime()) ? null : parsed
20
+ }
21
+
22
+ function isoDate(value) {
23
+ function pad(number) { return number < 10 ? "0" + number : String(number) }
24
+ return value.getFullYear() + "-" + pad(value.getMonth() + 1) + "-" + pad(value.getDate())
25
+ }
26
+
27
+ function sameDate(left, right) {
28
+ return left && right && left.getFullYear() === right.getFullYear()
29
+ && left.getMonth() === right.getMonth() && left.getDate() === right.getDate()
30
+ }
31
+
32
+ function withinBounds(value) {
33
+ var minimum = parseDate(renderer.prop("minimum", ""))
34
+ var maximum = parseDate(renderer.prop("maximum", ""))
35
+ return (!minimum || value >= minimum) && (!maximum || value <= maximum)
36
+ }
37
+
38
+ function navigate(offset) {
39
+ var next = new Date(shownYear, shownMonth + offset, 1, 12, 0, 0)
40
+ shownMonth = next.getMonth()
41
+ shownYear = next.getFullYear()
42
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "navigate", {
43
+ month: shownMonth + 1, year: shownYear
44
+ })
45
+ }
46
+
47
+ onExternalDateChanged: {
48
+ var parsed = parseDate(externalDate)
49
+ selectedDate = parsed
50
+ if (parsed) {
51
+ shownMonth = parsed.getMonth()
52
+ shownYear = parsed.getFullYear()
53
+ }
54
+ }
55
+
56
+ implicitWidth: Number(renderer.prop("width", 200))
57
+ implicitHeight: Number(renderer.prop("height", 40))
58
+ enabled: renderer.prop("enabled", true) !== false
59
+ onClicked: calendarPopup.open()
60
+
61
+ background: Rectangle {
62
+ color: renderer.prop("background", Color.popups.background)
63
+ radius: Number(renderer.prop("radius", Style.cornerRadius))
64
+ border.width: Style.normalBorderWidth
65
+ border.color: picker.activeFocus
66
+ ? renderer.prop("accent", Color.accent)
67
+ : renderer.prop("border_color", renderer.foreground)
68
+ opacity: picker.down ? 0.72 : 1
69
+ }
70
+
71
+ contentItem: Row {
72
+ spacing: Style.spacing.controlGap
73
+ Text {
74
+ anchors.verticalCenter: parent.verticalCenter
75
+ text: String(renderer.prop("label", ""))
76
+ visible: text.length > 0
77
+ color: renderer.prop("muted", Color.muted)
78
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
79
+ font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
80
+ }
81
+ Text {
82
+ anchors.verticalCenter: parent.verticalCenter
83
+ text: picker.selectedDate
84
+ ? Qt.formatDate(picker.selectedDate, String(renderer.prop("format", "yyyy-MM-dd")))
85
+ : String(renderer.prop("placeholder", "Choose a date"))
86
+ color: renderer.prop("foreground", renderer.foreground)
87
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
88
+ font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
89
+ }
90
+ }
91
+
92
+ QQC.Popup {
93
+ id: calendarPopup
94
+ width: Number(renderer.prop("popup_width", 320))
95
+ height: calendarColumn.implicitHeight + topPadding + bottomPadding
96
+ visible: renderer.prop("opened", false) === true
97
+ closePolicy: QQC.Popup.CloseOnEscape | QQC.Popup.CloseOnPressOutside
98
+ padding: Style.spacing.md
99
+
100
+ onOpened: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "open", {})
101
+ onClosed: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "close", {})
102
+
103
+ background: Rectangle {
104
+ color: renderer.prop("popup_background", Color.popups.background)
105
+ radius: Number(renderer.prop("radius", Style.cornerRadius))
106
+ border.width: Style.normalBorderWidth
107
+ border.color: renderer.prop("border_color", renderer.foreground)
108
+ }
109
+
110
+ contentItem: Column {
111
+ id: calendarColumn
112
+ spacing: Style.spacing.sm
113
+
114
+ Row {
115
+ width: parent.width
116
+ spacing: Style.spacing.sm
117
+ QQC.ToolButton {
118
+ text: "‹"
119
+ onClicked: picker.navigate(-1)
120
+ }
121
+ Text {
122
+ width: parent.width - parent.spacing * 2 - 80
123
+ height: 40
124
+ horizontalAlignment: Text.AlignHCenter
125
+ verticalAlignment: Text.AlignVCenter
126
+ text: Qt.formatDate(new Date(picker.shownYear, picker.shownMonth, 1), "MMMM yyyy")
127
+ color: renderer.prop("foreground", renderer.foreground)
128
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
129
+ font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
130
+ font.bold: true
131
+ }
132
+ QQC.ToolButton {
133
+ text: "›"
134
+ onClicked: picker.navigate(1)
135
+ }
136
+ }
137
+
138
+ Basic.DayOfWeekRow {
139
+ width: parent.width
140
+ locale: monthGrid.locale
141
+ }
142
+
143
+ Basic.MonthGrid {
144
+ id: monthGrid
145
+ width: parent.width
146
+ month: picker.shownMonth
147
+ year: picker.shownYear
148
+
149
+ delegate: Rectangle {
150
+ required property var model
151
+ implicitWidth: 36
152
+ implicitHeight: 32
153
+ radius: Number(renderer.prop("radius", Style.cornerRadius)) / 2
154
+ color: picker.sameDate(model.date, picker.selectedDate)
155
+ ? renderer.prop("accent", Color.accent) : "transparent"
156
+ opacity: model.month === monthGrid.month ? 1 : 0.35
157
+
158
+ Text {
159
+ anchors.centerIn: parent
160
+ text: model.day
161
+ color: picker.sameDate(model.date, picker.selectedDate)
162
+ ? renderer.prop("background", Color.popups.background)
163
+ : renderer.prop("foreground", renderer.foreground)
164
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
165
+ font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
166
+ }
167
+ }
168
+
169
+ onClicked: function(date) {
170
+ if (!picker.withinBounds(date)) return
171
+ picker.selectedDate = date
172
+ var value = picker.isoDate(date)
173
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "input", { value: value })
174
+ renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "change", { value: value })
175
+ if (renderer.prop("close_on_select", true) !== false) calendarPopup.close()
176
+ }
177
+ }
178
+ }
179
+ }
180
+ }
@@ -0,0 +1,11 @@
1
+ import QtQuick
2
+ import QtQuick.Controls as QQC
3
+ import "../../Theme"
4
+
5
+ QQC.DayOfWeekRow {
6
+ id: dayRoot
7
+ property var renderer: null
8
+ implicitWidth: Number(renderer ? renderer.prop("width", 320) : 320); implicitHeight: Number(renderer ? renderer.prop("height", 36) : 36)
9
+ locale: Qt.locale(String(renderer ? renderer.prop("locale", Qt.locale().name) : Qt.locale().name))
10
+ delegate: Rectangle { required property var model; color: renderer.prop("background", "transparent"); Text { anchors.fill: parent; text: model.shortName; color: renderer.prop("foreground", renderer.prop("muted", renderer.foreground)); font.family: renderer.prop("font_family", renderer.fontFamily); font.pixelSize: Number(renderer.prop("font_size", Style.font.body)); horizontalAlignment: Text.AlignHCenter; verticalAlignment: Text.AlignVCenter } TapHandler { onTapped: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "day_click", { day: model.day, name: model.longName }) } }
11
+ }
@@ -0,0 +1,47 @@
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.DelayButton {
10
+ required property var renderer
11
+ id: nativeDelayButton
12
+ text: String(renderer.prop("text", ""))
13
+ delay: Number(renderer.prop("delay", 1000))
14
+ enabled: renderer.prop("enabled", true) !== false
15
+ implicitWidth: Number(renderer.prop("width", 140))
16
+ implicitHeight: Number(renderer.prop("height", 40))
17
+ background: Rectangle {
18
+ radius: Style.cornerRadius
19
+ color: renderer.prop("background", Color.popups.background)
20
+ border.width: Style.normalBorderWidth
21
+ border.color: nativeDelayButton.activeFocus ? renderer.prop("accent", Color.accent) : renderer.prop("foreground", renderer.foreground)
22
+ Rectangle {
23
+ width: parent.width * nativeDelayButton.progress
24
+ height: parent.height
25
+ radius: parent.radius
26
+ color: renderer.prop("progress_background", renderer.prop("accent", Color.accent))
27
+ opacity: 0.45
28
+ }
29
+ }
30
+ contentItem: Text {
31
+ text: nativeDelayButton.text
32
+ textFormat: Text.PlainText
33
+ color: renderer.prop("foreground", renderer.foreground)
34
+ font.family: String(renderer.prop("font_family", renderer.fontFamily))
35
+ font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
36
+ font.bold: true
37
+ horizontalAlignment: Text.AlignHCenter
38
+ verticalAlignment: Text.AlignVCenter
39
+ }
40
+ onActivated: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "activate", {})
41
+ onProgressChanged: {
42
+ if (renderer.subscribed("progress")) renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "progress", { value: progress })
43
+ }
44
+ onPressed: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "press", {})
45
+ onReleased: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "release", {})
46
+ onCanceled: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "cancel", {})
47
+ }