Author: esr
Date: Thu Oct 16 13:23:11 2008
New Revision: 30194

URL: http://svn.gna.org/viewcvs/wesnoth?rev=30194&view=rev
Log:
traclplacer: controls for track addition and deletion are in place,
though not yet completely working.

Modified:
    trunk/data/tools/trackplacer

Modified: trunk/data/tools/trackplacer
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/data/tools/trackplacer?rev=30194&r1=30193&r2=30194&view=diff
==============================================================================
--- trunk/data/tools/trackplacer (original)
+++ trunk/data/tools/trackplacer Thu Oct 16 13:23:11 2008
@@ -245,7 +245,19 @@
     def __getitem__(self, n):
         return self.tracks[self.selected_id][n]
     def __setitem__(self, n, v):
+        if self.tracks[self.selected_id][n] != v:
+            self.modified = True
         self.tracks[self.selected_id][n] = v
+    def add_track(self, name):
+        if name not in self.track_list:
+            self.tracks[name] = []
+            self.tracklist.append(name)
+            self.modified = True
+    def remove_track(self, name):
+        if name in self.track_list:
+            del self.tracks[name]
+            self.track_list.remove(name)
+            self.modified = True
     def has_unsaved_changes(self):
         return self.modified
     def neighbors(self, x, y):
@@ -302,7 +314,55 @@
         return (x-self.icon_width/2, y-self.icon_height/2,
                     self.icon_width+1, self.icon_height+1)
 
-class TrackEditor:
+class TrackController:
+    "Object for controlling an individual track in the Tracks dialog."
+    def __init__(self, editor, track_id, trackbox, basebutton):
+        self.editor = editor
+        self.track_id = track_id
+        self.hbox = gtk.HBox()
+        trackbox.add(self.hbox)
+        self.hbox.show()
+        self.radiobutton = gtk.RadioButton(basebutton)
+        self.radiobutton.set_active(track_id == editor.journey.selected_id)
+        self.radiobutton.connect("toggled",
+                                 editor.track_activity_callback, track_id)
+        editor.tooltips.set_tip(self.radiobutton,
+                                "Select %s for editing" % track_id)
+        self.radiobutton.show()
+        self.hbox.add(self.radiobutton)
+        self.checkbox = gtk.CheckButton(track_id)
+        self.checkbox.set_active(track_id in editor.visible_set)
+        self.checkbox.connect("toggled",
+                              editor.track_visibility_callback, track_id)
+        self.hbox.add(self.checkbox)
+        editor.tooltips.set_tip(self.checkbox,
+                                "Toggle visibility of %s" % track_id)
+        self.checkbox.show()
+
+        # We really should have been able to do this:
+        # self.deleter = gtk.Button(stock=gtk.STOCK_DELETE, label="")
+        # Instead, we have to writhe and faint in coils because the
+        # stock argument forces the label.
+        self.deleter = gtk.Button()
+        delimage = gtk.Image()
+        delimage.set_from_stock(gtk.STOCK_DELETE, gtk.ICON_SIZE_SMALL_TOOLBAR)
+        bbox = gtk.HBox()
+        self.deleter.add(bbox)
+        bbox.add(delimage)
+        delimage.show()
+        bbox.show()
+
+        self.deleter.connect("clicked", self.track_delete_handler, track_id)
+        self.hbox.add(self.deleter)
+        editor.tooltips.set_tip(self.deleter, "Delete track %s" % track_id)
+        self.deleter.show()
+        editor.controller[track_id] = self
+    def track_delete_handler(self, w, track_id):
+        self.editor.journey.remove_track(track_id)
+        self.hbox.hide()
+        del self.editor.controller[track_id]
+
+class TracksEditor:
     def __init__(self, path=None, verbose=False):
         self.verbose = verbose
         # Initialize our info about the map and track 
@@ -355,7 +415,7 @@
 
         self.window.connect("destroy", lambda w: gtk.main_quit())
 
-        tooltips = gtk.Tooltips()
+        self.tooltips = gtk.Tooltips()
 
         # FIXME: make the control box fixed-size
         controls = gtk.HBox()
@@ -383,7 +443,7 @@
             button.connect("toggled", self.button_callback, icon.action)
             radiobox.pack_start(button, expand=True, fill=True, padding=0)
             button.show()
-            tooltips.set_tip(button, "Place %s events." % action.lower())
+            self.tooltips.set_tip(button, "Place %s events." % action.lower())
 
         # The delete button and its label
         button = gtk.RadioButton(button)
@@ -397,7 +457,7 @@
         button.connect("toggled", self.button_callback, "DELETE")
         radiobox.pack_start(button, expand=True, fill=True, padding=0)
         button.show()
-        tooltips.set_tip(button, "Remove events.")
+        self.tooltips.set_tip(button, "Remove events.")
 
         # The coordinate display in the middle
         self.coordwin = gtk.Label()
@@ -413,42 +473,42 @@
         button = gtk.Button("Quit")
         buttonbox.pack_end(button, expand=False, fill=False, padding=10)
         button.connect_object("clicked", self.quit, self.window)
-        tooltips.set_tip(button, "Leave this program.")
+        self.tooltips.set_tip(button, "Leave this program.")
         button.show()
 
         # A help button
         button = gtk.Button("Help")
         buttonbox.pack_end(button, expand=False, fill=False, padding=10)
         button.connect_object("clicked", self.help_handler, self.window)
-        tooltips.set_tip(button, "See a help message describing the controls.")
+        self.tooltips.set_tip(button, "See a help message describing the 
controls.")
         button.show()
 
         # A tracks button
         button = gtk.Button("Tracks")
         buttonbox.pack_end(button, expand=False, fill=False, padding=10)
         button.connect_object("clicked", self.tracks_handler, self.window)
-        tooltips.set_tip(button, "Select tracks to be displayed.")
+        self.tooltips.set_tip(button, "Select tracks to be displayed.")
         button.show()
 
         # A properties button
         button = gtk.Button("Properties")
         buttonbox.pack_end(button, expand=False, fill=False, padding=10)
         button.connect_object("clicked", self.properties_handler, self.window)
-        tooltips.set_tip(button, "Set properties of the track.")
+        self.tooltips.set_tip(button, "Set properties of the track.")
         button.show()
 
         # A save button
         button = gtk.Button("Save")
         buttonbox.pack_end(button, expand=False, fill=False, padding=10)
         button.connect_object("clicked", self.save_handler, self.window)
-        tooltips.set_tip(button, "Save track in .cfg format.")
+        self.tooltips.set_tip(button, "Save track in .cfg format.")
         button.show()
 
         # An animate button
         button = gtk.Button("Animate")
         buttonbox.pack_end(button, expand=False, fill=False, padding=10)
         button.connect_object("clicked", self.animate_handler, self.window)
-        tooltips.set_tip(button, "Animate dot-drawing as in a story part.")
+        self.tooltips.set_tip(button, "Animate dot-drawing as in a story 
part.")
         button.show()
 
         # Create the drawing area on a viewport that scrolls if needed.
@@ -746,38 +806,43 @@
         self.visibility = gtk.Dialog(title="Edit track visibility.",
                                      buttons=(gtk.STOCK_OK,
                                               gtk.RESPONSE_ACCEPT))
-        label = gtk.Label("Change the visibility of tracks.")
+        label = gtk.Label("The radiobuttons select a track for editing.")
         self.visibility.vbox.pack_start(label)
         self.visibility_toggles = {}
         label.show()
-        label = gtk.Label("(Radiobuttons select a track for editing.)")
+        label = gtk.Label("The checkbuttons toggle the visibility of tracks.")
         self.visibility.vbox.pack_start(label)
-        self.visibility_toggles = {}
         label.show()
+        self.controller = {}
         basebutton = None
+        self.trackbox = gtk.VBox()
+        self.visibility.vbox.add(self.trackbox)
+        self.trackbox.show()
+        basebutton = gtk.RadioButton()
         for (i, track_id) in enumerate(self.journey.track_list):
-            h = gtk.HBox()
-            self.visibility.vbox.add(h)
-            h.show()
-            radiobutton = gtk.RadioButton(basebutton)
-            if basebutton == None:
-                basebutton = radiobutton
-            radiobutton.set_active(track_id == self.journey.selected_id)
-            radiobutton.connect("toggled", self.track_activity_callback, 
track_id)
-            radiobutton.show()
-            h.add(radiobutton)
-            checkbox = gtk.CheckButton(track_id)
-            checkbox.set_active(track_id in self.visible_set)
-            checkbox.connect("toggled", 
self.track_visibility_callback,track_id)
-            h.add(checkbox)
-            checkbox.show()
-            self.visibility_toggles[track_id] = checkbox
+            TrackController(self, track_id, self.trackbox, basebutton)
+            #if basebutton == None:
+            #    basebutton = self.controller[track_id].radiobutton
+        addbox = gtk.HBox()
+        addbox.show()
+        addlabel = gtk.Label("Add New Track:")
+        addlabel.show()
+        addbox.add(addlabel)
+        addentry = gtk.Entry()
+        addentry.show()
+        addbox.add(addentry)
+        addentry.connect("activate",
+                         lambda: TrackController(self,
+                                                 addentry.get_text().
+                                                 self.trackbox,
+                                                 basebutton))
+        self.visibility.vbox.add(addbox)
+        self.visibility.connect("response", self.track_visibility_revert)
         self.visibility.show()
-        self.visibility.connect("response", self.track_visibility_revert)
     def track_activity_callback(self, w, track_id):
         if w.get_active():
             self.journey.set_selected_track(track_id)
-            self.visibility_toggles[track_id].set_active(True)
+            self.controller[track_id].checkbox.set_active(True)
             if track_id not in self.visible_set:
                 self.track_visibility_callback(w, track_id)
             else:
@@ -788,7 +853,7 @@
                                   flags=gtk.DIALOG_DESTROY_WITH_PARENT,
                                   buttons=gtk.BUTTONS_OK)
             w.set_markup("At least one track must remain visible.")
-            self.visibility_toggles[track_id].set_active(True)
+            self.controller[track_id].checkbox.set_active(True)
             w.run()
             w.destroy()
             return
@@ -888,7 +953,7 @@
         wesnoth.wmltools.pop_to_top("trackplacer")
     if arguments:
         try:
-            TrackEditor(path=os.path.join(here, arguments[0]), verbose=verbose)
+            TracksEditor(path=os.path.join(here, arguments[0]), 
verbose=verbose)
         except IOException, e:
             if e.lineno:
                 sys.stderr.write(('"%s", line %d: ' % (e.path, e.lineno)) + 
e.message + "\n")
@@ -947,7 +1012,7 @@
                 if filename.startswith(os.getcwd()):
                     filename = filename[len(os.getcwd())+1:]
 
-                TrackEditor(filename, verbose=verbose)
+                TracksEditor(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