Esempio n. 1
0
 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
Esempio n. 2
0
 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
Esempio n. 3
0
 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
Esempio n. 4
0
    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
Esempio n. 5
0
    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
Esempio n. 6
0
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
    """
Esempio n. 7
0
        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")
Esempio n. 8
0
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()