# HG changeset patch # User Drew Perttula # Date 2012-06-15 07:00:49 # Node ID 3d1112a894dfa665884b6a58317838dffb89911a # Parent d1bff8a3b069618bb7947bb094381b495ecea249 drag subs from KC into CC to make a new subterm (if needed) and curve and some points that turn the sub on right now. some bugs about adding a subterm more than once Ignore-this: 2c90a5d00c667ea38f23b0e6b36061dc diff --git a/bin/curvecalc b/bin/curvecalc --- a/bin/curvecalc +++ b/bin/curvecalc @@ -15,9 +15,8 @@ from twisted.internet import gtk2reactor gtk2reactor.install() from twisted.internet import reactor -import time, textwrap, os, optparse, urllib2, gtk, gobject, linecache, signal, traceback +import time, textwrap, os, optparse, gtk, linecache, signal, traceback import louie as dispatcher -from twisted.python.util import sibpath from rdflib import URIRef, Graph, Literal, RDF, RDFS import logging log = logging.getLogger() @@ -42,6 +41,9 @@ def makeGraph(): read_all_subs(graph) return graph +class SubtermExists(ValueError): + pass + class Main(object): def __init__(self, graph, opts, song, curveset, subterms, music): self.graph, self.opts, self.song = graph, opts, song @@ -73,6 +75,33 @@ class Main(object): self.makeStatusLines(wtree.get_object("status")) + def connect(w): + w.drag_dest_set(flags=gtk.DEST_DEFAULT_ALL, + targets=[('text/uri-list', 0, 0)], + actions=gtk.gdk.ACTION_COPY) + w.connect("drag-data-received", self.onDataReceived) + connect(mainwin) + # that's not enough- deeper windows don't accept the + # event. + mainwin.forall(connect) # not very effective + connect(wtree.get_object("subterms")) # works for that area + + def onDataReceived(self, widget, context, x, y, selection, + targetType, time): + uri = URIRef(selection.data.strip()) + subName = self.graph.label(uri) + + try: + self.makeSubterm(subName, withCurve=True) + except SubtermExists: + pass + curveView = self.curvesetView.row(subName).curveView + t = curveView.current_time() + print "time", t + curveView.add_point((t - .5, 0)) + curveView.add_point((t, 1)) + + def onNewCurve(self, *args): dialog = self.wtree.get_object("newCurve") entry = self.wtree.get_object("newCurveName") @@ -91,18 +120,23 @@ class Main(object): entry.grab_focus() if dialog.run() == 1: newname = entry.get_text() - uri = L9['sub/%s' % newname] - self.graph.add((uri, RDF.type, L9.Subterm)) - self.graph.add((uri, RDFS.label, Literal(newname))) - add_one_subterm(self.graph, uri, - self.curveset, self.subterms, - self.wtree.get_object("subterms"), - None, show=True) - if self.wtree.get_object("newSubtermMakeCurve").get_active(): - self.curveset.new_curve(newname) - + wc = self.wtree.get_object("newSubtermMakeCurve").get_active() + self.makeSubterm(newname, withCurve=wc) dialog.hide() + def makeSubterm(self, newname, withCurve=False): + uri = L9['sub/%s' % newname] + if (uri, RDF.type, L9.Subterm) in self.graph: + raise SubtermExists("already have a subterm named %r" % newname) + self.graph.add((uri, RDF.type, L9.Subterm)) + self.graph.add((uri, RDFS.label, Literal(newname))) + add_one_subterm(self.graph, uri, + self.curveset, self.subterms, + self.wtree.get_object("subterms"), + None, show=True) + if withCurve: + self.curveset.new_curve(newname) + def refreshTheme(self): gtk.rc_reparse_all() reactor.callLater(1, self.refreshTheme) @@ -219,7 +253,7 @@ class Main(object): # the curve at startup. If tk is very slow, it's # ok. You'll just get some wasted redraws. self.curvesetView.goLive() - except Exception, e: + except Exception: print "reload failed:" traceback.print_exc() if self.opts.reload: diff --git a/light9/curvecalc/curve.py b/light9/curvecalc/curve.py --- a/light9/curvecalc/curve.py +++ b/light9/curvecalc/curve.py @@ -176,6 +176,8 @@ class Curveset(object): return sorted(self.curves.keys(), key=self.sorter) def add_curve(self,name,curve): + if name in self.curves: + raise ValueError("can't add a second curve named %r" % name) self.curves[name] = curve self.curveName[curve] = name diff --git a/light9/curvecalc/curveview.py b/light9/curvecalc/curveview.py --- a/light9/curvecalc/curveview.py +++ b/light9/curvecalc/curveview.py @@ -372,18 +372,7 @@ class Curveview(object): self.widget.connect("focus-in-event", self.onFocusIn) self.widget.connect("focus-out-event", self.onFocusOut) - #self.widget.connect("event", self.onAny) - - # this is actually for subterms or mainwin, but i test here for reloads. - self.widget.drag_dest_set(flags=gtk.DEST_DEFAULT_ALL, - targets=[('text/uri-list', 0, 0)], - actions=gtk.gdk.ACTION_COPY) - self.widget.connect("drag-data-received", self.onDataReceived) - - - def onDataReceived(self, widget, context, x, y, selection, targetType, time): - print "recv", repr(selection.data) - + #self.widget.connect("event", self.onAny) def onAny(self, w, event): print " %s on %s" % (event, w)