def askOpenFileWin32(title, schematics, initialDir):
    try:
        # if schematics:
        f = ('Levels and Schematics\0*.mclevel;*.dat;*.mine;*.mine.gz;*.schematic;*.zip;*.schematic.gz;*.inv\0' +
             '*.*\0*.*\0\0')
        #        else:
        #            f = ('Levels (*.mclevel, *.dat;*.mine;*.mine.gz;)\0' +
        #                 '*.mclevel;*.dat;*.mine;*.mine.gz;*.zip;*.lvl\0' +
        #                 '*.*\0*.*\0\0')

        (filename, customfilter, flags) = win32gui.GetOpenFileNameW(
            hwndOwner=display.get_wm_info()['window'],
            InitialDir=initialDir,
            Flags=(win32con.OFN_EXPLORER
                   | win32con.OFN_NOCHANGEDIR
                   | win32con.OFN_FILEMUSTEXIST
                   | win32con.OFN_LONGNAMES
                   # |win32con.OFN_EXTENSIONDIFFERENT
            ),
            Title=title,
            Filter=f,
        )
    except Exception:
        #print "Open File: ", e
        pass
    else:
        return filename
def askOpenFileWin32(title, schematics, initialDir, suffixes=None):
    try:
        # if schematics:
        if not suffixes:
            f = (
                'Levels and Schematics\0*.mclevel;*.dat;*.mine;*.mine.gz;*.schematic;*.zip;*.schematic.gz;*.inv\0'
                + '*.*\0*.*\0\0')
        else:
            f = "All\0"
            for suffix in suffixes:
                f += "*." + suffix + ";"
            f += "\0*.*\0\0"
        #        else:
        #            f = ('Levels (*.mclevel, *.dat;*.mine;*.mine.gz;)\0' +
        #                 '*.mclevel;*.dat;*.mine;*.mine.gz;*.zip;*.lvl\0' +
        #                 '*.*\0*.*\0\0')

        (filename, customfilter, flags) = win32gui.GetOpenFileNameW(
            hwndOwner=display.get_wm_info()['window'],
            InitialDir=initialDir,
            Flags=(
                win32con.OFN_EXPLORER
                | win32con.OFN_NOCHANGEDIR
                | win32con.OFN_FILEMUSTEXIST
                | win32con.OFN_LONGNAMES
                # |win32con.OFN_EXTENSIONDIFFERENT
            ),
            Title=title,
            Filter=f,
        )
    except Exception:
        #print "Open File: ", e
        pass
    else:
        return filename
Exemple #3
0
def askOpenFileWin32(title, schematics, initialDir, suffixes=None):
    try:
        if not suffixes:
            f = (_('Levels and Schematics') + '\0*.mclevel;*.dat;*.mine;*.mine.gz;*.schematic;*.zip;*.schematic.gz;*.inv;*.nbt\0' +
                 '*.*\0*.*\0\0')
        else:
            f = "All\0"
            for suffix in suffixes:
                f += "*." + suffix + ";"
            f += "\0*.*\0\0"

        filename, customfilter, flags = win32gui.GetOpenFileNameW(
            hwndOwner=display.get_wm_info()['window'],
            InitialDir=initialDir,
            Flags=(win32con.OFN_EXPLORER
                   | win32con.OFN_NOCHANGEDIR
                   | win32con.OFN_FILEMUSTEXIST
                   | win32con.OFN_LONGNAMES
                   ),
            Title=title,
            Filter=f,
        )
    except Exception:
        pass
    else:
        return filename
Exemple #4
0
def askOpenFileWin32(title, schematics, initialDir, suffixes=None):
    try:
        if not suffixes:
            f = (
                _('Levels and Schematics') +
                '\0*.mclevel;*.dat;*.mine;*.mine.gz;*.schematic;*.zip;*.schematic.gz;*.inv;*.nbt\0'
                + '*.*\0*.*\0\0')
        else:
            f = "All\0"
            for suffix in suffixes:
                f += "*." + suffix + ";"
            f += "\0*.*\0\0"

        filename, customfilter, flags = win32gui.GetOpenFileNameW(
            hwndOwner=display.get_wm_info()['window'],
            InitialDir=initialDir,
            Flags=(win32con.OFN_EXPLORER
                   | win32con.OFN_NOCHANGEDIR
                   | win32con.OFN_FILEMUSTEXIST
                   | win32con.OFN_LONGNAMES),
            Title=title,
            Filter=f,
        )
    except Exception:
        pass
    else:
        return filename
Exemple #5
0
 def __init__(self):
     """Set up the internal handlers."""
     # Tests
     if DEBUG_WM:
         print "#" * 72
         print "WWindowHandler.__init__"
         print "Desktop environment:", desktop_environment
         for item in dir(win32con):
             if 'maxim' in item.lower() or 'minim' in item.lower() or 'full' in item.lower():
                 print item, getattr(win32con, item)
     self.base_handler = display
     self.base_handler_id = display.get_wm_info()['window']
Exemple #6
0
 def __init__(self, pos=(0, 0), size=(0, 0), mode=None):
     """Set up the internal handlers."""
     BaseWindowHandler.__init__(self, pos=pos, size=size, mode=mode)
     # Tests
     if DEBUG_WM:
         print "#" * 72
         print "WWindowHandler.__init__"
         print "Desktop environment:", desktop_environment
         for item in dir(win32con):
             if 'maxim' in item.lower() or 'minim' in item.lower() or 'full' in item.lower():
                 print item, getattr(win32con, item)
     self.base_handler = display
     self.base_handler_id = display.get_wm_info()['window']
Exemple #7
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
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
    def __init__(self, pos=(0, 0), size=(0, 0), mode=None):
        """Set up the internal handlers."""
        BaseWindowHandler.__init__(self, pos=pos, size=size, mode=mode)
        self.mode = mode
        # setup the internal data, especially the Xlib object we need.
        # Tests
        if DEBUG_WM:
            print "#" * 72
            print "XWindowHandler.__init__"
            print "Desktop environment:", desktop_environment
        dis = self.display = Xlib.display.Display()
        pygame_win = dis.create_resource_object(
            'window',
            display.get_wm_info()['window'])
        pygame_win_id = pygame_win.id
        if DEBUG_WM:
            root = dis.screen().root
            active_wid_id = root.get_full_property(
                dis.intern_atom('_NET_ACTIVE_WINDOW'),
                Xlib.X.AnyPropertyType).value[0]
            active_win = dis.create_resource_object('window', active_wid_id)
            # Print pygame_win and active_win styff
            for (win, name) in ((pygame_win, 'pygame_win'), (active_win,
                                                             'active_win')):
                print "=" * 72
                print "%s guts" % name, "(ID %s)" % win.id
                print "-" * 72
                print "* State"
                prop = win.get_full_property(dis.intern_atom("_NET_WM_STATE"),
                                             4)
                print " ", prop
                if prop:
                    print dir(prop)
                print "* Geometry"
                print " ", win.get_geometry()
                parent = win.query_tree().parent
                p = '%s.parent' % name
                while parent.id != root.id:
                    print "-" * 72
                    print p, "ID", parent.id
                    print "* State"
                    prop = parent.get_full_property(
                        dis.intern_atom("_NET_WM_STATE"), 4)
                    print " ", prop
                    if prop:
                        print dir(prop)
                    print "* Geometry"
                    print " ", parent.get_geometry()
                    parent = parent.query_tree().parent
                    p += ".parent"

        # Size handlers
        self.base_handler = pygame_win
        self.base_handler_id = pygame_win.id
        size = desktops['linux2'][self.desk_env].get('size_getter', None)
        if size:
            if DEBUG_WM:
                print "size_getter.split('.')", size.split('.')
            handler = pygame_win
            for item in size.split('.'):
                handler = getattr(handler.query_tree(), item)
            self.sizeGetter = handler
        else:
            self.sizeGetter = pygame_win
        size = desktops['linux2'][self.desk_env].get('size_setter', None)
        if size:
            if DEBUG_WM:
                print "size_setter.split('.')", size.split('.')
            handler = pygame_win
            for item in size.split('.'):
                handler = getattr(handler.query_tree(), item)
            self.sizeSetter = handler
        else:
            self.sizeSetter = pygame_win
        # Position handlers
        pos = desktops['linux2'][self.desk_env].get('position_getter', None)
        if pos:
            if DEBUG_WM:
                print "pos_getter.split('.')", pos.split('.')
            handler = pygame_win
            for item in pos.split('.'):
                handler = getattr(handler.query_tree(), item)
            self.positionGetter = handler
        else:
            self.positionGetter = pygame_win
        pos = desktops['linux2'][self.desk_env].get('position_setter', None)
        if pos:
            if DEBUG_WM:
                print "pos_setter.split('.')", pos.split('.')
            handler = pygame_win
            for item in pos.split('.'):
                handler = getattr(handler.query_tree(), item)
            self.positionSetter = handler
        else:
            self.positionSetter = pygame_win
        # Position gap. Used to correct wrong positions on some environments.
        self.position_gap = desktops['linux2'][self.desk_env].get(
            'position_gap', (0, 0, False, False))
        self.starting = True
        self.gx, self.gy = 0, 0
        # State handler
        state = desktops['linux2'][self.desk_env].get('state', None)
        if state:
            if DEBUG_WM:
                print "state.split('.')", state.split('.')
            handler = pygame_win
            for item in state.split('.'):
                handler = getattr(handler.query_tree(), item)
            self.stateHandler = handler
        else:
            self.stateHandler = pygame_win

        if DEBUG_WM:
            print "self.positionGetter:", self.positionGetter, 'ID:', self.positionGetter.id
            print "self.positionSetter:", self.positionSetter, 'ID:', self.positionSetter.id
            print "self.sizeGetter:", self.sizeGetter, 'ID:', self.sizeGetter.id
            print "self.sizeSetter:", self.sizeSetter, 'ID:', self.sizeSetter.id
            print "self.stateHandler:", self.stateHandler, 'ID:', self.stateHandler.id
            print self.stateHandler.get_wm_state()
    def __init__(self, pos=(0, 0), size=(0, 0), mode=None):
        """Set up the internal handlers."""
        BaseWindowHandler.__init__(self, pos=pos, size=size, mode=mode)
        self.mode = mode
        # setup the internal data, especially the Xlib object we need.
        # Tests
        if DEBUG_WM:
            print "#" * 72
            print "XWindowHandler.__init__"
            print "Desktop environment:", desktop_environment
        dis = self.display = Xlib.display.Display()
        pygame_win = dis.create_resource_object('window', display.get_wm_info()['window'])
        pygame_win_id = pygame_win.id
        if DEBUG_WM:
            root = dis.screen().root
            active_wid_id = root.get_full_property(dis.intern_atom('_NET_ACTIVE_WINDOW'), Xlib.X.AnyPropertyType).value[0]
            active_win = dis.create_resource_object('window', active_wid_id)
            # Print pygame_win and active_win styff
            for (win, name) in ((pygame_win, 'pygame_win'), (active_win, 'active_win')):
                print "=" * 72
                print "%s guts"%name, "(ID %s)"%win.id
                print "-" * 72
                print "* State"
                prop = win.get_full_property(dis.intern_atom("_NET_WM_STATE"), 4)
                print " ", prop
                if prop:
                    print dir(prop)
                print "* Geometry"
                print " ", win.get_geometry()
                parent = win.query_tree().parent
                p = '%s.parent'%name
                while parent.id != root.id:
                    print "-" * 72
                    print p, "ID", parent.id
                    print "* State"
                    prop = parent.get_full_property(dis.intern_atom("_NET_WM_STATE"), 4)
                    print " ", prop
                    if prop:
                        print dir(prop)
                    print "* Geometry"
                    print " ", parent.get_geometry()
                    parent = parent.query_tree().parent
                    p += ".parent"

        # Size handlers
        self.base_handler = pygame_win
        self.base_handler_id = pygame_win.id
        size = desktops['linux2'][self.desk_env].get('size_getter', None)
        if size:
            if DEBUG_WM:
                print "size_getter.split('.')", size.split('.')
            handler = pygame_win
            for item in size.split('.'):
                handler = getattr(handler.query_tree(), item)
            self.sizeGetter = handler
        else:
            self.sizeGetter = pygame_win
        size = desktops['linux2'][self.desk_env].get('size_setter', None)
        if size:
            if DEBUG_WM:
                print "size_setter.split('.')", size.split('.')
            handler = pygame_win
            for item in size.split('.'):
                handler = getattr(handler.query_tree(), item)
            self.sizeSetter = handler
        else:
            self.sizeSetter = pygame_win
        # Position handlers
        pos = desktops['linux2'][self.desk_env].get('position_getter', None)
        if pos:
            if DEBUG_WM:
                print "pos_getter.split('.')", pos.split('.')
            handler = pygame_win
            for item in pos.split('.'):
                handler = getattr(handler.query_tree(), item)
            self.positionGetter = handler
        else:
            self.positionGetter = pygame_win
        pos = desktops['linux2'][self.desk_env].get('position_setter', None)
        if pos:
            if DEBUG_WM:
                print "pos_setter.split('.')", pos.split('.')
            handler = pygame_win
            for item in pos.split('.'):
                handler = getattr(handler.query_tree(), item)
            self.positionSetter = handler
        else:
            self.positionSetter = pygame_win
        # Position gap. Used to correct wrong positions on some environments.
        self.position_gap = desktops['linux2'][self.desk_env].get('position_gap', (0, 0, False, False))
        self.starting = True
        self.gx, self.gy = 0, 0
        # State handler
        state = desktops['linux2'][self.desk_env].get('state', None)
        if state:
            if DEBUG_WM:
                print "state.split('.')", state.split('.')
            handler = pygame_win
            for item in state.split('.'):
                handler = getattr(handler.query_tree(), item)
            self.stateHandler = handler
        else:
            self.stateHandler = pygame_win

        if DEBUG_WM:
            print "self.positionGetter:", self.positionGetter, 'ID:', self.positionGetter.id
            print "self.positionSetter:", self.positionSetter, 'ID:', self.positionSetter.id
            print "self.sizeGetter:", self.sizeGetter, 'ID:', self.sizeGetter.id
            print "self.sizeSetter:", self.sizeSetter, 'ID:', self.sizeSetter.id
            print "self.stateHandler:", self.stateHandler, 'ID:', self.stateHandler.id
            print self.stateHandler.get_wm_state()
Exemple #11
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
Exemple #12
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