Mercurial > code > home > repos > light9
annotate bin/subcomposer @ 818:bf728997bfde
start the observable between editchoice and the editor
Ignore-this: 23094325e4b13df6a7b5d3b1325d509d
author | drewp@bigasterisk.com |
---|---|
date | Sat, 12 Jan 2013 20:51:20 +0000 |
parents | 6885c2fa9369 |
children | 0f7e99d02dc6 |
rev | line source |
---|---|
729
b5efddd80dad
update more shbang lines
Drew Perttula <drewp@bigasterisk.com>
parents:
577
diff
changeset
|
1 #!bin/python |
0 | 2 |
3 from __future__ import division, nested_scopes | |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
4 from optparse import OptionParser |
0 | 5 import Tkinter as tk |
802 | 6 import louie as dispatcher |
803 | 7 from twisted.internet import reactor, tksupport, task |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
8 from rdflib import URIRef |
0 | 9 |
209
1a84c5e83d3e
dmxserver and subcomposer work in new layout
drewp@bigasterisk.com
parents:
201
diff
changeset
|
10 import run_local |
1a84c5e83d3e
dmxserver and subcomposer work in new layout
drewp@bigasterisk.com
parents:
201
diff
changeset
|
11 from light9.dmxchanedit import Levelbox |
803 | 12 from light9 import dmxclient, Patch, Submaster, showconfig, prof |
455
9dd2baa41cca
subcomposer remembers window position
drewp@bigasterisk.com
parents:
450
diff
changeset
|
13 from light9.uihelpers import toplevelat |
803 | 14 from light9.rdfdb.syncedgraph import SyncedGraph |
810 | 15 from light9.rdfdb import clientsession |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
16 from light9.tkdnd import initTkdnd, dragSourceRegister, dropTargetRegister |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
17 |
818
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
18 class _NoNewVal(object): |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
19 pass |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
20 |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
21 class Observable(object): |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
22 """ |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
23 like knockout's observable. Hopefully this can be replaced by a |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
24 better python one |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
25 """ |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
26 def __init__(self, val): |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
27 self.val = val |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
28 self.subscribers = set() |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
29 |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
30 def __call__(self, newVal=_NoNewVal): |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
31 if newVal is _NoNewVal: |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
32 return self.val |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
33 self.val = newVal |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
34 for s in self.subscribers: |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
35 s(newVal) |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
36 |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
37 def subscribe(self, cb, callNow=True): |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
38 """cb is called with new values, and also right now with the |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
39 current value unless you opt out""" |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
40 self.subscribers.add(cb) |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
41 if callNow: |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
42 cb(self.val) |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
43 |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
44 class Local(object): |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
45 """placeholder for the local uri that EditChoice does not |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
46 manage. Set resourceObservable to Local to indicate that you're |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
47 unlinked""" |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
48 |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
49 class EditChoice(tk.Frame): |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
50 """ |
818
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
51 Observable <-> linker UI |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
52 |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
53 widget for tying some UI to a shared resource for editing, or |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
54 unlinking it (which means associating it with a local resource |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
55 that's not named or shared). This object does not own the choice |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
56 of resource; the caller does. |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
57 """ |
818
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
58 def __init__(self, parent, graph, resourceObservable): |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
59 """ |
818
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
60 getResource is called to get the URI of the currently |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
61 """ |
818
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
62 self.frame = tk.Frame(parent, relief='raised',border=8) |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
63 self.frame.pack(side='top') |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
64 tk.Label(self.frame, text="Editing:").pack(side='left') |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
65 self.currentSubFrame = tk.Frame(self.frame) |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
66 self.currentSubFrame.pack(side='left') |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
67 |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
68 self.subIcon = tk.Label(self.currentSubFrame, text="sub1", |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
69 borderwidth=2, |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
70 relief='raised', padx=10, pady=10) |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
71 self.subIcon.pack() |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
72 |
818
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
73 self.resourceObservable = resourceObservable |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
74 resourceObservable.subscribe(self.uriChanged) |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
75 |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
76 dragSourceRegister(self.subIcon, 'copy', 'text/uri-list', |
818
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
77 self.resourceObservable) |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
78 def onEv(ev): |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
79 self.resourceObservable(ev.data) |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
80 return "link" |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
81 self.onEv = onEv |
818
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
82 |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
83 # it would be nice if I didn't receive my own drags here |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
84 dropTargetRegister(self.subIcon, typeList=["*"], onDrop=onEv, |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
85 hoverStyle=dict(background="#555500", bd=3, |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
86 relief='groove')) |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
87 |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
88 tk.Label(self.currentSubFrame, text="local data (drag sub here)").pack() |
818
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
89 b=tk.Button(text="unlink", command=self.switchToLocalSub) |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
90 b.pack() |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
91 |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
92 |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
93 def uriChanged(self, newUri): |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
94 print "chg", newUri |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
95 # i guess i show the label and icon for this |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
96 if newUri is Local: |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
97 self.subIcon.config(text="(local)") |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
98 else: |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
99 self.subIcon.config(text=newUri) |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
100 |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
101 def switchToLocalSub(self): |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
102 self.resourceObservable(Local) |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
103 |
0 | 104 |
105 class Subcomposer(tk.Frame): | |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
106 """ |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
107 <session> l9:currentSub ?sub is the URI of the sub we're tied to for displaying and |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
108 editing. If we don't have a currentSub, then we're actually |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
109 editing a session-local sub called <session> l9:currentSub <sessionLocalSub> |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
110 |
818
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
111 Contains an EditChoice widget |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
112 |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
113 UI actions: |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
114 - drag a sub uri on here to make it the one we're editing |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
115 |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
116 - button to clear the currentSub (putting it back to |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
117 sessionLocalSub, and also resetting sessionLocalSub to be empty |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
118 again) |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
119 |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
120 - drag the sub uri off of here to send it to another receiver, but |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
121 session local sub is not easily addressable elsewhere |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
122 |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
123 - make a new sub: transfers the current data (from a shared sub or |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
124 from the local one) to the new sub. If you're on a local sub, |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
125 the new sub is named automatically, ideally something brief, |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
126 pretty distinct, readable, and based on the lights that are |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
127 on. If you're on a named sub, the new one starts with a |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
128 'namedsub 2' style name. The uri can also be with a '2' suffix, |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
129 although maybe that will be stupid. If you change the name |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
130 before anyone knows about this uri, we could update the current |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
131 sub's uri to a slug of the new label. |
818
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
132 |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
133 - rename this sub: not available if you're on a local sub. Sets |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
134 the label of a named sub. Might update the uri of the named sub |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
135 if it's new enough that no one else would have that uri. Not |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
136 sure where we measure that 'new enough' value. Maybe track if |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
137 the sub has 'never been dragged out of this subcomposer |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
138 session'? But subs will also show up in other viewers and |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
139 finders. |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
140 |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
141 """ |
810 | 142 def __init__(self, master, graph, session): |
0 | 143 tk.Frame.__init__(self, master, bg='black') |
803 | 144 self.graph = graph |
810 | 145 self.session = session |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
146 self.currentSub = Submaster.PersistentSubmaster(graph, URIRef('http://hello')) |
0 | 147 |
803 | 148 self.levelbox = Levelbox(self, graph) |
0 | 149 self.levelbox.pack(side='top') |
150 | |
818
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
151 currentUri = Observable("http://curr") |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
152 |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
153 def pc(val): |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
154 print "change viewed sub to", val |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
155 currentUri.subscribe(pc) |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
156 |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
157 EditChoice(self, self.graph, currentUri).frame.pack(side='top') |
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
158 |
0 | 159 def alltozero(): |
803 | 160 for lev in self.levelbox.levels: |
161 lev.setlevel(0) | |
0 | 162 |
149 | 163 tk.Button(self, text="all to zero", command=alltozero).pack(side='top') |
0 | 164 |
803 | 165 dispatcher.connect(self.sendupdate, "levelchanged") |
0 | 166 |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
167 def switchToLocalSub(self, *args): |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
168 """ |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
169 stop editing a shared sub and go back to our local sub |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
170 """ |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
171 |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
172 def fill_both_boxes(self, subname): |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
173 for box in [self.savebox, self.loadbox]: |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
174 box.set(subname) |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
175 |
351
a6662d61ebcd
SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents:
342
diff
changeset
|
176 def savenewsub(self, subname): |
0 | 177 leveldict={} |
178 for i,lev in zip(range(len(self.levels)),self.levels): | |
179 if lev!=0: | |
180 leveldict[Patch.get_channel_name(i+1)]=lev | |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
181 |
351
a6662d61ebcd
SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents:
342
diff
changeset
|
182 s=Submaster.Submaster(subname,leveldict=leveldict) |
0 | 183 s.save() |
802 | 184 |
810 | 185 # this is going to be more like 'tie to sub' and 'untied' |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
186 def loadsub(self, subname): |
0 | 187 """puts a sub into the levels, replacing old level values""" |
577 | 188 s=Submaster.Submasters(showconfig.getGraph()).get_sub_by_name(subname) |
380
a13f2caf6f25
fix SC dragging after you load a sub
Drew Perttula <drewp@bigasterisk.com>
parents:
351
diff
changeset
|
189 self.set_levels(s.get_dmx_list()) |
0 | 190 dispatcher.send("levelchanged") |
802 | 191 |
803 | 192 def toDmxLevels(self): |
193 # the dmx levels we edit and output, range is 0..1 (dmx chan 1 is | |
194 # the 0 element) | |
195 out = {} | |
196 for lev in self.levelbox.levels: | |
197 out[lev.channelnum] = lev.currentlevel | |
198 if not out: | |
199 return [] | |
818
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
200 |
803 | 201 return [out.get(i, 0) for i in range(max(out.keys()) + 1)] |
818
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
202 |
0 | 203 def sendupdate(self): |
803 | 204 dmxclient.outputlevels(self.toDmxLevels(), twisted=True) |
802 | 205 |
0 | 206 |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
207 class EntryCommand(tk.Frame): |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
208 def __init__(self, master, verb="Save", cmd=None): |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
209 tk.Frame.__init__(self, master, bd=2, relief='raised') |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
210 tk.Label(self, text="Sub name:").pack(side='left') |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
211 self.cmd = cmd |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
212 self.entry = tk.Entry(self) |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
213 self.entry.pack(side='left', expand=True, fill='x') |
818
bf728997bfde
start the observable between editchoice and the editor
drewp@bigasterisk.com
parents:
817
diff
changeset
|
214 |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
215 self.entry.bind("<Return>", self.action) |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
216 tk.Button(self, text=verb, command=self.action).pack(side='left') |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
217 |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
218 def action(self, *args): |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
219 subname = self.entry.get() |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
220 self.cmd(subname) |
351
a6662d61ebcd
SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents:
342
diff
changeset
|
221 print "sub", self.cmd, subname |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
222 |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
223 def set(self, text): |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
224 self.entry.delete(0, 'end') |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
225 self.entry.insert(0, text) |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
226 |
149 | 227 |
0 | 228 ############################# |
229 | |
230 if __name__ == "__main__": | |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
231 parser = OptionParser(usage="%prog [subname]") |
458
8b307310cc1b
when KC launches SC to edit a sub, don't place the window right on the main SC window
drewp@bigasterisk.com
parents:
455
diff
changeset
|
232 parser.add_option('--no-geometry', action='store_true', |
8b307310cc1b
when KC launches SC to edit a sub, don't place the window right on the main SC window
drewp@bigasterisk.com
parents:
455
diff
changeset
|
233 help="don't save/restore window geometry") |
810 | 234 clientsession.add_option(parser) |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
235 opts, args = parser.parse_args() |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
236 |
0 | 237 root=tk.Tk() |
238 root.config(bg='black') | |
147 | 239 root.tk_setPalette("#004633") |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
240 |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
241 initTkdnd(root.tk, 'tkdnd/trunk/') |
0 | 242 |
803 | 243 graph = SyncedGraph("subcomposer") |
810 | 244 session = clientsession.getUri('subcomposer', opts) |
803 | 245 |
817
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
246 if not opts.no_geometry: |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
247 toplevelat("subcomposer - %s" % opts.session, root, graph, session) |
6885c2fa9369
subcomposer halfway to having the editchoice widget
drewp@bigasterisk.com
parents:
810
diff
changeset
|
248 |
810 | 249 sc = Subcomposer(root, graph, session) |
0 | 250 sc.pack() |
251 | |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
252 tk.Label(root,text="Bindings: B1 adjust level; B2 set full; B3 instant bump", |
228
9827df597f86
added help texts to subcomposer, curvecalc
drewp@bigasterisk.com
parents:
209
diff
changeset
|
253 font="Helvetica -12 italic",anchor='w').pack(side='top',fill='x') |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
254 |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
255 if len(args) == 1: |
458
8b307310cc1b
when KC launches SC to edit a sub, don't place the window right on the main SC window
drewp@bigasterisk.com
parents:
455
diff
changeset
|
256 root.config(bg='green') # trying to make these look distinctive |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
257 sc.loadsub(args[0]) |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
258 sc.fill_both_boxes(args[0]) |
228
9827df597f86
added help texts to subcomposer, curvecalc
drewp@bigasterisk.com
parents:
209
diff
changeset
|
259 |
803 | 260 task.LoopingCall(sc.sendupdate).start(1) |
557
4e558643c952
subcomposer: squelch the exception we got every time we exited
David McClosky <dmcc@bigasterisk.com>
parents:
458
diff
changeset
|
261 |
810 | 262 root.protocol('WM_DELETE_WINDOW', reactor.stop) |
803 | 263 tksupport.install(root,ms=10) |
264 prof.run(reactor.run, profile=False) |