def create_gui(self): self.root = Tk() self.root.wm_title("CoilSnake " + information.VERSION) if platform.system() == "Windows": self.root.tk.call("wm", "iconbitmap", self.root._w, asset_path(["images", "CoilSnake.ico"])) elif platform.system() == "Darwin": # Workaround - Raise the window from Cocoa import NSRunningApplication, NSApplicationActivateIgnoringOtherApps app = NSRunningApplication.runningApplicationWithProcessIdentifier_( os.getpid()) app.activateWithOptions_(NSApplicationActivateIgnoringOtherApps) else: self.iconphoto_params = ( True, ImageTk.PhotoImage(file=asset_path(["images", "16.png"])), ImageTk.PhotoImage(file=asset_path(["images", "22.png"])), ImageTk.PhotoImage(file=asset_path(["images", "24.png"])), ImageTk.PhotoImage(file=asset_path(["images", "32.png"])), ImageTk.PhotoImage(file=asset_path(["images", "48.png"])), ImageTk.PhotoImage(file=asset_path(["images", "64.png"])), ImageTk.PhotoImage(file=asset_path(["images", "128.png"])), ImageTk.PhotoImage(file=asset_path(["images", "256.png"]))) self.root.wm_iconphoto(*self.iconphoto_params) self.create_menubar() self.notebook = tkinter.ttk.Notebook(self.root) decompile_frame = self.create_decompile_frame(self.notebook) self.notebook.add(decompile_frame, text="Decompile") compile_frame = self.create_compile_frame(self.notebook) self.notebook.add(compile_frame, text="Compile") upgrade_frame = self.create_upgrade_frame(self.notebook) self.notebook.add(upgrade_frame, text="Upgrade") decompile_script_frame = self.create_decompile_script_frame( self.notebook) self.notebook.add(decompile_script_frame, text="Decompile Script") patcher_patch_frame = self.create_apply_patch_frame(self.notebook) self.notebook.add(patcher_patch_frame, text="Apply Patch") patcher_create_frame = self.create_create_patch_frame(self.notebook) self.notebook.add(patcher_create_frame, text="Create Patch") self.notebook.pack(fill=X) self.notebook.select(self.preferences.get_default_tab()) self.progress_bar = CoilSnakeGuiProgressBar(self.root, orient=HORIZONTAL, mode='determinate') self.progress_bar.pack(fill=X) console_frame = Frame(self.root) scrollbar = Scrollbar(console_frame) scrollbar.pack(side=RIGHT, fill=Y) self.console = ThreadSafeConsole(console_frame, width=80, height=8) self.console.pack(fill=BOTH, expand=1) scrollbar.config(command=self.console.yview) self.console.config(yscrollcommand=scrollbar.set) console_frame.pack(fill=BOTH, expand=1) def selectall_text(event): event.widget.tag_add("sel", "1.0", "end") self.root.bind_class("Text", "<Control-a>", selectall_text) def selectall_entry(event): event.widget.selection_range(0, END) self.root.bind_class("Entry", "<Control-a>", selectall_entry) def tab_changed(event): # Do this so some random element in the tab isn't selected upon tab change self.notebook.focus() ## Recalculate the height of the notebook depending on the contents of the new tab # Ensure the dimensions of the widgets are up to date self.notebook.update_idletasks() # Get the width and height of the window, so we can reset it later width = self.root.winfo_width() height = self.root.winfo_height() # Set the notebook height to the selected tab's requested height tab_window_name = self.notebook.select() tab = self.notebook.nametowidget(tab_window_name) tab_height = tab.winfo_reqheight() self.notebook.configure(height=tab_height) # Keeps the window from changing size self.root.geometry("{}x{}".format(width, height)) self.notebook.bind("<<NotebookTabChanged>>", tab_changed) self.console_stream = self.console setup_logging(quiet=False, verbose=False, stream=self.console_stream) self.refresh_debug_logging() self.load_geometry() self.root.protocol("WM_DELETE_WINDOW", self.save_geometry_and_close)
def create_gui(self): self.root = Tk() self.root.wm_title("CoilSnake " + information.VERSION) self.icon = ImageTk.PhotoImage(file=asset_path(["images", "icon.png"])) self.root.tk.call('wm', 'iconphoto', self.root._w, self.icon) self.create_menubar() self.notebook = ttk.Notebook(self.root) decompile_frame = self.create_decompile_frame(self.notebook) self.notebook.add(decompile_frame, text="Decompile") compile_frame = self.create_compile_frame(self.notebook) self.notebook.add(compile_frame, text="Compile") upgrade_frame = self.create_upgrade_frame(self.notebook) self.notebook.add(upgrade_frame, text="Upgrade") decompile_script_frame = self.create_decompile_script_frame( self.notebook) self.notebook.add(decompile_script_frame, text="Decompile Script") patcher_patch_frame = self.create_apply_patch_frame(self.notebook) self.notebook.add(patcher_patch_frame, text="Apply Patch") #patcher_create_frame = self.create_create_patch_frame(self.notebook) #self.notebook.add(patcher_create_frame, text="Create Patch") self.notebook.pack(fill=BOTH, expand=1) self.notebook.select(self.preferences.get_default_tab()) self.progress_bar = CoilSnakeGuiProgressBar(self.root, orient=HORIZONTAL, mode='determinate') self.progress_bar.pack(fill=BOTH, expand=1) console_frame = Frame(self.root) scrollbar = Scrollbar(console_frame) scrollbar.pack(side=RIGHT, fill=Y) self.console = ThreadSafeConsole(console_frame, width=80, height=8) self.console.pack(fill=X) scrollbar.config(command=self.console.yview) self.console.config(yscrollcommand=scrollbar.set) console_frame.pack(fill=X, expand=1) def selectall_text(event): event.widget.tag_add("sel", "1.0", "end") self.root.bind_class("Text", "<Control-a>", selectall_text) def selectall_entry(event): event.widget.selection_range(0, END) self.root.bind_class("Entry", "<Control-a>", selectall_entry) def tab_changed(event): # Do this so some random element in the tab isn't selected upon tab change self.notebook.focus() self.notebook.bind("<<NotebookTabChanged>>", tab_changed) self.console_stream = self.console setup_logging(quiet=False, verbose=False, stream=self.console_stream) self.refresh_debug_logging()
def create_gui(self): self.root = Tk() self.root.wm_title("CoilSnake " + information.VERSION) self.icon = ImageTk.PhotoImage(file=asset_path(["images", "icon.png"])) self.root.tk.call('wm', 'iconphoto', self.root._w, self.icon) self.create_menubar() self.notebook = tkinter.ttk.Notebook(self.root) decompile_frame = self.create_decompile_frame(self.notebook) self.notebook.add(decompile_frame, text="Decompile") compile_frame = self.create_compile_frame(self.notebook) self.notebook.add(compile_frame, text="Compile") upgrade_frame = self.create_upgrade_frame(self.notebook) self.notebook.add(upgrade_frame, text="Upgrade") decompile_script_frame = self.create_decompile_script_frame(self.notebook) self.notebook.add(decompile_script_frame, text="Decompile Script") patcher_patch_frame = self.create_apply_patch_frame(self.notebook) self.notebook.add(patcher_patch_frame, text="Apply Patch") #patcher_create_frame = self.create_create_patch_frame(self.notebook) #self.notebook.add(patcher_create_frame, text="Create Patch") self.notebook.pack(fill=X) self.notebook.select(self.preferences.get_default_tab()) self.progress_bar = CoilSnakeGuiProgressBar(self.root, orient=HORIZONTAL, mode='determinate') self.progress_bar.pack(fill=X) console_frame = Frame(self.root) scrollbar = Scrollbar(console_frame) scrollbar.pack(side=RIGHT, fill=Y) self.console = ThreadSafeConsole(console_frame, width=80, height=8) self.console.pack(fill=BOTH, expand=1) scrollbar.config(command=self.console.yview) self.console.config(yscrollcommand=scrollbar.set) console_frame.pack(fill=BOTH, expand=1) def selectall_text(event): event.widget.tag_add("sel", "1.0", "end") self.root.bind_class("Text", "<Control-a>", selectall_text) def selectall_entry(event): event.widget.selection_range(0, END) self.root.bind_class("Entry", "<Control-a>", selectall_entry) def tab_changed(event): # Do this so some random element in the tab isn't selected upon tab change self.notebook.focus() ## Recalculate the height of the notebook depending on the contents of the new tab # Ensure the dimensions of the widgets are up to date self.notebook.update_idletasks() # Get the geometry of the window, so we can reset it later window_geometry = self.root.winfo_geometry() # Set the notebook height to the selected tab's requested height tab_window_name = self.notebook.select() tab = self.notebook.nametowidget(tab_window_name) tab_height = tab.winfo_reqheight() self.notebook.configure(height=tab_height) # Keeps the window from changing size self.root.geometry(window_geometry) self.notebook.bind("<<NotebookTabChanged>>", tab_changed) self.console_stream = self.console setup_logging(quiet=False, verbose=False, stream=self.console_stream) self.refresh_debug_logging()