feat(Sandbox): add visual test setup page for StatusImageCropPanel

Other improvements:

- save state for theme switcher and last selected page
- add optional fill all test space for pages

fixes: 5401
This commit is contained in:
Stefan 2022-04-07 21:38:47 +03:00 committed by Michał Cieślak
parent 18ecb2b140
commit 59fc0a6669
6 changed files with 141 additions and 13 deletions

View File

@ -7,6 +7,8 @@ Item {
id: themeSwitchWrapper id: themeSwitchWrapper
signal checkedChanged() signal checkedChanged()
property alias lightThemeEnabled: switchControl.checked
width: themeSwitch.width width: themeSwitch.width
height: themeSwitch.height height: themeSwitch.height
@ -26,6 +28,7 @@ Item {
} }
StatusSwitch { StatusSwitch {
id: switchControl
onCheckedChanged: themeSwitchWrapper.checkedChanged() onCheckedChanged: themeSwitchWrapper.checkedChanged()
StatusToolTip { StatusToolTip {

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

View File

@ -11,6 +11,11 @@ int main(int argc, char *argv[])
#endif #endif
SandboxApp app(argc, argv); SandboxApp app(argc, argv);
app.setOrganizationName("Status");
app.setOrganizationDomain("status.im");
app.setApplicationName("Sandbox");
app.startEngine(); app.startEngine();
return app.exec(); return app.exec();

View File

@ -2,6 +2,8 @@ import QtQuick 2.14
import QtQuick.Window 2.14 import QtQuick.Window 2.14
import QtQuick.Controls 2.14 import QtQuick.Controls 2.14
import QtGraphicalEffects 1.13 import QtGraphicalEffects 1.13
import QtQuick.Layouts 1.14
import Qt.labs.settings 1.0
import Sandbox 0.1 import Sandbox 0.1
@ -31,10 +33,7 @@ StatusWindow {
property real factor: 1.0 property real factor: 1.0
Component.onCompleted: { Component.onCompleted: rootWindow.updatePosition()
Theme.palette = lightTheme
rootWindow.updatePosition();
}
QtObject { QtObject {
id: appSectionType id: appSectionType
@ -110,12 +109,10 @@ StatusWindow {
anchors.topMargin: 32 anchors.topMargin: 32
anchors.right: parent.right anchors.right: parent.right
anchors.rightMargin: 32 anchors.rightMargin: 32
onCheckedChanged: { lightThemeEnabled: storeSettings.lightTheme
if (Theme.palette === rootWindow.lightTheme) { onLightThemeEnabledChanged: {
Theme.palette = rootWindow.darkTheme Theme.palette = lightThemeEnabled ? rootWindow.darkTheme : rootWindow.lightTheme
} else { storeSettings.lightTheme = lightThemeEnabled
Theme.palette = rootWindow.lightTheme
}
} }
} }
} }
@ -126,11 +123,13 @@ StatusWindow {
StatusAppTwoPanelLayout { StatusAppTwoPanelLayout {
id: mainPageView id: mainPageView
function page(name) { function page(name, fillPage) {
storeSettings.fillPage = fillPage ? true : false
viewLoader.source = Qt.resolvedUrl("./pages/" + name + "Page.qml"); viewLoader.source = Qt.resolvedUrl("./pages/" + name + "Page.qml");
} }
function control(name) { function control(name) {
viewLoader.source = Qt.resolvedUrl("./controls/" + name + ".qml"); viewLoader.source = Qt.resolvedUrl("./controls/" + name + ".qml");
storeSettings.fillPage = false
} }
leftPanel: Item { leftPanel: Item {
@ -303,6 +302,11 @@ StatusWindow {
selected: viewLoader.source.toString().includes(title) selected: viewLoader.source.toString().includes(title)
onClicked: mainPageView.page(title); onClicked: mainPageView.page(title);
} }
StatusNavigationListItem {
title: "StatusImageCropPanel"
selected: viewLoader.source.toString().includes(title)
onClicked: mainPageView.page(title, true);
}
} }
} }
} }
@ -310,8 +314,11 @@ StatusWindow {
rightPanel: Item { rightPanel: Item {
id: rightPanel id: rightPanel
anchors.fill: parent anchors.fill: parent
ScrollView { ScrollView {
visible: !storeSettings.fillPage
anchors.fill: parent anchors.fill: parent
anchors.topMargin: 64
contentHeight: (pageWrapper.height + pageWrapper.anchors.topMargin) * rootWindow.factor contentHeight: (pageWrapper.height + pageWrapper.anchors.topMargin) * rootWindow.factor
contentWidth: (pageWrapper.width * rootWindow.factor) contentWidth: (pageWrapper.width * rootWindow.factor)
clip: true clip: true
@ -320,14 +327,16 @@ StatusWindow {
id: pageWrapper id: pageWrapper
width: rightPanel.width width: rightPanel.width
anchors.top: parent.top anchors.top: parent.top
anchors.topMargin: 64
height: Math.max(rootWindow.height, viewLoader.height + 128) height: Math.max(rootWindow.height, viewLoader.height + 128)
scale: rootWindow.factor scale: rootWindow.factor
Loader { Loader {
id: viewLoader id: viewLoader
active: !storeSettings.fillPage
anchors.centerIn: parent anchors.centerIn: parent
source: mainPageView.control("Icons") source: storeSettings.selected.length === 0 ? mainPageView.control("Icons") : storeSettings.selected
onSourceChanged: { onSourceChanged: {
storeSettings.selected = viewLoader.source
if (source.toString().includes("Icons")) { if (source.toString().includes("Icons")) {
item.iconColor = Theme.palette.primaryColor1; item.iconColor = Theme.palette.primaryColor1;
} }
@ -335,6 +344,15 @@ StatusWindow {
} }
} }
} }
Loader {
active: storeSettings.fillPage
anchors.fill: parent
anchors.topMargin: 64
visible: storeSettings.fillPage
clip: true
source: viewLoader.source
}
} }
} }
} }
@ -452,4 +470,11 @@ StatusWindow {
rootWindow.toggleFullScreen() rootWindow.toggleFullScreen()
} }
} }
Settings {
id: storeSettings
property string selected: ""
property bool lightTheme: true
property bool fillPage: false
}
} }

View File

@ -0,0 +1,94 @@
import QtQuick 2.14
import QtQuick.Layouts 1.14
import StatusQ.Controls 0.1
import StatusQ.Components 0.1
import QtGraphicalEffects 1.14
Item {
id: root
implicitWidth: mainLayout.implicitWidth
implicitHeight: mainLayout.implicitHeight
property var testControls: [ctrl1, ctrl2, ctrl3]
property bool globalStylePreferRound: true
ColumnLayout {
id: mainLayout
anchors.fill: parent
RowLayout {
ColumnLayout {
Text {
text: `AR: ${ctrl1.aspectRatio.toFixed(2)}`
}
StatusImageCropPanel {
id: ctrl1
Layout.fillWidth: true
Layout.fillHeight: true
source: "qrc:/demoapp/data/logo-test-image.png"
windowStyle: globalStylePreferRound ? StatusImageCrop.WindowStyle.Rounded : StatusImageCrop.WindowStyle.Rectangular
}
Text {
text: `AR: ${ctrl2.aspectRatio.toFixed(2)}`
}
StatusImageCropPanel {
id: ctrl2
Layout.fillWidth: true
Layout.fillHeight: true
source: "qrc:/demoapp/data/logo-test-image.png"
windowStyle: globalStylePreferRound ? StatusImageCrop.WindowStyle.Rectangular : StatusImageCrop.WindowStyle.Rounded
aspectRatio: 16/9
enableCheckers: true
}
}
ColumnLayout {
Text {
text: `AR: ${ctrl3.aspectRatio.toFixed(2)}`
}
StatusImageCropPanel {
id: ctrl3
Layout.fillWidth: true
Layout.fillHeight: true
source: "qrc:/demoapp/data/logo-test-image.png"
windowStyle: globalStylePreferRound ? StatusImageCrop.WindowStyle.Rounded : StatusImageCrop.WindowStyle.Rectangular
aspectRatio: 0.8
}
}
}
Shortcut {
sequence: StandardKey.ZoomIn
onActivated: {
for(let i in testControls) {
const c = testControls[i]
c.setCropRect(ctrl1.inflateRectBy(c.cropRect, -0.05))
}
}
}
Shortcut {
sequence: StandardKey.ZoomOut
onActivated: {
for(let i in testControls) {
const c = testControls[i]
c.setCropRect(ctrl1.inflateRectBy(c.cropRect, 0.05))
}
}
}
Shortcut {
sequences: ["Ctrl+W"]
onActivated: globalStylePreferRound = !globalStylePreferRound
}
}
}

View File

@ -33,6 +33,7 @@
<file>demoapp/StatusAppProfileSettingsView.qml</file> <file>demoapp/StatusAppProfileSettingsView.qml</file>
<file>demoapp/data/Models.qml</file> <file>demoapp/data/Models.qml</file>
<file>demoapp/data/qmldir</file> <file>demoapp/data/qmldir</file>
<file>demoapp/data/logo-test-image.png</file>
<file>DemoApp.qml</file> <file>DemoApp.qml</file>
<file>ThemeSwitch.qml</file> <file>ThemeSwitch.qml</file>
<file>pages/StatusColorSelectorGridPage.qml</file> <file>pages/StatusColorSelectorGridPage.qml</file>