98 lines
3.8 KiB
Python
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_
|
|
|