Добавить поддержку GAS 167 и УМП, улучшить обмен по CAN и последовательному порту

This commit is contained in:
2026-10-11 21:23:21 +03:00
parent 3c0f6fd9e6
commit 20454ff7fa
17 changed files with 1797 additions and 37 deletions

View File

@@ -403,24 +403,38 @@ class SerialTab(QWidget):
button.setFixedHeight(30)
button.setStyleSheet("QPushButton { padding: 3px 10px; }")
# Прокручиваемая область для кнопок макросов
self.macros_scroll_area = QScrollArea()
self.macros_scroll_area.setWidgetResizable(True)
# Устанавливаем фиксированную высоту, чтобы вместить 3-4 строки макросов
self.macros_scroll_area.setMinimumHeight(120) # Высота для 3-4 строк
self.macros_scroll_content = QWidget()
self.macros_scroll_layout = QGridLayout()
self.macros_scroll_content.setLayout(self.macros_scroll_layout)
self.macros_scroll_area.setWidget(self.macros_scroll_content)
self.macros_scroll_layout.setAlignment(Qt.AlignTop | Qt.AlignLeft)
self.macros_scroll_layout.setContentsMargins(6, 6, 6, 6)
self.macros_scroll_layout.setHorizontalSpacing(8)
self.macros_scroll_layout.setVerticalSpacing(6)
macros_layout.addWidget(self.macros_scroll_area)
self.macros_splitter = QSplitter(Qt.Orientation.Horizontal)
self.macros_splitter.setObjectName("macrosSplitter")
self.macros_splitter.setChildrenCollapsible(False)
self.macros_splitter.setHandleWidth(8)
self.macros_splitter.setToolTip("Перетащите разделитель, чтобы изменить ширину панелей")
self.macros_scroll_areas = []
self.macros_scroll_layouts = []
for side in ("Левая", "Правая"):
area = QScrollArea()
area.setAccessibleName(f"{side} панель макросов")
area.setWidgetResizable(True)
area.setMinimumSize(120, 120)
content = QWidget()
grid = QGridLayout(content)
grid.setAlignment(Qt.AlignTop | Qt.AlignLeft)
grid.setContentsMargins(6, 6, 6, 6)
grid.setVerticalSpacing(6)
area.setWidget(content)
self.macros_splitter.addWidget(area)
self.macros_scroll_areas.append(area)
self.macros_scroll_layouts.append(grid)
self.macros_splitter.setStretchFactor(0, 1)
self.macros_splitter.setStretchFactor(1, 1)
self.macros_splitter.setSizes([1, 1])
# Keep the existing attributes available to terminal integrations.
self.macros_scroll_area = self.macros_scroll_areas[0]
self.macros_scroll_content = self.macros_scroll_area.widget()
self.macros_scroll_layout = self.macros_scroll_layouts[0]
macros_layout.addWidget(self.macros_splitter, 1)
macros_group.setLayout(macros_layout)
layout.addWidget(macros_group)
layout.addWidget(macros_group, 1)
# --- ВНЕ ГРУППЫ: Результаты чтения ---
results_layout = QGridLayout()
@@ -447,7 +461,6 @@ class SerialTab(QWidget):
results_frame.setLayout(results_layout)
layout.addWidget(results_frame)
layout.addStretch()
self.setLayout(layout)
# После создания интерфейса создаем кнопки для загруженных макросов
@@ -590,7 +603,7 @@ class SerialTab(QWidget):
container_layout.addWidget(delete_btn)
container.setLayout(container_layout)
self.macros_scroll_layout.addWidget(container, row, col, 1, 1) # span изменен на 1
self.macros_scroll_layouts[col].addWidget(container, row, 0)
self.macro_buttons.append(container)
@@ -680,7 +693,7 @@ class SerialTab(QWidget):
def _set_macro_controls(self, running):
self.stop_macro_btn.setEnabled(running)
for widget in (self.bus_write_btn, self.bus_read_btn, self.create_macro_btn,
self.macros_scroll_area, self.raw_widget):
self.macros_splitter, self.raw_widget):
widget.setEnabled(not running)
def _next_macro_command(self, generation):
@@ -748,10 +761,11 @@ class SerialTab(QWidget):
def rebuild_macros_layout(self):
"""Перестроить layout макросов"""
# Очищаем layout
for i in reversed(range(self.macros_scroll_layout.count())):
item = self.macros_scroll_layout.itemAt(i)
if item and item.widget():
item.widget().setParent(None)
for grid in self.macros_scroll_layouts:
while grid.count():
item = grid.takeAt(0)
if item.widget():
item.widget().deleteLater()
# Очищаем список кнопок
self.macro_buttons.clear()