https://github.com/mirefek/geo_logic
Revision 01b27df4a0938ce8e9349d5397c85905d3bd8026 authored by mirefek on 27 March 2020, 09:32:25 UTC, committed by mirefek on 27 March 2020, 09:32:25 UTC
1 parent 1bcb6ea
Raw File
Tip revision: 01b27df4a0938ce8e9349d5397c85905d3bd8026 authored by mirefek on 27 March 2020, 09:32:25 UTC
labels for pascal_out
Tip revision: 01b27df
file_chooser.py
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
import os

"""
Dialog window for opening / saving
"""

# show svg files, for image export
def add_svg_filters(dialog):
    filter_gl = Gtk.FileFilter()
    filter_gl.set_name("SVG Images")
    filter_gl.add_mime_type("image/svg+xml")
    filter_gl.add_pattern("*.svg")
    dialog.add_filter(filter_gl)

    filter_any = Gtk.FileFilter()
    filter_any.set_name("Any files")
    filter_any.add_pattern("*")
    dialog.add_filter(filter_any)

# show GeoLogic files
def add_gl_filters(dialog):
    filter_gl = Gtk.FileFilter()
    filter_gl.set_name("GeoLogic Files")
    filter_gl.add_mime_type("text/geo_logic")
    filter_gl.add_pattern("*.gl")
    dialog.add_filter(filter_gl)

    filter_any = Gtk.FileFilter()
    filter_any.set_name("Any files")
    filter_any.add_pattern("*")
    dialog.add_filter(filter_any)

def select_file_open(win, add_filters = add_gl_filters):
    dialog = Gtk.FileChooserDialog("Open a file", win,
        Gtk.FileChooserAction.OPEN,
        (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
         Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
    dialog.set_current_folder("saved")

    add_filters(dialog)

    response = dialog.run()

    if response == Gtk.ResponseType.OK:
        res = dialog.get_filename()
    else: res = None

    dialog.destroy()
    return res

class DialogSaveFile(Gtk.Dialog):
    def __init__(self, parent, db):
        Gtk.Dialog.__init__(self, "Confirm overwrite", parent, 0,
            (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
             Gtk.STOCK_OK, Gtk.ResponseType.OK))
        self.box = self.get_content_area()
        self.label = Gtk.Label("The file `" + db + "` exists.\nDo you want it to be overwritten?")
        self.box.add(self.label)
        self.show_all()

def select_file_save(win, win_title = "Save file", folder = "saved", add_filters = add_gl_filters):
    dialog = Gtk.FileChooserDialog(win_title, win,
        Gtk.FileChooserAction.SAVE,
        (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
         Gtk.STOCK_SAVE, Gtk.ResponseType.OK))
    add_filters(dialog)
    dialog.set_current_folder(folder)

    while True:

        response = dialog.run()

        if response == Gtk.ResponseType.OK:
            res = dialog.get_filename()
        else:
            res = None
            break

        # check overwrite

        cansave = True
        if os.path.exists(dialog.get_filename()):
            dialog2 = DialogSaveFile(dialog, dialog.get_filename())  # ask to confirm overwrite
            response = dialog2.run()
            if response == Gtk.ResponseType.OK:
                dialog2.destroy()
            else:
                cansave = False
                dialog2.destroy()

        if cansave: break

    dialog.destroy()
    return res
back to top