Compare commits

..

No commits in common. "c32dc161f879d11831468111bdec1f68313e2da1" and "cb496bca0ff8f6c22c05392f202afbfa04a41d6f" have entirely different histories.

12 changed files with 44 additions and 46 deletions

Binary file not shown.

View File

@ -86,15 +86,15 @@
```bash ```bash
Src Src
├── DebugVarEdit_GUI.py # Главное окно ├── DebugVarEdit_GUI.py # Главное окно
├── var_table.py # Таблица выбранных переменных ├── VariableTable.py # Таблица выбранных переменных
├── var_selector_window.py # Окно выбора переменных ├── VariableSelector.py # Окно выбора переменных
├── var_selector_table.py # Таблица переменных в окне выбора переменных ├── selectTable.py # Таблица переменных в окне выбора переменных
├── scan_progress_gui.py # Отображение процесса сканирования переменных ├── scanVarGUI.py # Отображение процесса сканирования переменных
├── scan_vars.py # Сканирование переменных среди .c/.h файлов ├── scanVar.py # Сканирование переменных среди .c/.h файлов
├── generate_debug_vars.py # Генерация debug_vars.c ├── generateVars.py # Генерация debug_vars.c
├── myXML.py # Утилиты для XML ├── myXML.py # Утилиты для XML
├── makefile_parser.py # Парсинг makefile на .c/.h файлы ├── parseMakefile.py # Парсинг makefile на .c/.h файлы
├── var_setup.py # Подготовка переменных для окна выбора переменных ├── setupVars.py # Подготовка переменных для окна выбора переменных
├── libclang.dll # Бибилиотека clang ├── libclang.dll # Бибилиотека clang
├── icon.ico # Иконка ├── icon.ico # Иконка
build build

View File

@ -1,19 +1,19 @@
# build command # build command
# pyinstaller --onefile --name DebugVarEdit --add-binary "build/libclang.dll;build" --distpath ./ --workpath ./build_temp --specpath ./build_temp var_setup_GUI.py # pyinstaller --onefile --name DebugVarEdit --add-binary "build/libclang.dll;build" --distpath ./ --workpath ./build_temp --specpath ./build_temp setupVars_GUI.py
import sys import sys
import os import os
import subprocess import subprocess
import lxml.etree as ET import lxml.etree as ET
from generate_debug_vars import type_map from generateVars import type_map
from enum import IntEnum from enum import IntEnum
import threading import threading
from generate_debug_vars import run_generate from generateVars import run_generate
import var_setup import setupVars
from var_selector_window import var_selector_windowDialog from VariableSelector import VariableSelectorDialog
from var_table import var_tableWidget, rows from VariableTable import VariableTableWidget, rows
from scan_progress_gui import ProcessOutputWindow from scanVarGUI import ProcessOutputWindow
import scan_vars import scanVars
import myXML import myXML
import time import time
@ -63,7 +63,7 @@ class VarEditor(QWidget):
def initUI(self): def initUI(self):
self.setWindowTitle(var_edit_title) self.setWindowTitle(var_edit_title)
base_path = scan_vars.get_base_path() base_path = scanVars.get_base_path()
icon_path = os.path.join(base_path, "icon.ico") icon_path = os.path.join(base_path, "icon.ico")
if os.path.exists(icon_path): if os.path.exists(icon_path):
self.setWindowIcon(QIcon(icon_path)) self.setWindowIcon(QIcon(icon_path))
@ -134,7 +134,7 @@ class VarEditor(QWidget):
btn_open_output = QPushButton(open_output_title) btn_open_output = QPushButton(open_output_title)
btn_open_output.clicked.connect(self.__open_output_file_with_program) btn_open_output.clicked.connect(self.__open_output_file_with_program)
# Таблица # Таблица
self.table = var_tableWidget() self.table = VariableTableWidget()
# Основной layout # Основной layout
layout = QVBoxLayout() layout = QVBoxLayout()
layout.addLayout(xml_layout) layout.addLayout(xml_layout)
@ -208,7 +208,7 @@ class VarEditor(QWidget):
# Создаём окно с кнопкой "Готово" # Создаём окно с кнопкой "Готово"
self.proc_win = ProcessOutputWindow(self.proj_path, self.makefile_path, self.xml_path, self.proc_win = ProcessOutputWindow(self.proj_path, self.makefile_path, self.xml_path,
on_done_callback=self.__after_scan_vars_finished) on_done_callback=self.__after_scanvars_finished)
self.proc_win.start_scan() self.proc_win.start_scan()
@ -302,11 +302,11 @@ class VarEditor(QWidget):
structs_path_full = myXML.make_absolute_path(structs_path, self.proj_path) structs_path_full = myXML.make_absolute_path(structs_path, self.proj_path)
if structs_path_full and os.path.isfile(structs_path_full): if structs_path_full and os.path.isfile(structs_path_full):
self.structs_path = structs_path_full self.structs_path = structs_path_full
self.structs, self.typedef_map = var_setup.parse_structs(structs_path_full) self.structs, self.typedef_map = setupVars.parse_structs(structs_path_full)
else: else:
self.structs_path = None self.structs_path = None
self.vars_list = var_setup.parse_vars(self.xml_path, self.typedef_map) self.vars_list = setupVars.parse_vars(self.xml_path, self.typedef_map)
self.table.populate(self.vars_list, self.structs, self.write_to_xml) self.table.populate(self.vars_list, self.structs, self.write_to_xml)
except Exception as e: except Exception as e:
QMessageBox.warning(self, "Ошибка", f"Ошибка при чтении XML:\n{e}") QMessageBox.warning(self, "Ошибка", f"Ошибка при чтении XML:\n{e}")
@ -404,7 +404,7 @@ class VarEditor(QWidget):
self.update() self.update()
def __after_scan_vars_finished(self): def __after_scanvars_finished(self):
if not os.path.isfile(self.xml_path): if not os.path.isfile(self.xml_path):
self.makefile_path = None self.makefile_path = None
self.structs_path = None self.structs_path = None
@ -443,7 +443,7 @@ class VarEditor(QWidget):
QMessageBox.warning(self, "Нет переменных", f"Сначала загрузите переменные ({scan_title}).") QMessageBox.warning(self, "Нет переменных", f"Сначала загрузите переменные ({scan_title}).")
return return
dlg = var_selector_windowDialog(self.table, self.vars_list, self.structs, self.typedef_map, self.xml_path, self) dlg = VariableSelectorDialog(self.table, self.vars_list, self.structs, self.typedef_map, self.xml_path, self)
if dlg.exec_(): if dlg.exec_():
self.write_to_xml() self.write_to_xml()
self.update() self.update()

View File

@ -6,16 +6,16 @@ from PySide2.QtWidgets import (
) )
from PySide2.QtGui import QKeySequence, QKeyEvent from PySide2.QtGui import QKeySequence, QKeyEvent
from PySide2.QtCore import Qt, QStringListModel, QSettings from PySide2.QtCore import Qt, QStringListModel, QSettings
import var_table import VariableTable
import var_setup import setupVars
import myXML import myXML
import time import time
import var_selector_table import selectTable
array_re = re.compile(r'^(\w+)\[(\d+)\]$') array_re = re.compile(r'^(\w+)\[(\d+)\]$')
class var_selector_windowDialog(QDialog): class VariableSelectorDialog(QDialog):
def __init__(self, table, all_vars, structs, typedefs, xml_path=None, parent=None): def __init__(self, table, all_vars, structs, typedefs, xml_path=None, parent=None):
super().__init__(parent) super().__init__(parent)
self.setWindowTitle("Выбор переменных") self.setWindowTitle("Выбор переменных")
@ -55,10 +55,10 @@ class var_selector_windowDialog(QDialog):
self.btn_accept = QPushButton("Применить") self.btn_accept = QPushButton("Применить")
# Создаем экземпляр вашего готового виджета # Создаем экземпляр вашего готового виджета
self.vars_widget = var_selector_table.VariableSelectWidget(self) self.vars_widget = selectTable.VariableSelectWidget(self)
self.vars_widget.tree.itemDoubleClicked.connect(self.on_left_tree_double_click) self.vars_widget.tree.itemDoubleClicked.connect(self.on_left_tree_double_click)
self.vars_widget.setObjectName("LeftTable") self.vars_widget.setObjectName("LeftTable")
self.selected_vars_widget = var_selector_table.VariableSelectWidget(self) self.selected_vars_widget = selectTable.VariableSelectWidget(self)
self.selected_vars_widget.tree.itemDoubleClicked.connect(self.on_rigth_tree_double_click) self.selected_vars_widget.tree.itemDoubleClicked.connect(self.on_rigth_tree_double_click)
self.selected_vars_widget.setObjectName("RightTable") self.selected_vars_widget.setObjectName("RightTable")
@ -107,7 +107,7 @@ class var_selector_windowDialog(QDialog):
self.selected_vars_widget.set_autocomplete(self.autocomplete_checkbox.isChecked()) self.selected_vars_widget.set_autocomplete(self.autocomplete_checkbox.isChecked())
# --- Код в конце __init__ --- # --- Код в конце __init__ ---
self.expanded_vars = var_setup.expand_vars(self.all_vars, self.structs, self.typedefs) self.expanded_vars = setupVars.expand_vars(self.all_vars, self.structs, self.typedefs)
self.update_vars_widget() self.update_vars_widget()
def on_move_right(self): def on_move_right(self):
@ -147,7 +147,7 @@ class var_selector_windowDialog(QDialog):
t_start = time.perf_counter() t_start = time.perf_counter()
t1 = time.perf_counter() t1 = time.perf_counter()
self.selected_vars, self.unselected_vars = var_setup.split_vars_by_show_flag(self.expanded_vars) self.selected_vars, self.unselected_vars = setupVars.split_vars_by_show_flag(self.expanded_vars)
t2 = time.perf_counter() t2 = time.perf_counter()
self.vars_widget.set_data(self.unselected_vars) self.vars_widget.set_data(self.unselected_vars)

View File

@ -6,7 +6,7 @@ from PySide2.QtWidgets import (
from PySide2.QtGui import QColor, QBrush, QPalette from PySide2.QtGui import QColor, QBrush, QPalette
from PySide2.QtCore import Qt from PySide2.QtCore import Qt
from enum import IntEnum from enum import IntEnum
from generate_debug_vars import type_map from generateVars import type_map
import time import time
from typing import Dict, List from typing import Dict, List
@ -61,7 +61,7 @@ class FilterDialog(QDialog):
class var_tableWidget(QTableWidget): class VariableTableWidget(QTableWidget):
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(0, 8, parent) super().__init__(0, 8, parent)
# Таблица переменных # Таблица переменных

View File

@ -1,7 +1,7 @@
# build command # build command
# pyinstaller --onefile --distpath . --workpath ./build --specpath ./build generate_debug_vars.py # pyinstaller --onefile --distpath . --workpath ./build --specpath ./build generateVars.py
# start script # start script
# generate_debug_vars.exe F:\Work\Projects\TMS\TMS_new_bus\ Src/DebugTools/vars.xml Src/DebugTools # generateVars.exe F:\Work\Projects\TMS\TMS_new_bus\ Src/DebugTools/vars.xml Src/DebugTools
import sys import sys
import os import os

View File

@ -6,8 +6,8 @@ import sys
import contextlib import contextlib
import io import io
import json import json
from scan_vars import run_scan from scanVars import run_scan
from var_table import var_tableWidget, rows from VariableTable import VariableTableWidget, rows
from PySide2.QtWidgets import ( from PySide2.QtWidgets import (
QApplication, QWidget, QTableWidget, QTableWidgetItem, QApplication, QWidget, QTableWidget, QTableWidgetItem,

View File

@ -1,7 +1,7 @@
# build command # build command
# pyinstaller --onefile scan_vars.py --add-binary "F:\Work\Projects\TMS\TMS_new_bus\Src\DebugTools/build/libclang.dll;." --distpath . --workpath ./build --specpath ./build # pyinstaller --onefile scanVars.py --add-binary "F:\Work\Projects\TMS\TMS_new_bus\Src\DebugTools/build/libclang.dll;." --distpath . --workpath ./build --specpath ./build
# start script # start script
# scan_vars.exe F:\Work\Projects\TMS\TMS_new_bus\ F:\Work\Projects\TMS\TMS_new_bus\Debug\makefile # scanVars.exe F:\Work\Projects\TMS\TMS_new_bus\ F:\Work\Projects\TMS\TMS_new_bus\Debug\makefile
import os import os
import sys import sys
@ -11,7 +11,7 @@ from clang import cindex
from clang.cindex import Config from clang.cindex import Config
import lxml.etree as ET import lxml.etree as ET
from xml.dom import minidom from xml.dom import minidom
from makefile_parser import parse_makefile from parseMakefile import parse_makefile
from collections import deque from collections import deque
import argparse import argparse
import myXML import myXML

View File

@ -2,9 +2,9 @@ import sys
import os import os
import re import re
import lxml.etree as ET import lxml.etree as ET
from generate_debug_vars import map_type_to_pt, get_iq_define, type_map from generateVars import map_type_to_pt, get_iq_define, type_map
from enum import IntEnum from enum import IntEnum
import scan_vars import scanVars
import myXML import myXML
import pickle import pickle
@ -291,7 +291,7 @@ def expand_struct_recursively(prefix, type_str, structs, typedefs, var_attrs, de
return process_array(prefix, type_str, structs, typedefs, var_attrs, depth) return process_array(prefix, type_str, structs, typedefs, var_attrs, depth)
# Ищем структуру по имени типа # Ищем структуру по имени типа
base_type = scan_vars.strip_ptr_and_array(type_str) base_type = scanVars.strip_ptr_and_array(type_str)
fields = structs.get(base_type) fields = structs.get(base_type)
if not isinstance(fields, dict): if not isinstance(fields, dict):
# Не структура и не массив — просто возвращаем пустой список # Не структура и не массив — просто возвращаем пустой список

View File

@ -26,9 +26,7 @@ ICON_ICO_PATH = SRC_PATH / "icon.ico"
TEMP_FOLDERS = [ TEMP_FOLDERS = [
"build_temp", "build_temp",
"__pycache__", "__pycache__",
"DebugVarEdit_GUI.build", "DebugVarEdit_GUI\..*$"
"DebugVarEdit_GUI.onefile-build",
"DebugVarEdit_GUI.dist"
] ]
# === Пути к DLL и прочим зависимостям === # === Пути к DLL и прочим зависимостям ===
LIBS = { LIBS = {