mirror of
https://github.com/Faraphel/Atlas-Install.git
synced 2025-07-03 03:08:29 +02:00
fully implemented track_selecting preview
This commit is contained in:
parent
222886e009
commit
5dcb0d4343
2 changed files with 101 additions and 14 deletions
|
@ -26,27 +26,27 @@ class Window(AbstractPreviewWindow):
|
|||
self.entry_template_input.grid(row=1, column=1, columnspan=2, sticky="NEWS")
|
||||
self.entry_template_input.bind("<Return>", self.preview)
|
||||
|
||||
self.text_track_preview = tkinter.Text(
|
||||
self.text_track_format = tkinter.Text(
|
||||
self, background="black", foreground=MKWColor("off").color_code, state=tkinter.DISABLED
|
||||
)
|
||||
self.text_track_preview.grid(row=2, column=1, sticky="NEWS")
|
||||
self.text_track_format.grid(row=2, column=1, sticky="NEWS")
|
||||
|
||||
self.scrollbar_track_preview = ttk.Scrollbar(self, command=self.text_track_preview.yview)
|
||||
self.scrollbar_track_preview = ttk.Scrollbar(self, command=self.text_track_format.yview)
|
||||
self.scrollbar_track_preview.grid(row=2, column=2, sticky="NEWS")
|
||||
|
||||
self.text_track_preview.configure(yscrollcommand=self.scrollbar_track_preview.set)
|
||||
self.text_track_format.configure(yscrollcommand=self.scrollbar_track_preview.set)
|
||||
|
||||
for color in MKWColor.get_all_colors():
|
||||
self.text_track_preview.tag_configure(color.bmg, foreground=color.color_code)
|
||||
self.text_track_preview.tag_configure("error", background="red", foreground="white")
|
||||
|
||||
self.text_track_format.tag_configure(color.bmg, foreground=color.color_code)
|
||||
self.text_track_format.tag_configure("error", background="red", foreground="white")
|
||||
|
||||
def preview(self, event: tkinter.Event = None):
|
||||
"""
|
||||
Preview all the tracks name with the track format
|
||||
:return:
|
||||
"""
|
||||
self.text_track_preview.configure(state=tkinter.NORMAL)
|
||||
self.text_track_preview.delete(1.0, tkinter.END)
|
||||
self.text_track_format.configure(state=tkinter.NORMAL)
|
||||
self.text_track_format.delete(1.0, tkinter.END)
|
||||
|
||||
# insert all the tracks representation
|
||||
for track in self.mod_config.get_tracks():
|
||||
|
@ -70,14 +70,14 @@ class Window(AbstractPreviewWindow):
|
|||
return "" # remove the tag
|
||||
|
||||
# insert into the text the track_repr without the tags
|
||||
self.text_track_preview.insert(
|
||||
self.text_track_format.insert(
|
||||
tkinter.END,
|
||||
re.sub(r"\\c{(?P<color_name>.*?)}", tag_format, track_repr) + "\n"
|
||||
)
|
||||
|
||||
# color every part of the track_repr with the position and color got in the re.sub
|
||||
for (pos_start, tag_start), (pos_end, tag_end) in zip(tags, tags[1:] + [(None, None)]):
|
||||
self.text_track_preview.tag_add(
|
||||
self.text_track_format.tag_add(
|
||||
tag_start,
|
||||
f"end-1c-1l+{pos_start}c",
|
||||
"end-1c" + (f"-1l+{pos_end}c" if pos_end is not None else "")
|
||||
|
@ -85,8 +85,8 @@ class Window(AbstractPreviewWindow):
|
|||
|
||||
except Exception as exc:
|
||||
formatted_exc = str(exc).replace('\n', ' ')
|
||||
self.text_track_preview.insert(tkinter.END, f"< Error: {formatted_exc} >\n")
|
||||
self.text_track_preview.tag_add("error", "end-1c-1l", "end-1c")
|
||||
self.text_track_format.insert(tkinter.END, f"< Error: {formatted_exc} >\n")
|
||||
self.text_track_format.tag_add("error", "end-1c-1l", "end-1c")
|
||||
|
||||
self.text_track_preview.configure(state=tkinter.DISABLED)
|
||||
self.text_track_format.configure(state=tkinter.DISABLED)
|
||||
|
||||
|
|
|
@ -0,0 +1,87 @@
|
|||
import tkinter
|
||||
from tkinter import ttk
|
||||
import re
|
||||
|
||||
from source.mkw.MKWColor import MKWColor
|
||||
from source.gui.preview import AbstractPreviewWindow
|
||||
from source.gui import better_gui_error
|
||||
|
||||
|
||||
ModConfig: any
|
||||
|
||||
|
||||
class Window(AbstractPreviewWindow):
|
||||
|
||||
name = "track_selecting"
|
||||
|
||||
def __init__(self, mod_config: "ModConfig", template_variable: tkinter.StringVar = None):
|
||||
super().__init__(mod_config, template_variable)
|
||||
self.grid_rowconfigure(2, weight=1)
|
||||
self.grid_columnconfigure(1, weight=1)
|
||||
self.grab_set()
|
||||
|
||||
if template_variable is None: template_variable = tkinter.StringVar()
|
||||
self.mod_config = mod_config
|
||||
|
||||
self.entry_template_input = ttk.Entry(self, width=100, textvariable=template_variable)
|
||||
self.entry_template_input.grid(row=1, column=1, columnspan=2, sticky="NEWS")
|
||||
self.entry_template_input.bind("<Return>", self.preview)
|
||||
|
||||
self.text_track_format = tkinter.Text(self, width=40, bg="black", fg=MKWColor("off").color_code, state=tkinter.DISABLED)
|
||||
self.text_track_format.grid(row=2, column=1, sticky="NEWS")
|
||||
|
||||
self.text_track_select = tkinter.Text(self, width=20, bg="black", state=tkinter.DISABLED)
|
||||
self.text_track_select.grid(row=2, column=2, sticky="NEWS")
|
||||
|
||||
# if a textbox is scrolled, the scrollbar and the other textbox will be affected too
|
||||
def scroll_textbox(first: int, last: int):
|
||||
self.scrollbar_track_preview.set(first, last)
|
||||
self.text_track_format.yview("moveto", first)
|
||||
self.text_track_select.yview("moveto", first)
|
||||
|
||||
# if the scrollbar is scrolled, then the two textbox are affected
|
||||
self.scrollbar_track_preview = ttk.Scrollbar(self,
|
||||
command=lambda *args: (
|
||||
self.text_track_format.yview(*args),
|
||||
self.text_track_select.yview(*args)
|
||||
)
|
||||
)
|
||||
self.scrollbar_track_preview.grid(row=2, column=3, sticky="NEWS")
|
||||
|
||||
self.text_track_format.configure(yscrollcommand=scroll_textbox)
|
||||
self.text_track_select.configure(yscrollcommand=scroll_textbox)
|
||||
|
||||
self.text_track_select.tag_configure("True", foreground="white", background="green")
|
||||
self.text_track_select.tag_configure("False", foreground="white", background="red")
|
||||
|
||||
self.refresh_tracks_format()
|
||||
|
||||
def refresh_tracks_format(self) -> None:
|
||||
"""
|
||||
Preview all the tracks name with the track format
|
||||
:return:
|
||||
"""
|
||||
self.text_track_format.configure(state=tkinter.NORMAL)
|
||||
self.text_track_format.delete(1.0, tkinter.END)
|
||||
|
||||
# insert all the tracks representation
|
||||
for track in self.mod_config.get_tracks():
|
||||
self.text_track_format.insert(tkinter.END, f"{track}\n")
|
||||
|
||||
self.text_track_format.configure(state=tkinter.DISABLED)
|
||||
|
||||
@better_gui_error
|
||||
def preview(self, event: tkinter.Event = None) -> None:
|
||||
"""
|
||||
Preview all the tracks selection with the given template
|
||||
"""
|
||||
self.text_track_select.configure(state=tkinter.NORMAL)
|
||||
self.text_track_select.delete(1.0, tkinter.END)
|
||||
|
||||
for track in self.mod_config.get_tracks():
|
||||
value = self.mod_config.safe_eval(self.entry_template_input.get(), env={"track": track}) == "True"
|
||||
self.text_track_select.insert(tkinter.END, f"{value}\n")
|
||||
self.text_track_select.tag_add(str(value), "end-1c-1l", "end-1c")
|
||||
|
||||
self.text_track_select.configure(state=tkinter.DISABLED)
|
||||
|
Loading…
Reference in a new issue