Files
@ a4052905ca7d
Branch filter:
Location: light9/web/timeline/Project.coffee - annotation
a4052905ca7d
3.2 KiB
text/coffeescript
notes about how rdfdb syncs, or should sync
4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 | log = debug('timeline')
debug.enable('*')
Drawing = window.Drawing
ROW_COUNT = 7
class Project
constructor: (@graph) ->
makeEffect: (uri) ->
U = (x) => @graph.Uri(x)
effect = U(uri.value + '/effect')
quad = (s, p, o) => @graph.Quad(s, p, o, effect)
quads = [
quad(effect, U('rdf:type'), U(':Effect')),
quad(effect, U(':copiedFrom'), uri),
quad(effect, U('rdfs:label'), @graph.Literal(uri.replace(/.*capture\//, ''))),
quad(effect, U(':publishAttr'), U(':strength')),
]
fromSettings = @graph.objects(uri, U(':setting'))
toSettings = @graph.nextNumberedResources(effect + '_set', fromSettings.length)
for fs in fromSettings
ts = toSettings.pop()
# full copies of these since I may have to delete captures
quads.push(quad(effect, U(':setting'), ts))
quads.push(quad(ts, U(':device'), @graph.uriValue(fs, U(':device'))))
quads.push(quad(ts, U(':deviceAttr'), @graph.uriValue(fs, U(':deviceAttr'))))
try
quads.push(quad(ts, U(':value'), @graph.uriValue(fs, U(':value'))))
catch
quads.push(quad(ts, U(':scaledValue'), @graph.uriValue(fs, U(':scaledValue'))))
@graph.applyAndSendPatch({delQuads: [], addQuads: quads})
return effect
makeNewNote: (song, effect, dropTime, desiredWidthT) ->
U = (x) => @graph.Uri(x)
quad = (s, p, o) => @graph.Quad(s, p, o, song)
newNote = @graph.nextNumberedResource("#{song.value}/n")
newCurve = @graph.nextNumberedResource("#{newNote.value}c")
points = @graph.nextNumberedResources("#{newCurve.value}p", 4)
curveQuads = [
quad(song, U(':note'), newNote)
quad(newNote, U('rdf:type'), U(':Note'))
quad(newNote, U(':originTime'), @graph.LiteralRoundedFloat(dropTime))
quad(newNote, U(':effectClass'), effect)
quad(newNote, U(':curve'), newCurve)
quad(newCurve, U('rdf:type'), U(':Curve'))
# todo: maybe shoudl be :effectAttr?
quad(newCurve, U(':attr'), U(':strength'))
]
pointQuads = []
for i in [0...4]
pt = points[i]
pointQuads.push(quad(newCurve, U(':point'), pt))
pointQuads.push(quad(pt, U(':time'), @graph.LiteralRoundedFloat(i/3 * desiredWidthT)))
pointQuads.push(quad(pt, U(':value'), @graph.LiteralRoundedFloat(i == 1 or i == 2)))
patch = {
delQuads: []
addQuads: curveQuads.concat(pointQuads)
}
@graph.applyAndSendPatch(patch)
getCurvePoints: (curve, xOffset) ->
worldPts = []
uris = @graph.objects(curve, @graph.Uri(':point'))
for pt in uris
tm = @graph.floatValue(pt, @graph.Uri(':time'))
val = @graph.floatValue(pt, @graph.Uri(':value'))
v = $V([xOffset + tm, val])
v.uri = pt
worldPts.push(v)
worldPts.sort((a,b) -> a.e(1) - b.e(1))
return [uris, worldPts]
curveWidth: (worldPts) ->
tMin = @graph.floatValue(worldPts[0].uri, @graph.Uri(':time'))
tMax = @graph.floatValue(worldPts[3].uri, @graph.Uri(':time'))
tMax - tMin
deleteNote: (song, note, selection) ->
patch = {delQuads: [@graph.Quad(song, graph.Uri(':note'), note, song)], addQuads: []}
@graph.applyAndSendPatch(patch)
if note in selection.selected()
selection.selected(_.without(selection.selected(), note))
|