def create_save_file_dialog(self): chooser = BoxLayout() container = BoxLayout(orientation='vertical') filechooser = FileChooserIconView() filechooser.path = os.path.expanduser("~") container.add_widget(filechooser) def save_file(path, filename): filepath = os.path.join(path, filename) path, ext = os.path.splitext(filepath) if ext != ".xlsx": filepath += ".xlsx" self.save_filepath = filepath self.finish() button_layout = BoxLayout() button_layout.size_hint = (1, .1) file_name = TextInput(text="File name.xlsx") button_layout.add_widget(file_name) save_btn = Button(text='save', size_hint=(.2,1)) save_btn.bind(on_release=lambda x: save_file(filechooser.path, file_name.text)) button_layout.add_widget(save_btn) container.add_widget(button_layout) chooser.add_widget(container) file_chooser = Popup(title='Save report', content=chooser, size_hint=(.9, .7 ), pos_hint={'center_x': 0.5, 'center_y': 0.5}) return file_chooser
def build_output_path_options(self): lbl_file_path = Label(text='Output Directory', size_hint=(.1, .05), pos_hint={'x': 0.5, 'y': .4}) self.text_output_directory = TextInput(text="", multiline=False, size_hint=(.5, .05), pos_hint={'x': .3, 'y': .35}) self.text_output_directory.bind(text=self.select_output_dir) self.text_output_directory.disabled = True self.btn_browse_directory = Button(text='Browse', size_hint=(.09, .05), pos_hint={'x': .8, 'y': .35}) self.btn_browse_directory.disabled = True self.btn_browse_directory.bind(on_release=lambda show_file_selection_dialog: file_chooser_dialog.open()) self.app.add_widget(lbl_file_path) self.app.add_widget(self.text_output_directory) self.app.add_widget(self.btn_browse_directory) file_chooser_dialog = Popup(title="Select Output Directory", size=(500, 500)) file_chooser = FileChooserIconView() file_chooser.path = os.getcwd() file_chooser_layout = FloatLayout(size=(500, 500)) file_chooser_layout.add_widget(file_chooser) file_chooser_dialog.add_widget(file_chooser_layout) btn_open_file = Button(text='Select Folder', size_hint=(.15, .05), pos_hint={'x': .75, 'y': .01}) btn_open_file.bind( on_release=lambda load_file: self.select_directory(self.text_output_directory, file_chooser_dialog, file_chooser.path)) btn_cancel_file = Button(text='Cancel', size_hint=(.1, .05), pos_hint={'x': .9, 'y': .01}) btn_cancel_file.bind(on_release=lambda cancel_file_selection_dialog: file_chooser_dialog.dismiss()) file_chooser_layout.add_widget(btn_open_file) file_chooser_layout.add_widget(btn_cancel_file)
def create_save_folder_dialog(self): chooser = BoxLayout() container = BoxLayout(orientation='vertical') folderchooser = FileChooserIconView() folderchooser.path = os.path.expanduser("~") container.add_widget(folderchooser) def save_directory(path, foldername): save_filepath = os.path.join(path, foldername) if os.path.isdir(save_filepath): self.save_filepath = save_filepath elif os.path.isfile(save_filepath): self.save_filepath = os.path.splitext(save_filepath)[0] os.mkdir(self.save_filepath) else: os.mkdir(save_filepath) self.save_filepath = save_filepath self.finish() button_layout = BoxLayout() button_layout.size_hint = (1, .1) folder_name = TextInput(text="New folder name") button_layout.add_widget(folder_name) save_btn = Button(text='save', size_hint=(.2, 1)) save_btn.bind(on_release=lambda x: save_directory( folderchooser.path, folder_name.text)) button_layout.add_widget(save_btn) container.add_widget(button_layout) chooser.add_widget(container) directory_chooser = Popup(title='Save reports', content=chooser, size_hint=(.9, .7), pos_hint={ 'center_x': 0.5, 'center_y': 0.5 }) return directory_chooser
def build_file_selection_options(self): lbl_file_path = Label(text='Input Data', size_hint=(.1, .05), pos_hint={'x': 0.5, 'y': .8}) text_file_path = TextInput(text="", multiline=False, size_hint=(.5, .05), pos_hint={'x': .3, 'y': .75}) text_file_path.bind(text=self.select_file_path) btn_file_dialog = Button(text='Browse', size_hint=(.09, .05), pos_hint={'x': .8, 'y': .75}) btn_file_dialog.bind(on_release=lambda show_file_selection_dialog: file_chooser_dialog.open()) self.app.add_widget(lbl_file_path) self.app.add_widget(text_file_path) self.app.add_widget(btn_file_dialog) file_chooser_dialog = Popup(title="Select File or Folder", size=(500, 500)) file_chooser = FileChooserIconView() file_chooser.path = os.getcwd() file_chooser_layout = FloatLayout(size=(500, 500)) file_chooser_layout.add_widget(file_chooser) file_chooser_dialog.add_widget(file_chooser_layout) btn_open_file = Button(text='Open', size_hint=(.1, .05), pos_hint={'x': .8, 'y': .01}) btn_open_file.bind( on_release=lambda load_file: self.load_file(text_file_path, file_chooser_dialog, file_chooser.path, file_chooser.selection)) btn_cancel_file = Button(text='Cancel', size_hint=(.1, .05), pos_hint={'x': .9, 'y': .01}) btn_cancel_file.bind(on_release=lambda cancel_file_selection_dialog: file_chooser_dialog.dismiss()) file_chooser_layout.add_widget(btn_open_file) file_chooser_layout.add_widget(btn_cancel_file)
def popup_constructor_file(self, title): """ generalized popup constructor for save/load/export and import image commands :param title: :return: """ changed_dir = True #set this to false when testing in IDE file_browser = FileChooserIconView() file_browser_text = TextInput(text="File.txt", multiline=False, size=(345, 30), size_hint=(None, None)) file_browser.add_widget(file_browser_text) file_browser.path = self.backend.working_dir + 'Saved maps' file_browser_cancel_btn = Button(text="Cancel", size=(60, 30), size_hint=(None, None), pos=(415, 0)) file_browser_confirm_btn = Button(text="blank", size=(60, 30), size_hint=(None, None), pos=(350, 0)) if title == "Save Map": file_browser_text.text = file_browser.path + "/Untitled.text" file_browser_confirm_btn.text = "Save" elif title == "Load Map": file_browser_text.text = file_browser.path + "/Untitled.text" file_browser_confirm_btn.text = "Load" elif title == "Import Image": file_browser_text.text = file_browser.path + "/Untitled.png" file_browser_confirm_btn.text = "Import" else: file_browser_text.text = file_browser.path + "/Untitled.png" file_browser_confirm_btn.text = "Export" file_browser.add_widget(file_browser_cancel_btn) file_browser.add_widget(file_browser_confirm_btn) def resolve_dialogue(instance): try: if title == "Save Map": if file_browser_text.text.split("\\")[-1] in [i.split("\\")[-1] for i in file_browser.files] or \ file_browser_text.text.split("/")[-1] in [i.split("\\")[-1] for i in file_browser.files]: def overwrite_resolve(instance): self.backend.save_to_file(file_browser_text.text) self.backend.working_file = file_browser_text.text self.backend.last_save = datetime.now() self.update_map_title() pop2.dismiss() pop.dismiss() self.initialize_keyboard() overwrite_okay.bind(on_press=overwrite_resolve) nonlocal overwrite_msg overwrite_msg = Label( text= f"The file: \n{file_browser_text.text}\nwill be Overwritten" ) pop2.open() else: self.backend.save_to_file(file_browser_text.text) self.backend.working_file = file_browser_text.text self.backend.last_save = datetime.now() self.update_map_title() pop.dismiss() self.initialize_keyboard() elif title == "Load Map": self.backend.load_from_file(file_browser_text.text) self.redraw_map() self.redraw_tileset() self.redraw_active_tile() self.populate_layer_list(self.children[0].children[0]) self.backend.working_file = file_browser_text.text self.backend.last_save = datetime.now() self.update_map_title() pop.dismiss() self.initialize_keyboard() elif title == "Export Map": if file_browser_text.text.split("\\")[-1] in [i.split("\\")[-1] for i in file_browser.files] or \ file_browser_text.text.split("/")[-1] in [i.split("\\")[-1] for i in file_browser.files]: def overwrite_resolve(instance): self.backend.export(file_browser_text.text) pop2.dismiss() pop.dismiss() self.initialize_keyboard() overwrite_okay.bind(on_press=overwrite_resolve) overwrite_msg.text = f"!WARNING!: The file: \n{file_browser_text.text}\nwill be Overwritten" pop2.open() else: self.backend.export(file_browser_text.text) pop.dismiss() self.initialize_keyboard() elif title == "Import Image": self.backend.import_img(file_browser_text.text) self.populate_layer_list(self.children[0].children[0]) self.redraw_map() pop.dismiss() self.initialize_keyboard() except Exception as e: error = Popup(title=" An error Occured:", content=(Label(text=e.__str__())), size_hint=(None, None), size=(400, 200), auto_dismiss=True) error.open() def filecancel(instance): pop.dismiss() self.initialize_keyboard() def update_file_text(instance, path): nonlocal changed_dir changed_dir = True if title == "Save Map" or title == "Load Map": file_browser_text.text = file_browser.path + "/Untitled.text" else: file_browser_text.text = file_browser.path + "/Untitled.png" def update_file_text_select(instance, selection, touch): path = "" for i in selection: path = i file_browser_text.text = path if changed_dir == False: segments = path.split("\\") del segments[5] clean_path = "\\".join(segments) file_browser_text.text = clean_path file_browser.bind(on_submit=update_file_text_select, path=update_file_text) file_browser_cancel_btn.bind(on_press=filecancel) file_browser_confirm_btn.bind(on_press=resolve_dialogue) pop = Popup(title=title, content=file_browser, size_hint=(None, None), size=(500, 500), auto_dismiss=True) pop.open() overwrite = GridLayout(rows=2) overwrite_msg = Label( text= f"!WARNING!: The file: \n{file_browser_text.text}\nwill be Overwritten" ) overwrite_buttons = GridLayout(cols=2, size_hint=(1, None), size=(100, 40)) overwrite_okay = Button(text="Overwrite", size_hint=(1, None), size=(100, 40)) overwrite_cancel = Button(text="Cancel", size_hint=(1, None), size=(100, 40)) overwrite_buttons.add_widget(overwrite_okay) overwrite_buttons.add_widget(overwrite_cancel) overwrite.add_widget(overwrite_msg) overwrite.add_widget(overwrite_buttons) overwrite_cancel.bind(on_press=lambda instance: pop2.dismiss()) pop2 = Popup(title="Confirm File Overwrite", content=overwrite, size_hint=(None, None), size=(500, 300), auto_dismiss=True)