1414"""
1515from PyQt6 import QtWidgets , QtGui , QtCore
1616from HBEditor .Core .base_editor_ui import EditorBaseUI
17- from HBEditor .Core .Primitives .input_entries import InputEntryText
17+ from HBEditor .Core .DataTypes .parameter_types import ParameterType
18+ from HBEditor .Core .Primitives .input_entries import InputEntryText , InputEntryDropdown
1819from HBEditor .Core .Primitives import input_entry_handler as ieh
1920from HBEditor .Core import settings
2021
@@ -23,6 +24,25 @@ class EditorValuesUI(EditorBaseUI):
2324 def __init__ (self , core_ref ):
2425 super ().__init__ (core_ref )
2526
27+ # Limit what editing types are usable as some (such as Array or Event) are complex and would require
28+ # additional work to allow user control
29+ self .possible_input_types = [
30+ ParameterType .String ,
31+ ParameterType .Bool ,
32+ ParameterType .Int ,
33+ ParameterType .Float ,
34+ ParameterType .Vector2 ,
35+ ParameterType .Paragraph ,
36+ ParameterType .Color ,
37+ ParameterType .Asset_Scene ,
38+ ParameterType .Asset_Dialogue ,
39+ ParameterType .Asset_Data ,
40+ ParameterType .Asset_Interface ,
41+ ParameterType .Asset_Font ,
42+ ParameterType .Asset_Image ,
43+ ParameterType .Asset_Sound
44+ ]
45+
2646 # Build the core editor layout object
2747 self .main_layout = QtWidgets .QHBoxLayout (self )
2848 self .main_layout .setContentsMargins (0 , 0 , 0 , 0 )
@@ -51,17 +71,21 @@ def __init__(self, core_ref):
5171 # Main Table
5272 self .values_table = QtWidgets .QTableWidget (self )
5373 self .values_table .setObjectName ('values-table' )
54- self .values_table .setColumnCount (2 )
74+ self .values_table .setColumnCount (3 )
5575 self .values_table .verticalHeader ().hide ()
56- self .values_table .setHorizontalHeaderLabels (['Name' , 'Value' ])
76+ self .values_table .setHorizontalHeaderLabels (['Type' , ' Name' , 'Value' ])
5777 self .values_table .horizontalHeader ().setSectionResizeMode (0 , QtWidgets .QHeaderView .ResizeMode .Interactive )
58- self .values_table .horizontalHeader ().setSectionResizeMode (1 , QtWidgets .QHeaderView .ResizeMode .Stretch )
78+ self .values_table .horizontalHeader ().setSectionResizeMode (1 , QtWidgets .QHeaderView .ResizeMode .Interactive )
79+ self .values_table .horizontalHeader ().setSectionResizeMode (2 , QtWidgets .QHeaderView .ResizeMode .Stretch )
5980 self .values_table .setAlternatingRowColors (True )
6081 self .values_table .setSelectionMode (QtWidgets .QAbstractItemView .SelectionMode .SingleSelection )
6182 self .values_table .setFocusPolicy (QtCore .Qt .FocusPolicy .NoFocus ) # Disable the selection outline
6283 self .values_table .setSortingEnabled (True )
63- # TODO: Investigate how to improve the sizing for the first col. It should be a percentage of the available space
84+
85+ # TODO: Investigate how to improve sizing calculations. It should be a percentage of the available space
6486 self .values_table .horizontalHeader ().setDefaultSectionSize (self .values_table .horizontalHeader ().defaultSectionSize () * 3 )
87+ self .values_table .setColumnWidth (0 , round (self .values_table .horizontalHeader ().defaultSectionSize () / 2 ))
88+
6589 self .values_table .setEditTriggers (QtWidgets .QAbstractItemView .EditTrigger .DoubleClicked | QtWidgets .QAbstractItemView .EditTrigger .SelectedClicked )
6690 values_delegate = ValuesItemDelegate (self )
6791 self .values_table .setItemDelegate (values_delegate )
@@ -70,18 +94,47 @@ def __init__(self, core_ref):
7094
7195 def AddValue (self , data : tuple = None ):
7296 self .values_table .insertRow (self .values_table .rowCount ())
97+
98+ # Populate the row with items
7399 self .values_table .setItem (self .values_table .rowCount () - 1 , 0 , QtWidgets .QTableWidgetItem ())
74100 self .values_table .setItem (self .values_table .rowCount () - 1 , 1 , QtWidgets .QTableWidgetItem ())
75- self .values_table .resizeRowsToContents ()
101+ self .values_table .setItem (self .values_table .rowCount () - 1 , 2 , QtWidgets .QTableWidgetItem ())
102+
103+ # Add the type dropdown
104+ #type_input = InputEntryDropdown({"options": [param_type.name for param_type in self.possible_input_types]})
105+ type_input = ieh .Create (
106+ owner = self ,
107+ name = "" ,
108+ data = {"type" : "Dropdown" , "options" : [param_type .name for param_type in self .possible_input_types ]},
109+ owning_model_item = self .values_table .item (self .values_table .rowCount () - 1 , 2 ),
110+ owning_view = self .values_table
111+ )[1 ]
112+ type_input .SIG_USER_UPDATE .connect (self .SwitchInputType )
113+ self .values_table .setCellWidget (self .values_table .rowCount () - 1 , 0 , type_input )
114+ self .SwitchInputType (self .values_table .item (self .values_table .rowCount () - 1 , 0 ))
76115
77116 # Load data if provided
78117 if data :
79118 row = self .values_table .rowCount () - 1
80119 self .values_table .item (row , 0 ).setData (0 , data [0 ])
81120 self .values_table .item (row , 1 ).setData (0 , data [1 ])
121+ self .values_table .item (row , 2 ).setData (0 , data [2 ])
82122
123+ self .values_table .resizeRowsToContents ()
83124 self .SIG_USER_UPDATE .emit ()
84125
126+ def SwitchInputType (self , table_item : QtWidgets .QTableWidgetItem ):
127+ """ Creates and replaces the input entry type for the provided item s"""
128+ row = self .values_table .row (table_item )
129+ input_entry = ieh .Create (
130+ owner = self ,
131+ name = "" ,
132+ data = {"type" : self .values_table .cellWidget (row , 0 ).Get ()['value' ]},
133+ owning_model_item = self .values_table .item (row , 2 ),
134+ owning_view = self .values_table
135+ )[1 ]
136+ self .values_table .setCellWidget (row , 2 , input_entry )
137+
85138 def RemoveValue (self ):
86139 selected_rows = self .values_table .selectedIndexes ()
87140 if selected_rows :
0 commit comments