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") 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 main(): parser = argparse.ArgumentParser() parser.add_argument("--verbose", help="increase output verbosity", action="store_true") parser.add_argument("--quiet", help="silence all output", action="store_true") subparsers = parser.add_subparsers() compile_parser = subparsers.add_parser("compile", help="compile from project to rom") compile_parser.add_argument("project_directory") compile_parser.add_argument("base_rom") compile_parser.add_argument("output_rom") compile_parser.set_defaults(func=_compile) decompile_parser = subparsers.add_parser("decompile", help="decompile from rom to project") decompile_parser.add_argument("rom") decompile_parser.add_argument("project_directory") decompile_parser.set_defaults(func=_decompile) upgrade_parser = subparsers.add_parser("upgrade", help="upgrade a project which was created by an older version of CoilSnake") upgrade_parser.add_argument("base_rom") upgrade_parser.add_argument("project_directory") upgrade_parser.set_defaults(func=_upgrade) version_parser = subparsers.add_parser("version", help="display version information") version_parser.set_defaults(func=_version) args = parser.parse_args() setup_logging(quiet=args.quiet, verbose=args.verbose) args.func(args)
def main(): parser = argparse.ArgumentParser() parser.add_argument("--verbose", help="increase output verbosity", action="store_true") parser.add_argument("--quiet", help="silence all output", action="store_true") subparsers = parser.add_subparsers() compile_parser = subparsers.add_parser("compile", help="compile from project to rom") compile_parser.add_argument("project_directory") compile_parser.add_argument("base_rom") compile_parser.add_argument("output_rom") compile_parser.set_defaults(func=_compile) decompile_parser = subparsers.add_parser( "decompile", help="decompile from rom to project") decompile_parser.add_argument("rom") decompile_parser.add_argument("project_directory") decompile_parser.set_defaults(func=_decompile) upgrade_parser = subparsers.add_parser( "upgrade", help= "upgrade a project which was created by an older version of CoilSnake") upgrade_parser.add_argument("base_rom") upgrade_parser.add_argument("project_directory") upgrade_parser.set_defaults(func=_upgrade) decomp_script_parser = subparsers.add_parser( "scriptdump", help="Decompile a ROM's script to an already existing project.") decomp_script_parser.add_argument("rom_filename") decomp_script_parser.add_argument("project_directory") decomp_script_parser.set_defaults(func=_scriptdump) patch_rom_parser = subparsers.add_parser( "patchrom", help= "Apply an EBP or IPS patch to a ROM (for headered give true or false)") patch_rom_parser.add_argument("clean_rom") patch_rom_parser.add_argument("output_rom") patch_rom_parser.add_argument("patch") patch_rom_parser.add_argument("headered") patch_rom_parser.set_defaults(func=_patchrom) version_parser = subparsers.add_parser("version", help="display version information") version_parser.set_defaults(func=_version) args = parser.parse_args() setup_logging(quiet=args.quiet, verbose=args.verbose) args.func(args)
def main(): parser = argparse.ArgumentParser() parser.add_argument("--verbose", help="increase output verbosity", action="store_true") parser.add_argument("--quiet", help="silence all output", action="store_true") subparsers = parser.add_subparsers() compile_parser = subparsers.add_parser("compile", help="compile from project to rom") compile_parser.add_argument("project_directory") compile_parser.add_argument("base_rom") compile_parser.add_argument("output_rom") compile_parser.set_defaults(func=_compile) decompile_parser = subparsers.add_parser( "decompile", help="decompile from rom to project") decompile_parser.add_argument("rom") decompile_parser.add_argument("project_directory") decompile_parser.set_defaults(func=_decompile) upgrade_parser = subparsers.add_parser( "upgrade", help= "upgrade a project which was created by an older version of CoilSnake") upgrade_parser.add_argument("base_rom") upgrade_parser.add_argument("project_directory") upgrade_parser.set_defaults(func=_upgrade) version_parser = subparsers.add_parser("version", help="display version information") version_parser.set_defaults(func=_version) args = parser.parse_args() setup_logging(quiet=args.quiet, verbose=args.verbose) args.func(args)
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) 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 main(): parser = argparse.ArgumentParser() parser.add_argument("--verbose", help="increase output verbosity", action="store_true") parser.add_argument("--quiet", help="silence all output", action="store_true") subparsers = parser.add_subparsers(dest="action") subparsers.required = True compile_parser = subparsers.add_parser("compile", help="compile from project to rom") compile_parser.add_argument("project_directory") compile_parser.add_argument("base_rom") compile_parser.add_argument("output_rom") compile_parser.set_defaults(func=_compile) decompile_parser = subparsers.add_parser("decompile", help="decompile from rom to project") decompile_parser.add_argument("rom") decompile_parser.add_argument("project_directory") decompile_parser.set_defaults(func=_decompile) upgrade_parser = subparsers.add_parser("upgrade", help="upgrade a project which was created by an older version of CoilSnake") upgrade_parser.add_argument("base_rom") upgrade_parser.add_argument("project_directory") upgrade_parser.set_defaults(func=_upgrade) decomp_script_parser = subparsers.add_parser("scriptdump", help="Decompile a ROM's script to an already existing project.") decomp_script_parser.add_argument("rom_filename") decomp_script_parser.add_argument("project_directory") decomp_script_parser.set_defaults(func=_scriptdump) patch_rom_parser = subparsers.add_parser("patchrom", help="Apply an EBP or IPS patch to a ROM (for headered give true or false)") patch_rom_parser.add_argument("clean_rom") patch_rom_parser.add_argument("output_rom") patch_rom_parser.add_argument("patch") patch_rom_parser.add_argument("headered") patch_rom_parser.set_defaults(func=_patchrom) createpatch_parser = subparsers.add_parser("createpatch", help="Create a patch from a clean ROM and a hacked ROM.") createpatch_parser.add_argument("clean_rom") createpatch_parser.add_argument("hacked_rom") createpatch_parser.add_argument("output_path") createpatch_parser.add_argument("author", nargs='?') createpatch_parser.add_argument("description", nargs='?') createpatch_parser.add_argument("title", nargs='?') createpatch_parser.set_defaults(func=_createpatch) expand_parser = subparsers.add_parser("expand", help="Expand a ROM's size to 32 MBits (4MB) or 48 MBits (6MB). exhi is false for 4MB, and true for 6MB.") expand_parser.add_argument("rom") expand_parser.add_argument("exhi") expand_parser.set_defaults(func=_expand) addheader_parser = subparsers.add_parser("addheader", help="Add a header to a ROM.") addheader_parser.add_argument("rom") addheader_parser.set_defaults(func=_addheader) stripheader_parser = subparsers.add_parser("stripheader", help="Remove a header from a ROM.") stripheader_parser.add_argument("rom") stripheader_parser.set_defaults(func=_stripheader) version_parser = subparsers.add_parser("version", help="display version information") version_parser.set_defaults(func=_version) args = parser.parse_args() setup_logging(quiet=args.quiet, verbose=args.verbose) args.func(args)
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()
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()