order-processing/_With_Table_Widget_.py

98 lines
3.8 KiB
Python

from QT import QtWidgets, QT
class _With_Table_Widget_ (QtWidgets.QWidget) :
Header = None
def __init__ (self, parent = None) :
super ().__init__ (parent)
self._box = QtWidgets.QVBoxLayout (self)
if self.Header :
header = QtWidgets.QLabel (self.Header)
self._box.addWidget (header)
self._view = QtWidgets.QTableWidget (0, len (self.Columns))
self._view.setHorizontalHeaderLabels (self.Columns)
self._box.addWidget (self._view)
self._view.setAlternatingRowColors (True)
self._view.setSelectionBehavior (QtWidgets.QAbstractItemView.SelectRows)
self._view.verticalHeader ().hide ()
self.selection_model = self._view.selectionModel ()
self.selection_model.currentChanged.connect (self._current_changed)
self._current_row = None
# end def __init__
def _add_read_only_string (self, row, col, text) :
item = QtWidgets.QTableWidgetItem (text)
flags = item.flags() & ~QT.ItemIsEditable
item.setFlags (flags)
self._view.setItem (row, col, item)
# end def _add_read_only_string
def _update_read_only_string (self, row, col, text) :
item = self._view.item (row, col)
if not item :
self._add_read_only_string (row, col, text)
else :
model = self._view.model ()
index = model.index (row, col)
model.setData (index, text)
# end def _update_read_only_string
def _current_changed (self, new_index, old_index) :
row = new_index.row ()
if row != self._current_row :
self._current_row = row
# end def _current_changed
def save_settings (self, settings) :
settings.beginGroup (self.settings_group)
settings.setValue ("column-width", self.column_width ())
if False and self.selection_model :
selection = [ self.model.item_path (i)
for i in self.selectionModel ().selectedRows ()
]
settings.setValue ("selection", selection)
settings.endGroup ()
# end def save_settings
def restore_settings (self, settings) :
settings.beginGroup (self.settings_group)
self.restore_column_width (settings.value ("column-width" ))
if False and self.selection_model :
self.restore_selection (settings.value ("selection" ))
settings.endGroup ()
# end def restore_settings
def column_width (self) :
result = []
for i in range (self._view.columnCount ()) :
result.append (self._view.columnWidth (i))
return result
# end def column_width
def restore_column_width (self, width) :
for i, w in enumerate (width or ()) :
self._view.setColumnWidth (i, int (w))
# end def restore_column_width
def restore_selection (self, selected) :
sm = self.view.selectionModel ()
sm.reset ()
model = self.view.model ()
if model and selected :
iv_index = model.invalid_index
for path_to_selected in selected :
parent_index = iv_index
try :
for pp in path_to_selected :
index = model.index (pp, 0, parent_index)
parent_index = index
sm.select (index, sm.__class__.Select | sm.__class__.Rows)
except :
pass
# end def restore_selection
# end class _With_Table_Widget_