feat(get_wine): unify tabble code

Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
This commit is contained in:
2026-01-12 11:05:10 +05:00
parent b79d6e0331
commit 1729f553bc

View File

@@ -564,6 +564,29 @@ class ProtonManager(QDialog):
return filtered_entries
def create_table_widget(self):
"""Helper method to create a standardized table widget"""
table = QTableWidget()
table.setAlternatingRowColors(True)
table.verticalHeader().setVisible(False)
table.setColumnCount(3) # Checkbox, Version Name, Size
table.setHorizontalHeaderLabels(['', _('Version Name'), _('Size')])
table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
table.verticalHeader().setDefaultSectionSize(36)
table.setStyleSheet(self.theme.GETWINE_WINDOW_STYLE)
table.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
table.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
table.setSelectionBehavior(QTableWidget.SelectionBehavior.SelectRows)
table.setSelectionMode(QTableWidget.SelectionMode.SingleSelection)
table.cellClicked.connect(self.on_cell_clicked)
table.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
header = table.horizontalHeader()
header.setSectionResizeMode(0, QHeaderView.ResizeMode.ResizeToContents)
header.setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch)
header.setSectionResizeMode(2, QHeaderView.ResizeMode.ResizeToContents)
return table
def create_tab_from_entries(self, source_name, entries):
"""Создаем вкладку с таблицей для источника Proton из записей JSON"""
@@ -577,18 +600,7 @@ class ProtonManager(QDialog):
layout.setContentsMargins(5, 5, 5, 5)
layout.setSpacing(5)
table = QTableWidget()
table.setAlternatingRowColors(True)
table.verticalHeader().setVisible(False)
table.setColumnCount(2) # Только Checkbox и Имя
table.setHorizontalHeaderLabels(['', _('Asset Name')])
table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
table.verticalHeader().setDefaultSectionSize(36)
table.setStyleSheet(self.theme.GETWINE_WINDOW_STYLE)
header = table.horizontalHeader()
header.setSectionResizeMode(0, QHeaderView.ResizeMode.ResizeToContents)
header.setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch)
table = self.create_table_widget()
# Include all entries (both installed and non-installed)
all_entries = []
@@ -608,11 +620,6 @@ class ProtonManager(QDialog):
all_entries.sort(key=version_sort_key)
table.setRowCount(len(all_entries))
table.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
table.setSelectionBehavior(QTableWidget.SelectionBehavior.SelectRows)
table.setSelectionMode(QTableWidget.SelectionMode.SingleSelection)
table.cellClicked.connect(self.on_cell_clicked)
for row_index, entry in enumerate(all_entries):
self.add_asset_row_from_json(table, row_index, entry, source_name)
@@ -655,6 +662,7 @@ class ProtonManager(QDialog):
# Извлекаем имя файла из URL
url = entry.get('url', '')
filename = entry.get('name', '')
size_human = entry.get('size_human', _('Unknown')) # Get size from JSON, default to 'Unknown'
if url:
parsed_url = urllib.parse.urlparse(url)
@@ -711,6 +719,11 @@ class ProtonManager(QDialog):
table.setItem(row_index, 1, asset_name_item)
# Add size information to the third column
size_item = QTableWidgetItem(size_human)
size_item.setFlags(size_item.flags() & ~Qt.ItemFlag.ItemIsEditable)
table.setItem(row_index, 2, size_item)
# Собираем метаданные в данных элемента
unique_id = f"{source_name}_{version_from_name}_{filename}"
for col in range(table.columnCount()):
@@ -800,34 +813,18 @@ class ProtonManager(QDialog):
layout.setContentsMargins(5, 5, 5, 5)
layout.setSpacing(5)
table = QTableWidget()
table.setAlternatingRowColors(True)
table.verticalHeader().setVisible(False)
table.setColumnCount(3) # Checkbox, Name, Size
table.setHorizontalHeaderLabels(['', _('Version Name'), _('Size')])
table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
table.verticalHeader().setDefaultSectionSize(36)
table.setStyleSheet(self.theme.GETWINE_WINDOW_STYLE)
header = table.horizontalHeader()
header.setSectionResizeMode(0, QHeaderView.ResizeMode.ResizeToContents)
header.setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch)
header.setSectionResizeMode(2, QHeaderView.ResizeMode.ResizeToContents)
table = self.create_table_widget()
# Sort installed versions
installed_versions.sort(key=version_sort_key)
table.setRowCount(len(installed_versions))
table.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
for row_index, version_name in enumerate(installed_versions):
self.add_installed_row(table, row_index, version_name)
layout.addWidget(table, 1)
# Настройка выделения строк и обработчика кликов для вкладки Installed
table.setSelectionBehavior(QTableWidget.SelectionBehavior.SelectRows)
table.setSelectionMode(QTableWidget.SelectionMode.SingleSelection)
table.cellClicked.connect(self.on_cell_clicked)
self.tab_widget.addTab(tab, _("Installed"))
@@ -947,6 +944,7 @@ class ProtonManager(QDialog):
table = current_tab.findChild(QTableWidget)
if table:
selected_count = 0
for row in range(table.rowCount()):
checkbox_widget = table.cellWidget(row, 0)
if checkbox_widget:
@@ -992,7 +990,7 @@ class ProtonManager(QDialog):
selection_text = _('Selected {} assets:\n').format(len(self.selected_assets))
for i, asset_data in enumerate(self.selected_assets.values(), 1):
selection_text += f"{i}. {asset_data['source_name'].upper()} - {asset_data['asset_name']}\n"
selection_text += f"{i}. {asset_data['asset_name']}\n"
self.selection_text.setPlainText(selection_text)
self.download_btn.setText(_('Download Selected'))