// Copyright © SixtyFPS GmbH // SPDX-License-Identifier: MIT import { Page } from "page.slint"; import { OverviewAdapter } from "overview.slint"; import { UsageAdapter } from "usage.slint"; import { WeatherAdapter } from "weather.slint"; import { BalanceAdapter } from "balance.slint"; import { GroupBox, Value, ValueDisplay, BarChart, BarTileModel, Tile, BarTiles, BalanceChart } from "../widgets/widgets.slint"; export component ValueTile { in property title <=> i-group-box.title; in property <[Value]> model <=> i-value-display.model; in property alternative-colors <=> i-value-display.alternative-colors; in property active; i-group-box := GroupBox { preferred-width: 100%; preferred-height: 100%; i-value-display := ValueDisplay { active: root.active; } } } export component BarChartTile { in property title <=> i-group-box.title; in property <[Value]> value-model <=> i-value-display.model; in property <[float]> model <=> i-bar-chart.model; in property min <=> i-bar-chart.min; in property max <=> i-bar-chart.max; in property active; height: i-group-box.min-height; i-group-box := GroupBox { preferred-width: 100%; min-height: 124px; i-value-display := ValueDisplay { width: 100%; alternative-colors: true; active: root.active; vertical: true; } i-bar-chart := BarChart { horizontal-stretch: 1; } } } export component WeatherTile { in property title <=> i-group-box.title; in property current-temperature-icon <=> i-tile.icon; in property current-temperature <=> i-tile.value; in property current-day <=> i-tile.text; in property current-weather-description <=> i-tile.sub-text; in property <[BarTileModel]> week-model <=> i-bar-tiles.model; i-group-box := GroupBox { spacing: 1px; i-tile := Tile {} i-bar-tiles := BarTiles {} } } export component BalanceTile { in property <[string]> x-axis-model; in property <[int]> y-axis-model; in property <[float]> model; in property min; in property max; in property y-unit; in property title; GroupBox { title: root.title; BalanceChart { x-axis-model: root.x-axis-model; y-axis-model: root.y-axis-model; model: root.model; min: root.min; max: root.max; y-unit: root.y-unit; } } } export component Dashboard inherits Page { GridLayout { padding-left: 20px; padding-right: 20px; padding-top: 20px; padding-bottom: 60px; spacing: 20px; Row { ValueTile { title: OverviewAdapter.production-title; model: OverviewAdapter.production-model; active: root.active; } ValueTile { title: OverviewAdapter.self-consumption-title; model: OverviewAdapter.self-consumption-model; alternative-colors: true; active: root.active; } } Row { BalanceTile { x-axis-model <=> BalanceAdapter.x-axis-model; y-axis-model <=> BalanceAdapter.y-axis-model; model <=> BalanceAdapter.model; min <=> BalanceAdapter.min; max <=> BalanceAdapter.max; y-unit <=> BalanceAdapter.y-unit; title <=> BalanceAdapter.title; } WeatherTile { title <=> WeatherAdapter.title; current-temperature-icon <=> WeatherAdapter.current-temperature-icon; current-temperature <=> WeatherAdapter.current-temperature; current-day <=> WeatherAdapter.current-day; current-weather-description <=> WeatherAdapter.current-weather-description; week-model <=> WeatherAdapter.week-model; } } Row { BarChartTile { colspan: 2; title: UsageAdapter.title; model: UsageAdapter.model; min: UsageAdapter.min; max: UsageAdapter.max; value-model: UsageAdapter.overview-model; active: root.active; } } } }