Esempio n. 1
0
def askSaveFile(initialDir, title, defaultName, filetype, suffix):
    if sys.platform == "win32":
        try:
            (filename, customfilter, flags) = win32gui.GetSaveFileNameW(
                hwndOwner=display.get_wm_info()['window'],
                InitialDir=initialDir,
                Flags=win32con.OFN_EXPLORER | win32con.OFN_NOCHANGEDIR | win32con.OFN_OVERWRITEPROMPT,
                File=defaultName,
                DefExt=suffix,
                Title=title,
                Filter=filetype,
            )
        except Exception, e:
            print "Error getting file name: ", e
            return

        try:
            filename = filename[:filename.index('\0')]
            filename = filename.decode(sys.getfilesystemencoding())
        except:
            pass
Esempio n. 2
0
def askSaveFile(initialDir, title, defaultName, filetype, suffix):
    if sys.platform == "win32":  # !#
        try:
            if isinstance(suffix, (list, tuple)) and suffix:
                suffix = suffix[0]
            print repr(filetype)
            if not filetype.endswith("*.*\0*.*\0\0"):
                filetype = filetype[:-1] + "*.*\0*.*\0\0"
            print repr(filetype)
            (filename, customfilter, flags) = win32gui.GetSaveFileNameW(
                hwndOwner=display.get_wm_info()['window'],
                InitialDir=initialDir,
                Flags=win32con.OFN_EXPLORER | win32con.OFN_NOCHANGEDIR
                | win32con.OFN_OVERWRITEPROMPT,
                File=defaultName,
                DefExt=suffix,
                Title=title,
                Filter=filetype,
            )
        except Exception as e:
            print "Error getting file name: ", e
            return

        try:
            filename = filename[:filename.index('\0')]
            filename = filename.decode(sys.getfilesystemencoding())
        except:
            pass

    else:
        # Reformat the Windows stuff
        if "\0" in suffix and suffix.count("*.") > 1:
            _suffix = suffix.split("\0")[:-2]
        else:
            _suffix = suffix
        if "\0" in filetype and filetype.count("*.") > 0:
            _filetype = filetype.split("\0")[:-2]
        else:
            _filetype = filetype

        if hasGtk and not platChooser:  # !# #Linux (When GTK 2.4 or newer is installed)

            fls = []

            def run_dlg():
                chooser = gtk.FileChooserDialog(
                    title, None, gtk.FILE_CHOOSER_ACTION_SAVE,
                    (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE,
                     gtk.RESPONSE_OK))

                chooser.set_default_response(gtk.RESPONSE_OK)
                chooser.set_current_folder(initialDir)
                chooser.set_current_name(defaultName)

                # Add custom Filter
                if isinstance(_filetype, list) or isinstance(_filetype, tuple):
                    for i, stuff in enumerate(_filetype):
                        if i % 2 == 0:
                            file_filter = gtk.FileFilter()
                            file_filter.set_name(stuff)
                        else:
                            if ";" in stuff:
                                for _suff in stuff.split(";"):
                                    if _suff:
                                        file_filter.add_pattern(_suff)
                            else:
                                file_filter.add_pattern(stuff)
                            chooser.add_filter(file_filter)
                    if i % 2 == 0:
                        if ";" in stuff:
                            for _suff in stuff.split(";"):
                                if _suff:
                                    file_filter.add_pattern(_suff)
                        else:
                            file_filter.add_pattern(stuff)
                        chooser.add_filter(file_filter)
                else:
                    file_filter = gtk.FileFilter()
                    file_filter.set_name(filetype[:filetype.index("\0")])
                    if "\0" in suffix and suffix.count("*.") > 1:
                        __suffix = suffix.split("\0")[:-2]
                    else:
                        __suffix = suffix
                    if isinstance(__suffix, list) or isinstance(
                            __suffix, tuple):
                        for suff in __suffix:
                            file_filter.add_pattern("*." + suff)
                    else:
                        file_filter.add_pattern("*." + __suffix)
                    chooser.add_filter(file_filter)

                # Add "All files" Filter
                file_filter = gtk.FileFilter()
                file_filter.set_name("All files")
                file_filter.add_pattern("*")
                chooser.add_filter(file_filter)

                response = chooser.run()
                if response == gtk.RESPONSE_OK:
                    fls.append(chooser.get_filename())
                else:
                    fls.append(None)
                chooser.destroy()
                gtk.main_quit()

            gtk.idle_add(run_dlg)
            gtk.main()

            filename = fls[0]

        else:  # Fallback
            log.debug("Calling internal file chooser.")
            log.debug("'initialDir' is %s (%s)" %
                      (repr(initialDir), type(initialDir)))
            log.debug("'defaultName' is %s (%s)" %
                      (repr(defaultName), type(defaultName)))
            try:
                iDir = initialDir.encode(enc)
            except Exception as e:
                iDir = initialDir
                log.debug("Could not encode 'initialDir' %s" %
                          repr(initialDir))
                log.debug("Encode function returned: %s" % e)
            try:
                dName = defaultName.encode(enc)
            except Exception as e:
                dName = defaultName
                log.debug("Could not encode 'defaultName' %s" %
                          repr(defaultName))
                log.debug("Encode function returned: %s" % e)
            if isinstance(_suffix, list) or isinstance(_suffix, tuple):
                sffxs = [a[1:] for a in _suffix[1::2]]
                sffx = sffxs.pop(0)
                sffxs.append('.*')
            else:
                sffx = _suffix
                sffxs = []

            for i, stuff in enumerate(_filetype):
                if i % 2 == 0:
                    file_filter = stuff
                else:
                    file_filter += " (%s)" % stuff
                    sffxs.append(file_filter)
            if i % 2 == 0:
                file_filter += " (%s)" % stuff
                sffxs.append(file_filter)

            if "All files (*.*)" not in sffxs and "*.* (*.*)" not in sffxs:
                sffxs.append("All files (*.*)")

            filename = request_new_filename(prompt=title,
                                            suffix=sffx,
                                            extra_suffixes=sffxs,
                                            directory=iDir,
                                            filename=dName,
                                            pathname=None)
    return filename