def videoDownload(self, quantity, path, num): videourl = self.videoMp4(quantity) if videourl != None: savefile = SaveFile(path) return savefile.saveFromUrl(videourl, self.videoTitle, num) else: return None
def save_library(self, new_page_start): self.library.save(self.library_file) save_file = SaveFile.load(self.save_file) if not ret.success(save_file): self.log("Unable to load save file: " + self.save_file) return ret.ERROR save_file.page_start = new_page_start save_file.save() self.log("Successfully updated library and save file with new scene!") return ret.SUCCESS
def process_save_file(self, save_file_name): save_data = SaveFile.load(save_file_name) if not ret.success(save_data): self.log("ERROR: unable to open save file: " + save_file_name) return ret.ERROR #try/catch here for checking data translation? self.save_file = save_data.name self.library_file = save_data.library_file self.book_file = save_data.book_file self.universe_name = save_data.universe_name self.series_name = save_data.series_name self.book_name = save_data.book_name self.page_start = save_data.page_start self.library = Library.load(self.library_file) if not ret.success(self.library): self.library = Library() self.library.save(self.library_file) return ret.SUCCESS
def load(self): filename = filedialog.askopenfilename( filetypes=(("ATL save files", ".ATL"), ("All files", "*.*")), defaultextension=".ATL" ) if len(filename) == 0: # breaks out of the method if the user hit cancel in the dialog return match = re.search("(\w:/[/\w+]+/)(.*)(\.\w+)", filename) path = match.group(1) name = match.group(2) extension = match.group(3) self.savefile = SaveFile(self, path, name + extension) self.savefile.load() self.save_selected = True
def save_as(self): # Opens up the save as dialog and returns the path + filename + extension filename = filedialog.asksaveasfilename( filetypes=(("ATL save files", ".ATL"), ("All files", "*.*")), defaultextension=".ATL" ) if len(filename) == 0: # breaks out of the method if the user hit cancel in the dialog return match = re.search("(\w:/[/\w+]+/)(.*)(\.\w+)", filename) path = match.group(1) name = match.group(2) extension = match.group(3) self.savefile = SaveFile(self, path, name + extension) self.savefile.save(self.aircraft_list, self.analysis_list) self.save_selected = True
def process_cmd(cmd_str, save_str): importer = SceneImporter() cmd_parts = util.split(cmd_str, '=') if len(cmd_parts) < 1: importer.log("No command entry in: " + cmd_str) return ret.ERROR, importer status = importer.process_save_file(save_str) if not ret.success(status): importer.log("Unable to import save file: " + save_str) return ret.ERROR, importer #disp_char if cmd_parts[0] == 'disp_char': if len(cmd_parts) < 2: importer.log("No character name provided in: " + cmd_str) return ret.BAD_INPUT, importer universe = importer.library.get_universe(importer.universe_name) if cmd_parts[1] == "all": for c in universe.characters: importer.log(c.print_info()) return ret.HOME, importer character = Character.match(universe.characters, cmd_parts[1]) #and now this is where loose is needed (future TODO) if not ret.success(character): importer.log("Unable to match character: " + cmd_parts[1]) return ret.ERROR, importer importer.log(character.print_info()) return ret.HOME, importer #disp_chapter if cmd_parts[0] == 'disp_chapter': if len(cmd_parts) < 2: importer.log("No chapter name provided in: " + cmd_str) return ret.BAD_INPUT, importer book = importer.library.get_universe( importer.universe_name).get_series(importer.series_name).get_book( importer.book_name) if cmd_parts[1] == "all": for c in book.chapters: importer.log(c.print_info()) for s in c.scenes: importer.log(s.print_info()) return ret.HOME, importer chapter = Chapter.match(book.chapters, cmd_parts[1], False) if not ret.success(chapter): importer.log("Unable to find chapter: " + cmd_parts[1]) return ret.ERROR, importer importer.log(chapter.print_info()) for s in chapter.scenes: importer.log(s.print_info()) return ret.HOME, importer #disp_book if cmd_parts[0] == 'disp_book': book = importer.library.get_universe( importer.universe_name).get_series(importer.series_name).get_book( importer.book_name) importer.log(book.print_info()) return ret.HOME, importer #disp_save if cmd_parts[0] == 'disp_save': save_data = SaveFile.load(importer.save_file) if not ret.success(save_data): importer.log("ERROR: unable to open save file: " + importer.save_file) return ret.HOME, importer importer.log(save_data.print_info()) return ret.HOME, importer #text_tool if cmd_parts[0] == 'text_tool': status = importer.generate_known_names() return ret.TEXT_TOOL, importer #find_pos if cmd_parts[0] == 'find_pos': if len(cmd_parts) < 2: importer.log("No valid search text provided in: " + cmd_str) return ret.BAD_INPUT, importer try: input = open(importer.book_file, 'r') book_text = input.read() except: importer.log("Failed to read input file") return ret.BAD_INPUT, importer position = book_text.find(cmd_parts[1]) if position >= 0: importer.log("Text Position: " + str(position)) importer.log("Next 100 chars:\n" + book_text[position:position + 100]) else: importer.log("Unable to find input string: " + cmd_parts[1]) return ret.HOME, importer #set_pos if cmd_parts[0] == "set_pos": if len(cmd_parts) < 2: importer.log("No position provided in: " + cmd_str) return ret.BAD_INPUT, importer position = int(cmd_parts[1]) save_data = SaveFile.load(importer.save_file) save_data.page_start = position save_data.save() importer.log("Set new save position to: " + str(position)) importer.log(save_data.print_info()) return ret.HOME, importer #script if cmd_parts[0] == "script": importer.script() return ret.HOME, importer importer.log("Unsupported command entry: " + cmd_str) return ret.ERROR, importer """
new_c.joins = c.joins new_c.tags = c.tags new_uni.characters.append(copy.copy(new_c)) for ch in old_book.chapters: for s in ch.scenes: for i in s.included: if i["character"].name == new_c.name: i["character"] = copy.copy(new_c) new_series.books.append(old_book) new_uni.series.append(new_series) log.out(new_library.print_info()) log.out(new_uni.print_info()) log.out(new_series.print_info()) new_library.save("data\\library_2_15") save_file = SaveFile("data\\hobbit.sav", "", "data\\library_2_15", "Middle Earth", "The Hobbit", "The Hobbit", 0) log.out(save_file.print_info()) save_file.save() #corrective save data after a bad save if 0: save_file = SaveFile.load("data\\eotw.sav") library = Library.load("data\\library_2_8") log.out(save_file.print_info()) #checking perspective info if 0: library = Library.load("data\\library_2_8") series = library.get_series("The Lord of the Rings") book = series.get_book("The Hobbit") chapter = book.find_chapter("Riddles in the Dark")
class ATL: def __init__(self, build, icon): self.build = build self.icon = icon self.savefile = None self.aircraft_list = [] self.analysis_list = [] self.selected_aircraft = None self.selected_analysis = None self.save_selected = False # Boolean checking if a save file is currently selected # (e.g. a project has been loaded) self.data = None # Root and frame self.root = Tk() # Initialize the base GUI self.root.title("ATL") self.root.state("zoomed") fr_content = ttk.Frame(self.root) # Initialize the main content frame as a child of root. fr_selection = ttk.Frame(fr_content) fr_status_bar = ttk.Frame(fr_content, borderwidth=5, relief="sunken", width=2000, height=10) fr_graph = ttk.Frame(fr_content, borderwidth=5) fr_results_summary = ttk.Frame(fr_content, borderwidth=5, relief="sunken") fr_var_selec = ttk.Frame(fr_content) # Menu # create a toplevel menu menubar = Menu(self.root) filemenu = Menu(menubar, tearoff=0) filemenu.add_command(label="New Project", command=self.save_as) filemenu.add_command(label="Open Project", command=self.load) filemenu.add_command(label="Close Project", command=self.close_project) filemenu.add_command(label="Save", command=self.save) filemenu.add_command(label="Save As", command=self.save_as) filemenu.add_separator() filemenu.add_command(label="Exit", command=self.root.quit) menubar.add_cascade(label="File", menu=filemenu) # Analysis menu analysismenu = Menu(menubar, tearoff=0) analysismenu.add_command(label="New Aircraft", command=self.AircraftGUInew) analysismenu.add_command(label="Edit Aircraft", command=self.AircraftGUIedit, state=DISABLED) analysismenu.add_command(label="Delete Aircraft", command=self.delete_aircraft, state=DISABLED) analysismenu.add_separator() analysismenu.add_command(label="New Analysis", command=self.AnalysisGUInew) analysismenu.add_command(label="Edit Analysis", command=self.AnalysisGUIedit, state=DISABLED) analysismenu.add_command(label="Delete Analysis", command=self.delete_analysis, state=DISABLED) analysismenu.add_command(label="Run Analysis", command=self.analysis_execute, state=DISABLED) menubar.add_cascade(label="Analysis", menu=analysismenu) helpmenu = Menu(menubar, tearoff=0) helpmenu.add_command(label="About") menubar.add_cascade(label="Help", menu=helpmenu) self.menu_file = filemenu self.menu_analysis = analysismenu self.menu_help = helpmenu # display the menu self.root.config(menu=menubar) # fr_var_selec widgets lbl_var_list = ttk.Label(fr_var_selec, text="Variables Available") lbl_var_selec = ttk.Label(fr_var_selec, text="Variables Selected") self.str_var_varlist = StringVar() self.str_var_selec = StringVar() self.lst_box_varlist = Listbox(fr_var_selec, listvariable=self.str_var_varlist) # List of available variables self.lst_box_varsel = Listbox(fr_var_selec, listvariable=self.str_var_selec) # List of selected variables self.lst_box_varlist.bind("<Double-Button-1>", self.var_list_double_clicked) self.lst_box_varsel.bind("<Double-Button-1>", self.var_selec_double_clicked) # fr_status_bar widgets lbl_stat = ttk.Label(fr_status_bar, anchor=E, text=self.build) # fr_selection widgets lbl_selected_aircraft = ttk.Label(fr_selection, text="Selected Aircraft:") str_selected_aircraft = StringVar() self.combo_selected_aircraft = Selection.AircraftCombo(fr_selection, self, str_selected_aircraft) lbl_selected_analysis = ttk.Label(fr_selection, text="Selected Analysis:") str_selected_analysis = StringVar() self.combo_selected_analysis = Selection.AnalysisCombo(fr_selection, self, str_selected_analysis) self.run_analysis = ttk.Button(fr_selection, text="Run analysis", command=self.analysis_execute, state=DISABLED) # fr_results_summary self.results_summary = ResultsSummary.Results(frame=fr_results_summary) # Set resize weights self.root.columnconfigure(0, weight=1) self.root.rowconfigure(0, weight=1) fr_content.columnconfigure(0, weight=0) fr_content.columnconfigure(1, weight=1) fr_content.columnconfigure(2, weight=1) fr_content.rowconfigure(0, weight=0) fr_content.rowconfigure(1, weight=1) fr_content.rowconfigure(2, weight=1) fr_content.rowconfigure(3, weight=0) fr_var_selec.rowconfigure(1, weight=1) fr_var_selec.rowconfigure(3, weight=1) # Grid fr_content.grid(column=0, row=0, sticky=(N, S, E, W)) fr_var_selec.grid(column=0, row=1, rowspan=2, sticky=(N, S, E, W)) fr_selection.grid(column=1, row=0, sticky=W) lbl_var_list.grid(column=0, row=0, padx=5, pady=2) self.lst_box_varlist.grid(column=0, row=1, sticky=(N, S), padx=5, pady=2) lbl_var_selec.grid(column=0, row=2, padx=5, pady=2) self.lst_box_varsel.grid(column=0, row=3, sticky=(N, S), padx=5, pady=2) fr_graph.grid(column=1, row=1, columnspan=2, sticky=(N, S, E, W)) fr_results_summary.grid(column=1, row=2, columnspan=2, stick=(N, S, E, W)) fr_status_bar.grid(column=0, row=3, columnspan=3, sticky=(N, S, E, W)) lbl_stat.pack(side="right") lbl_selected_aircraft.grid(column=0, row=0) self.combo_selected_aircraft.grid(column=1, row=0) lbl_selected_analysis.grid(column=2, row=0) self.combo_selected_analysis.grid(column=3, row=0) self.run_analysis.grid(column=4, row=0) for child in fr_selection.winfo_children(): child.grid_configure(padx=2, pady=2) # Add matplotlib graph self.plot = Plots.LinePlot(fr_graph=fr_graph) self.root.bind("<Control-s>", self.save) self.root.tk.call("wm", "iconbitmap", self.root._w, "-default", os.getcwd() + "\\" + self.icon) self.root.mainloop() # Start the GUI event loop def AircraftGUInew(self): aircraft_input_gui = AircraftInputGUI.AircraftInputGUI( "new", self, self.root, self.aircraft_list, self.selected_aircraft ) def AircraftGUIedit(self): aircraft_input_gui = AircraftInputGUI.AircraftInputGUI( "edit", self, self.root, self.aircraft_list, self.selected_aircraft ) def AnalysisGUInew(self): analysis_input_gui = AnalysisInputGUI.AnalysisInputGUI( "new", self, self.root, self.aircraft_list, self.analysis_list, self.selected_analysis ) def AnalysisGUIedit(self): analysis_input_gui = AnalysisInputGUI.AnalysisInputGUI( "edit", self, self.root, self.aircraft_list, self.analysis_list, self.selected_analysis ) def save_as(self): # Opens up the save as dialog and returns the path + filename + extension filename = filedialog.asksaveasfilename( filetypes=(("ATL save files", ".ATL"), ("All files", "*.*")), defaultextension=".ATL" ) if len(filename) == 0: # breaks out of the method if the user hit cancel in the dialog return match = re.search("(\w:/[/\w+]+/)(.*)(\.\w+)", filename) path = match.group(1) name = match.group(2) extension = match.group(3) self.savefile = SaveFile(self, path, name + extension) self.savefile.save(self.aircraft_list, self.analysis_list) self.save_selected = True def save(self, arg=None): # Dummy variable "arg" needed for ctrl+s key binding if self.save_selected is not False: self.savefile.save(self.aircraft_list, self.analysis_list) else: self.save_as() def load(self): filename = filedialog.askopenfilename( filetypes=(("ATL save files", ".ATL"), ("All files", "*.*")), defaultextension=".ATL" ) if len(filename) == 0: # breaks out of the method if the user hit cancel in the dialog return match = re.search("(\w:/[/\w+]+/)(.*)(\.\w+)", filename) path = match.group(1) name = match.group(2) extension = match.group(3) self.savefile = SaveFile(self, path, name + extension) self.savefile.load() self.save_selected = True def close_project(self): self.aircraft_list = [] self.analysis_list = [] self.selected_aircraft = None self.selected_analysis = None self.save_selected = False self.updatemenu() def updatemenu(self): self.combo_selected_aircraft.updatelist() self.combo_selected_analysis.updatelist() self.selected_aircraft = self.combo_selected_aircraft.selectedaircraft() self.selected_analysis = self.combo_selected_analysis.selectedanalysis() if self.selected_analysis is None: self.menu_analysis.entryconfig(5, state=DISABLED) self.menu_analysis.entryconfig(6, state=DISABLED) else: self.menu_analysis.entryconfig(5, state=NORMAL) self.menu_analysis.entryconfig(6, state=NORMAL) if self.selected_aircraft is None: self.menu_analysis.entryconfig(1, state=DISABLED) self.menu_analysis.entryconfig(2, state=DISABLED) else: self.menu_analysis.entryconfig(1, state=NORMAL) self.menu_analysis.entryconfig(2, state=NORMAL) if self.selected_analysis is None or self.selected_aircraft is None: self.run_analysis.configure(state=DISABLED) self.menu_analysis.entryconfig(7, state=DISABLED) else: self.menu_analysis.entryconfig(7, state=NORMAL) self.run_analysis.configure(state=NORMAL) def analysis_execute(self, *args): takeoff_analysis = Takeoff.TakeOff(self.selected_aircraft, self.selected_analysis) self.analysis_results = takeoff_analysis.run_analysis() self.lst_box_varlist.delete(0, END) # Clear variables list self.lst_box_varsel.delete(0, END) # Clear variables selected list and reset graph self.plot.clear() self.results_summary.setdata(self.analysis_results) var_list = self.analysis_results.getvarlist() # Update variables list var_list = sorted(var_list) for var in var_list: self.lst_box_varlist.insert(END, var) def var_list_double_clicked(self, event): widget = event.widget index = widget.nearest(event.y) if index != -1: self.lst_box_varsel.insert(END, self.lst_box_varlist.get(index)) x = self.analysis_results.getdata("time") y = self.analysis_results.getdata(self.lst_box_varlist.get(index)) self.plot.addplot(x, y) def var_selec_double_clicked(self, event): widget = event.widget index = widget.nearest(event.y) self.lst_box_varsel.delete(index) self.plot.removeplot(index) def delete_aircraft(self): current = self.selected_aircraft response = messagebox.askyesno( message="Delete aircraft: " + current.name + "?", icon="question", title="Confirm Deletion" ) if response == True: for aircraft in self.aircraft_list: if aircraft.name == current.name: self.aircraft_list.remove(aircraft) self.updatemenu() def delete_analysis(self): current = self.selected_analysis response = messagebox.askyesno( message="Delete analysis: " + current.name + "?", icon="question", title="Confirm Deletion" ) if response: for analysis in self.analysis_list: if analysis.name == current.name: self.analysis_list.remove(analysis) self.updatemenu()