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