feat: pycanstudio generate C code

This commit is contained in:
anjingyu 2025-07-15 14:31:08 +08:00
parent 6444378882
commit 9547759ab3
3 changed files with 53 additions and 12 deletions

1
dbcc/.gitignore vendored
View File

@ -3,6 +3,7 @@
bin/
lib/
test/dbcc/
test-data/
# Generated by Cargo
# will have compiled files and executables

View File

@ -35,10 +35,14 @@ from ttkwidgets import CheckboxTreeview, DebugWindow
from .status_bar import StatusBar
from .tabs.info_view import InfoView
# from .tabs.text_view import CodeText
from .tabs.code_view import CodeEditor
from .tabs.text_view import CodeText
from .util import change_encode
import pygments
import pygments.lexers
from chlorophyll import CodeView
import dbcc
from dbcc import GenHelper
@ -74,6 +78,7 @@ class App(ttk.Window):
self.__msgs = {}
self.__dp = None
self.__dbc_file_path = ""
self.__code_views = {}
# Update font for Linux
self.__change_font()
@ -297,7 +302,7 @@ class App(ttk.Window):
for k, _ in json_obj['feedback'].items():
all_lines.append(gh.gen_msg_unpack_def(k, 0))
self.__text_view.set_content('\n'.join(all_lines))
self.__update_tab_page('\n'.join(all_lines), "feedback")
except Exception as e:
ttk.dialogs.Messagebox.show_error(
message=f"{str(e)}, Failed to generate Feedback signals",
@ -379,7 +384,7 @@ class App(ttk.Window):
for k, _ in json_obj['control'].items():
all_lines.append(gh.gen_msg_pack_def(k, 0))
self.__text_view.set_content('\n'.join(all_lines))
self.__update_tab_page('\n'.join(all_lines), "control")
except Exception as e:
traceback.print_exc()
ttk.dialogs.Messagebox.show_error(
@ -410,6 +415,41 @@ class App(ttk.Window):
sbar.grid()
sbar.set(first, last)
def __close_tab(self, event):
if event.widget.identify(event.x, event.y) == "label":
index = event.widget.index(f"@{event.x},{event.y}")
name = event.widget.tab(index, "text")
if name in self.__code_views:
event.widget.forget(index)
def __update_tab_page(self, content: str, name: str):
if name not in self.__code_views:
code_frame = ttk.Frame(self.rframe)
code_editor = CodeView(code_frame, pygments.lexers.CppLexer, "dracula")
# Append content
code_editor.delete("1.0", END)
code_editor.insert(END, content)
self.rframe.add(code_frame, text=name)
code_editor.pack(fill=BOTH, expand=True)
self.rframe.select(code_frame)
self.__code_views[name] = (code_frame, code_editor)
else: # Switch this tab
try:
self.rframe.index(self.__code_views[name][0])
self.rframe.select(self.__code_views[name][0])
code_editor = self.__code_views[name][1]
code_editor.delete("1.0", END)
code_editor.insert(END, content)
except Exception:
self.rframe.add(self.__code_views[name][0], text=name)
self.rframe.index(self.__code_views[name][0])
self.rframe.select(self.__code_views[name][0])
def __setup_ui(self):
self.__setup_menu()
@ -462,16 +502,15 @@ class App(ttk.Window):
self.tv.heading('#0', text='', anchor='w')
self.tv.column("#0", minwidth=200, stretch=True)
self.rframe = ttk.Frame(self.lrframe)
# self.rframe = ttk.Frame(self.lrframe)
self.rframe = ttk.Notebook(self.main_frame)
self.rframe.bind("<ButtonRelease-3>", self.__close_tab)
self.rframe.grid(row=0, column=1, padx=1, sticky=NSEW)
# Right frame
self.__note_book = ttk.Notebook(self.rframe)
self.__info_view = InfoView(self.__note_book, border=0)
self.__note_book.add(self.__info_view, text="Layout")
self.__text_view = CodeEditor(self.__note_book, border=0)
self.__note_book.add(self.__text_view, text="Code")
self.__note_book.pack(expand=True, fill=BOTH)
self.__info_view = InfoView(self.rframe, border=0)
self.rframe.add(self.__info_view, text="Layout")
self.lrframe.add(self.lframe)
self.lrframe.add(self.rframe)

View File

@ -6,6 +6,7 @@ ttkwidgets
ttkbootstrap
matplotlib
pygments
chlorophyll
# nuitka
# nuitka depends on it when do building
# orderedset