77 Signal ,
88 Slot ,
99)
10+ from typing import Set
11+
1012from PySide6 .QtWidgets import (
13+ QAbstractScrollArea ,
1114 QCheckBox ,
1215 QComboBox ,
1316 QDialog ,
1417 QDialogButtonBox ,
1518 QFileDialog ,
1619 QFormLayout ,
1720 QFrame ,
21+ QHeaderView ,
1822 QGroupBox ,
1923 QLabel ,
2024 QScrollArea ,
25+ QSizePolicy ,
2126 QSpinBox ,
2227 QStyledItemDelegate ,
2328 QTableWidget ,
@@ -120,7 +125,7 @@ def handle_edited_path(self):
120125class TableOption (QTableWidget ):
121126 def __init__ (self ):
122127 super ().__init__ ()
123- self .horizontalHeader ().setStretchLastSection (True )
128+ self .horizontalHeader ().setStretchLastSection (False )
124129 self .setSelectionMode (self .SelectionMode .SingleSelection )
125130 self .setTabKeyNavigation (False )
126131 self .setVerticalScrollBarPolicy (Qt .ScrollBarPolicy .ScrollBarAlwaysOff )
@@ -212,31 +217,40 @@ class MultipleChoicesOption(TableOption):
212217 valueChanged = Signal (object )
213218
214219 LABELS = (
215- # i18n: Widget: “MultipleChoicesOption”.
216- _ ("Choice" ),
217220 # i18n: Widget: “MultipleChoicesOption”.
218221 _ ("Selected" ),
222+ # i18n: Widget: “MultipleChoicesOption”.
223+ _ ("Choice" ),
219224 )
220225
221226 # i18n: Widget: “MultipleChoicesOption”.
222227 def __init__ (self , choices = None , labels = None ):
223228 super ().__init__ ()
224229 if labels is None :
225230 labels = self .LABELS
226- self ._value = {}
231+ self ._value : Set [ str ] = set ()
227232 self ._updating = False
228233 self ._choices = {} if choices is None else choices
229234 self ._reversed_choices = {
230235 translation : choice for choice , translation in choices .items ()
231236 }
237+ self .setSizeAdjustPolicy (
238+ QAbstractScrollArea .SizeAdjustPolicy .AdjustToContentsOnFirstShow
239+ )
240+ self .setSizePolicy (
241+ QSizePolicy (QSizePolicy .Policy .Expanding , QSizePolicy .Policy .Fixed )
242+ )
232243 self .setColumnCount (2 )
233244 self .setHorizontalHeaderLabels (labels )
245+ header = self .horizontalHeader ()
246+ header .setSectionResizeMode (0 , QHeaderView .ResizeMode .ResizeToContents )
247+ header .setSectionResizeMode (1 , QHeaderView .ResizeMode .ResizeToContents )
248+ header .setStretchLastSection (True )
249+ header .setStretchLastSection (True )
234250 self .cellChanged .connect (self ._on_cell_changed )
235251
236252 def setValue (self , value ):
237253 self ._updating = True
238- self .resizeColumnsToContents ()
239- self .setMinimumSize (self .viewportSizeHint ())
240254 self .setRowCount (0 )
241255 if value is None :
242256 value = set ()
@@ -248,9 +262,6 @@ def setValue(self, value):
248262 for choice in sorted (self ._reversed_choices ):
249263 row += 1
250264 self .insertRow (row )
251- item = QTableWidgetItem (self ._choices [choice ])
252- item .setFlags (item .flags () & ~ Qt .ItemFlag .ItemIsEditable )
253- self .setItem (row , 0 , item )
254265 item = QTableWidgetItem ()
255266 item .setFlags (
256267 (item .flags () & ~ Qt .ItemFlag .ItemIsEditable )
@@ -259,19 +270,28 @@ def setValue(self, value):
259270 item .setCheckState (
260271 Qt .CheckState .Checked if choice in value else Qt .CheckState .Unchecked
261272 )
273+ self .setItem (row , 0 , item )
274+ item = QTableWidgetItem (self ._choices [choice ])
275+ item .setFlags (item .flags () & ~ Qt .ItemFlag .ItemIsEditable )
262276 self .setItem (row , 1 , item )
263277 self .resizeColumnsToContents ()
264- self .setMinimumSize (self .viewportSizeHint ())
265278 self ._updating = False
266279
267280 def _on_cell_changed (self , row , column ):
268281 if self ._updating :
269282 return
270- assert column == 1
271- choice = self ._reversed_choices [
272- self .item (row , 0 ).data (Qt .ItemDataRole .DisplayRole )
273- ]
274- if self .item (row , 1 ).checkState ():
283+ assert column == 0
284+ name_item = self .item (row , 1 )
285+ state_item = self .item (row , 0 )
286+ if name_item is None or state_item is None :
287+ return
288+ name = name_item .data (Qt .ItemDataRole .DisplayRole )
289+ if name is None :
290+ return
291+ choice = self ._reversed_choices .get (name )
292+ if choice is None :
293+ return
294+ if state_item .checkState () == Qt .CheckState .Checked :
275295 self ._value .add (choice )
276296 else :
277297 self ._value .discard (choice )
@@ -515,15 +535,15 @@ def __init__(self, engine):
515535 _ ("Plugins" ),
516536 (
517537 ConfigOption (
518- _ ("Extension :" ),
538+ _ ("Extensions :" ),
519539 "enabled_extensions" ,
520540 partial (
521541 MultipleChoicesOption ,
522542 choices = {
523543 plugin .name : plugin .name
524544 for plugin in registry .list_plugins ("extension" )
525545 },
526- labels = (_ ("Name " ), _ ("Enabled " )),
546+ labels = (_ ("Enabled " ), _ ("Name " )),
527547 ),
528548 _ ("Configure enabled plugin extensions." ),
529549 ),
0 commit comments