Author: esr
Date: Wed Oct 15 09:09:29 2008
New Revision: 30181

URL: http://svn.gna.org/viewcvs/wesnoth?rev=30181&view=rev
Log:
trackplacer: use more modern (and customizable) file selection widgets.

Modified:
    trunk/data/tools/trackplacer

Modified: trunk/data/tools/trackplacer
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/data/tools/trackplacer?rev=30181&r1=30180&r2=30181&view=diff
==============================================================================
--- trunk/data/tools/trackplacer (original)
+++ trunk/data/tools/trackplacer Wed Oct 15 09:09:29 2008
@@ -217,33 +217,6 @@
     def __str__(self):
         return self.mapfile + ": " + `self.track`
 
-class ModalFileSelector:
-    def __init__(self, default, legend):
-        self.default = default
-        self.path = None
-        # Create a new file selection widget
-        self.filew = gtk.FileSelection(legend)
-        self.filew.set_modal(True);
-
-        self.filew.ok_button.connect("clicked", self.selection_ok)
-        self.filew.cancel_button.connect("clicked", self.selection_canceled)
-        if self.default:
-            self.filew.set_filename(self.default)
-        self.filew.hide_fileop_buttons()
-        self.filew.complete(".cfg")
-        self.filew.run()
-
-    def selection_canceled(self, widget):
-        self.path = None
-        self.filew.destroy()
-
-    def selection_ok(self, widget):
-        self.path = self.filew.get_filename()
-        # Relativize file path to current directory
-        if self.path.startswith(os.getcwd()):
-            self.path = self.path[len(os.getcwd())+1:]
-        self.filew.destroy()
-
 class TrackEditorIcon:
     def __init__(self, action, path):
         self.action = action
@@ -584,15 +557,12 @@
             label = gtk.Label("Track has unsaved changes. OK to quit?")
             self.quit_check.vbox.pack_start(label)
             label.show()
-            self.quit_check.connect("response", self.conditional_quit_handler)
-            self.quit_check.run()
+            response = self.quit_check.run()
+            self.quit_check.destroy()
+            if response == gtk.RESPONSE_ACCEPT:
+                sys.exit(0)
         else:
             sys.exit(0)
-    def conditional_quit_handler(self, widget, id):
-        if id == gtk.RESPONSE_ACCEPT:
-            sys.exit(0)
-        elif id == gtk.RESPONSE_REJECT:
-            self.quit_check.destroy()
 
     def save_handler(self, w):
         "Save track data,"
@@ -604,39 +574,56 @@
             w.run()
             w.destroy()
         else:
-            w = ModalFileSelector(default=self.last_read,
-                                  legend="Save track to file")
-            if not w.path:
+            # Request save file name
+            dialog = gtk.FileChooserDialog("Save track file",
+                                           None,
+                                           gtk.FILE_CHOOSER_ACTION_SAVE,
+                                           (gtk.STOCK_CANCEL, 
gtk.RESPONSE_CANCEL,
+                                            gtk.STOCK_SAVE, gtk.RESPONSE_OK))
+            dialog.set_default_response(gtk.RESPONSE_CANCEL)
+            if self.last_read:
+                dialog.set_filename(self.last_read)
+            dialog.set_show_hidden(False)
+
+            sfilter = gtk.FileFilter()
+            sfilter.set_name("Track file")
+            sfilter.add_pattern("*.cfg")
+            dialog.add_filter(sfilter)
+
+            response = dialog.run()
+            filename = dialog.get_filename()
+            dialog.destroy()
+            if response == gtk.RESPONSE_CANCEL:
                 return
-            if not w.path.endswith(".cfg"):
-                raise IOException("File must have a .cfg extension.", w.path)
-            if w.path != self.last_read and os.path.exists(w.path):
-                self.save_check = gtk.Dialog(title="Really overwrite?",
+
+            # Relativize file path to current directory
+            if filename.startswith(os.getcwd()):
+                filename = filename[len(os.getcwd())+1:]
+
+            # Request overwrite confirmation if this is a save-as
+            if filename != self.last_read:
+                save_check = gtk.Dialog(title="Really overwrite?",
                                              parent=None, 
                                              flags=gtk.DIALOG_MODAL,
                                              buttons=(gtk.STOCK_CANCEL, 
gtk.RESPONSE_REJECT,
                                                       gtk.STOCK_OK, 
gtk.RESPONSE_ACCEPT))
-                label = gtk.Label("Overwrite existing data in %s?" % w.path)
-                self.save_check.vbox.pack_start(label)
+                label = gtk.Label("Overwrite existing data in %s?" % filename)
+                save_check.vbox.pack_start(label)
                 label.show()
-                self.save_check.connect("response",
-                                        self.conditional_save_handler)
-                self.save_check.run()
-                # After conditional_save handler fires
-                if not self.save_confirm:
+                response = save_check.run()
+                save_check.destroy()
+                if response == gtk.RESPONSE_REJECT:
                     return
-            self.log("Writing track data to %s" % w.path)
+
+            # Actual I/O
+            self.log("Writing track data to %s" % filename)
             try:
-                fp = open(w.path, "w")
+                fp = open(filename, "w")
             except IOError:
-                raise IOException("Cannot write file.", w.path)
+                raise IOException("Cannot write file.", filename)
             if not self.journey.mapfile:
-                self.journey.mapfile = w.path 
+                self.journey.mapfile = filename 
             self.journey.write(fp)
-
-    def conditional_save_handler(self, widget, id):
-        self.save_confirm = (id == gtk.RESPONSE_ACCEPT)            
-        self.save_check.destroy()
 
     def help_handler(self, w):
         "Display help."
@@ -695,11 +682,57 @@
     else:
         while True:
             try:
-                selector = ModalFileSelector(default=default_map,
-                                             legend="Track or map file to 
read")
-                if not selector.path:
-                    break
-                TrackEditor(selector.path, verbose=verbose)
+                dialog = gtk.FileChooserDialog("Open track file",
+                                               None,
+                                               gtk.FILE_CHOOSER_ACTION_OPEN,
+                                               (gtk.STOCK_CANCEL, 
gtk.RESPONSE_CANCEL,
+                                                gtk.STOCK_OPEN, 
gtk.RESPONSE_OK))
+                dialog.set_default_response(gtk.RESPONSE_OK)
+                dialog.set_filename(default_map)
+                dialog.set_show_hidden(False)
+
+                ofilter = gtk.FileFilter()
+                ofilter.set_name("Images and Tracks")
+                ofilter.add_mime_type("image/png")
+                ofilter.add_mime_type("image/jpeg")
+                ofilter.add_mime_type("image/gif")
+                ofilter.add_pattern("*.png")
+                ofilter.add_pattern("*.jpg")
+                ofilter.add_pattern("*.gif")
+                ofilter.add_pattern("*.tif")
+                ofilter.add_pattern("*.xpm")
+                ofilter.add_pattern("*.cfg")
+                dialog.add_filter(ofilter)
+
+                ofilter = gtk.FileFilter()
+                ofilter.set_name("Images only")
+                ofilter.add_mime_type("image/png")
+                ofilter.add_mime_type("image/jpeg")
+                ofilter.add_mime_type("image/gif")
+                ofilter.add_pattern("*.png")
+                ofilter.add_pattern("*.jpg")
+                ofilter.add_pattern("*.gif")
+                ofilter.add_pattern("*.tif")
+                ofilter.add_pattern("*.xpm")
+                dialog.add_filter(ofilter)
+
+                ofilter = gtk.FileFilter()
+                ofilter.set_name("Tracks only")
+                ofilter.add_pattern("*.cfg")
+                dialog.add_filter(ofilter)
+
+                response = dialog.run()
+                if response == gtk.RESPONSE_OK:
+                    filename = dialog.get_filename()
+                elif response == gtk.RESPONSE_CANCEL:
+                    sys.exit(0)
+                dialog.destroy()
+
+                # Relativize file path to current directory
+                if filename.startswith(os.getcwd()):
+                    filename = filename[len(os.getcwd())+1:]
+
+                TrackEditor(filename, verbose=verbose)
             except IOException, e:
                 w = gtk.MessageDialog(type=gtk.MESSAGE_ERROR,
                                       flags=gtk.DIALOG_DESTROY_WITH_PARENT,


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to