11from __future__ import annotations
2+ from dataclasses import dataclass
23from enum import Enum
34from pathlib import Path
45from typing import Optional
@@ -45,6 +46,7 @@ class PackageState(Enum):
4546 disabled = 3
4647
4748
49+ @dataclass
4850class PackageItem :
4951 label : QLabel
5052 status : QLabel | QCheckBox
@@ -101,32 +103,35 @@ def __init__(
101103 self ._items : list [PackageItem ] = [self .add_item (p ) for p in packages ]
102104 self ._update_visibility ()
103105
106+ def _update_item_visibility (self , item : PackageItem ):
107+ supported = self ._backend_supports (item )
108+ item .label .setVisible (supported and self ._header .isChecked ())
109+ item .status .setVisible (supported and self ._header .isChecked ())
110+
104111 def _update_visibility (self ):
105112 self ._header .setArrowType (
106113 Qt .ArrowType .DownArrow if self ._header .isChecked () else Qt .ArrowType .RightArrow
107114 )
108115 if self ._desc :
109116 self ._desc .setVisible (self ._header .isChecked ())
110117 for item in self ._items :
111- item .label .setVisible (self ._header .isChecked ())
112- item .status .setVisible (self ._header .isChecked ())
118+ self ._update_item_visibility (item )
113119
114120 def expand (self ):
115121 if not self ._header .isChecked ():
116122 self ._header .setChecked (True )
117123
118124 def add_item (self , package : str | ModelResource | CustomNode ):
119- item = PackageItem ()
120- item .package = package
121- item .state = PackageState .available
122- item .label = QLabel (self ._package_name (package ), self )
125+ item = PackageItem (
126+ package = package ,
127+ state = PackageState .available ,
128+ label = QLabel (self ._package_name (package ), self ),
129+ status = QCheckBox (_ ("Install" ), self ) if self .is_checkable else QLabel (self ),
130+ )
123131 item .label .setContentsMargins (20 , 0 , 0 , 0 )
124132 if self .is_checkable :
125- item .status = QCheckBox (_ ("Install" ), self )
126133 item .status .setChecked (False )
127134 item .status .toggled .connect (self ._handle_checkbox_toggle )
128- else :
129- item .status = QLabel (self )
130135 self ._layout .addWidget (item .label , self ._layout .rowCount (), 0 )
131136 self ._layout .addWidget (item .status , self ._layout .rowCount () - 1 , 1 )
132137 return item
@@ -147,6 +152,7 @@ def values(self, values: list[PackageState]):
147152
148153 def _update (self ):
149154 for item in self ._items :
155+ self ._update_item_visibility (item )
150156 if item .state is PackageState .installed :
151157 item .status .setText (_ ("Installed" ))
152158 item .status .setStyleSheet (f"color:{ green } " )
0 commit comments