mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-02-18 17:43:54 +08:00
save the trees we got icons
This commit is contained in:
0
system/ui/sunnypilot/widgets/helpers/__init__.py
Normal file
0
system/ui/sunnypilot/widgets/helpers/__init__.py
Normal file
18
system/ui/sunnypilot/widgets/helpers/star_icon.py
Normal file
18
system/ui/sunnypilot/widgets/helpers/star_icon.py
Normal file
@@ -0,0 +1,18 @@
|
||||
import math
|
||||
import pyray as rl
|
||||
|
||||
def draw_star(center_x, center_y, radius, is_filled, color):
|
||||
center = rl.Vector2(center_x, center_y)
|
||||
points = []
|
||||
|
||||
for i in range(10):
|
||||
angle = -(i * 36 + 18) * math.pi / 180
|
||||
r = radius if i % 2 == 0 else radius / 2
|
||||
x = center_x + r * math.cos(angle)
|
||||
y = center_y + r * math.sin(angle)
|
||||
points.append(rl.Vector2(x, y))
|
||||
|
||||
for i in range(10):
|
||||
if is_filled:
|
||||
rl.draw_triangle(center, points[i], points[(i + 1) % 10], color)
|
||||
rl.draw_line_ex(points[i], points[(i + 1) % 10], 2, color)
|
||||
@@ -4,10 +4,10 @@ from dataclasses import dataclass
|
||||
from openpilot.common.params import Params
|
||||
from openpilot.system.ui.lib.application import FontWeight
|
||||
from openpilot.system.ui.widgets.button import Button, ButtonStyle
|
||||
from openpilot.system.ui.widgets.label import gui_label
|
||||
from openpilot.system.ui.widgets.option_dialog import MultiOptionDialog
|
||||
|
||||
from openpilot.system.ui.sunnypilot.lib.styles import style
|
||||
from openpilot.system.ui.sunnypilot.widgets.helpers.star_icon import draw_star
|
||||
|
||||
@dataclass
|
||||
class TreeNode:
|
||||
@@ -36,12 +36,13 @@ class TreeItemWidget(Button):
|
||||
|
||||
@property
|
||||
def _star_rect(self):
|
||||
return rl.Rectangle(self._rect.x + self._rect.width - 50, self._rect.y + (self._rect.height - 40) / 2, 40, 40)
|
||||
return rl.Rectangle(self._rect.x + self._rect.width - 65, self._rect.y + (self._rect.height - 40) / 2, 40, 40)
|
||||
|
||||
def _render(self, rect):
|
||||
super()._render(rect)
|
||||
if not self.is_folder and self._favorite_callback:
|
||||
gui_label(self._star_rect, "☆", 70, style.ITEM_TEXT_COLOR if self.is_favorite else style.ITEM_DISABLED_TEXT_COLOR)
|
||||
draw_star(self._star_rect.x + self._star_rect.width / 2, self._star_rect.y + self._star_rect.height / 2,
|
||||
25, self.is_favorite, style.ON_BG_COLOR if self.is_favorite else rl.GRAY)
|
||||
|
||||
def _handle_mouse_release(self, mouse_pos):
|
||||
if not self.is_folder and self._favorite_callback and rl.check_collision_point_rec(mouse_pos, self._star_rect):
|
||||
@@ -95,19 +96,14 @@ class TreeOptionDialog(MultiOptionDialog):
|
||||
self.selection_ref = node.ref
|
||||
|
||||
def _toggle_favorite(self, node):
|
||||
if node.ref in self.favorites:
|
||||
self.favorites.remove(node.ref)
|
||||
else:
|
||||
self.favorites.add(node.ref)
|
||||
|
||||
self.favorites.remove(node.ref) if node.ref in self.favorites else self.favorites.add(node.ref)
|
||||
if self.fav_param:
|
||||
self.params.put(self.fav_param, ';'.join(self.favorites))
|
||||
|
||||
self.folders = [f for f in self.folders if f.folder != "Favorites"]
|
||||
if self.favorites:
|
||||
all_nodes = [n for f in self.folders for n in f.nodes]
|
||||
fav_nodes = [TreeNode("", n.display_name, n.ref, n.index) for n in all_nodes if n.ref in self.favorites]
|
||||
fav_nodes.sort(key=lambda n: n.index, reverse=True)
|
||||
fav_nodes = sorted([TreeNode("", n.display_name, n.ref, n.index) for f in self.folders for n in f.nodes if n.ref in self.favorites],
|
||||
key=lambda n: n.index, reverse=True)
|
||||
if fav_nodes:
|
||||
self.folders.insert(1 if len(self.folders) > 0 else 0, TreeFolder("Favorites", fav_nodes))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user