Mercurial > code > home > repos > light9
changeset 715:9865cf5e07fd
collapse and mute support. very hard
Ignore-this: fc53c238b07d4b8240706413f7e5316e
author | Drew Perttula <drewp@bigasterisk.com> |
---|---|
date | Tue, 12 Jun 2012 07:58:03 +0000 |
parents | 1b1e6dc6cc74 |
children | 348b68723238 |
files | bin/curvecalc light9/curvecalc/curvecalc.glade light9/curvecalc/curveview.py |
diffstat | 3 files changed, 121 insertions(+), 52 deletions(-) [+] |
line wrap: on
line diff
--- a/bin/curvecalc Tue Jun 12 06:30:02 2012 +0000 +++ b/bin/curvecalc Tue Jun 12 07:58:03 2012 +0000 @@ -112,6 +112,12 @@ # threads. I don't know whose they are. os.kill(os.getpid(), signal.SIGKILL) + def onCollapseAll(self, *args): + self.curvesetView.collapseAll() + + def onCollapseNone(self, *args): + self.curvesetView.collapseNone() + def onDelete(self, *args): self.curvesetView.onDelete()
--- a/light9/curvecalc/curvecalc.glade Tue Jun 12 06:30:02 2012 +0000 +++ b/light9/curvecalc/curvecalc.glade Tue Jun 12 07:58:03 2012 +0000 @@ -315,6 +315,7 @@ <object class="GtkHBox" id="hbox2"> <property name="visible">True</property> <property name="can_focus">False</property> + <property name="spacing">7</property> <child> <object class="GtkButton" id="button22"> <property name="label">gtk-add</property> @@ -332,6 +333,39 @@ </packing> </child> <child> + <object class="GtkButton" id="button7"> + <property name="label" translatable="yes">Collapse all</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="clicked" handler="onCollapseAll" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button6"> + <property name="label" translatable="yes">Collapse none </property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="clicked" handler="onCollapseNone" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> <placeholder/> </child> <child> @@ -377,17 +411,23 @@ <property name="visible">True</property> <property name="can_focus">False</property> <child> - <object class="GtkVBox" id="curves"> + <object class="GtkEventBox" id="eventbox1"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can_focus">True</property> <child> - <placeholder/> - </child> - <child> - <placeholder/> - </child> - <child> - <placeholder/> + <object class="GtkVBox" id="curves"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> </child> </object> </child>
--- a/light9/curvecalc/curveview.py Tue Jun 12 06:30:02 2012 +0000 +++ b/light9/curvecalc/curveview.py Tue Jun 12 07:58:03 2012 +0000 @@ -75,12 +75,12 @@ """ graphical curve widget only. Please pack .widget """ - def __init__(self, curve, knobEnabled=False, isMusic=False, zoomControl=None, **kw): + def __init__(self, curve, knobEnabled=False, isMusic=False, + zoomControl=None): """knobEnabled=True highlights the previous key and ties it to a hardware knob""" self.widget = goocanvas.Canvas() self.widget.set_property("background-color", "black") - self.widget.set_size_request(-1, 100) self.size = self.widget.get_allocation() self.root = self.widget.get_root_item() @@ -137,6 +137,7 @@ self.dragging_dots = False self.selecting = False + if 0: self.bind("<ButtonPress-1>",#"<Alt-Key>", self.select_press, add=True) @@ -147,14 +148,12 @@ self.bind("<ButtonPress-1>", self.check_deselect, add=True) self.bind("<Key-m>", lambda *args: self.curve.toggleMute()) - self.bind("<Key-c>", lambda *args: dispatcher.send('toggle collapse', - sender=self.curve)) def onDelete(self): if self.selected_points: self.remove_point_idx(*self.selected_points) - + def onCanvasPress(self, item, target_item, event): # when we support multiple curves per canvas, this should find # the close one and add a point to that. Binding to the line @@ -355,7 +354,7 @@ self.dots = {} # idx : canvas rectangle - if len(visible_points)<50: + if len(visible_points) < 50 and not self.curve.muted: self._draw_handle_points(visible_idxs,visible_points) def is_music(self): @@ -625,11 +624,13 @@ """ one of the repeating curve rows (including widgets on the left) + i wish these were in a list-style TreeView so i could set_reorderable on it + please pack self.box """ def __init__(self, name, curve, slider, knobEnabled, zoomControl): self.name = name - self.box = gtk.HandleBox() + self.box = gtk.VBox() self.box.set_border_width(1) cols = gtk.HBox() @@ -644,7 +645,8 @@ self.curveView = Curveview(curve, knobEnabled=knobEnabled, isMusic=name in ['music', 'smooth_music'], zoomControl=zoomControl) - cols.pack_start(self.curveView.widget, expand=True) + self.curveView.widget.set_size_request(-1, 100) + cols.pack_start(self.curveView.widget, expand=True) def setupControls(self, controls, name, curve, slider): box = gtk.VBox() @@ -656,22 +658,16 @@ curve_name_label = gtk.Label(txt) box.pack_start(curve_name_label) - -# self.collapsed = tk.IntVar() -# self.muted = tk.IntVar() - bools = gtk.HBox() box.pack_start(bools) - collapsed_cb = gtk.CheckButton("C") - bools.pack_start(collapsed_cb) - #self.collapsed.trace('w', self.update_ui_to_collapsed_state) - dispatcher.connect(self.toggleCollapsed, "toggle collapse", - sender=curve) - - muted_cb = gtk.CheckButton("M") + self.collapsed = gtk.CheckButton("C") + bools.pack_start(self.collapsed) + self.collapsed.connect("toggled", self.update_ui_to_collapsed_state) + self.hideWhenCollapsed = [bools] + self.muted = gtk.CheckButton("M") - bools.pack_start(muted_cb) - #self.muted.trace('w', self.sync_mute_to_curve) + bools.pack_start(self.muted) + self.muted.connect("toggled", self.sync_mute_to_curve) dispatcher.connect(self.mute_changed, 'mute changed', sender=curve) self.sliderLabel = None @@ -682,7 +678,7 @@ box.pack_start(self.sliderLabel) # widgets that need recoloring when we tint the row: - #self.widgets = [leftside, collapsed_cb, muted_cb, + #self.widgets = [leftside, self.collapsed, self.muted, # curve_name_label, self] #if self.sliderLabel: # self.widgets.append(self.sliderLabel) @@ -690,42 +686,35 @@ def onDelete(self): self.curveView.onDelete() - def toggleCollapsed(self): - self.collapsed.set(not self.collapsed.get()) - def update_ui_to_collapsed_state(self, *args): - if self.collapsed.get(): - if self.sliderLabel: - self.sliderLabel.pack_forget() - self.curveView.config(height=25) + if self.collapsed.get_active(): + self.curveView.widget.set_size_request(-1, 25) + [w.hide() for w in self.hideWhenCollapsed] else: - if self.sliderLabel: - self.sliderLabel.pack(side='left') - self.curveView.config(height=100) + self.curveView.widget.set_size_request(-1, 100) + [w.show() for w in self.hideWhenCollapsed] def sync_mute_to_curve(self, *args): - """send value from Tk var to the master attribute inside Curve""" - new_mute = self.muted.get() - old_mute = self.curveView.curve.muted - if new_mute == old_mute: - return - + """send value from CheckButton to the master attribute inside Curve""" + new_mute = self.muted.get_active() self.curveView.curve.muted = new_mute def update_mute_look(self): """set colors on the widgets in the row according to self.muted.get()""" - if self.muted.get(): + # not yet ported for gtk + return + if self.curveView.curve.muted: new_bg = 'grey20' else: - new_bg = self.default_bg + new_bg = 'normal' for widget in self.widgets: widget['bg'] = new_bg def mute_changed(self): """call this if curve.muted changed""" - self.muted.set(self.curveView.curve.muted) - self.update_mute_look() + self.muted.set_active(self.curveView.curve.muted) + #self.update_mute_look() class Curvesetview(object): @@ -749,7 +738,31 @@ dispatcher.connect(self.add_curve, "add_curve", sender=self.curveset) self.newcurvename = gtk.EntryBuffer("", 0) - + + eventBox = self.curvesVBox.get_parent() + eventBox.connect("key-press-event", self.onKeyPress) + eventBox.connect("button-press-event", self.takeFocus) + + def takeFocus(self, *args): + """the whole curveset's eventbox is what gets the focus, currently, so + keys like 'c' can work in it""" + self.curvesVBox.get_parent().grab_focus() + + def onKeyPress(self, widget, event): + r = self.row_under_mouse() + if event.string == 'c': + # calling toggled() had no effect; don't know why + r.collapsed.set_active(not r.collapsed.get_active()) + + def row_under_mouse(self): + x, y = self.curvesVBox.get_pointer() + for r in self.allCurveRows: + inRowX, inRowY = self.curvesVBox.translate_coordinates(r.box, x, y) + _, _, w, h = r.box.get_allocation() + if 0 <= inRowX < w and 0 <= inRowY < h: + return r + raise ValueError("no curveRow is under the mouse") + def focus_entry(self): self.entry.focus() @@ -778,3 +791,13 @@ def onDelete(self): for r in self.allCurveRows: r.onDelete() + + def collapseAll(self): + for r in self.allCurveRows: + r.collapsed.set_active(True) + + def collapseNone(self): + for r in self.allCurveRows: + r.collapsed.set_active(False) + +