Added Tab Bar and animations
This commit is contained in:
@@ -6,6 +6,7 @@ import { VerticalBox, Button } from "std-widgets.slint";
|
|||||||
import { Palette } from "palette.slint";
|
import { Palette } from "palette.slint";
|
||||||
import { DataWindow } from "components/data-window.slint";
|
import { DataWindow } from "components/data-window.slint";
|
||||||
import { MapWindow } from "components/map-window.slint";
|
import { MapWindow } from "components/map-window.slint";
|
||||||
|
import { MinimizedTab } from "components/minimized-tab.slint";
|
||||||
|
|
||||||
component StatusBadge {
|
component StatusBadge {
|
||||||
in property <string> label;
|
in property <string> label;
|
||||||
@@ -43,6 +44,8 @@ component MenuButton {
|
|||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
|
|
||||||
background: area.pressed ? Palette.brand : area.has-hover ? Palette.bg-hover : Palette.bg-main;
|
background: area.pressed ? Palette.brand : area.has-hover ? Palette.bg-hover : Palette.bg-main;
|
||||||
|
animate background { duration: 100ms; }
|
||||||
|
animate border-color { duration: 100ms; }
|
||||||
|
|
||||||
HorizontalLayout {
|
HorizontalLayout {
|
||||||
padding-left: 12px;
|
padding-left: 12px;
|
||||||
@@ -123,6 +126,21 @@ export component AppWindow inherits Window {
|
|||||||
background: Palette.bg-secondary;
|
background: Palette.bg-secondary;
|
||||||
horizontal-stretch: 1;
|
horizontal-stretch: 1;
|
||||||
vertical-stretch: 1;
|
vertical-stretch: 1;
|
||||||
|
VerticalLayout {
|
||||||
|
padding-top: 4px;
|
||||||
|
height: 100%;
|
||||||
|
width: 28px;
|
||||||
|
x: parent.width - self.width + 2px;
|
||||||
|
alignment: start;
|
||||||
|
MinimizedTab {
|
||||||
|
name: "Spark Advance";
|
||||||
|
}
|
||||||
|
|
||||||
|
MinimizedTab {
|
||||||
|
name: "Voltage Graph";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DataWindow {
|
DataWindow {
|
||||||
x: 0;
|
x: 0;
|
||||||
y: 0;
|
y: 0;
|
||||||
@@ -149,7 +167,7 @@ export component AppWindow inherits Window {
|
|||||||
y: 0;
|
y: 0;
|
||||||
data-min: 2200;
|
data-min: 2200;
|
||||||
data-max: 9400;
|
data-max: 9400;
|
||||||
name: "Config 1 - Injection Period";
|
name: "Injection Period";
|
||||||
map-axis: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100];
|
map-axis: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100];
|
||||||
rpm-axis: [
|
rpm-axis: [
|
||||||
250,
|
250,
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ export component DataWindow {
|
|||||||
border-width: 2px;
|
border-width: 2px;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
vertical-stretch: 1;
|
vertical-stretch: 1;
|
||||||
|
animate border-color { duration: 200ms; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -139,6 +139,7 @@ export component MapWindow {
|
|||||||
border-width: 2px;
|
border-width: 2px;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
vertical-stretch: 1;
|
vertical-stretch: 1;
|
||||||
|
animate border-color { duration: 200ms; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
40
ui/components/minimized-tab.slint
Normal file
40
ui/components/minimized-tab.slint
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
// Copyright (C) 2026 Hector van der Aa <hector@h3cx.dev>
|
||||||
|
// Copyright (C) 2026 Association Exergie <association.exergie@gmail.com>
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
import { Palette } from "../palette.slint";
|
||||||
|
|
||||||
|
export component MinimizedTab {
|
||||||
|
in property <string> name;
|
||||||
|
height: label.width + 20px;
|
||||||
|
VerticalLayout {
|
||||||
|
padding-bottom: 4px;
|
||||||
|
Rectangle {
|
||||||
|
border-top-left-radius: 8px;
|
||||||
|
border-bottom-left-radius: 8px;
|
||||||
|
border-width: 2px;
|
||||||
|
border-color: area.has-hover ? Palette.brand : Palette.border;
|
||||||
|
background: area.pressed ? Palette.brand : area.has-hover ? Palette.bg-hover : Palette.bg-main;
|
||||||
|
|
||||||
|
animate background { duration: 100ms; }
|
||||||
|
animate border-color { duration: 100ms; }
|
||||||
|
|
||||||
|
label := Text {
|
||||||
|
text: name;
|
||||||
|
transform-origin: { x: self.width / 2, y: self.height / 2 };
|
||||||
|
transform-rotation: -90deg;
|
||||||
|
color: Palette.text-primary;
|
||||||
|
font-size: 14px;
|
||||||
|
|
||||||
|
horizontal-alignment: center;
|
||||||
|
vertical-alignment: center;
|
||||||
|
|
||||||
|
x: parent.width / 2 - self.width / 2 + 1px;
|
||||||
|
y: parent.height / 2 - self.height / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
area := TouchArea {
|
||||||
|
mouse-cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user