Add reusable SquareIconWidget
- Avoid code duplication - Base square icon button component with common appearance, properties, callbacks - Refactor BatteryWidget to inherit SquareIconWidget
This commit is contained in:
parent
b0eaa42063
commit
962bed3dad
@ -1,35 +1,10 @@
|
|||||||
export component BatteryWidget {
|
import { SquareIconWidget } from "square-icon-widget.slint";
|
||||||
in property <int> bar_height;
|
|
||||||
in property <string> battery_status; // charging / discharging / notcharging / unknown
|
|
||||||
in property <int> battery_capacity; // numeric percentage
|
|
||||||
in property <string> battery_capacity_level; // critical / low / normal / high / full
|
|
||||||
in property <string> battery_icon;
|
|
||||||
|
|
||||||
callback show_battery();
|
export component BatteryWidget inherits SquareIconWidget {
|
||||||
|
in property <string> battery_status;
|
||||||
|
in property <int> battery_capacity;
|
||||||
|
in property <string> battery_capacity_level;
|
||||||
|
|
||||||
height: bar_height * 1px;
|
// Compose tooltip here
|
||||||
width: bar_height * 1px;
|
tooltip_text: "Battery: " + battery_capacity + "% (" + battery_status + ")";
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
background: touch_area.pressed ? #4a5f70
|
|
||||||
: touch_area.has-hover ? #6d8a4d
|
|
||||||
: #8e9162;
|
|
||||||
border-radius: 3px;
|
|
||||||
|
|
||||||
HorizontalLayout {
|
|
||||||
padding-left: 3px;
|
|
||||||
padding-right: 3px;
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: battery_icon;
|
|
||||||
color: white;
|
|
||||||
vertical-alignment: center;
|
|
||||||
horizontal-alignment: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
touch_area := TouchArea {
|
|
||||||
clicked => { show_battery(); }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
38
ui/square-icon-widget.slint
Normal file
38
ui/square-icon-widget.slint
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
export component SquareIconWidget {
|
||||||
|
// Skeleton of suqre-shaped icon widgets
|
||||||
|
// with similar basic functions and appearance
|
||||||
|
in property <int> bar_height;
|
||||||
|
in property <string> icon_text;
|
||||||
|
in property <string> tooltip_text;
|
||||||
|
|
||||||
|
callback square_btn_callback();
|
||||||
|
|
||||||
|
height: bar_height * 1px; // Same height as the bar
|
||||||
|
width: bar_height * 1px; // Square shape
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
background: touch_area.pressed ? #4a5f70
|
||||||
|
: touch_area.has-hover ? #6d8a4d
|
||||||
|
: #8e9162;
|
||||||
|
border-radius: 3px;
|
||||||
|
|
||||||
|
HorizontalLayout {
|
||||||
|
padding-left: 3px;
|
||||||
|
padding-right: 3px;
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: icon_text; // Every `SquareIconWidget` has an icon
|
||||||
|
color: white;
|
||||||
|
vertical-alignment: center;
|
||||||
|
horizontal-alignment: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
touch_area := TouchArea {
|
||||||
|
// Action when the icon is clicked
|
||||||
|
clicked => { square_btn_callback(); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tooltip will be added later — Slint’s ToolTip element is window-global
|
||||||
|
}
|
||||||
@ -72,11 +72,11 @@ export component TopBar inherits Window {
|
|||||||
|
|
||||||
BatteryWidget {
|
BatteryWidget {
|
||||||
bar_height: root.bar_height;
|
bar_height: root.bar_height;
|
||||||
|
icon_text: root.battery_icon;
|
||||||
|
square_btn_callback => root.show_battery();
|
||||||
battery_status: root.battery_status;
|
battery_status: root.battery_status;
|
||||||
battery_capacity: root.battery_capacity;
|
battery_capacity: root.battery_capacity;
|
||||||
battery_capacity_level: root.battery_capacity_level;
|
battery_capacity_level: root.battery_capacity_level;
|
||||||
battery_icon: root.battery_icon;
|
|
||||||
show_battery => root.show_battery();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DateWidget {
|
DateWidget {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user