Добавить поддержку GAS 167 и УМП, улучшить обмен по CAN и последовательному порту
This commit is contained in:
@@ -206,10 +206,16 @@ class RawProtocolWidget(QWidget):
|
||||
|
||||
def init_ui(self):
|
||||
layout = QVBoxLayout()
|
||||
layout.setProperty("fixedPanelLayout", True)
|
||||
layout.setContentsMargins(4, 4, 4, 4)
|
||||
layout.setSpacing(4)
|
||||
|
||||
# Группа для ПРЯМОГО ДОСТУПА К ПАМЯТИ (PEEK/POKE)
|
||||
mem_group = QGroupBox("Прямой доступ к памяти (PEEK/POKE)")
|
||||
mem_group.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
|
||||
mem_layout = QGridLayout()
|
||||
mem_layout.setContentsMargins(6, 6, 6, 6)
|
||||
mem_layout.setSpacing(4)
|
||||
|
||||
mem_layout.addWidget(QLabel("Адрес памяти (hex):"), 0, 0)
|
||||
self.mem_addr_edit = QLineEdit("2000")
|
||||
@@ -239,6 +245,9 @@ class RawProtocolWidget(QWidget):
|
||||
# Группа для RAW отправки
|
||||
raw_group = QGroupBox("RAW отправка/чтение")
|
||||
raw_layout = QVBoxLayout()
|
||||
raw_layout.setProperty("fixedPanelLayout", True)
|
||||
raw_layout.setContentsMargins(6, 6, 6, 6)
|
||||
raw_layout.setSpacing(4)
|
||||
|
||||
self.raw_send_edit = QLineEdit()
|
||||
self.raw_send_edit.setPlaceholderText("Введите hex данные для отправки")
|
||||
@@ -246,6 +255,7 @@ class RawProtocolWidget(QWidget):
|
||||
raw_layout.addWidget(self.raw_send_edit)
|
||||
|
||||
hbox = QHBoxLayout()
|
||||
hbox.setSpacing(4)
|
||||
self.raw_send_btn = QPushButton("Отправить RAW")
|
||||
self.raw_send_btn.clicked.connect(self.send_raw_data)
|
||||
hbox.addWidget(self.raw_send_btn)
|
||||
@@ -260,16 +270,19 @@ class RawProtocolWidget(QWidget):
|
||||
|
||||
self.raw_output = QTextEdit()
|
||||
self.raw_output.setReadOnly(True)
|
||||
self.raw_output.setMaximumHeight(100)
|
||||
raw_layout.addWidget(self.raw_output)
|
||||
self.raw_output.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
||||
raw_layout.addWidget(self.raw_output, 1)
|
||||
|
||||
|
||||
self.raw_clear_btn = QPushButton("Очистить логи")
|
||||
self.raw_clear_btn.clicked.connect(self.clear_logs)
|
||||
raw_layout.addWidget(self.raw_clear_btn, 0, Qt.AlignLeft)
|
||||
for button in (self.mem_write_btn, self.mem_read_btn, self.raw_send_btn,
|
||||
self.raw_read_btn, self.raw_clear_btn):
|
||||
button.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
|
||||
|
||||
raw_group.setLayout(raw_layout)
|
||||
layout.addWidget(raw_group)
|
||||
layout.addWidget(raw_group, 1)
|
||||
|
||||
self.setLayout(layout)
|
||||
def memory_write(self):
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user