New Parch Welcome written in slint and rust #33

Merged
sohrab merged 3 commits from slint into main 2024-04-12 13:14:17 -04:00
46 changed files with 5547 additions and 592 deletions

4833
Cargo.lock generated Normal file

File diff suppressed because it is too large Load diff

20
Cargo.toml Normal file
View file

@ -0,0 +1,20 @@
[package]
name = "parch-welcome"
version = "2.0.0"
authors = ["DanielcoderX <danielcoderx@keemail.me>"]
edition = "2021"
build = "build.rs"
[dependencies]
open = "5.1.2"
slint = "1.4"
[build-dependencies]
slint-build = "1.4"
[profile.release]
lto = true
panic = "abort"
strip = true
codegen-units = 1
opt-level = "s"

4
build.rs Normal file
View file

@ -0,0 +1,4 @@
fn main() {
let config = slint_build::CompilerConfiguration::new().with_style("native".into());
let _ = slint_build::compile_with_config("ui/parch-welcome.slint", config);
}

View file

@ -1,36 +1,24 @@
# Maintainer: ParchLinux
pkgname=parch-welcome
arch=('x86_64')
pkgver=1.0.0
pkgver=2.0.0
pkgrel=1
pkgdesc='Parch dorood (/do-rood/, درود, pronunciation) which is Persian word for "Greetings", is a welcome app in the Parch distribution.'
url="https://github.com/parchlinux/${pkgname}"
license=('GPL')
makedepends=("git")
depends=("qt6-base" "qt6-declarative" "base-devel" "qt6-svg")
conflicts=("${pkgname}")
provides=("${pkgname}")
source=("${pkgname}::git+${url}")
#source=("${pkgname}.tar.gz")
pkgdesc="Welcome application for Parch Linux"
arch=('x86_64')
url="https://github.com/parchlinux/parch-welcome"
license=('GPL-3')
depends=('gcc-libs')
makedepends=('git' 'rust')
source=("$pkgname::git+$url#branch=slint")
md5sums=('SKIP')
build() {
_workdir="${srcdir}/${pkgname}/"
mkdir ${_workdir}/bin
cd ${_workdir}/bin
qmake6 ..
make -j$(nproc)
cp ./parch-welcome ../
cd "$srcdir/$pkgname"
cargo build --release
}
pkgver() {
cd "${srcdir}/${pkgname}"
( set -o pipefail
git describe --long 2>/dev/null | sed 's/\([^-]*-g\)/r\1/;s/-/./g' ||
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
)
}
package() {
cd "$srcdir/$pkgname"
# copy license
install -d "${pkgdir}/usr/share/licenses/${pkgname}"
@ -39,12 +27,12 @@ package() {
# copy logo
install -Dm644 "${srcdir}/${pkgname}/resources/logo.png" "${pkgdir}/usr/share/icons/${pkgname}.png"
# copy welcome binfile into /bin
install -Dm755 "${srcdir}/${pkgname}/${pkgname}" "${pkgdir}/usr/bin/${pkgname}"
# copy autostart desktop file into autostart dir
# copy autostart desktop file
install -Dm644 "${srcdir}/${pkgname}/resources/autostart.desktop" "${pkgdir}/etc/xdg/autostart/${pkgname}.desktop"
# copy appliction desktop file into autostart dir
# copy application desktop file
install -Dm644 "${srcdir}/${pkgname}/resources/application.desktop" "${pkgdir}/usr/share/applications/${pkgname}.desktop"
# install binary
install -Dm755 "target/release/$pkgname" "$pkgdir/usr/bin/$pkgname"
}

View file

@ -1,11 +0,0 @@
QT += core widgets gui qml quickcontrols2
CONFIG += release
TARGET = parch-welcome
TEMPLATE = app
SOURCES += src/main.cpp src/processhandler.cpp
HEADERS += src/processhandler.h
RESOURCES += src/assets/res.qrc

View file

@ -1,249 +0,0 @@
import QtQuick 6.0
import QtQuick.Controls 6.0
import QtQuick.Controls.Material 6.0
import com.parch 1.0
ApplicationWindow {
width: 900
height: 500
x: (Screen.width - width) / 2 // Center the window horizontally
y: (Screen.height - height) / 2 // Center the window vertically
flags: Qt.FramelessWindowHint
visible: true
id: parch
color: "transparent"
function link(url) {
Qt.openUrlExternally(url);
}
ProcessHandler {
id: processHandler
onProcessFinished: {
// console.log("Process finished with exit code:", exitCode, "Exit status:", exitStatus);
parch.close()
}
}
MouseArea {
anchors.fill: parent;
property variant clickPos: "1,1"
onPressed: {
clickPos = Qt.point(mouse.x, mouse.y)
}
onPositionChanged: {
var delta = Qt.point(mouse.x - clickPos.x, mouse.y - clickPos.y)
var new_x = parch.x + delta.x
var new_y = parch.y + delta.y
// Ensure the new position is within the screen boundaries
var screenWidth = Screen.width
var screenHeight = Screen.height
if (new_x < 0) {
new_x = 0
} else if (new_x + parch.width > screenWidth) {
new_x = screenWidth - parch.width
}
if (new_y < 0) {
new_y = 0
} else if (new_y + parch.height > screenHeight) {
new_y = screenHeight - parch.height
}
// Update the window position
parch.x = new_x
parch.y = new_y
}
}
Rectangle {
anchors.centerIn: parent
width: 900
height: 500
radius: 20
color: "#DD010409"
Row {
anchors.right: parent.right
anchors.top: parent.top
ToolButton {
icon.color: "white"
icon.source: "x-lg.svg"
onClicked: {
parch.close()
}
}
}
Column {
anchors.centerIn: parent
Image {
source: "ParchLogo.svg"
width: 128
height: 128
anchors.horizontalCenter: parent.horizontalCenter
}
Rectangle {
width: parent.width
height: 12
color: "transparent"
}
Text {
text: "<strong>Parch Linux</strong>"
color: "white"
font.family: "Ubuntu"
font.pixelSize: 30
anchors.horizontalCenter: parent.horizontalCenter
}
Rectangle {
width: parent.width
height: 8
color: "transparent"
}
Text {
text: "<strong><font color='#3b82f6'>Parch Linux</font></strong> is an open-source, Arch-based Linux distribution,"
color: "white"
verticalAlignment: Text.AlignVCenter
font.family: "Ubuntu Light"
font.pixelSize: 14
anchors.horizontalCenter: parent.horizontalCenter
}
Text {
color: "white"
text: "that tried to be pretty, easy to use, light, fast and stable."
verticalAlignment: Text.AlignVCenter
font.family: "Ubuntu Light"
font.pixelSize: 14
anchors.horizontalCenter: parent.horizontalCenter
}
Rectangle {
width: parent.width
height: 8
color: "transparent"
}
Row {
anchors.horizontalCenter: parent.horizontalCenter
ToolButton {
icon.color: "white"
icon.source: "github.svg"
objectName: "b1"
onClicked: {
link("https://github.com/parchlinux")
}
}
ToolButton {
icon.color: "white"
icon.source: "tw.svg"
objectName: "b2"
onClicked: {
link("https://twitter.com/bssfoss")
}
}
ToolButton {
icon.color: "white"
icon.source: "tele.svg"
objectName: "b3"
onClicked: {
link("https://t.me/parchlinux")
}
}
ToolButton {
icon.color: "white"
icon.source: "discord.svg"
objectName: "b4"
onClicked: {
link("https://discord.gg/9RW5cRByAM")
}
}
ToolButton {
icon.color: "white"
icon.source: "masto.svg"
objectName: "b5"
onClicked: {
link("https://mas.to/@bssfoss")
}
}
ToolButton {
icon.color: "white"
icon.source: "cafe.svg"
objectName: "b6"
// Replace with Daramet platform due to Coffeete platform is unavailable
onClicked: {
link("https://daramet.com/parchlinux")
}
}
ToolButton {
icon.color: "white"
icon.source: "website.svg"
objectName: "b7"
onClicked: {
link("https://parchlinux.ir")
}
}
ToolButton {
icon.color: "white"
icon.source: "book.svg"
objectName: "b8"
onClicked: {
link("https://parchlinux.ir/parchwiki/")
}
}
}
Rectangle {
width: parent.width
height: 20
color: "transparent"
}
Rectangle {
color: "#4063eb"
width: 160
height: 40
radius: 15
anchors.horizontalCenter: parent.horizontalCenter
ToolButton {
anchors.fill: parent
objectName: "install"
id: installBtn
onClicked: {
// Start the process through the ProcessHandler object
processHandler.startProcess();
}
}
Row {
anchors.centerIn: parent
Rectangle {
width: 18
height: 20
color: "transparent"
}
Text {
color: "white"
font.family: "Ubuntu"
text: "Install Parch"
font.pixelSize: 14
anchors.verticalCenter: parent.verticalCenter
id: installBtnText
}
ToolButton {
width: 40
height: 40
anchors.verticalCenter: parent.verticalCenter
icon.color: "white"
icon.source: "install.svg"
onClicked: {
// Start the process through the ProcessHandler object
processHandler.startProcess();
}
}
}
}
}
}
}

View file

@ -1,187 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="1024.0px"
height="1024.0px"
viewBox="0 0 1024.0 1024.0"
version="1.1"
id="SVGRoot"
sodipodi:docname="Parch_LOGO_N1.svg"
inkscape:export-filename="Parch_LOGO_N1.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview433"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
inkscape:document-units="px"
showgrid="false"
inkscape:zoom="0.46769781"
inkscape:cx="215.95141"
inkscape:cy="489.6324"
inkscape:window-width="1366"
inkscape:window-height="705"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
type="xygrid"
id="grid556" />
</sodipodi:namedview>
<defs
id="defs428">
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient7364"
id="linearGradient7366"
x1="881.64832"
y1="1399.6702"
x2="1086.3264"
y2="1551.4346"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(2.00014,-2.000019)" />
<linearGradient
inkscape:collect="always"
id="linearGradient7364">
<stop
style="stop-color:#25d8a3;stop-opacity:1;"
offset="0"
id="stop7360" />
<stop
style="stop-color:#189c76;stop-opacity:1;"
offset="1"
id="stop7362" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6175"
id="linearGradient6177"
x1="764.72528"
y1="1331.642"
x2="1072.3627"
y2="1186.5356"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-2,2)" />
<linearGradient
inkscape:collect="always"
id="linearGradient6175">
<stop
style="stop-color:#15b7ba;stop-opacity:1;"
offset="0"
id="stop6171" />
<stop
style="stop-color:#017fd1;stop-opacity:1;"
offset="1"
id="stop6173" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6183"
id="linearGradient6185"
x1="692.88007"
y1="1434.4056"
x2="959.86017"
y2="1344.1935"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient6183">
<stop
style="stop-color:#003baf;stop-opacity:1;"
offset="0"
id="stop6179" />
<stop
style="stop-color:#1d47d1;stop-opacity:1;"
offset="1"
id="stop6181" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6157"
id="linearGradient6159"
x1="822.84015"
y1="1035.7853"
x2="1085.449"
y2="807.15295"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-2,4)" />
<linearGradient
inkscape:collect="always"
id="linearGradient6157">
<stop
style="stop-color:#189974;stop-opacity:1;"
offset="0"
id="stop6153" />
<stop
style="stop-color:#26dda7;stop-opacity:1;"
offset="1"
id="stop6155" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6165"
id="linearGradient6167"
x1="646.99298"
y1="1169.6515"
x2="963.47876"
y2="1103.2811"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0.948016,2.425276)" />
<linearGradient
inkscape:collect="always"
id="linearGradient6165">
<stop
style="stop-color:#1b66bd;stop-opacity:1;"
offset="0"
id="stop6163" />
<stop
style="stop-color:#34aee1;stop-opacity:1;"
offset="1"
id="stop6161" />
</linearGradient>
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g351"
transform="matrix(1.2617269,0,0,1.2617269,-615.56887,-1016.6823)">
<path
style="fill:url(#linearGradient7366);fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="m 907.42424,1616.2488 c -24.0017,-2.3297 -52.02635,-12.6231 -78.85555,-28.9638 -19.1068,-11.6372 -38.2733,-27.4597 -58.392,-48.2042 -18.2162,-18.7831 -32.4842,-36.7342 -49.1463,-61.8328 -11.964,-18.022 256.84077,-146.9291 265.90907,-151.2971 5.559,-2.6776 9.7948,3.391 77.01334,-7.6092 23.5832,-3.8593 47.0328,-7.1016 52.1103,-7.2049 11.0834,-0.2258 10.575,-0.8697 14.9478,18.9334 9.5134,43.0829 11.2104,105.2552 3.6828,134.9296 -12.2746,48.3882 -47.2143,95.0359 -92.2301,123.1357 -17.1131,10.6824 -40.2247,20.473 -58.20424,24.6566 -18.5624,4.3192 -52.3089,5.8373 -76.83512,3.4567 z"
id="path3231"
sodipodi:nodetypes="ssssssssssss" />
<path
style="fill:url(#linearGradient6177);fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
d="m 753.09235,1327.4446 c 14.69201,-16.956 20.24712,-23.1265 35.64256,-39.5902 37.37125,-39.9644 101.19042,-100.893 193.48705,-184.7236 L 1005.4868,1082 l 14.6318,23.0603 c 17.5013,27.5828 38.2795,62.1034 50.2441,83.4753 10.9347,19.5324 30.0316,55.7258 29.9881,56.8352 -0.04,1.0309 -4.4647,4.2189 -58.0939,41.86 -52.19334,36.6331 -63.14394,41.9779 -64.54684,43.9445 -1.009,1.4143 -4.1223,0.4021 -97.93319,1.3997 -56.13568,0.5971 -108.8089,1.0771 -117.05159,1.067 l -14.98672,-0.019 z"
id="path3769"
sodipodi:nodetypes="ssscsscsssccs" />
<path
style="fill:url(#linearGradient6185);fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
d="m 731.8397,1496.163 c -10.00346,-13.6029 -27.81008,-41.8293 -38.95966,-61.7574 l -5.23231,-9.3519 1.98771,-3.9211 c 4.31553,-8.5131 25.20717,-42.5347 32.62288,-53.1258 4.31725,-6.1658 11.96362,-16.4625 16.99192,-22.8816 l 9.1424,-11.671 13.37122,-0.046 c 7.35417,-0.026 58.8885,-0.5917 114.52072,-1.2585 55.63223,-0.6665 101.27368,-1.105 101.42548,-0.9744 0.1517,0.1304 -7.8807,5.9889 -17.8499,13.0182 -43.89257,30.9492 -223.75444,156.7755 -224.10191,156.7755 -0.21145,0 -1.97479,-2.1625 -3.91855,-4.8057 z"
id="path4642" />
<path
style="fill:url(#linearGradient6159);fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
d="m 964.42676,1105.7064 c -12.05629,-5.5736 -124.78074,-56.6746 -136.07706,-61.6875 -4.37064,-1.9395 -7.74994,-3.8447 -7.50956,-4.2336 1.12494,-1.8202 -7.65234,-12.5683 -33.49963,-41.0217 -9.37559,-10.3209 -24.39764,-26.9662 -33.38233,-36.98955 l -16.3358,-18.22421 26.91016,-26.68073 c 27.07406,-26.84323 40.7116,-38.647 60.14764,-52.05987 33.95218,-23.43049 70.95902,-40.2681 111.85024,-50.89034 20.20284,-5.24805 33.85524,-7.37717 51.26124,-7.9943 22.99314,-0.81522 76.51254,2.11 95.65734,5.22837 7.8718,1.28218 21.5114,4.76773 21.5114,5.49716 0,0.34064 -4.8401,0.90754 -10.7557,1.25978 -44.3554,2.64115 -69.1623,12.18788 -93.9112,36.14093 -18.96854,18.35864 -30.68274,35.92495 -37.14614,55.70373 -8.82302,26.99962 -9.13016,54.30253 -0.9571,85.08983 6.7109,25.2799 16.1428,44.8072 40.21074,83.2507 l 2.9601,4.7282 -3.947,3.5103 c -2.1709,1.9307 -8.28954,7.4236 -13.59714,12.2063 -5.3075,4.7829 -10.4811,9.397 -11.4969,10.2535 -1.7655,1.4886 -2.2897,1.3525 -11.8933,-3.087 z"
id="path5325" />
<path
style="fill:url(#linearGradient6167);fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
d="m 663.61648,1352.5852 c -2.64202,-5.1359 -7.955,-25.2502 -11.90803,-45.0825 -2.68093,-13.4502 -3.75606,-35.3932 -3.7674,-76.8919 -0.0172,-60.5435 3.60619,-91.424 15.64669,-133.3734 9.22105,-32.1264 29.67888,-79.8984 43.31308,-101.14242 l 4.52066,-7.0438 24.55009,10.99112 c 68.96751,30.8767 239.61449,108.0897 240.34849,108.7511 0.3763,0.339 -15.6886,15.6752 -35.6998,34.0803 -46.54744,42.8119 -66.77489,61.8478 -99.2361,93.3898 -14.50185,14.0911 -26.40796,24.9807 -26.6193,24.3468 -0.475,-1.4249 -11.42936,5.427 -68.4316,42.8033 -51.3851,33.6933 -79.53897,51.6888 -80.86682,51.6888 -0.30525,0 -1.13772,-1.1328 -1.84996,-2.5172 z"
id="path5116" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.8 KiB

View file

@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-book" viewBox="0 0 16 16">
<path d="M1 2.828c.885-.37 2.154-.769 3.388-.893 1.33-.134 2.458.063 3.112.752v9.746c-.935-.53-2.12-.603-3.213-.493-1.18.12-2.37.461-3.287.811V2.828zm7.5-.141c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492V2.687zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783z"/>
</svg>

Before

Width:  |  Height:  |  Size: 783 B

View file

@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="w-6 h-6" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M.5 6a.5.5 0 0 0-.488.608l1.652 7.434A2.5 2.5 0 0 0 4.104 16h5.792a2.5 2.5 0 0 0 2.44-1.958l.131-.59a3 3 0 0 0 1.3-5.854l.221-.99A.5.5 0 0 0 13.5 6H.5ZM13 12.5a2.01 2.01 0 0 1-.316-.025l.867-3.898A2.001 2.001 0 0 1 13 12.5Z"></path>
<path d="m4.4.8-.003.004-.014.019a4.167 4.167 0 0 0-.204.31 2.327 2.327 0 0 0-.141.267c-.026.06-.034.092-.037.103v.004a.593.593 0 0 0 .091.248c.075.133.178.272.308.445l.01.012c.118.158.26.347.37.543.112.2.22.455.22.745 0 .188-.065.368-.119.494a3.31 3.31 0 0 1-.202.388 5.444 5.444 0 0 1-.253.382l-.018.025-.005.008-.002.002A.5.5 0 0 1 3.6 4.2l.003-.004.014-.019a4.149 4.149 0 0 0 .204-.31 2.06 2.06 0 0 0 .141-.267c.026-.06.034-.092.037-.103a.593.593 0 0 0-.09-.252A4.334 4.334 0 0 0 3.6 2.8l-.01-.012a5.099 5.099 0 0 1-.37-.543A1.53 1.53 0 0 1 3 1.5c0-.188.065-.368.119-.494.059-.138.134-.274.202-.388a5.446 5.446 0 0 1 .253-.382l.025-.035A.5.5 0 0 1 4.4.8Zm3 0-.003.004-.014.019a4.167 4.167 0 0 0-.204.31 2.327 2.327 0 0 0-.141.267c-.026.06-.034.092-.037.103v.004a.593.593 0 0 0 .091.248c.075.133.178.272.308.445l.01.012c.118.158.26.347.37.543.112.2.22.455.22.745 0 .188-.065.368-.119.494a3.31 3.31 0 0 1-.202.388 5.444 5.444 0 0 1-.253.382l-.018.025-.005.008-.002.002A.5.5 0 0 1 6.6 4.2l.003-.004.014-.019a4.149 4.149 0 0 0 .204-.31 2.06 2.06 0 0 0 .141-.267c.026-.06.034-.092.037-.103a.593.593 0 0 0-.09-.252A4.334 4.334 0 0 0 6.6 2.8l-.01-.012a5.099 5.099 0 0 1-.37-.543A1.53 1.53 0 0 1 6 1.5c0-.188.065-.368.119-.494.059-.138.134-.274.202-.388a5.446 5.446 0 0 1 .253-.382l.025-.035A.5.5 0 0 1 7.4.8Zm3 0-.003.004-.014.019a4.077 4.077 0 0 0-.204.31 2.337 2.337 0 0 0-.141.267c-.026.06-.034.092-.037.103v.004a.593.593 0 0 0 .091.248c.075.133.178.272.308.445l.01.012c.118.158.26.347.37.543.112.2.22.455.22.745 0 .188-.065.368-.119.494a3.198 3.198 0 0 1-.202.388 5.385 5.385 0 0 1-.252.382l-.019.025-.005.008-.002.002A.5.5 0 0 1 9.6 4.2l.003-.004.014-.019a4.149 4.149 0 0 0 .204-.31 2.06 2.06 0 0 0 .141-.267c.026-.06.034-.092.037-.103a.593.593 0 0 0-.09-.252A4.334 4.334 0 0 0 9.6 2.8l-.01-.012a5.099 5.099 0 0 1-.37-.543A1.53 1.53 0 0 1 9 1.5c0-.188.065-.368.119-.494.059-.138.134-.274.202-.388a5.446 5.446 0 0 1 .253-.382l.025-.035A.5.5 0 0 1 10.4.8Z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

View file

@ -1,3 +0,0 @@
<svg class="w-6 h-6" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16">
<path d="M13.545 2.907a13.227 13.227 0 0 0-3.257-1.011.05.05 0 0 0-.052.025c-.141.25-.297.577-.406.833a12.19 12.19 0 0 0-3.658 0 8.258 8.258 0 0 0-.412-.833.051.051 0 0 0-.052-.025c-1.125.194-2.22.534-3.257 1.011a.041.041 0 0 0-.021.018C.356 6.024-.213 9.047.066 12.032c.001.014.01.028.021.037a13.276 13.276 0 0 0 3.995 2.02.05.05 0 0 0 .056-.019c.308-.42.582-.863.818-1.329a.05.05 0 0 0-.01-.059.051.051 0 0 0-.018-.011 8.875 8.875 0 0 1-1.248-.595.05.05 0 0 1-.02-.066.051.051 0 0 1 .015-.019c.084-.063.168-.129.248-.195a.05.05 0 0 1 .051-.007c2.619 1.196 5.454 1.196 8.041 0a.052.052 0 0 1 .053.007c.08.066.164.132.248.195a.051.051 0 0 1-.004.085 8.254 8.254 0 0 1-1.249.594.05.05 0 0 0-.03.03.052.052 0 0 0 .003.041c.24.465.515.909.817 1.329a.05.05 0 0 0 .056.019 13.235 13.235 0 0 0 4.001-2.02.049.049 0 0 0 .021-.037c.334-3.451-.559-6.449-2.366-9.106a.034.034 0 0 0-.02-.019Zm-8.198 7.307c-.789 0-1.438-.724-1.438-1.612 0-.889.637-1.613 1.438-1.613.807 0 1.45.73 1.438 1.613 0 .888-.637 1.612-1.438 1.612Zm5.316 0c-.788 0-1.438-.724-1.438-1.612 0-.889.637-1.613 1.438-1.613.807 0 1.451.73 1.438 1.613 0 .888-.631 1.612-1.438 1.612Z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -1,3 +0,0 @@
<svg class="w-6 h-6" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16">
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 736 B

View file

@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 ml-2" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"></path>
</svg>

Before

Width:  |  Height:  |  Size: 311 B

View file

@ -1,3 +0,0 @@
<svg class="w-6 h-6" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16">
<path d="M11.19 12.195c2.016-.24 3.77-1.475 3.99-2.603.348-1.778.32-4.339.32-4.339 0-3.47-2.286-4.488-2.286-4.488C12.062.238 10.083.017 8.027 0h-.05C5.92.017 3.942.238 2.79.765c0 0-2.285 1.017-2.285 4.488l-.002.662c-.004.64-.007 1.35.011 2.091.083 3.394.626 6.74 3.78 7.57 1.454.383 2.703.463 3.709.408 1.823-.1 2.847-.647 2.847-.647l-.06-1.317s-1.303.41-2.767.36c-1.45-.05-2.98-.156-3.215-1.928a3.614 3.614 0 0 1-.033-.496s1.424.346 3.228.428c1.103.05 2.137-.064 3.188-.189zm1.613-2.47H11.13v-4.08c0-.859-.364-1.295-1.091-1.295-.804 0-1.207.517-1.207 1.541v2.233H7.168V5.89c0-1.024-.403-1.541-1.207-1.541-.727 0-1.091.436-1.091 1.296v4.079H3.197V5.522c0-.859.22-1.541.66-2.046.456-.505 1.052-.764 1.793-.764.856 0 1.504.328 1.933.983L8 4.39l.417-.695c.429-.655 1.077-.983 1.934-.983.74 0 1.336.259 1.791.764.442.505.661 1.187.661 2.046v4.203z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 1,000 B

View file

@ -1,16 +0,0 @@
<RCC>
<qresource prefix="/">
<file>discord.svg</file>
<file>x-lg.svg</file>
<file>tele.svg</file>
<file>cafe.svg</file>
<file>book.svg</file>
<file>github.svg</file>
<file>masto.svg</file>
<file>ParchLinux.qml</file>
<file>tw.svg</file>
<file>install.svg</file>
<file>ParchLogo.svg</file>
<file>website.svg</file>
</qresource>
</RCC>

View file

@ -1,3 +0,0 @@
<svg class="w-6 h-6" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.287 5.906c-.778.324-2.334.994-4.666 2.01-.378.15-.577.298-.595.442-.03.243.275.339.69.47l.175.055c.408.133.958.288 1.243.294.26.006.549-.1.868-.32 2.179-1.471 3.304-2.214 3.374-2.23.05-.012.12-.026.166.016.047.041.042.12.037.141-.03.129-1.227 1.241-1.846 1.817-.193.18-.33.307-.358.336a8.154 8.154 0 0 1-.188.186c-.38.366-.664.64.015 1.088.327.216.589.393.85.571.284.194.568.387.936.629.093.06.183.125.27.187.331.236.63.448.997.414.214-.02.435-.22.547-.82.265-1.417.786-4.486.906-5.751a1.426 1.426 0 0 0-.013-.315.337.337 0 0 0-.114-.217.526.526 0 0 0-.31-.093c-.3.005-.763.166-2.984 1.09z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 793 B

View file

@ -1,3 +0,0 @@
<svg class="w-6 h-6" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16">
<path d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 659 B

View file

@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-globe-americas" viewBox="0 0 16 16">
<path d="M8 0a8 8 0 1 0 0 16A8 8 0 0 0 8 0ZM2.04 4.326c.325 1.329 2.532 2.54 3.717 3.19.48.263.793.434.743.484-.08.08-.162.158-.242.234-.416.396-.787.749-.758 1.266.035.634.618.824 1.214 1.017.577.188 1.168.38 1.286.983.082.417-.075.988-.22 1.52-.215.782-.406 1.48.22 1.48 1.5-.5 3.798-3.186 4-5 .138-1.243-2-2-3.5-2.5-.478-.16-.755.081-.99.284-.172.15-.322.279-.51.216-.445-.148-2.5-2-1.5-2.5.78-.39.952-.171 1.227.182.078.099.163.208.273.318.609.304.662-.132.723-.633.039-.322.081-.671.277-.867.434-.434 1.265-.791 2.028-1.12.712-.306 1.365-.587 1.579-.88A7 7 0 1 1 2.04 4.327Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 724 B

View file

@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-x-lg" viewBox="0 0 16 16">
<path d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 320 B

View file

@ -1,29 +0,0 @@
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QResource>
#include <QQmlContext>
#include <QObject>
#include <QQuickItem>
#include <QQuickView>
#include <QProcess>
#include "processhandler.h" // Include the ProcessHandler class header
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
// Register the ProcessHandler class with the QML engine
qmlRegisterType<ProcessHandler>("com.parch", 1, 0, "ProcessHandler");
// Load the QML content from the resource
QResource::registerResource(":/resources.rcc");
// Load the QML file
engine.load(QUrl("qrc:/ParchLinux.qml"));
// Set App Icon
app.setWindowIcon(QIcon("icon.png"));
return app.exec();
}

18
src/main.rs Normal file
View file

@ -0,0 +1,18 @@
use std::process::Command;
use slint::ComponentHandle;
slint::include_modules!();
fn main() {
let appwindow = App::new().unwrap();
appwindow.global::<Globals>().on_close(move || {
std::process::exit(0);
});
appwindow.global::<Globals>().on_openUrl(move |url| {
let _ = open::that(url.as_str());
});
appwindow.global::<Globals>().on_startInstaller(move || {
let _ = Command::new("sudo").arg("-E").arg("calamares").spawn();
});
let _ = appwindow.run();
}

View file

@ -1,14 +0,0 @@
#include "processhandler.h"
ProcessHandler::ProcessHandler(QObject *parent) : QObject(parent)
{
connect(&m_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
this, &ProcessHandler::processFinished);
}
void ProcessHandler::startProcess()
{
m_process.start("sudo", QStringList() << "sh" << "/etc/calamares/launch.sh");
m_process.waitForFinished();
emit processFinished(m_process.exitCode(), m_process.exitStatus());
}

View file

@ -1,23 +0,0 @@
#ifndef PROCESSHANDLER_H
#define PROCESSHANDLER_H
#include <QObject>
#include <QProcess>
class ProcessHandler : public QObject
{
Q_OBJECT
public:
explicit ProcessHandler(QObject *parent = nullptr);
public slots:
void startProcess();
signals:
void processFinished(int exitCode, QProcess::ExitStatus exitStatus);
private:
QProcess m_process;
};
#endif // PROCESSHANDLER_H

Binary file not shown.

BIN
ui/pages/assets/close.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 B

BIN
ui/pages/assets/discord.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 959 B

BIN
ui/pages/assets/github.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 837 B

BIN
ui/pages/assets/inbox.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 530 B

BIN
ui/pages/assets/lang.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 B

BIN
ui/pages/assets/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 780 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 830 B

BIN
ui/pages/assets/twitter.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 B

Binary file not shown.

BIN
ui/pages/assets/web.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 982 B

298
ui/pages/en.slint Normal file
View file

@ -0,0 +1,298 @@
import { Button, VerticalBox, HorizontalBox, GridBox } from "std-widgets.slint";
import { Globals } from "globals.slint";
export component EnglishApp {
VerticalLayout {
HorizontalLayout {
padding-left: 30px;
padding-right: 30px;
padding-top: 10px;
height: 80px;
width: 100%;
alignment: space-between;
Rectangle {
clip: true;
TouchArea {
HorizontalBox {
alignment: center;
padding: 0px;
Image {
colorize: Globals.themeStatus;
vertical-alignment: center;
source: @image-url("assets/night-mode.png");
}
Text {
vertical-alignment: center;
horizontal-alignment: right;
text: "Dark Parch";
font-family: "Vazirmatn";
font-weight: 900;
font-size: 16px;
color: Globals.themeStatus;
}
}
clicked => {
Globals.switchTheme();
}
}
}
Rectangle { }
TouchArea {
clicked => {
Globals.close();
}
Image {
image-fit: contain;
source: @image-url("assets/close.png");
}
}
}
HorizontalLayout {
height: 275px;
alignment: center;
VerticalBox {
HorizontalBox {
alignment: center;
Image {
image-fit: fill;
width: 100.52px;
height: 166px;
source: @image-url("assets/logo.png");
}
}
Image {
height: 80px;
source: @image-url("assets/parchlinux-en.png");
}
}
}
VerticalLayout {
HorizontalBox {
Image {
colorize: Globals.themeStatus;
source: @image-url("assets/parchlinuxtext-en.png");
height: 40px;
}
}
HorizontalBox {
height: 50px;
Text {
color: Globals.themeStatus;
horizontal-alignment: center;
text: "We will be glad if you support us!";
font-size: 20px;
font-family: "Vazirmatn";
font-weight: 900;
}
}
HorizontalBox {
height: 50px;
alignment: center;
GridBox {
spacing: 30px;
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/github.png");
}
clicked => {
Globals.openUrl("https://github.com/parchlinux");
}
}
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/twitter.png");
}
clicked => {
Globals.openUrl("https://twitter.com/bssfoss");
}
}
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/telegram.png");
}
clicked => {
Globals.openUrl("https://t.me/parchlinux");
}
}
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/discord.png");
}
clicked => {
Globals.openUrl("https://discord.gg/9RW5cRByAM");
}
}
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/mastadon.png");
}
clicked => {
Globals.openUrl("https://mas.to/@bssfoss");
}
}
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/coffee-cup.png");
}
clicked => {
Globals.openUrl("https://daramet.com/parchlinux");
}
}
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/web.png");
}
clicked => {
Globals.openUrl("https://parchlinux.com");
}
}
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/open-book.png");
}
clicked => {
Globals.openUrl("https://wiki.parchlinux.com");
}
}
}
}
VerticalBox {
alignment: start;
height: 40px;
Text {
color: Globals.themeStatus;
height: 25px;
text: "Hit the button below to install Parch on your computer";
font-size: 16px;
font-family: "Vazirmatn";
horizontal-alignment: center;
vertical-alignment: center;
}
}
HorizontalLayout {
alignment: center;
TouchArea {
clicked => {
Globals.startInstaller();
}
Rectangle {
width: 144px;
height: 42px;
background: Globals.currentTheme ? white : Globals.primaryDark;
animate background, drop-shadow-color, drop-shadow-blur {
duration: 275ms;
easing: ease-in-out;
}
border-radius: 8px;
drop-shadow-color: Globals.currentTheme ? #d9d9d9 : #404040;
drop-shadow-blur: 12px;
drop-shadow-offset-x: 2px;
drop-shadow-offset-y: 2px;
HorizontalBox {
alignment: center;
Image {
colorize: Globals.currentTheme ? transparent : white;
image-fit: fill;
source: @image-url("assets/inbox.png");
}
Text {
text: "Install Parch";
font-family: "Vazirmatn";
color: Globals.currentTheme ? #0D40BF : Colors.white;
font-size: 16px;
font-weight: 900;
}
}
}
}
}
HorizontalLayout {
alignment: start;
TouchArea {
clicked => {
Globals.changeLang();
}
HorizontalBox {
padding-left: 30px;
Image {
colorize: Globals.themeStatus;
vertical-alignment: center;
source: @image-url("assets/lang.png");
}
Text {
vertical-alignment: center;
horizontal-alignment: right;
text: "English";
font-family: "Vazirmatn";
font-weight: 900;
font-size: 16px;
color: Globals.themeStatus;
}
}
}
}
}
}
}

298
ui/pages/fa.slint Normal file
View file

@ -0,0 +1,298 @@
import { Button, VerticalBox, HorizontalBox, GridBox } from "std-widgets.slint";
import { Globals } from "globals.slint";
export component PersianApp {
VerticalLayout {
HorizontalLayout {
padding-left: 30px;
padding-right: 30px;
padding-top: 10px;
height: 80px;
width: 100%;
alignment: space-between;
TouchArea {
clicked => {
Globals.close();
}
Image {
image-fit: contain;
source: @image-url("assets/close.png");
}
}
Rectangle { }
Rectangle {
clip: true;
TouchArea {
HorizontalBox {
alignment: center;
padding: 0px;
Text {
vertical-alignment: center;
horizontal-alignment: right;
text: "پارچ تاریک";
font-family: "Vazirmatn";
font-weight: 900;
font-size: 16px;
color: Globals.themeStatus;
}
Image {
colorize: Globals.themeStatus;
vertical-alignment: center;
source: @image-url("assets/night-mode.png");
}
}
clicked => {
Globals.switchTheme();
}
}
}
}
HorizontalLayout {
height: 275px;
alignment: center;
VerticalBox {
HorizontalBox {
alignment: center;
Image {
image-fit: fill;
width: 100.52px;
height: 166px;
source: @image-url("assets/logo.png");
}
}
Image {
height: 80px;
source: @image-url("assets/parchlinux.png");
}
}
}
VerticalLayout {
HorizontalBox {
Image {
colorize: Globals.themeStatus;
source: @image-url("assets/parchlinuxtext.png");
height: 40px;
}
}
HorizontalBox {
height: 50px;
Text {
color: Globals.themeStatus;
horizontal-alignment: center;
text: "!اگر از ما حمایت کنید خوشحال خواهیم شد";
font-size: 20px;
font-family: "Vazirmatn";
font-weight: 900;
}
}
HorizontalBox {
height: 50px;
alignment: center;
GridBox {
spacing: 30px;
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/github.png");
}
clicked => {
Globals.openUrl("https://github.com/parchlinux");
}
}
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/twitter.png");
}
clicked => {
Globals.openUrl("https://twitter.com/bssfoss");
}
}
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/telegram.png");
}
clicked => {
Globals.openUrl("https://t.me/parchlinux");
}
}
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/discord.png");
}
clicked => {
Globals.openUrl("https://discord.gg/9RW5cRByAM");
}
}
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/mastadon.png");
}
clicked => {
Globals.openUrl("https://mas.to/@bssfoss");
}
}
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/coffee-cup.png");
}
clicked => {
Globals.openUrl("https://daramet.com/parchlinux");
}
}
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/web.png");
}
clicked => {
Globals.openUrl("https://parchlinux.com");
}
}
TouchArea {
Image {
colorize: Globals.themeStatus;
width: 30px;
height: 30px;
source: @image-url("assets/open-book.png");
}
clicked => {
Globals.openUrl("https://wiki.parchlinux.com");
}
}
}
}
VerticalBox {
alignment: start;
height: 40px;
Text {
color: Globals.themeStatus;
height: 25px;
text: "برای نصب پارچ روی کامپیوتر خود دکمه زیر را فشار دهید";
font-size: 16px;
font-family: "Vazirmatn";
horizontal-alignment: center;
vertical-alignment: center;
}
}
HorizontalLayout {
alignment: center;
TouchArea {
clicked => {
Globals.startInstaller();
}
Rectangle {
width: 144px;
height: 42px;
background: Globals.currentTheme ? white : Globals.primaryDark;
animate background, drop-shadow-color, drop-shadow-blur {
duration: 275ms;
easing: ease-in-out;
}
border-radius: 8px;
drop-shadow-color: Globals.currentTheme ? #d9d9d9 : #404040;
drop-shadow-blur: 12px;
drop-shadow-offset-x: 2px;
drop-shadow-offset-y: 2px;
HorizontalBox {
alignment: center;
Text {
text: "نصب پارچ";
font-family: "Vazirmatn";
color: Globals.currentTheme ? #0D40BF : Colors.white;
font-size: 16px;
font-weight: 900;
}
Image {
colorize: Globals.currentTheme ? transparent : white;
image-fit: fill;
source: @image-url("assets/inbox.png");
}
}
}
}
}
HorizontalLayout {
alignment: end;
TouchArea {
clicked => {
Globals.changeLang();
}
HorizontalBox {
padding-right: 30px;
Text {
vertical-alignment: center;
horizontal-alignment: right;
text: "فارسی";
font-family: "Vazirmatn";
font-weight: 900;
font-size: 16px;
color: Globals.themeStatus;
}
Image {
colorize: Globals.themeStatus;
vertical-alignment: center;
source: @image-url("assets/lang.png");
}
}
}
}
}
}
}

26
ui/pages/globals.slint Normal file
View file

@ -0,0 +1,26 @@
export global Globals {
callback close();
callback openUrl(string);
callback startInstaller();
// True Stand for Light Theme
in-out property <bool> currentTheme: true;
// True Stand for PersianApp
in-out property <bool> isEnglishPage: true;
out property <color> lightTheme: #FAFAFA;
out property <color> darkTheme: #323232;
out property <color> primaryDark:#242424;
in-out property <color> themeStatus: primaryDark;
public function switchTheme(){
currentTheme = !currentTheme;
if themeStatus == primaryDark {
themeStatus = Colors.white;
} else {
themeStatus = primaryDark;
}
}
public function changeLang(){
isEnglishPage = !isEnglishPage;
}
}

3
ui/pages/pages.slint Normal file
View file

@ -0,0 +1,3 @@
import {EnglishApp} from "en.slint";
import {PersianApp} from "fa.slint";
export {EnglishApp,PersianApp}

27
ui/parch-welcome.slint Normal file
View file

@ -0,0 +1,27 @@
import { Button, VerticalBox, HorizontalBox, GridBox } from "std-widgets.slint";
import "pages/assets/vazirmatn.ttf";
import "pages/assets/Inter-Regular.ttf";
import {EnglishApp,PersianApp} from "pages/pages.slint";
import { Globals } from "pages/globals.slint";
// ReExport for Native access
export { Globals }
export component App inherits Window {
width: 949px;
height: 650px;
no-frame: true;
background: transparent;
Rectangle {
border-radius: 15px;
background: Globals.currentTheme ? Globals.lightTheme : Globals.darkTheme;
animate background {
duration: 275ms;
easing: ease-in-out;
}
VerticalLayout {
if Globals.isEnglishPage: EnglishApp { }
if !Globals.isEnglishPage: PersianApp { }
}
}
}