diff --git a/bin/curvecalc b/bin/curvecalc --- a/bin/curvecalc +++ b/bin/curvecalc @@ -29,19 +29,11 @@ from light9.curvecalc import curveview from light9.curvecalc.musicaccess import Music, currentlyPlayingSong from light9.wavelength import wavelength from light9.namespaces import L9 -from light9.curvecalc.subterm import read_all_subs, savekey, graphPathForSubterms +from light9.curvecalc.subterm import savekey, graphPathForSubterms from light9.curvecalc.subtermview import add_one_subterm from light9.curvecalc.output import Output from light9.gtkpyconsole import togglePyConsole - -@prof.logTime -def makeGraph(): - graphOrig = showconfig.getGraph() - graph = Graph() # a copy, since we're going to add subs into it - for s in graphOrig: - graph.add(s) - read_all_subs(graph) - return graph +from light9.rdfdb.syncedgraph import SyncedGraph class SubtermExists(ValueError): pass @@ -65,7 +57,10 @@ class Main(object): mainwin.show_all() mainwin.connect("delete-event", lambda *args: reactor.crash()) - mainwin.set_title("curvecalc - %s" % graph.label(song)) + def updateTitle(): + # song will soon be a lookup on this curvecalc session + mainwin.set_title("curvecalc - %s" % graph.label(song)) + graph.addHandler(updateTitle) mainwin.parse_geometry("1x1-0+0") # this is the only one i found that would set the size right, @@ -74,7 +69,7 @@ class Main(object): wtree.get_object("subterms").connect("add", self.onSubtermChildAdded) - self.add_subterms_for_song(song, curveset, subterms) + graph.addHandler(self.add_subterms_for_song) self.refreshCurveView() self.makeStatusLines(wtree.get_object("status")) @@ -155,13 +150,24 @@ class Main(object): 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"), - expr=expr, show=True) + self.graph.add((self.song, L9['subterm'], uri)) if withCurve: self.curveset.new_curve(newname) + def add_subterms_for_song(self): + master = self.wtree.get_object("subterms") + [master.remove(c) for c in master.get_children()] + + for st in self.graph.objects(self.song, L9['subterm']): + log.info("song %s has subterm %s", self.song, st) + add_one_subterm(self.graph, + self.graph.value(st, L9['sub']), + self.curveset, + self.subterms, + master, + self.graph.value(st, L9['expression'])) + master.show_all() + def refreshTheme(self): gtk.rc_reparse_all() reactor.callLater(1, self.refreshTheme) @@ -211,18 +217,6 @@ class Main(object): def onSave(self, *args): savekey(self.song, self.subterms, self.curveset) - def add_subterms_for_song(self, song, curveset, subterms): - master = self.wtree.get_object("subterms") - for st in self.graph.objects(song, L9['subterm']): - log.info("song %s has subterm %s", song, st) - add_one_subterm(self.graph, - self.graph.value(st, L9['sub']), - curveset, - subterms, - master, - self.graph.value(st, L9['expression'])) - master.show_all() - def makeStatusLines(self, master): """various labels that listen for dispatcher signals""" for row, (signame, textfilter) in enumerate([ @@ -289,11 +283,6 @@ class Main(object): if self.opts.reload: reactor.callLater(1, self.refreshCurveView) - def onReloadSubs(self, *args): # wants to be ctrl-r too - read_all_subs(self.graph) # this will discover new subs (additive only) - dispatcher.send('reload all subs') # this rereads each sub from its graph file - dispatcher.send("all curves rebuild") - def main(): startTime = time.time() @@ -321,7 +310,7 @@ def main(): song = currentlyPlayingSong() music = Music() - graph = makeGraph() + graph = SyncedGraph("curvecalc") curveset = Curveset(sliders=opts.sliders) subterms = [] @@ -331,14 +320,6 @@ def main(): showconfig.songFilenameFromURI(song)), skipMusic=opts.skip_music) - subtermPath = graphPathForSubterms(song) - try: - graph.parse(subtermPath, format='n3') - except IOError, e: - if e.errno != 2: - raise - log.info("%s not found, starting with empty graph" % subtermPath) - log.debug("startup: output %s", time.time() - startTime) out = Output(subterms, music) diff --git a/light9/curvecalc/subterm.py b/light9/curvecalc/subterm.py --- a/light9/curvecalc/subterm.py +++ b/light9/curvecalc/subterm.py @@ -135,15 +135,6 @@ class Subterm: def graphPathForSubterms(song): return showconfig.subtermsForSong(showconfig.songFilenameFromURI(song)) + ".n3" -@prof.logTime -def read_all_subs(graph): - """read all sub files into this graph so when add_one_subterm tries - to add, the sub will be available""" - subsDir = showconfig.subsDir() - for filename in os.listdir(subsDir): - # parsing nt is faster, but it should try n3 format if the parsing fails - graph.parse(os.path.join(subsDir, filename), format="n3") - def createSubtermGraph(song, subterms): """rdf graph describing the subterms, readable by add_subterms_for_song""" graph = Graph() diff --git a/light9/curvecalc/subtermview.py b/light9/curvecalc/subtermview.py --- a/light9/curvecalc/subtermview.py +++ b/light9/curvecalc/subtermview.py @@ -71,8 +71,9 @@ def add_one_subterm(graph, subUri, curve # this is what I'd like to have, but the name replacement above is # too unclear for me to make the change now #get_global_submasters(graph).get_sub_by_name( - - sub = Submaster.Submaster(graph=graph, name=subname, sub=subUri) + + # graph.add([(subUri, RDFS.label, Literal(subname))]) # didntknow context yet + sub = Submaster.PersistentSubmaster(graph, subUri) term = Subterm(sub, Subexpr(curveset, expr, graph)) subterms.append(term)