88from activity_browser .ui import widgets , icons , delegates
99from activity_browser .bwutils import AB_metadata
1010
11+ from .impact_category_header import ImpactCategoryHeader
12+
1113
1214class ImpactCategoryDetailsPage (QtWidgets .QWidget ):
1315 def __init__ (self , name : tuple , parent = None ):
@@ -17,54 +19,75 @@ def __init__(self, name: tuple, parent=None):
1719
1820 self .setObjectName (" | " .join (name ))
1921
20- self .model = CharacterizationFactorsModel (self , self .build_df ())
22+ self .header = ImpactCategoryHeader (self )
23+
24+ self .model = CharacterizationFactorsModel (self )
2125 self .view = CharacterizationFactorsView (self )
2226 self .view .setModel (self .model )
2327
28+ self .build_layout ()
29+ self .connect_signals ()
30+ self .sync ()
31+
2432 # resizing name and categories columns
2533 self .view .resizeColumnToContents (0 )
2634 self .view .resizeColumnToContents (1 )
2735
28- self .build_layout ()
29- self .connect_signals ()
30-
3136 def connect_signals (self ):
37+ signals .method .renamed .connect (self .on_method_renamed )
3238 signals .method .deleted .connect (self .on_method_deleted )
3339 signals .meta .methods_changed .connect (self .sync )
3440
41+ def on_method_renamed (self , old_name , new_name ):
42+ if self .name == old_name :
43+ self .name = new_name
44+ self .setObjectName (" | " .join (new_name ))
45+ self .setWindowTitle (" | " .join (new_name ))
46+
3547 def on_method_deleted (self , method ):
3648 if method .name == self .name :
3749 self .deleteLater ()
3850
3951 def sync (self ):
52+ if self .name not in bd .methods :
53+ self .deleteLater ()
54+ return
55+
4056 self .impact_category = bd .Method (self .name )
4157 self .model .setDataFrame (self .build_df ())
58+ self .header .sync ()
4259
4360 def build_layout (self ):
4461 layout = QtWidgets .QVBoxLayout ()
45- layout .addWidget (widgets . ABLabel . demiBold ( "Impact Category: " + " - " . join ( self .name ), self ) )
62+ layout .addWidget (self .header )
4663 layout .addWidget (widgets .ABHLine (self ))
4764 layout .addWidget (self .view )
4865 self .setLayout (layout )
4966
5067 def build_df (self ):
51- df = pd .DataFrame (self .impact_category .load (), columns = ["id" , "amount" ])
68+ df = pd .DataFrame (self .impact_category .load (), columns = ["id" , "data" ])
69+ df ["amount" ] = df ["data" ].apply (lambda x : x if isinstance (x , (float , int )) else x .get ("amount" ))
70+ df ["uncertainty" ] = df ["data" ].apply (lambda x : 0 if isinstance (x , (float , int )) else x .get ("uncertainty type" ))
71+
5272 other = AB_metadata .dataframe [["id" , "name" , "categories" , "database" , "unit" ]]
5373
54- df = df .merge (other , left_on = "id" , right_on = "id" ).rename (columns = {"id" : "_id" })
74+ df = df .merge (other , left_on = "id" , right_on = "id" ).rename (columns = {"id" : "_id" , "data" : "_cf" })
5575 df ["_impact_category_name" ] = [self .name for i in range (len (df ))]
5676
57- cols = ["name" , "categories" , "database" , "amount" , "unit" , "_id" , "_impact_category_name" ]
77+ cols = ["name" , "categories" , "database" , "amount" , "unit" , "uncertainty" , " _id" , "_impact_category_name" , "_cf " ]
5878 return df [cols ]
5979
6080
6181class CharacterizationFactorsView (widgets .ABTreeView ):
6282 defaultColumnDelegates = {
6383 "amount" : delegates .FloatDelegate ,
6484 "categories" : delegates .ListDelegate ,
85+ "uncertainty" : delegates .UncertaintyDelegate ,
6586 }
6687
6788
89+
90+
6891class ExchangesItem (widgets .ABDataItem ):
6992 def flags (self , col : int , key : str ):
7093 """
@@ -78,7 +101,7 @@ def flags(self, col: int, key: str):
78101 QtCore.Qt.ItemFlags: The item flags.
79102 """
80103 flags = super ().flags (col , key )
81- if key in ["amount" ]:
104+ if key in ["amount" , "uncertainty" ]:
82105 return flags | Qt .ItemFlag .ItemIsEditable
83106 return flags
84107
0 commit comments