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.
- checksums.yaml +7 -0
- data/Components/Builtins/Accordion.qml +208 -0
- data/Components/Builtins/Action.qml +43 -0
- data/Components/Builtins/ActionButton.qml +19 -0
- data/Components/Builtins/ActionGroup.qml +81 -0
- data/Components/Builtins/AlertDialog.qml +398 -0
- data/Components/Builtins/AnchorAnimation.qml +3 -0
- data/Components/Builtins/AnchorChanges.qml +11 -0
- data/Components/Builtins/AnimatedImage.qml +39 -0
- data/Components/Builtins/Animation.qml +3 -0
- data/Components/Builtins/AnimationController.qml +11 -0
- data/Components/Builtins/ApplicationWindow.qml +103 -0
- data/Components/Builtins/AreaChart.qml +70 -0
- data/Components/Builtins/AspectRatio.qml +30 -0
- data/Components/Builtins/Audio.qml +85 -0
- data/Components/Builtins/AudioInput.qml +10 -0
- data/Components/Builtins/AudioOutput.qml +10 -0
- data/Components/Builtins/Avatar.qml +46 -0
- data/Components/Builtins/Badge.qml +38 -0
- data/Components/Builtins/Banner.qml +133 -0
- data/Components/Builtins/BarChart.qml +67 -0
- data/Components/Builtins/BarIconButton.qml +30 -0
- data/Components/Builtins/BarIndicator.qml +26 -0
- data/Components/Builtins/Behavior.qml +13 -0
- data/Components/Builtins/Blur.qml +14 -0
- data/Components/Builtins/BorderImage.qml +38 -0
- data/Components/Builtins/BorderOverlay.qml +25 -0
- data/Components/Builtins/BottomSheet.qml +211 -0
- data/Components/Builtins/Breadcrumb.qml +169 -0
- data/Components/Builtins/BubbleChart.qml +3 -0
- data/Components/Builtins/BusyIndicator.qml +24 -0
- data/Components/Builtins/Button.qml +55 -0
- data/Components/Builtins/ButtonGroup.qml +18 -0
- data/Components/Builtins/Calendar.qml +55 -0
- data/Components/Builtins/Camera.qml +18 -0
- data/Components/Builtins/CandlestickChart.qml +3 -0
- data/Components/Builtins/Canvas.qml +159 -0
- data/Components/Builtins/CaptureSession.qml +19 -0
- data/Components/Builtins/Card.qml +23 -0
- data/Components/Builtins/Carousel.qml +72 -0
- data/Components/Builtins/Center.qml +20 -0
- data/Components/Builtins/CheckDelegate.qml +132 -0
- data/Components/Builtins/Checkbox.qml +62 -0
- data/Components/Builtins/Chip.qml +65 -0
- data/Components/Builtins/Circle.qml +35 -0
- data/Components/Builtins/Clipboard.qml +29 -0
- data/Components/Builtins/ColorAnimation.qml +3 -0
- data/Components/Builtins/ColorPicker.qml +70 -0
- data/Components/Builtins/Colorize.qml +14 -0
- data/Components/Builtins/Column.qml +17 -0
- data/Components/Builtins/ColumnLayout.qml +13 -0
- data/Components/Builtins/ConfirmDialog.qml +20 -0
- data/Components/Builtins/ConstrainedBox.qml +28 -0
- data/Components/Builtins/Container.qml +30 -0
- data/Components/Builtins/ContextMenu.qml +140 -0
- data/Components/Builtins/CursorSurface.qml +18 -0
- data/Components/Builtins/DataTable.qml +69 -0
- data/Components/Builtins/DatePicker.qml +180 -0
- data/Components/Builtins/DayOfWeekRow.qml +11 -0
- data/Components/Builtins/DelayButton.qml +47 -0
- data/Components/Builtins/DelegateModel.qml +10 -0
- data/Components/Builtins/DelegateModelGroup.qml +10 -0
- data/Components/Builtins/Dial.qml +42 -0
- data/Components/Builtins/Dialog.qml +128 -0
- data/Components/Builtins/DialogButtonBox.qml +137 -0
- data/Components/Builtins/Divider.qml +26 -0
- data/Components/Builtins/DonutChart.qml +3 -0
- data/Components/Builtins/DoubleSpinBox.qml +58 -0
- data/Components/Builtins/DragArea.qml +43 -0
- data/Components/Builtins/Drawer.qml +107 -0
- data/Components/Builtins/DropArea.qml +19 -0
- data/Components/Builtins/DropShadow.qml +16 -0
- data/Components/Builtins/Dropdown.qml +19 -0
- data/Components/Builtins/ExpansionPanel.qml +157 -0
- data/Components/Builtins/FilePicker.qml +140 -0
- data/Components/Builtins/FittedBox.qml +40 -0
- data/Components/Builtins/Flickable.qml +40 -0
- data/Components/Builtins/Flipable.qml +45 -0
- data/Components/Builtins/Flow.qml +16 -0
- data/Components/Builtins/FocusScope.qml +29 -0
- data/Components/Builtins/FolderListModel.qml +9 -0
- data/Components/Builtins/FolderPicker.qml +93 -0
- data/Components/Builtins/FontLoader.qml +21 -0
- data/Components/Builtins/FontPicker.qml +91 -0
- data/Components/Builtins/Frame.qml +71 -0
- data/Components/Builtins/FrameAnimation.qml +13 -0
- data/Components/Builtins/Gauge.qml +3 -0
- data/Components/Builtins/Glow.qml +15 -0
- data/Components/Builtins/Gradient.qml +93 -0
- data/Components/Builtins/Grid.qml +16 -0
- data/Components/Builtins/GridLayout.qml +16 -0
- data/Components/Builtins/GridView.qml +226 -0
- data/Components/Builtins/GroupBox.qml +95 -0
- data/Components/Builtins/Heatmap.qml +3 -0
- data/Components/Builtins/Histogram.qml +3 -0
- data/Components/Builtins/HorizontalHeader.qml +23 -0
- data/Components/Builtins/HorizontalHeaderDelegate.qml +39 -0
- data/Components/Builtins/HoverArea.qml +19 -0
- data/Components/Builtins/Icon.qml +16 -0
- data/Components/Builtins/Image.qml +110 -0
- data/Components/Builtins/ImageCapture.qml +14 -0
- data/Components/Builtins/ItemDelegate.qml +152 -0
- data/Components/Builtins/KeyCatcher.qml +25 -0
- data/Components/Builtins/Label.qml +43 -0
- data/Components/Builtins/LayoutItemProxy.qml +51 -0
- data/Components/Builtins/Legend.qml +86 -0
- data/Components/Builtins/Line.qml +28 -0
- data/Components/Builtins/LineChart.qml +87 -0
- data/Components/Builtins/ListModel.qml +8 -0
- data/Components/Builtins/ListView.qml +65 -0
- data/Components/Builtins/Loader.qml +33 -0
- data/Components/Builtins/Markdown.qml +23 -0
- data/Components/Builtins/MediaDevices.qml +10 -0
- data/Components/Builtins/MediaPlayer.qml +27 -0
- data/Components/Builtins/MediaRecorder.qml +16 -0
- data/Components/Builtins/Menu.qml +119 -0
- data/Components/Builtins/MenuBar.qml +128 -0
- data/Components/Builtins/MenuItem.qml +77 -0
- data/Components/Builtins/MenuSeparator.qml +30 -0
- data/Components/Builtins/MessageDialog.qml +104 -0
- data/Components/Builtins/ModalSheet.qml +222 -0
- data/Components/Builtins/ModelView3d.qml +50 -0
- data/Components/Builtins/MonthGrid.qml +23 -0
- data/Components/Builtins/MultiEffect.qml +48 -0
- data/Components/Builtins/MultiSelect.qml +23 -0
- data/Components/Builtins/NavigationRail.qml +154 -0
- data/Components/Builtins/NumberAnimation.qml +3 -0
- data/Components/Builtins/NumberField.qml +18 -0
- data/Components/Builtins/OpacityAnimator.qml +3 -0
- data/Components/Builtins/OpacityMask.qml +21 -0
- data/Components/Builtins/OpticalGlyph.qml +16 -0
- data/Components/Builtins/Page.qml +111 -0
- data/Components/Builtins/PageIndicator.qml +63 -0
- data/Components/Builtins/Pagination.qml +158 -0
- data/Components/Builtins/Pane.qml +72 -0
- data/Components/Builtins/PanelHero.qml +15 -0
- data/Components/Builtins/ParallelAnimation.qml +3 -0
- data/Components/Builtins/ParentAnimation.qml +3 -0
- data/Components/Builtins/ParentChange.qml +10 -0
- data/Components/Builtins/ParticleSystem.qml +81 -0
- data/Components/Builtins/PasswordField.qml +58 -0
- data/Components/Builtins/Path.qml +35 -0
- data/Components/Builtins/PathAnimation.qml +3 -0
- data/Components/Builtins/PauseAnimation.qml +3 -0
- data/Components/Builtins/PieChart.qml +3 -0
- data/Components/Builtins/PinchArea.qml +23 -0
- data/Components/Builtins/Popup.qml +130 -0
- data/Components/Builtins/Progress.qml +15 -0
- data/Components/Builtins/ProgressRing.qml +120 -0
- data/Components/Builtins/PropertyAction.qml +11 -0
- data/Components/Builtins/PropertyAnimation.qml +3 -0
- data/Components/Builtins/PropertyChanges.qml +10 -0
- data/Components/Builtins/RadarChart.qml +3 -0
- data/Components/Builtins/RadialGauge.qml +3 -0
- data/Components/Builtins/RadioButton.qml +46 -0
- data/Components/Builtins/RadioDelegate.qml +115 -0
- data/Components/Builtins/RadioGroup.qml +58 -0
- data/Components/Builtins/RangeSlider.qml +39 -0
- data/Components/Builtins/Rectangle.qml +23 -0
- data/Components/Builtins/RectangularShadow.qml +23 -0
- data/Components/Builtins/ReorderableList.qml +204 -0
- data/Components/Builtins/RichText.qml +23 -0
- data/Components/Builtins/RotationAnimation.qml +3 -0
- data/Components/Builtins/RotationAnimator.qml +3 -0
- data/Components/Builtins/RoundButton.qml +42 -0
- data/Components/Builtins/Row.qml +17 -0
- data/Components/Builtins/RowLayout.qml +13 -0
- data/Components/Builtins/ScaleAnimator.qml +3 -0
- data/Components/Builtins/ScatterChart.qml +3 -0
- data/Components/Builtins/ScreenCapture.qml +78 -0
- data/Components/Builtins/ScriptAction.qml +15 -0
- data/Components/Builtins/Scroll.qml +18 -0
- data/Components/Builtins/ScrollBar.qml +18 -0
- data/Components/Builtins/ScrollIndicator.qml +15 -0
- data/Components/Builtins/SearchField.qml +178 -0
- data/Components/Builtins/SearchableDropdown.qml +21 -0
- data/Components/Builtins/SectionHeader.qml +14 -0
- data/Components/Builtins/SelectableText.qml +33 -0
- data/Components/Builtins/SelectionRectangle.qml +17 -0
- data/Components/Builtins/Separator.qml +13 -0
- data/Components/Builtins/SequentialAnimation.qml +3 -0
- data/Components/Builtins/Settings.qml +10 -0
- data/Components/Builtins/ShaderEffect.qml +115 -0
- data/Components/Builtins/ShaderEffectSource.qml +61 -0
- data/Components/Builtins/Shaders/grayscale.frag +14 -0
- data/Components/Builtins/Shaders/grayscale.frag.qsb +0 -0
- data/Components/Builtins/Shaders/passthrough.frag +11 -0
- data/Components/Builtins/Shaders/passthrough.frag.qsb +0 -0
- data/Components/Builtins/Shaders/pixelate.frag +16 -0
- data/Components/Builtins/Shaders/pixelate.frag.qsb +0 -0
- data/Components/Builtins/Shaders/vignette.frag +18 -0
- data/Components/Builtins/Shaders/vignette.frag.qsb +0 -0
- data/Components/Builtins/Shaders/wave.frag +18 -0
- data/Components/Builtins/Shaders/wave.frag.qsb +0 -0
- data/Components/Builtins/Shape.qml +53 -0
- data/Components/Builtins/Skeleton.qml +78 -0
- data/Components/Builtins/Slider.qml +21 -0
- data/Components/Builtins/SmoothedAnimation.qml +3 -0
- data/Components/Builtins/Snackbar.qml +181 -0
- data/Components/Builtins/SortFilterProxyModel.qml +16 -0
- data/Components/Builtins/SoundEffect.qml +10 -0
- data/Components/Builtins/Spacer.qml +13 -0
- data/Components/Builtins/Sparkline.qml +3 -0
- data/Components/Builtins/SpinBox.qml +44 -0
- data/Components/Builtins/SplitView.qml +31 -0
- data/Components/Builtins/SpringAnimation.qml +3 -0
- data/Components/Builtins/Stack.qml +14 -0
- data/Components/Builtins/StackLayout.qml +19 -0
- data/Components/Builtins/StackView.qml +122 -0
- data/Components/Builtins/StackedBarChart.qml +3 -0
- data/Components/Builtins/StandardPaths.qml +9 -0
- data/Components/Builtins/State.qml +13 -0
- data/Components/Builtins/StateGroup.qml +11 -0
- data/Components/Builtins/Support/AnimationDriver.qml +79 -0
- data/Components/Builtins/Support/AnimationGroupDriver.qml +32 -0
- data/Components/Builtins/Support/ChartCanvas.qml +629 -0
- data/Components/Builtins/Support/ModelView3dScene.qml +292 -0
- data/Components/Builtins/Support/OptionalModuleState.js +5 -0
- data/Components/Builtins/SwipeDelegate.qml +231 -0
- data/Components/Builtins/SwipeView.qml +69 -0
- data/Components/Builtins/SwitchDelegate.qml +140 -0
- data/Components/Builtins/TabBar.qml +117 -0
- data/Components/Builtins/TabButton.qml +105 -0
- data/Components/Builtins/TableView.qml +388 -0
- data/Components/Builtins/TableViewDelegate.qml +17 -0
- data/Components/Builtins/Tabs.qml +138 -0
- data/Components/Builtins/Text.qml +24 -0
- data/Components/Builtins/TextArea.qml +59 -0
- data/Components/Builtins/TextField.qml +21 -0
- data/Components/Builtins/TextMetrics.qml +39 -0
- data/Components/Builtins/TimePicker.qml +213 -0
- data/Components/Builtins/Timer.qml +13 -0
- data/Components/Builtins/Toast.qml +213 -0
- data/Components/Builtins/Toggle.qml +19 -0
- data/Components/Builtins/ToggleSwitch.qml +22 -0
- data/Components/Builtins/ToolBar.qml +61 -0
- data/Components/Builtins/ToolButton.qml +41 -0
- data/Components/Builtins/ToolSeparator.qml +36 -0
- data/Components/Builtins/Tooltip.qml +20 -0
- data/Components/Builtins/Transition.qml +3 -0
- data/Components/Builtins/TreeView.qml +423 -0
- data/Components/Builtins/TreeViewDelegate.qml +46 -0
- data/Components/Builtins/Tumbler.qml +18 -0
- data/Components/Builtins/UniformAnimator.qml +3 -0
- data/Components/Builtins/VectorAnimation.qml +3 -0
- data/Components/Builtins/VectorImage.qml +62 -0
- data/Components/Builtins/VerticalHeader.qml +21 -0
- data/Components/Builtins/VerticalHeaderDelegate.qml +35 -0
- data/Components/Builtins/Video.qml +54 -0
- data/Components/Builtins/VideoOutput.qml +54 -0
- data/Components/Builtins/WebView.qml +57 -0
- data/Components/Builtins/WeekNumberColumn.qml +13 -0
- data/Components/Builtins/WidgetButton.qml +26 -0
- data/Components/Builtins/Window.qml +90 -0
- data/Components/Builtins/WindowCapture.qml +11 -0
- data/Components/Builtins/Wrap.qml +18 -0
- data/Components/Builtins/XAnimator.qml +3 -0
- data/Components/Builtins/YAnimator.qml +3 -0
- data/Components/README.md +45 -0
- data/ControlNode.qml +1369 -0
- data/Controls/BarIconButton.qml +27 -0
- data/Controls/BarIndicator.qml +22 -0
- data/Controls/BorderOverlay.qml +10 -0
- data/Controls/BorderSurface.qml +10 -0
- data/Controls/Button.qml +78 -0
- data/Controls/ButtonGroup.qml +19 -0
- data/Controls/ConfirmDialog.qml +37 -0
- data/Controls/CursorSurface.qml +29 -0
- data/Controls/Dropdown.qml +59 -0
- data/Controls/MultiSelect.qml +32 -0
- data/Controls/NumberField.qml +24 -0
- data/Controls/OpticalGlyph.qml +14 -0
- data/Controls/PanelActionButton.qml +10 -0
- data/Controls/PanelHero.qml +18 -0
- data/Controls/PanelKeyCatcher.qml +25 -0
- data/Controls/PanelSectionHeader.qml +11 -0
- data/Controls/PanelSeparator.qml +10 -0
- data/Controls/PanelSlider.qml +36 -0
- data/Controls/PanelToolTip.qml +13 -0
- data/Controls/SearchableDropdown.qml +11 -0
- data/Controls/TextField.qml +25 -0
- data/Controls/Toggle.qml +22 -0
- data/Controls/ToggleSwitch.qml +26 -0
- data/Controls/WidgetButton.qml +35 -0
- data/Controls/qmldir +25 -0
- data/Desktop.qml +76 -0
- data/LICENSE +22 -0
- data/README.md +112 -0
- data/Service.qml +430 -0
- data/Theme/Border.qml +22 -0
- data/Theme/Color.qml +22 -0
- data/Theme/Style.qml +47 -0
- data/Theme/Util.qml +6 -0
- data/Theme/qmldir +5 -0
- data/bin/zui +7 -0
- data/lib/zui/animation.rb +24 -0
- data/lib/zui/application.rb +327 -0
- data/lib/zui/builder.rb +725 -0
- data/lib/zui/cli.rb +91 -0
- data/lib/zui/command.rb +101 -0
- data/lib/zui/component_registry.rb +91 -0
- data/lib/zui/components.rb +262 -0
- data/lib/zui/distribution.rb +200 -0
- data/lib/zui/generator.rb +84 -0
- data/lib/zui/host.rb +123 -0
- data/lib/zui/node.rb +30 -0
- data/lib/zui/platform.rb +40 -0
- data/lib/zui/protocol.rb +29 -0
- data/lib/zui/runner.rb +37 -0
- data/lib/zui/runtime.rb +23 -0
- data/lib/zui/scheduler.rb +136 -0
- data/lib/zui/source_bundle.rb +63 -0
- data/lib/zui/state_store.rb +100 -0
- data/lib/zui/value.rb +44 -0
- data/lib/zui.rb +33 -0
- data/native/CMakeLists.txt +45 -0
- data/native/ZuiClipboard.cpp +16 -0
- data/native/ZuiClipboard.h +16 -0
- data/native/ZuiProcess.cpp +84 -0
- data/native/ZuiProcess.h +34 -0
- data/native/main.cpp +64 -0
- data/vendor/host/linux-x86_64/PROVENANCE.md +15 -0
- data/vendor/host/linux-x86_64/zui-host +0 -0
- data/vendor/host/linux-x86_64/zui-host.sha256 +1 -0
- metadata +365 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import QtQuick
|
|
2
|
+
import QtQml.Models
|
|
3
|
+
|
|
4
|
+
Item {
|
|
5
|
+
id:modelRoot;property var renderer:null;property alias model:nativeDelegateModel
|
|
6
|
+
function rebuild(){sourceModel.clear();var items=renderer?renderer.prop("items",[]):[];for(var i=0;i<items.length;i++){var item=items[i];sourceModel.append(item!==null&&typeof item==="object"&&!Array.isArray(item)?item:{value:item})}if(renderer)renderer.bridge.sendEvent(renderer.surfaceName,renderer.controlId,"count_change",{value:nativeDelegateModel.count})}
|
|
7
|
+
ListModel{id:sourceModel}
|
|
8
|
+
DelegateModel{id:nativeDelegateModel;model:sourceModel;filterOnGroup:String(renderer?renderer.prop("filter_group","items"):"items");delegate:Item{required property int index;property var sourceIndex:index}}
|
|
9
|
+
Component.onCompleted:rebuild();Connections{target:renderer;function onNodeChanged(){modelRoot.rebuild()}}
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import QtQuick
|
|
2
|
+
import QtQml.Models
|
|
3
|
+
|
|
4
|
+
Item {
|
|
5
|
+
id:groupRoot;property var renderer:null;property alias model:nativeDelegateModel;property alias group:nativeGroup
|
|
6
|
+
function rebuild(){sourceModel.clear();var items=renderer?renderer.prop("items",[]):[];for(var i=0;i<items.length;i++){var item=items[i];sourceModel.append(item!==null&&typeof item==="object"&&!Array.isArray(item)?item:{value:item})}if(renderer)renderer.bridge.sendEvent(renderer.surfaceName,renderer.controlId,"count_change",{value:nativeGroup.count})}
|
|
7
|
+
ListModel{id:sourceModel}
|
|
8
|
+
DelegateModel{id:nativeDelegateModel;model:sourceModel;delegate:Item{required property int index} groups:[DelegateModelGroup{id:nativeGroup;name:String(renderer?renderer.prop("name","group"):"group");includeByDefault:renderer&&renderer.prop("include_by_default",false)===true;onCountChanged:if(renderer)renderer.bridge.sendEvent(renderer.surfaceName,renderer.controlId,"change",{value:count})}]}
|
|
9
|
+
Component.onCompleted:rebuild();Connections{target:renderer;function onNodeChanged(){groupRoot.rebuild()}}
|
|
10
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
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.Dial {
|
|
10
|
+
required property var renderer
|
|
11
|
+
id: nativeDial
|
|
12
|
+
from: Number(renderer.prop("minimum", 0))
|
|
13
|
+
to: Number(renderer.prop("maximum", 1))
|
|
14
|
+
value: Number(renderer.prop("value", from))
|
|
15
|
+
stepSize: Number(renderer.prop("step", 0))
|
|
16
|
+
startAngle: Number(renderer.prop("start_angle", -140))
|
|
17
|
+
endAngle: Number(renderer.prop("end_angle", 140))
|
|
18
|
+
snapMode: {
|
|
19
|
+
var mode = String(renderer.prop("snap", "none"))
|
|
20
|
+
if (mode === "always") return QQC.Dial.SnapAlways
|
|
21
|
+
if (mode === "release") return QQC.Dial.SnapOnRelease
|
|
22
|
+
return QQC.Dial.NoSnap
|
|
23
|
+
}
|
|
24
|
+
wrap: renderer.prop("wrap", false) === true
|
|
25
|
+
live: renderer.prop("live", true) !== false
|
|
26
|
+
inputMode: {
|
|
27
|
+
var mode = String(renderer.prop("input_mode", "circular"))
|
|
28
|
+
if (mode === "horizontal") return QQC.Dial.Horizontal
|
|
29
|
+
if (mode === "vertical") return QQC.Dial.Vertical
|
|
30
|
+
return QQC.Dial.Circular
|
|
31
|
+
}
|
|
32
|
+
implicitWidth: Number(renderer.prop("size", 100))
|
|
33
|
+
implicitHeight: implicitWidth
|
|
34
|
+
palette.windowText: renderer.prop("foreground", renderer.foreground)
|
|
35
|
+
palette.button: renderer.prop("background", Color.popups.background)
|
|
36
|
+
palette.highlight: renderer.prop("accent", Color.accent)
|
|
37
|
+
onMoved: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "input", { value: value, angle: angle })
|
|
38
|
+
onPressedChanged: {
|
|
39
|
+
renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, pressed ? "press" : "release", { value: value })
|
|
40
|
+
if (!pressed) renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "change", { value: value })
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import QtQuick
|
|
2
|
+
import QtQuick.Controls as QQC
|
|
3
|
+
import "../../Theme"
|
|
4
|
+
|
|
5
|
+
QQC.Dialog {
|
|
6
|
+
id: dialogRoot
|
|
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
|
+
readonly property bool centered: renderer.prop("centered", true) !== false
|
|
13
|
+
readonly property bool hasExplicitX: renderer.node && renderer.node.props
|
|
14
|
+
&& renderer.node.props.x !== undefined
|
|
15
|
+
readonly property bool hasExplicitY: renderer.node && renderer.node.props
|
|
16
|
+
&& renderer.node.props.y !== undefined
|
|
17
|
+
|
|
18
|
+
function standardButtonsValue(value) {
|
|
19
|
+
var names = Array.isArray(value) ? value : (value === null || value === undefined ? [] : [value])
|
|
20
|
+
var result = QQC.Dialog.NoButton
|
|
21
|
+
for (var index = 0; index < names.length; index++) {
|
|
22
|
+
var name = String(names[index])
|
|
23
|
+
if (name === "ok") result |= QQC.Dialog.Ok
|
|
24
|
+
else if (name === "save") result |= QQC.Dialog.Save
|
|
25
|
+
else if (name === "save_all") result |= QQC.Dialog.SaveAll
|
|
26
|
+
else if (name === "open") result |= QQC.Dialog.Open
|
|
27
|
+
else if (name === "yes") result |= QQC.Dialog.Yes
|
|
28
|
+
else if (name === "yes_to_all") result |= QQC.Dialog.YesToAll
|
|
29
|
+
else if (name === "no") result |= QQC.Dialog.No
|
|
30
|
+
else if (name === "no_to_all") result |= QQC.Dialog.NoToAll
|
|
31
|
+
else if (name === "abort") result |= QQC.Dialog.Abort
|
|
32
|
+
else if (name === "retry") result |= QQC.Dialog.Retry
|
|
33
|
+
else if (name === "ignore") result |= QQC.Dialog.Ignore
|
|
34
|
+
else if (name === "close") result |= QQC.Dialog.Close
|
|
35
|
+
else if (name === "cancel") result |= QQC.Dialog.Cancel
|
|
36
|
+
else if (name === "discard") result |= QQC.Dialog.Discard
|
|
37
|
+
else if (name === "help") result |= QQC.Dialog.Help
|
|
38
|
+
else if (name === "apply") result |= QQC.Dialog.Apply
|
|
39
|
+
else if (name === "reset") result |= QQC.Dialog.Reset
|
|
40
|
+
else if (name === "restore_defaults") result |= QQC.Dialog.RestoreDefaults
|
|
41
|
+
}
|
|
42
|
+
return result
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function closePolicyValue(value) {
|
|
46
|
+
var names = Array.isArray(value) ? value : [value || "escape_and_outside"]
|
|
47
|
+
var result = 0
|
|
48
|
+
for (var index = 0; index < names.length; index++) {
|
|
49
|
+
var name = String(names[index])
|
|
50
|
+
if (name === "escape" || name === "escape_and_outside") result |= QQC.Popup.CloseOnEscape
|
|
51
|
+
if (name === "outside" || name === "escape_and_outside") result |= QQC.Popup.CloseOnPressOutside
|
|
52
|
+
if (name === "outside_parent") result |= QQC.Popup.CloseOnPressOutsideParent
|
|
53
|
+
}
|
|
54
|
+
return result
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function syncOpenState() {
|
|
58
|
+
if (requestedOpen === opened) return
|
|
59
|
+
if (requestedOpen) open()
|
|
60
|
+
else close()
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
title: String(renderer.prop("title", ""))
|
|
64
|
+
standardButtons: standardButtonsValue(renderer.prop("standard_buttons", ["ok", "cancel"]))
|
|
65
|
+
parent: QQC.Overlay.overlay
|
|
66
|
+
x: hasExplicitX ? Number(renderer.prop("x", 0))
|
|
67
|
+
: (centered && parent ? Math.round((parent.width - width) / 2) : 0)
|
|
68
|
+
y: hasExplicitY ? Number(renderer.prop("y", 0))
|
|
69
|
+
: (centered && parent ? Math.round((parent.height - height) / 2) : 0)
|
|
70
|
+
width: Number(renderer.prop("width", 480))
|
|
71
|
+
height: Number(renderer.prop("height", 320))
|
|
72
|
+
modal: renderer.prop("modal", true) !== false
|
|
73
|
+
dim: renderer.prop("dim", modal) !== false
|
|
74
|
+
focus: renderer.prop("focus", true) !== false
|
|
75
|
+
closePolicy: closePolicyValue(renderer.prop("close_policy", "escape_and_outside"))
|
|
76
|
+
enabled: renderer.prop("enabled", true) !== false
|
|
77
|
+
padding: Number(renderer.prop("padding", Style.spacing.lg))
|
|
78
|
+
font.family: String(renderer.prop("font_family", renderer.fontFamily))
|
|
79
|
+
font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
|
|
80
|
+
|
|
81
|
+
background: Rectangle {
|
|
82
|
+
color: renderer.prop("background", Color.background)
|
|
83
|
+
radius: Number(renderer.prop("radius", Style.cornerRadius))
|
|
84
|
+
border.width: String(renderer.prop("border_color", "")).length > 0 ? Style.normalBorderWidth : 0
|
|
85
|
+
border.color: renderer.prop("border_color", "transparent")
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
contentItem: Loader {
|
|
89
|
+
sourceComponent: dialogRoot.contentLayout === "row" ? rowContent
|
|
90
|
+
: (dialogRoot.contentLayout === "stack" ? stackContent : columnContent)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
Component {
|
|
94
|
+
id: columnContent
|
|
95
|
+
Column {
|
|
96
|
+
spacing: Number(renderer.prop("spacing", Style.spacing.md))
|
|
97
|
+
Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent }
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
Component {
|
|
101
|
+
id: rowContent
|
|
102
|
+
Row {
|
|
103
|
+
spacing: Number(renderer.prop("spacing", Style.spacing.md))
|
|
104
|
+
Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent }
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
Component {
|
|
108
|
+
id: stackContent
|
|
109
|
+
Item { Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent } }
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
Component.onCompleted: syncOpenState()
|
|
113
|
+
onRequestedOpenChanged: syncOpenState()
|
|
114
|
+
onAccepted: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "accept", {})
|
|
115
|
+
onRejected: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "reject", {})
|
|
116
|
+
onApplied: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "apply", {})
|
|
117
|
+
onReset: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "reset", {})
|
|
118
|
+
onDiscarded: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "discard", {})
|
|
119
|
+
onHelpRequested: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "help", {})
|
|
120
|
+
onOpened: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "open", {})
|
|
121
|
+
onClosed: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "close", {})
|
|
122
|
+
onAboutToShow: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "about_to_show", {})
|
|
123
|
+
onAboutToHide: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "about_to_hide", {})
|
|
124
|
+
onVisibleChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
|
|
125
|
+
visible ? "show" : "hide", {})
|
|
126
|
+
onActiveFocusChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
|
|
127
|
+
activeFocus ? "focus" : "blur", {})
|
|
128
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import QtQuick
|
|
2
|
+
import QtQuick.Controls as QQC
|
|
3
|
+
import "../../Theme"
|
|
4
|
+
|
|
5
|
+
QQC.DialogButtonBox {
|
|
6
|
+
id: box
|
|
7
|
+
|
|
8
|
+
required property var renderer
|
|
9
|
+
|
|
10
|
+
function standardButtonValue(name) {
|
|
11
|
+
var key = String(name || "").toLowerCase()
|
|
12
|
+
if (key === "ok") return QQC.DialogButtonBox.Ok
|
|
13
|
+
if (key === "save") return QQC.DialogButtonBox.Save
|
|
14
|
+
if (key === "save_all") return QQC.DialogButtonBox.SaveAll
|
|
15
|
+
if (key === "open") return QQC.DialogButtonBox.Open
|
|
16
|
+
if (key === "yes") return QQC.DialogButtonBox.Yes
|
|
17
|
+
if (key === "yes_to_all") return QQC.DialogButtonBox.YesToAll
|
|
18
|
+
if (key === "no") return QQC.DialogButtonBox.No
|
|
19
|
+
if (key === "no_to_all") return QQC.DialogButtonBox.NoToAll
|
|
20
|
+
if (key === "abort") return QQC.DialogButtonBox.Abort
|
|
21
|
+
if (key === "retry") return QQC.DialogButtonBox.Retry
|
|
22
|
+
if (key === "ignore") return QQC.DialogButtonBox.Ignore
|
|
23
|
+
if (key === "close") return QQC.DialogButtonBox.Close
|
|
24
|
+
if (key === "cancel") return QQC.DialogButtonBox.Cancel
|
|
25
|
+
if (key === "discard") return QQC.DialogButtonBox.Discard
|
|
26
|
+
if (key === "help") return QQC.DialogButtonBox.Help
|
|
27
|
+
if (key === "apply") return QQC.DialogButtonBox.Apply
|
|
28
|
+
if (key === "reset") return QQC.DialogButtonBox.Reset
|
|
29
|
+
if (key === "restore_defaults") return QQC.DialogButtonBox.RestoreDefaults
|
|
30
|
+
return QQC.DialogButtonBox.NoButton
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function standardButtonsValue(values) {
|
|
34
|
+
var result = QQC.DialogButtonBox.NoButton
|
|
35
|
+
var buttons = Array.isArray(values) ? values : [values]
|
|
36
|
+
for (var index = 0; index < buttons.length; index++) result |= standardButtonValue(buttons[index])
|
|
37
|
+
return result
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function roleValue(value) {
|
|
41
|
+
var key = String(value || "action").toLowerCase()
|
|
42
|
+
if (key === "accept") return QQC.DialogButtonBox.AcceptRole
|
|
43
|
+
if (key === "reject") return QQC.DialogButtonBox.RejectRole
|
|
44
|
+
if (key === "destructive") return QQC.DialogButtonBox.DestructiveRole
|
|
45
|
+
if (key === "help") return QQC.DialogButtonBox.HelpRole
|
|
46
|
+
if (key === "yes") return QQC.DialogButtonBox.YesRole
|
|
47
|
+
if (key === "no") return QQC.DialogButtonBox.NoRole
|
|
48
|
+
if (key === "reset") return QQC.DialogButtonBox.ResetRole
|
|
49
|
+
if (key === "apply") return QQC.DialogButtonBox.ApplyRole
|
|
50
|
+
return QQC.DialogButtonBox.ActionRole
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function alignmentValue(value) {
|
|
54
|
+
var key = String(value || "right")
|
|
55
|
+
if (key === "left" || key === "start") return Qt.AlignLeft
|
|
56
|
+
if (key === "center") return Qt.AlignHCenter
|
|
57
|
+
if (key === "justify") return Qt.AlignJustify
|
|
58
|
+
return Qt.AlignRight
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function buttonPayload(button) {
|
|
62
|
+
return {
|
|
63
|
+
text: button ? button.text : "",
|
|
64
|
+
role: button ? buttonRole(button) : QQC.DialogButtonBox.InvalidRole,
|
|
65
|
+
standard_button: button ? standardButton(button) : QQC.DialogButtonBox.NoButton
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
standardButtons: standardButtonsValue(renderer.prop("buttons", []))
|
|
70
|
+
alignment: renderer.prop("centered", false) === true
|
|
71
|
+
? Qt.AlignHCenter : alignmentValue(renderer.prop("alignment", "right"))
|
|
72
|
+
position: String(renderer.prop("position", "footer")) === "header"
|
|
73
|
+
? QQC.DialogButtonBox.Header : QQC.DialogButtonBox.Footer
|
|
74
|
+
spacing: Number(renderer.prop("spacing", Style.spacing.sm))
|
|
75
|
+
implicitWidth: Number(renderer.prop("width", contentItem ? contentItem.implicitWidth : 240))
|
|
76
|
+
implicitHeight: Number(renderer.prop("height", contentItem ? contentItem.implicitHeight : 44))
|
|
77
|
+
enabled: renderer.prop("enabled", true) !== false
|
|
78
|
+
|
|
79
|
+
background: Rectangle {
|
|
80
|
+
color: renderer.prop("background", "transparent")
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
contentItem: ListView {
|
|
84
|
+
implicitWidth: orientation === ListView.Horizontal ? contentWidth : widestItem
|
|
85
|
+
implicitHeight: orientation === ListView.Vertical ? contentHeight : tallestItem
|
|
86
|
+
model: box.contentModel
|
|
87
|
+
spacing: box.spacing
|
|
88
|
+
orientation: String(renderer.prop("orientation", "horizontal")) === "vertical"
|
|
89
|
+
? ListView.Vertical : ListView.Horizontal
|
|
90
|
+
boundsBehavior: Flickable.StopAtBounds
|
|
91
|
+
snapMode: ListView.SnapToItem
|
|
92
|
+
readonly property real widestItem: {
|
|
93
|
+
var result = 0
|
|
94
|
+
for (var index = 0; index < count; index++) {
|
|
95
|
+
var child = itemAtIndex(index)
|
|
96
|
+
if (child) result = Math.max(result, child.implicitWidth)
|
|
97
|
+
}
|
|
98
|
+
return result
|
|
99
|
+
}
|
|
100
|
+
readonly property real tallestItem: {
|
|
101
|
+
var result = 0
|
|
102
|
+
for (var index = 0; index < count; index++) {
|
|
103
|
+
var child = itemAtIndex(index)
|
|
104
|
+
if (child) result = Math.max(result, child.implicitHeight)
|
|
105
|
+
}
|
|
106
|
+
return result
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
delegate: QQC.Button {
|
|
111
|
+
id: standardDelegate
|
|
112
|
+
font.family: String(renderer.prop("font_family", renderer.fontFamily))
|
|
113
|
+
font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
|
|
114
|
+
palette.buttonText: renderer.prop("foreground", renderer.foreground)
|
|
115
|
+
palette.highlight: renderer.prop("accent", Color.accent)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
Repeater {
|
|
119
|
+
model: renderer.prop("custom_buttons", [])
|
|
120
|
+
delegate: QQC.Button {
|
|
121
|
+
required property var modelData
|
|
122
|
+
text: String(modelData && modelData.text !== undefined ? modelData.text : modelData)
|
|
123
|
+
QQC.DialogButtonBox.buttonRole: box.roleValue(modelData && modelData.role !== undefined ? modelData.role : "action")
|
|
124
|
+
font.family: String(renderer.prop("font_family", renderer.fontFamily))
|
|
125
|
+
font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
|
|
126
|
+
palette.buttonText: renderer.prop("foreground", renderer.foreground)
|
|
127
|
+
palette.highlight: renderer.prop("accent", Color.accent)
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
onClicked: function(button) {
|
|
132
|
+
renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "click", box.buttonPayload(button))
|
|
133
|
+
}
|
|
134
|
+
onAccepted: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "accept", {})
|
|
135
|
+
onRejected: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "reject", {})
|
|
136
|
+
onHelpRequested: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "help", {})
|
|
137
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
readonly property bool vertical: String(renderer.prop("orientation", "horizontal")) === "vertical"
|
|
12
|
+
readonly property real lineLength: Number(renderer.prop("length", 240))
|
|
13
|
+
readonly property real lineThickness: Number(renderer.prop("thickness", Style.normalBorderWidth))
|
|
14
|
+
readonly property real leadingIndent: Number(renderer.prop("indent", 0))
|
|
15
|
+
readonly property real trailingIndent: Number(renderer.prop("end_indent", 0))
|
|
16
|
+
implicitWidth: vertical ? lineThickness : lineLength
|
|
17
|
+
implicitHeight: vertical ? lineLength : lineThickness
|
|
18
|
+
Rectangle {
|
|
19
|
+
x: parent.vertical ? 0 : parent.leadingIndent
|
|
20
|
+
y: parent.vertical ? parent.leadingIndent : 0
|
|
21
|
+
width: parent.vertical ? parent.lineThickness : Math.max(0, parent.width - parent.leadingIndent - parent.trailingIndent)
|
|
22
|
+
height: parent.vertical ? Math.max(0, parent.height - parent.leadingIndent - parent.trailingIndent) : parent.lineThickness
|
|
23
|
+
color: renderer.prop("color", renderer.foreground)
|
|
24
|
+
opacity: Number(renderer.prop("opacity", 0.2))
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import QtQuick
|
|
2
|
+
import QtQuick.Controls as QQC
|
|
3
|
+
import "../../Theme"
|
|
4
|
+
|
|
5
|
+
QQC.SpinBox {
|
|
6
|
+
id: nativeDoubleSpinBox
|
|
7
|
+
required property var renderer
|
|
8
|
+
|
|
9
|
+
readonly property int decimalPlaces: Math.max(0, Math.min(9,
|
|
10
|
+
Number(renderer.prop("decimals", 2))))
|
|
11
|
+
readonly property real scaleFactor: Math.pow(10, decimalPlaces)
|
|
12
|
+
readonly property real realValue: value / scaleFactor
|
|
13
|
+
|
|
14
|
+
from: Math.round(Number(renderer.prop("minimum", 0)) * scaleFactor)
|
|
15
|
+
to: Math.round(Number(renderer.prop("maximum", 100)) * scaleFactor)
|
|
16
|
+
value: Math.round(Number(renderer.prop("value", from / scaleFactor)) * scaleFactor)
|
|
17
|
+
stepSize: Math.max(1, Math.round(Number(renderer.prop("step", 0.1)) * scaleFactor))
|
|
18
|
+
editable: renderer.prop("editable", true) !== false
|
|
19
|
+
wrap: renderer.prop("wrap", false) === true
|
|
20
|
+
enabled: renderer.prop("enabled", true) !== false
|
|
21
|
+
implicitWidth: Number(renderer.prop("width", 160))
|
|
22
|
+
font.family: String(renderer.prop("font_family", renderer.fontFamily))
|
|
23
|
+
font.pixelSize: Number(renderer.prop("font_size", Style.font.body))
|
|
24
|
+
palette.text: renderer.prop("foreground", renderer.foreground)
|
|
25
|
+
palette.buttonText: renderer.prop("foreground", renderer.foreground)
|
|
26
|
+
palette.button: renderer.prop("background", Color.popups.background)
|
|
27
|
+
palette.highlight: renderer.prop("accent", Color.accent)
|
|
28
|
+
|
|
29
|
+
textFromValue: function(scaledValue, locale) {
|
|
30
|
+
return String(renderer.prop("prefix", ""))
|
|
31
|
+
+ Number(scaledValue / scaleFactor).toLocaleString(locale, "f", decimalPlaces)
|
|
32
|
+
+ String(renderer.prop("suffix", ""))
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
valueFromText: function(text, locale) {
|
|
36
|
+
var prefix = String(renderer.prop("prefix", ""))
|
|
37
|
+
var suffix = String(renderer.prop("suffix", ""))
|
|
38
|
+
var numeric = String(text)
|
|
39
|
+
if (prefix.length > 0 && numeric.indexOf(prefix) === 0)
|
|
40
|
+
numeric = numeric.slice(prefix.length)
|
|
41
|
+
if (suffix.length > 0 && numeric.lastIndexOf(suffix) === numeric.length - suffix.length)
|
|
42
|
+
numeric = numeric.slice(0, -suffix.length)
|
|
43
|
+
return Math.round(Number.fromLocaleString(locale, numeric) * scaleFactor)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
onValueModified: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
|
|
47
|
+
"change", { value: realValue })
|
|
48
|
+
up.onPressedChanged: {
|
|
49
|
+
if (up.pressed)
|
|
50
|
+
renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
|
|
51
|
+
"increase", { value: realValue })
|
|
52
|
+
}
|
|
53
|
+
down.onPressedChanged: {
|
|
54
|
+
if (down.pressed)
|
|
55
|
+
renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
|
|
56
|
+
"decrease", { value: realValue })
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import QtQuick
|
|
2
|
+
|
|
3
|
+
Item {
|
|
4
|
+
id: dragRoot
|
|
5
|
+
property var renderer: null
|
|
6
|
+
function cursorShape(name) { var value=String(name||"size_all");if(value==="arrow")return Qt.ArrowCursor;if(value==="pointing_hand")return Qt.PointingHandCursor;if(value==="open_hand")return Qt.OpenHandCursor;if(value==="closed_hand")return Qt.ClosedHandCursor;if(value==="horizontal")return Qt.SizeHorCursor;if(value==="vertical")return Qt.SizeVerCursor;return Qt.SizeAllCursor }
|
|
7
|
+
implicitWidth: Number(renderer ? renderer.prop("width", contentHost.childrenRect.width) : 120)
|
|
8
|
+
implicitHeight: Number(renderer ? renderer.prop("height", contentHost.childrenRect.height) : 80)
|
|
9
|
+
property int resetRevision: Number(renderer ? renderer.prop("reset_revision", 0) : 0)
|
|
10
|
+
onResetRevisionChanged: {
|
|
11
|
+
var item = nativeDrag.target
|
|
12
|
+
if (item) { item.x = 0; item.y = 0 }
|
|
13
|
+
}
|
|
14
|
+
Item { id: contentHost; anchors.fill: parent; Repeater { model: renderer ? (renderer.node.children || []) : []; delegate: renderer.childDelegateComponent } }
|
|
15
|
+
TapHandler {
|
|
16
|
+
id: nativeTap
|
|
17
|
+
enabled: renderer && renderer.prop("enabled", true) !== false
|
|
18
|
+
onTapped: function(point, button) {
|
|
19
|
+
if (renderer.subscribed("click")) renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "click", { x: point.position.x, y: point.position.y, button: button })
|
|
20
|
+
}
|
|
21
|
+
onDoubleTapped: function(point, button) {
|
|
22
|
+
if (renderer.subscribed("double_click")) renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "double_click", { x: point.position.x, y: point.position.y, button: button })
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
DragHandler {
|
|
26
|
+
id: nativeDrag
|
|
27
|
+
enabled: renderer && renderer.prop("enabled", true) !== false
|
|
28
|
+
target: { var id = renderer ? String(renderer.prop("target", "")) : ""; return id === "" ? contentHost : renderer.findRenderedItem(id) }
|
|
29
|
+
xAxis.enabled: !renderer || ["both", "horizontal", "x"].indexOf(String(renderer.prop("axis", "both"))) >= 0
|
|
30
|
+
yAxis.enabled: !renderer || ["both", "vertical", "y"].indexOf(String(renderer.prop("axis", "both"))) >= 0
|
|
31
|
+
xAxis.minimum: Number(renderer ? renderer.prop("minimum_x", -Infinity) : -Infinity); xAxis.maximum: Number(renderer ? renderer.prop("maximum_x", Infinity) : Infinity)
|
|
32
|
+
yAxis.minimum: Number(renderer ? renderer.prop("minimum_y", -Infinity) : -Infinity); yAxis.maximum: Number(renderer ? renderer.prop("maximum_y", Infinity) : Infinity)
|
|
33
|
+
dragThreshold: Number(renderer ? renderer.prop("threshold", 8) : 8)
|
|
34
|
+
cursorShape: dragRoot.cursorShape(renderer ? renderer.prop("cursor", "size_all") : "size_all")
|
|
35
|
+
onActiveChanged: {
|
|
36
|
+
var payload = { x: translation.x, y: translation.y, centroid_x: centroid.position.x, centroid_y: centroid.position.y }
|
|
37
|
+
if (!active && target) { var snapX=Number(renderer.prop("snap_x",0));var snapY=Number(renderer.prop("snap_y",0));if(snapX>0)target.x=Math.round(target.x/snapX)*snapX;if(snapY>0)target.y=Math.round(target.y/snapY)*snapY;payload.target_x=target.x;payload.target_y=target.y }
|
|
38
|
+
renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, active ? "drag_start" : "drag_end", payload)
|
|
39
|
+
}
|
|
40
|
+
onTranslationChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "drag", { x: translation.x, y: translation.y, centroid_x: centroid.position.x, centroid_y: centroid.position.y })
|
|
41
|
+
onCanceled: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "cancel", {})
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import QtQuick
|
|
2
|
+
import QtQuick.Controls as QQC
|
|
3
|
+
import "../../Theme"
|
|
4
|
+
|
|
5
|
+
QQC.Drawer {
|
|
6
|
+
id: drawerRoot
|
|
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
|
+
property bool synchronizing: false
|
|
13
|
+
|
|
14
|
+
function edgeValue(value) {
|
|
15
|
+
var name = String(value || "left")
|
|
16
|
+
if (name === "right") return Qt.RightEdge
|
|
17
|
+
if (name === "top") return Qt.TopEdge
|
|
18
|
+
if (name === "bottom") return Qt.BottomEdge
|
|
19
|
+
return Qt.LeftEdge
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function closePolicyValue(value) {
|
|
23
|
+
var names = Array.isArray(value) ? value : [value || "escape_and_outside"]
|
|
24
|
+
var result = 0
|
|
25
|
+
for (var index = 0; index < names.length; index++) {
|
|
26
|
+
var name = String(names[index])
|
|
27
|
+
if (name === "none") continue
|
|
28
|
+
if (name === "escape" || name === "escape_and_outside") result |= QQC.Popup.CloseOnEscape
|
|
29
|
+
if (name === "outside" || name === "escape_and_outside") result |= QQC.Popup.CloseOnPressOutside
|
|
30
|
+
if (name === "outside_parent") result |= QQC.Popup.CloseOnPressOutsideParent
|
|
31
|
+
if (name === "release_outside") result |= QQC.Popup.CloseOnReleaseOutside
|
|
32
|
+
if (name === "release_outside_parent") result |= QQC.Popup.CloseOnReleaseOutsideParent
|
|
33
|
+
}
|
|
34
|
+
return result
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function syncOpenState() {
|
|
38
|
+
if (requestedOpen === opened) return
|
|
39
|
+
synchronizing = true
|
|
40
|
+
if (requestedOpen) open()
|
|
41
|
+
else close()
|
|
42
|
+
synchronizing = false
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
edge: edgeValue(renderer.prop("edge", "left"))
|
|
46
|
+
modal: renderer.prop("modal", true) !== false
|
|
47
|
+
dim: renderer.prop("dim", modal) !== false
|
|
48
|
+
interactive: renderer.prop("interactive", true) !== false
|
|
49
|
+
dragMargin: Number(renderer.prop("drag_margin", Qt.styleHints.startDragDistance))
|
|
50
|
+
closePolicy: closePolicyValue(renderer.prop("close_policy", "escape_and_outside"))
|
|
51
|
+
width: Number(renderer.prop("width", edge === Qt.LeftEdge || edge === Qt.RightEdge ? 360 : 640))
|
|
52
|
+
height: Number(renderer.prop("height", edge === Qt.TopEdge || edge === Qt.BottomEdge ? 280 : 640))
|
|
53
|
+
enabled: renderer.prop("enabled", true) !== false
|
|
54
|
+
padding: Number(renderer.prop("padding", Style.spacing.lg))
|
|
55
|
+
|
|
56
|
+
background: Rectangle {
|
|
57
|
+
color: renderer.prop("background", Color.background)
|
|
58
|
+
radius: Number(renderer.prop("radius", Style.cornerRadius))
|
|
59
|
+
border.width: String(renderer.prop("border_color", "")).length > 0 ? Style.normalBorderWidth : 0
|
|
60
|
+
border.color: renderer.prop("border_color", "transparent")
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
contentItem: Loader {
|
|
64
|
+
sourceComponent: drawerRoot.contentLayout === "row" ? rowContent
|
|
65
|
+
: (drawerRoot.contentLayout === "stack" ? stackContent : columnContent)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
Component {
|
|
69
|
+
id: columnContent
|
|
70
|
+
Column {
|
|
71
|
+
spacing: Number(renderer.prop("spacing", Style.spacing.md))
|
|
72
|
+
Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent }
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
Component {
|
|
77
|
+
id: rowContent
|
|
78
|
+
Row {
|
|
79
|
+
spacing: Number(renderer.prop("spacing", Style.spacing.md))
|
|
80
|
+
Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent }
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
Component {
|
|
85
|
+
id: stackContent
|
|
86
|
+
Item {
|
|
87
|
+
Repeater { model: renderer.node.children || []; delegate: renderer.childDelegateComponent }
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
Component.onCompleted: syncOpenState()
|
|
92
|
+
onRequestedOpenChanged: syncOpenState()
|
|
93
|
+
onOpened: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "open",
|
|
94
|
+
{ value: true, position: position })
|
|
95
|
+
onClosed: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "close",
|
|
96
|
+
{ value: false, position: position })
|
|
97
|
+
onAboutToShow: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "about_to_show", {})
|
|
98
|
+
onAboutToHide: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "about_to_hide", {})
|
|
99
|
+
onPositionChanged: {
|
|
100
|
+
if (renderer.subscribed("position_change"))
|
|
101
|
+
renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "position_change", { value: position })
|
|
102
|
+
}
|
|
103
|
+
onVisibleChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
|
|
104
|
+
visible ? "show" : "hide", {})
|
|
105
|
+
onActiveFocusChanged: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId,
|
|
106
|
+
activeFocus ? "focus" : "blur", {})
|
|
107
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import QtQuick
|
|
2
|
+
|
|
3
|
+
Item {
|
|
4
|
+
id: dropRoot
|
|
5
|
+
property var renderer: null
|
|
6
|
+
implicitWidth: Number(renderer ? renderer.prop("width", contentHost.childrenRect.width) : 160)
|
|
7
|
+
implicitHeight: Number(renderer ? renderer.prop("height", contentHost.childrenRect.height) : 100)
|
|
8
|
+
Item { id: contentHost; anchors.fill: parent; Repeater { model: renderer ? (renderer.node.children || []) : []; delegate: renderer.childDelegateComponent } }
|
|
9
|
+
DropArea {
|
|
10
|
+
anchors.fill: parent
|
|
11
|
+
enabled: renderer && renderer.prop("enabled", true) !== false
|
|
12
|
+
keys: renderer ? renderer.prop("keys", []) : []
|
|
13
|
+
function payload(drag) { return { x: drag.x, y: drag.y, keys: drag.keys, formats: drag.formats, text: drag.hasText ? drag.text : null, urls: drag.hasUrls ? drag.urls.map(String) : [] } }
|
|
14
|
+
onEntered: function(drag) { renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "enter", payload(drag)) }
|
|
15
|
+
onPositionChanged: function(drag) { renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "move", payload(drag)) }
|
|
16
|
+
onExited: renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "exit", {})
|
|
17
|
+
onDropped: function(drop) { renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "drop", payload(drop)); drop.acceptProposedAction() }
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
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; shadowEnabled: true
|
|
11
|
+
shadowBlur: Number(renderer.prop("blur", 1)); blurMax: Number(renderer.prop("maximum", 32)); blurMultiplier: Number(renderer.prop("multiplier", 1))
|
|
12
|
+
shadowHorizontalOffset: Number(renderer.prop("horizontal_offset", 0)); shadowVerticalOffset: Number(renderer.prop("vertical_offset", 4))
|
|
13
|
+
shadowColor: renderer.prop("color", "black"); shadowOpacity: Number(renderer.prop("opacity", 0.6)); shadowScale: Number(renderer.prop("scale", 1))
|
|
14
|
+
autoPaddingEnabled: renderer.prop("auto_padding", true) !== false
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -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.Dropdown {
|
|
10
|
+
required property var renderer
|
|
11
|
+
label: renderer.escapeAutoText(renderer.prop("label", "")); value: String(renderer.prop("value", "")); options: renderer.prop("options", [])
|
|
12
|
+
width: Number(renderer.prop("width", 240)); foreground: renderer.prop("foreground", renderer.foreground)
|
|
13
|
+
background: renderer.prop("background", Color.popups.background); popupBorder: renderer.prop("popup_border", Color.popups.border)
|
|
14
|
+
accent: renderer.prop("accent", Color.accent); fontFamily: String(renderer.prop("font_family", renderer.fontFamily))
|
|
15
|
+
rowHeight: Number(renderer.prop("row_height", Style.spacing.controlHeight)); popupRowHeight: Number(renderer.prop("popup_row_height", Style.spacing.popupRowHeight))
|
|
16
|
+
showLabel: renderer.prop("show_label", true) !== false; hasCursor: renderer.prop("cursor", false) === true
|
|
17
|
+
onChanged: function(value) { renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "change", { value: value }) }
|
|
18
|
+
onOptionHovered: function(value) { renderer.bridge.sendEvent(renderer.surfaceName, renderer.controlId, "hover", { value: value }) }
|
|
19
|
+
}
|