changeset 737:3d1112a894df

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
author Drew Perttula <drewp@bigasterisk.com>
date Fri, 15 Jun 2012 07:00:49 +0000
parents d1bff8a3b069
children fdc7143870bf
files bin/curvecalc light9/curvecalc/curve.py light9/curvecalc/curveview.py
diffstat 3 files changed, 50 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/bin/curvecalc	Fri Jun 15 06:10:54 2012 +0000
+++ b/bin/curvecalc	Fri Jun 15 07:00:49 2012 +0000
@@ -15,9 +15,8 @@
 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 @@
     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 @@
         
         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 @@
         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 @@
                 # 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:
--- a/light9/curvecalc/curve.py	Fri Jun 15 06:10:54 2012 +0000
+++ b/light9/curvecalc/curve.py	Fri Jun 15 07:00:49 2012 +0000
@@ -176,6 +176,8 @@
         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
 
--- a/light9/curvecalc/curveview.py	Fri Jun 15 06:10:54 2012 +0000
+++ b/light9/curvecalc/curveview.py	Fri Jun 15 07:00:49 2012 +0000
@@ -372,18 +372,7 @@
 
         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)