feat: pycanstudio generate C code
This commit is contained in:
parent
6444378882
commit
9547759ab3
|
@ -3,6 +3,7 @@
|
|||
bin/
|
||||
lib/
|
||||
test/dbcc/
|
||||
test-data/
|
||||
|
||||
# Generated by Cargo
|
||||
# will have compiled files and executables
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -6,6 +6,7 @@ ttkwidgets
|
|||
ttkbootstrap
|
||||
matplotlib
|
||||
pygments
|
||||
chlorophyll
|
||||
# nuitka
|
||||
# nuitka depends on it when do building
|
||||
# orderedset
|
||||
|
|
Loading…
Reference in New Issue