def _layout_common_widgets(self): lab_head = factory.label(self.canvas,"Porgram Mutation") lab_head.grid(row=0, column=0, columnspan=4, pady=16, padx=16) lab_help = factory.label(self.canvas,"P = Probability of change, R = Maximum change.") lab_help.grid(row=0,column=4,columnspan=4, sticky='w', padx=16) frame = factory.frame(self.canvas) frame.grid(row=1,column=0,rowspan=15, columnspan=4,pady=16) b_mutate = factory.button(frame,"Mutate",command=self.mutate) lab_slot = factory.label(frame,"Slot") sb_slot = factory.int_spinbox(frame,self._var_fill_start,from_=0,to=127) sb_slot.config(width=4) sb_slot.config(command=self._link_slots) b_reset = factory.button(frame,"Reset",command=self.reset) b_zero = factory.button(frame,"Zero",command=self.zero) b_max = factory.button(frame,"Max",command=self.max_change) b_mutate.grid(row=1,column=0, columnspan=3,sticky="ew", padx=4, pady=6) lab_slot.grid(row=2,column=0,sticky="w", padx=4) sb_slot.grid(row=2,column=2,sticky="e", padx=4, pady=6) # Fill controls lab_fill = factory.label(frame,"Fill to:") sb_end = factory.int_spinbox(frame,self._var_fill_end,from_=0,to=127) sb_end.config(width=4) cb_progressive = factory.checkbutton(frame,"+", var=self._var_progressive_fill) lab_fill.grid(row=5,column=0,sticky="e",padx=4,pady=6) cb_progressive.grid(row=6,column=0,sticky="w") sb_end.grid(row=6,column=2,sticky='e') pad1 = factory.padding_label(frame) pad1.grid(row=7,column=0,pady=64) b_reset.grid(row=8,column=0,columnspan=3,sticky="ew", padx=4) b_zero.grid(row=9,column=0,columnspan=3,sticky="ew",padx=4,pady=4) b_max.grid(row=10,column=0,columnspan=3,sticky="ew",padx=4) pad2 = factory.padding_label(frame)
def _layout_env_time(self, master): var = Tkinter.StringVar() frame = factory.frame(master) frame.grid(row=1,column=3,sticky='n',padx=8) def select(n): rndgen.gen_config["env-time-hint"] = n rb_random = factory.radio(frame,"Random",var,7, command=lambda : select(None)) rb_ufast = factory.radio(frame,"Ultra Fast",var,ULTRA_FAST, command=lambda : select(ULTRA_FAST)) rb_fast = factory.radio(frame,"Fast",var,FAST, command=lambda : select(FAST)) rb_med = factory.radio(frame,"Medium",var,MEDIUM, command=lambda : select(MEDIUM)) rb_slow = factory.radio(frame,"Slow",var,SLOW, command=lambda : select(SLOW)) rb_glac = factory.radio(frame,"Glacial",var,GLACIAL, command=lambda : select(GLACIAL)) lab = factory.label(frame,"Envelope Times") lab.grid(row=0,column=0,sticky='w') rb_random.grid(row=1,column=0,sticky='w') rb_ufast.grid(row=2,column=0,sticky='w') rb_fast.grid(row=3,column=0,sticky='w') rb_med.grid(row=4,column=0,sticky='w') rb_slow.grid(row=5,column=0,sticky='w') rb_glac.grid(row=6,column=0,sticky='w') self._var_env_changeup = Tkinter.StringVar() s = factory.scale(frame,from_=100,to=0, var = self._var_env_changeup, command=self._env_changeup_callback) lab = factory.label(frame,"Env Changeup") lab.grid(row=0,column=1,sticky='ew',padx=16) s.grid(row=1,column=1,rowspan=6,sticky='ns')
def __init__(self, canvas, paramobj): super(TkMutationStrip,self).__init__() self.paramobj = paramobj self.frame = factory.frame(canvas) lab_param = factory.label(self.frame, "%-16s" % paramobj.param) lab_param.config(width=17) lab_prob = factory.label(self.frame, "P") lab_range = factory.label(self.frame, "R") self.var_prob = StringVar() self.var_prob.set(10) # as int percent 0..100 self.var_range = StringVar() self.var_range.set(1) # as int percent 0..100 spin_prob = factory.int_spinbox(self.frame, self.var_prob,0.0,100, self._set_probability) spin_prob.config(width=6) spin_range = factory.int_spinbox(self.frame, self.var_range,0.0,100, self._set_range) spin_range.config(width=6) lab_param.grid(row=1,column=0, sticky="w", padx=4) lab_prob.grid(row=1,column=1, sticky="w", padx=4) spin_prob.grid(row=1,column=2, sticky="w", padx=4) lab_range.grid(row=1,column=3, sticky="w", padx=4) spin_range.grid(row=1,column=4, sticky="w", padx=4)
def __init__(self, master, app): Toplevel.__init__(self, master) self.wm_title = "Control Buses" self.app = app self.proxy = app.proxy self.parser = app.ls_parser main = factory.frame(self, modal=True) main.pack(expand=True) lab_title = factory.label(main, "Control Busses", modal=True) frame_list = factory.frame(main, modal=True) frame_list.config(width=248, height=320) frame_list.pack_propagate(False) self.listbox = factory.listbox(frame_list, command=self.select_bus) self.listbox.pack(expand=True, fill=BOTH) sb = factory.scrollbar(main, yclient=self.listbox) lab_name = factory.label(main, "Name", modal=True) lab_channels = factory.label(main, "Channels", modal=True) self._var_name = StringVar() entry_name = factory.entry(main, self._var_name, ttip="Control bus name") #self._var_chancount = StringVar() #spin_chancount = factory.int_spinbox(main, self._var_chancount, 1, 64) self.lab_warning = factory.warning_label(main, modal=True) button_bar = factory.frame(main, modal=True) #b_remove = factory.delete_button(button_bar,ttip="Delete control bus",command=self.remove_bus) b_add = factory.add_button(button_bar, ttip="Add new control bus", command=self.add_bus) #b_refresh = factory.refresh_button(button_bar, ttip="Refresh bus list", command=self.refresh) b_accept = factory.accept_button(button_bar, command=self.accept) b_help = factory.help_button(button_bar, command=self.display_help) lab_title.grid(row=0, column=0, columnspan=6, pady=8) frame_list.grid(row=1, column=0, rowspan=5, columnspan=5, pady=8) sb.grid(row=1, column=4, rowspan=5, sticky=NS, pady=4, padx=4) lab_name.grid(row=6, column=0, sticky=W, padx=4) entry_name.grid(row=6, column=1) lab_channels.grid(row=7, column=0, sticky=W, pady=8, padx=4) #spin_chancount.grid(row=7, column=1) self.lab_warning.grid(row=8, column=0, columnspan=6) button_bar.grid(row=9, column=0, columnspan=6, padx=8, pady=4) #b_remove.grid(row=0, column=0) b_add.grid(row=0, column=1) #b_refresh.grid(row=0, column=2) b_help.grid(row=0, column=3) #factory.label(button_bar, "").grid(row=0, column=4, padx=16) factory.padding_label(button_bar).grid(row=0, column=4, padx=16) b_accept.grid(row=0, column=5) self._current_selection = 0 entry_name.bind('<Down>', self.increment_selection) entry_name.bind('<Up>', self.decrement_selection) entry_name.bind('<Return>', self.add_bus) self.listbox.bind('<Down>', self.increment_selection) self.listbox.bind('<Up>', self.decrement_selection) self.refresh() self.grab_set() self.mainloop()
def __init__(self, master, param, editor): """ Create new OscFrequencyControl object. Widgets are not automatically added to the Tk master. Call the layout method to place widgets using a default layout. ARGS: param - String, SC synth parameter. editor - An instance of TkSubEditor master - Tk container. """ print("DEPRECIATION WARNING: OscFrequencyControl") super(OscFrequencyControl, self).__init__(param, editor, master) octaves = [(3, "+3"),(2, "+2"),(1, "+1"),(0, " 0"), (-1,"-1"),(-2,"-2"),(-3,"-3")] self.var_octave = tk.StringVar() # Octave number -3 ... +3 self.var_transpose = tk.IntVar() # Transpose steps, 0 ... 11 self.var_detune = tk.IntVar() # Detune in cents 0 ... 99 self.var_zero = tk.IntVar() # 0 -> osc != 0, 1 -> osc freq = 0 self.var_octave.set(0) self.var_transpose.set(0) self.var_detune.set(0) self.var_zero.set(0) self._radio_buttons = [] for value, text in octaves: rb = factory.radio(master, text, self.var_octave, value, command = self.callback, ttip = "%s octave" % param) widget_key = "radio-octave-%d" % value self._widgets[widget_key] = rb self._radio_buttons.append(rb) rb.bind("<Enter>", self.enter_callback) s_step = factory.scale(master, from_=11, to=0, var = self.var_transpose, command = self.callback, ttip = "%s transpose (steps)" % param) s_detune = factory.scale(master, from_=99, to=0, var = self.var_detune, command=self.callback, ttip = "%s detune (cents)" % param) cb_zero = factory.checkbutton(master, "Off") cb_zero.config(command=self.callback,var = self.var_zero) ## Labels lab_transpose = factory.label(master, "00") lab_detune = factory.label(master, "000") lab_value = factory.label(master, "1.0000") self._widgets["scale-transpose"] = s_step self._widgets["scale-detune"] = s_detune self._widgets["checkbutton-zero"] = cb_zero self._widgets["label-transpose"] = lab_transpose self._widgets["label-detune"] = lab_detune self._widgets["label-value"] = lab_value self._editor = editor self._param = param s_step.bind("<Enter>", self.enter_callback) s_detune.bind("<Enter>", self.enter_callback)
def _edit_remarks(self): bnk = self.synth.bank() name = bnk.name filename = bnk.filename remarks = bnk.remarks dialog = Toplevel(self) frame = factory.frame(dialog, True) frame.pack(expand=True, fill="both") lab_title = factory.center_label(frame, "Bank Info") lab_name = factory.label(frame, "Bank name : '%s'" % name) lab_filename = factory.label(frame, "Filename : '%s'" % filename) frame_text = factory.label_frame(frame, "Remarks") lab_title.grid(row=0, column=0, columnspan=3,pady=12) lab_name.grid(row=1, column=0, sticky="w", padx=4) lab_filename.grid(row=2, column=0, sticky="w", padx=4) frame_text.grid(row=3, column=0, columnspan=3, padx=4, pady=8) text_widget = factory.text_widget(frame_text, "Bank remarks") text_widget.insert('end', remarks) text_widget.config(width=80, height=20) vsb = factory.scrollbar(frame_text, orientation="vertical") hsb = factory.scrollbar(frame_text, orientation="horizontal") text_widget.grid(row=0, column=0, rowspan=8, columnspan=8, ipadx=4, ipady=4) vsb.grid(row=0, column=8, rowspan=8, columnspan=1, sticky="ns") hsb.grid(row=8, column=0, rowspan=1, columnspan=8, sticky="ew") vsb.config(command=text_widget.yview) hsb.config(command=text_widget.xview) text_widget.config(yscrollcommand=vsb.set) text_widget.config(xscrollcommand=hsb.set) frame_toolbar = factory.frame(frame, True) frame_toolbar.grid(row=4, column=0, padx=4, pady=8) def clear(): text_widget.delete(1.0, 'end') def accept(): rem = text_widget.get(1.0, 'end') bnk.remarks = rem self.status("Bank remarks updated") dialog.destroy() def cancel(): self.status("Change bank remarks canceld") dialog.destroy() b_clear = factory.clear_button(frame_toolbar, command=clear, ttip="Clear remarks") b_accept = factory.accept_button(frame_toolbar, command=accept) b_cancel = factory.cancel_button(frame_toolbar, command=cancel) b_clear.grid(row=0, column=0, padx=4, pady=8) b_accept.grid(row=0, column=1) b_cancel.grid(row=0, column=2) dialog.grab_set() dialog.mainloop()
def __init__(self, master, sproxy): """ Construct new TkSynthWindow master - The Tk container for self. In practice this is an instance of llia.gui.tk.GroupWindow sproxy - An instance of llia.Proxy. """ Frame.__init__(self, master) self.config(background=factory.bg()) self.synth = sproxy self.synth.synth_editor = self self.app = sproxy.app self.sid = sproxy.sid self.group_index = -1 factory.set_pallet(sproxy.specs["pallet"]) main = factory.paned_window(self) main.pack(expand=True, fill="both") self.bank_editor = TkBankEditor(main, self, sproxy) self.bus_and_buffer_editor = None east = factory.frame(main) self.notebook = factory.notebook(east) self.notebook.pack(anchor="nw", expand=True, fill="both") south = factory.frame(east) south.pack(after=self.notebook, anchor="w", expand=True, fill="x") self._lab_status = factory.label(south, "<status>") self._lab_extended = factory.label(south, "") b_panic = factory.panic_button(south, command=self.panic) b_lower = factory.button(south, "-", command=self.lower_window) b_lift = factory.button(south, "+", command=self.lift_window) b_panic.grid(row=0, column=0) self._lab_status.grid(row=0, column=4, sticky='ew') self._lab_extended.grid(row=0,column=5,sticky='e',padx=16) self._lab_extended.config(fg="#f1f1cd") self._progressbar = Progressbar(south,mode="indeterminate") self._progressbar.grid(row=0,column=PROGRESSBAR_COLUMN, sticky='w', padx=8) south.config(background=factory.bg()) main.add(self.bank_editor) main.add(east) self.list_channel = None self.list_keytab = None self.var_transpose = StringVar() self.var_keyrange_low = StringVar() self.var_keyrange_high = StringVar() self.var_bendrange = StringVar() self._init_midi_tab(self.notebook) self._init_map1_tab(self.notebook) # MIDI controllers and pitchwheel self._init_map2_tab(self.notebook) # velocity, aftertouch, keynumber self._init_info_tab(self.notebook) self._child_editors = {} self.update_progressbar(100, 0)
def _init_north_toolbar(self): frame = factory.frame(self) toolbar = factory.label_frame(frame, "Bank") specs = self.synth.specs format_ = specs["format"] sid = self.synth.sid logo_filename = os.path.join("resources", format_, "logo_small.png") lab_logo = factory.image_label(frame, logo_filename, format_) lab_sid = factory.label(frame, "ID = %s" % sid) b_open = factory.button(toolbar, "Open", ttip="Read bank file", command=self._open_bank) b_save = factory.button(toolbar, "Save", ttip="Save bank file", command=self._save_bank) b_init = factory.button(toolbar, "Init", ttip="Initialize bank", command=self._init_bank) b_rem = factory.button(toolbar, "Rem", ttip="Edit bank remarks", command=self._edit_remarks) b_help = factory.help_button(toolbar, command= self._help) b_open.grid(row=0, column=0, sticky="ew") b_save.grid(row=0, column=1, sticky="ew") b_init.grid(row=0, column=2, sticky="ew") b_rem.grid(row=1, column=0, sticky="ew") b_help.grid(row=1, column=1, sticky="ew") lab_logo.grid(row=0, column=0, sticky='w', pady=4) lab_sid.grid(row=0, column=1, columnspan=2) toolbar.grid(row=1, column=0, columnspan=2) return frame
def __init__(self, master, param, editor, include_off=False, ttip=""): octaves = [(3, "+3"), (2, "+2"), (1, "+1"), (0, " 0"), (-1, "-1"), (-2, "-2"), (-3, "-3")] if include_off: octaves.append((ZERO_FREQ, "Off")) frame = factory.frame(master) super(OscFrequencyControl, self).__init__(param, editor, frame) self.var_octave = tk.StringVar() self.var_octave.set(0) row = 1 for value, text in octaves: rb = factory.radio(frame, text, self.var_octave, value, ttip, command=self.callback) widget_key = "radio_coarse_%s" % value self._widgets[widget_key] = rb rb.grid(row = row, column=0, sticky="w") row += 1 self.scale_fine = factory.scale(frame, command=self.callback, ttip="Fine Frequency Scale") self.scale_fine.grid(row=1, column=1, rowspan=row) self.lab_freq = factory.label(frame, "X.XXXX") self.lab_freq.grid(row=row+1, column=0, columnspan=2)
def __init__(self, master, app): Toplevel.__init__(self, master) self.config(background=factory.pallet("DIALOG-BG")) self.wm_title = "MIDI Controllers" self.app = app self.config = app.config() self.parser = app.ls_parser self._current_controller=0 self._save_backup() main = factory.frame(self, modal=True) main.pack(expand=True) main.pack_propagate(False) lab_title = factory.label(main, "MIDI Controller Names", modal=True) self.lab_warning = factory.warning_label(main, "", modal=True) frame_list = factory.frame(main, modal=True) frame_list.config(width=248, height=320) frame_list.pack_propagate(False) self.listbox = factory.listbox(frame_list, command=self.select_controller) self.listbox.pack(expand=True, fill=BOTH) sb = factory.scrollbar(main, yclient=self.listbox) self.refresh() self.var_name = StringVar() entry_name = factory.entry(main, self.var_name) button_bar = factory.frame(main, modal=True) b_refresh = factory.refresh_button(button_bar, command=self.refresh) b_help = factory.help_button(button_bar, command = self.display_help) b_accept = factory.accept_button(button_bar, command=self.accept) b_cancel = factory.cancel_button(button_bar, command=self.cancel) lab_title.grid(row=0, column=0, columnspan=4, pady=8) frame_list.grid(row=1, column=0, rowspan=6, columnspan=4, sticky=N) sb.grid(row=1, column=4, rowspan=6, sticky=NS, padx=4) factory.label(main, "Name", modal=True).grid(row=7, column=0, padx=4, sticky="w") entry_name.grid(row=7, column=1, columnspan=1, sticky=W, padx=4, pady=8) self.lab_warning.grid(row=8, column=0, columnspan=5, sticky=W) button_bar.grid(row=9, column=0, columnspan=5, sticky=EW, padx=4, pady=4) b_refresh.grid(row=0, column=0) b_help.grid(row=0, column=1) b_accept.grid(row=0, column=2) b_cancel.grid(row=0, column=3) entry_name.bind('<Return>', self.change_name) entry_name.bind('<Down>', self.increment_selection) entry_name.bind('<Up>', self.decrement_selection) self.listbox.bind('<Down>', self.increment_selection) self.listbox.bind('<Up>', self.decrement_selection) self.protocol("WM_DELETE_WINDOW", None) self.grab_set() self.mainloop()
def _fill_performance(self): bnk = self.synth.bank() dialog = Toplevel(self) frame = factory.frame(dialog, True) frame.pack(expand=True, fill="both") lab_title = factory.label(frame, "Fill Performance", modal=True) lab_start = factory.label(frame, "Starting slot", modal=True) lab_end = factory.label(frame, "Ending slot", modal=True) var_start = StringVar() var_end = StringVar() spin_start = factory.int_spinbox(frame, var_start, 0, len(bnk)) spin_end = factory.int_spinbox(frame, var_end, 0, len(bnk)) var_start.set(bnk.current_slot) var_end.set(bnk.current_slot+1) lab_title.grid(row=0, column=0, columnspan=3, padx=4, pady=8) lab_start.grid(row=1, column=0, sticky="w", padx=4) spin_start.grid(row=1, column=1, columnspan=2, padx=4) lab_end.grid(row=2, column=0, sticky="w", padx=4) spin_end.grid(row=2, column=1, columnspan=2, padx=4) def accept(): try: a,b = int(var_start.get()), int(var_end.get()) bnk.fill_performance(a,b) msg = "Performance filled slots [%3d, %3d]" % (a,b) self.status(msg) dialog.destroy() except ValueError: msg = "Invalid slot number" self.warning(msg) except KeyError as err: self.warning(err.message) def cancel(): msg = "Performance fill canceld" self.status(msg) dialog.destroy() b_accept = factory.accept_button(frame, command=accept) b_cancel = factory.cancel_button(frame, command=cancel) b_accept.grid(row=3, column=1, padx=4, pady=8,sticky="ew") b_cancel.grid(row=3, column=2, padx=4, pady=8,sticky="ew") dialog.grab_set() dialog.mainloop()
def __init__(self, master, param, editor, coarse = (0.001, 1000), limit = (0.001, 9999)): """ Constructs new DecadeControl object. ARGS: master - The TK master widget for these components. param - String, synth parameter. editor - An instance of TkSubEditor coarse - Tuple (a, b) sets range of coarse controls. a and b must both be powers of 10 with a < b. A radio button is created for each power of 10 between a and b. limit - Tuple (mn, mx), sets minimum and maximum value. """ print("DEPRECIATION WARNING: DecadeCounter") super(DecadeControl, self).__init__(param, editor, master) self._min_value, self._max_value = limit start, end = coarse start, end = min(start, end), max(start, end) decades = [] value = start while value <= end: power = log10(value) if power == 0: txt = "1" elif power < 1: txt = "1/%d" % int(10**abs(power)) else: txt = str(int(10**power)) decades.append((value, txt)) value *= 10 decades.reverse() self.var_decade = tk.StringVar() self.var_scale = tk.IntVar() self.var_decade.set(start) self.var_scale.set(1) self._radio_buttons = [] for value, txt in decades: rb = factory.radio(master, txt, self.var_decade, value, command=self.callback, ttip = "%s range" % param) widget_key = "radio-range-%d" % value self._widgets[widget_key] = rb self._radio_buttons.append(rb) rb.bind("<Enter>", self.enter_callback) s_scale = factory.scale(master, from_=90, to=0, var = self.var_scale, command = self.callback, ttip = "%s scale" % param) s_scale.bind("<Enter>", self.enter_callback) self._widgets["slider"] = s_scale lab_value = factory.label(master, "X.XXX") self._widgets["label-value"] = lab_value self._editor = editor self._param = param
def __init__(self, master, app): Toplevel.__init__(self, master) self.wm_title = "MIDI Channels" self.app = app self.config = app.config self.parser = app.ls_parser self._current_index=0 self._save_backup() main = factory.frame(self, modal=True) main.pack(expand=True) lab_title = factory.dialog_title_label(main, "MIDI Channels", modal=True) frame_list = factory.frame(main, modal=True) frame_list.config(width=248, height=320) frame_list.pack_propagate(False) self.listbox = factory.listbox(frame_list, command=self.select) self.listbox.pack(expand=True, fill=BOTH) self.lab_warning = factory.warning_label(main) self.var_name = StringVar() entry_name = factory.entry(main, self.var_name) button_bar = factory.frame(main, modal=True) b_refresh = factory.refresh_button(button_bar, command=self.refresh) b_help = factory.help_button(button_bar, command=self.display_help) b_accept = factory.accept_button(button_bar, command=self.accept) b_cancel = factory.cancel_button(button_bar, command=self.cancel) b_refresh.grid(row=0, column=0) b_help.grid(row=0, column=1) b_accept.grid(row=0, column=2) b_cancel.grid(row=0, column=3) lab_title.grid(row=0, column=0, columnspan=5, pady=8) frame_list.grid(row=1, column=0, rowspan=5, columnspan=6, padx=4, pady=8) factory.label(main, text="Name", modal=True).grid(row=6, column=0) entry_name.grid(row=6, column=1, columnspan=4, sticky=W, padx=4, pady=0) self.lab_warning.grid(row=7, column=0, columnspan=5, sticky=W, padx=4, pady=8) button_bar.grid(row=8, column=0, columnspan=5, sticky=EW, padx=4, pady=8) self.refresh() self.protocol("WM_DELETE_WINDOW", None) # ISSUE: Not Working entry_name.bind('<Return>', self.change_name) entry_name.bind('<Down>', self.increment_selection) entry_name.bind('<Up>', self.decrement_selection) self.listbox.bind('<Down>', self.increment_selection) self.listbox.bind('<Up>', self.decrement_selection) self.grab_set() self.mainloop()
def add(self, label, payload): row = self._row_count if is_string(label): txt = label label = factory.label(self, txt) label.grid(row=row, column=0, sticky="w", padx=4) payload.grid(row=row, column=1, sticky="ew") rs = (label, payload) self.rows.append(rs) self._row_count += 1 return rs
def __init__(self,editor): frame = editor.create_tab(_NAME, _TAB_FILE) frame.config(background=factory.bg()) self.editor = editor TkSubEditor.__init__(self,frame,editor,_NAME) editor.add_child_editor(_NAME,self) self._layout_engion_selection(frame) self._layout_env_type(frame) self._layout_env_time(frame) self._layout_slider_panel(frame) lab_help = factory.label(frame,_BLURB) lab_help.grid(row=2,column=0,rowspan=3,columnspan=4)
def __init__(self, master, parent_editor, synth): print("DEPRECIATED: TkBusAndBufferEditor") Frame.__init__(self, master) self.parent_editor = parent_editor self.synth = synth self.config(background=factory.bg()) self.pack(anchor="nw", expand=True, fill="both") main = layout.VFrame(self) main.pack(anchor="nw", expand=True, fill="both") frame_abus = factory.label_frame(main, "Audio Busses") frame_cbus = factory.label_frame(main, "Control Busses") frame_buf = factory.label_frame(main, "Buffers") main.add(frame_abus, padx=8, pady=8) main.add(frame_cbus, padx=8, pady=8) main.add(frame_buf, padx=8, pady=8) self.lab_abus = factory.label(frame_abus, "") self.lab_abus.pack() self.lab_cbus = factory.label(frame_cbus, "") self.lab_cbus.pack() self.lab_buffers = factory.label(frame_buf, "") self.lab_buffers.pack()
def _init_status_panel(self): south = self._main.south south.configure(padx=4, pady=4) self._lab_status = factory.label(south, "", modal=False) b_panic = factory.panic_button(south) b_down = factory.button(south, "-") b_up = factory.button(south, "+") b_panic.grid(row=0, column=0) # b_down.grid(row=0,column=1) # b_up.grid(row=0,column=2) self._lab_status.grid(row=0, column=3, sticky='w') south.config(background=factory.bg()) b_down.configure(command=lambda: self.root.lower()) b_up.configure(command=lambda: self.root.lift())
def _init_status_panel(self): south = self._main.south south.configure(padx=4, pady=4) self._lab_status = factory.label(south, "", modal=False) b_panic = factory.panic_button(south) b_down = factory.button(south, "-") b_up = factory.button(south, "+") b_panic.grid(row=0, column=0) # b_down.grid(row=0,column=1) # b_up.grid(row=0,column=2) self._lab_status.grid(row=0,column=3, sticky='w') south.config(background=factory.bg()) b_down.configure(command=lambda: self.root.lower()) b_up.configure(command=lambda: self.root.lift())
def __init__(self, master, sproxy): Frame.__init__(self, master) self.config(background=factory.bg()) self.synth = sproxy self.synth.synth_editor = self self.app = sproxy.app self.sid = sproxy.sid self.group_index = -1 factory.set_pallet(sproxy.specs["pallet"]) main = factory.paned_window(self) main.pack(expand=True, fill="both") self.bank_editor = TkBankEditor(main, self, sproxy) self.bus_and_buffer_editor = None east = factory.frame(main) self.notebook = factory.notebook(east) self.notebook.pack(anchor="nw", expand=True, fill="both") south = factory.frame(east) south.pack(after=self.notebook, anchor="w", expand=True, fill="x") # b_panic = factory.panic_button(south, command=self.panic) # b_clear_status = factory.clear_button(south, command=self.clear_status) # self._lab_status = factory.label(south, "<status>") # b_panic.grid(row=0, column=0, sticky='w') # b_clear_status.grid(row=0, column=1, sticky='w') # self._lab_status.grid(row=0, column=2, sticky='w', padx=8) self._lab_status = factory.label(south, "<status>") b_panic = factory.panic_button(south, command=self.panic) b_lower = factory.button(south, "-", command=self.lower_window) b_lift = factory.button(south, "+", command=self.lift_window) self._lab_status.grid(row=0, column=2, sticky='w', padx=8) b_panic.grid(row=0, column=0) self._lab_status.grid(row=0, column=3, sticky='w') south.config(background=factory.bg()) main.add(self.bank_editor) main.add(east) self.list_channel = None self.list_keytab = None self.var_transpose = StringVar() self.var_keyrange_low = StringVar() self.var_keyrange_high = StringVar() self.var_bendrange = StringVar() self._init_info_tab(self.notebook) self._init_busconnection_tab(self.notebook) self._init_performance_tab(self.notebook) self._init_map1_tab(self.notebook) # MIDI controllers and pitchwheel self._init_map2_tab(self.notebook) # velocity, aftertouch, keynumber self._child_editors = {} self.sync()
def _layout_slider_panel(self,master): frame = factory.frame(master) frame.grid(row=1,column=4,sticky='n',padx=8) self._var_harmonic = Tkinter.StringVar() self._var_deepmod = Tkinter.StringVar() self._var_feedback = Tkinter.StringVar() lab = factory.label(frame,"Harmonic") lab.grid(row=0,column=0,sticky='ew',padx=16) lab = factory.label(frame,"Modulation") lab.grid(row=0,column=1,sticky='ew',padx=16) lab = factory.label(frame,"Feedback") lab.grid(row=0,column=2,sticky='ew',padx=16) sh = factory.scale(frame,from_=100,to=0, var = self._var_harmonic, command = self._harmonic_callback) sm = factory.scale(frame,from_=100,to=0, var = self._var_deepmod, command = self._deepmod_callback) sf = factory.scale(frame,from_=100,to=0, var = self._var_feedback, command = self._feedback_callback) sh.grid(row=1,column=0,rowspan=6,sticky='ns') sm.grid(row=2,column=1,rowspan=6,sticky='ns') sf.grid(row=3,column=2,rowspan=6,sticky='ns')
def _init_status_panel(self): south = self._main.south south.configure(padx=4, pady=4) self._lab_status = factory.label(south, "", modal=False) b_panic = factory.panic_button(south) b_down = factory.button(south, "-") b_up = factory.button(south, "+") b_panic.grid(row=0, column=0) self._progressbar = Progressbar(south,mode="indeterminate") self._progressbar.grid(row=0,column=PROGRESSBAR_COLUMN, sticky='w', padx=8) self._lab_status.grid(row=0,column=4, sticky='w') south.config(background=factory.bg()) b_down.configure(command=lambda: self.root.lower()) b_up.configure(command=lambda: self.root.lift()) self.update_progressbar(100, 0)
def _layout_engion_selection(self, master): var = Tkinter.StringVar() frame = factory.frame(master) frame.grid(row=1,column=1,sticky='n',padx=8) rb_gen_random = factory.radio(frame,"Random", var,"Random", command = lambda : rndgen.set_engion("random")) rb_gen_basic = factory.radio(frame,"Basic", var,"Basic", command = lambda : rndgen.set_engion("basic")) rb_gen_chorus = factory.radio(frame,"Chorus", var,"Chorus", command = lambda : rndgen.set_engion("chorus")) lab = factory.label(frame,"Engion") lab.grid(row=0,column=0,sticky='w') rb_gen_random.grid(row=1,column=0,sticky='w') rb_gen_basic.grid(row=2,column=0,sticky='w') rb_gen_chorus.grid(row=3,column=0,sticky='w')
def _layout_env_type(self, master): var = Tkinter.StringVar() frame = factory.frame(master) frame.grid(row=1,column=2,sticky='n',padx=8) def select(n): rndgen.gen_config["env-type-hint"] = n rb_random = factory.radio(frame,"Random",var,5, command = lambda : select(None)) rb_gate = factory.radio(frame,"Gate",var,GATE, command = lambda : select(GATE)) rb_perc = factory.radio(frame,"Percussive",var,PERCUSSIVE, command = lambda : select(PERCUSSIVE)) rb_asr = factory.radio(frame,"ASR",var,ASR, command = lambda : select(ASR)) rb_adsr = factory.radio(frame,"ADSR",var,ADSR, command = lambda : select(ADSR)) lab = factory.label(frame,"Envelope Type") lab.grid(row=0,column=0,sticky='w') rb_random.grid(row=1,column=0,sticky='w') rb_gate.grid(row=2,column=0,sticky='w') rb_perc.grid(row=3,column=0,sticky='w') rb_asr.grid(row=4,column=0,sticky='w') rb_adsr.grid(row=5,column=0,sticky='w')
def __init__(self, master, synth, src, app): Toplevel.__init__(self, master) self.src = src self.synth = synth self.app = app self.var_all = StringVar() self.var_all.set(0) frame = factory.frame(self, modal=True) frame.pack(expand=True, fill="both") lab_title = factory.label(frame, "Remove MIDI Source Map", modal=True) lab_title.grid(row=0, column=0, columnspan=3, padx=4, pady=8) if src == "cc": lab_src = factory.label(frame, "Controller", modal=True) self.combo_source = factory.controller_combobox(frame, app) lab_src.grid(row=1, column=0, padx=4, sticky='w') self.combo_source.grid(row=1, column=1, columnspan=2, sticky="ew") else: lab_src = factory.label(frame, "Source: %s" % src, modal=True) self.combo_source = factory.combobox(None, [src]) lab_src.grid(row=1, column=0, columnspan=3, padx=4, sticky='w') lab_param = factory.label(frame, "Param", modal=True) self.cb_all = factory.checkbutton(frame, "All", var = self.var_all, modal=True) params = sorted(synth.bank().template.keys()) self.combo_params = factory.combobox(frame, params, "Synth Parameters") lab_param.grid(row=2, column=0, padx=4, pady=4, sticky='w') self.cb_all.grid(row=2, column=1, padx=4) self.combo_params.grid(row=2, column=2) def disable_param_callback(): val = int(self.var_all.get()) if val == 0: self.combo_params.config(state="normal") else: self.combo_params.config(state="disabled") def accept_callback(): shelper = self.app.ls_parser.synthhelper if self.src == "cc": src = self.combo_source.get()[1:4] else: src = self.src src = src.lower() if int(self.var_all.get()) == 0: param = self.combo_params.get() else: param = "ALL" shelper.remove_parameter_map(src, param, self.synth.sid) msg = "Removed MIDI source map" self.status(msg) self.destroy() self.synth.synth_editor.sync() def cancel_callback(): msg = "Delete source map canceld" self.status(msg) self.destroy() toolbar = factory.frame(frame, modal=True) b_accept = factory.accept_button(toolbar, command=accept_callback) b_cancel = factory.cancel_button(toolbar, command=cancel_callback) toolbar.grid(row=3, column=0, columnspan=3, padx=4, pady=8, sticky="ew") b_accept.grid(row=0, column=0, sticky="ew") b_cancel.grid(row=0, column=1, sticky="ew") self.cb_all.config(command=disable_param_callback) try: # ISSUE BUG 0004 self.grab_set() except TclError as err: print("-" * 60) print("BUG 0004 trapped. TkDeleteSourceMapDialog.__init__") print(err.message) print("Unable to open dialog as modal") self.mainloop()
def _store_program(self): bnk = self.synth.bank() program = bnk[None] slot = bnk.current_slot var_name = StringVar() var_start = StringVar() var_name.set(program.name) var_start.set(slot) dialog = Toplevel() frame = factory.frame(dialog, True) frame.pack(expand=True, fill="both") lab_title = factory.label(frame, "Store Program", modal=True) lab_name = factory.label(frame, "Name", modal=True) lab_start = factory.label(frame, "Slot", modal=True) entry_name = factory.entry(frame, var_name, "Program name") spin_start = factory.int_spinbox(frame, var_start, 0, len(bnk), "Startng slot") frame_remarks = factory.label_frame(frame, "Remarks", True) text_remarks = factory.text_widget(frame_remarks, "Remarks text", modal=True) text_remarks.insert("end", program.remarks) vsb = factory.scrollbar(frame_remarks, orientation="vertical") hsb = factory.scrollbar(frame_remarks, orientation="horizontal") text_remarks.config(width=40, height=10) text_remarks.grid(row=0, column=0, rowspan=4, columnspan=4) vsb.grid(row=0, column=4, rowspan=4, sticky="ns") hsb.grid(row=4, column=0, columnspan=4, sticky="ew") vsb.config(command=text_remarks.yview) hsb.config(command=text_remarks.xview) text_remarks.config(yscrollcommand=vsb.set) text_remarks.config(xscrollcommand=hsb.set) lab_title.grid(row=0, column=0, columnspan=3, pady=8, padx=4) lab_name.grid(row=1, column=0, padx=4) entry_name.grid(row=1, column=1, columnspan=2) frame_remarks.grid(row=2, column=0, rowspan=4, columnspan=4, padx=4, pady=4) lab_start.grid(row=6, column=0, padx=4, sticky="w") spin_start.grid(row=6, column=1, columnspan=2, pady=4) b_accept = factory.accept_button(frame) b_cancel = factory.cancel_button(frame) b_accept.grid(row=8, column=1, pady=8, sticky="ew") b_cancel.grid(row=8, column=2, pady=8, sticky="ew") def accept(): try: a = int(var_start.get()) name = var_name.get() remarks = text_remarks.get(1.0, "end") program.name = name program.remarks = remarks bnk[a] = program msg = "Stored program '%s' to slots [%3d]" % (name, a) self.status(msg) dialog.destroy() self.sync() except ValueError: msg = "Invalid slot number" self.warning(msg) def cancel(): msg = "Store program canceld" self.status(msg) dialog.destroy() b_accept.config(command=accept) b_cancel.config(command=cancel) dialog.grab_set() dialog.mainloop()
def __init__(self, master, app, synth_type, is_efx=False, is_controller=False): Toplevel.__init__(self, master) main = factory.frame(self) main.pack(anchor=W, expand=True, fill=BOTH) self.app = app self.stype = synth_type self.is_efx = is_efx self.is_controller = is_controller sid = "%s_%d" % (synth_type, SynthProxy.current_synth_serial_number()) specs = SynthSpecs.global_synth_type_registry[synth_type] self._combo_audio_in = {} # Maps synth parameter to combo box self._combo_audio_out = {} self._combo_control_in = {} self._combo_control_out = {} self._buffername_map = {} title = "Add %s " % synth_type if is_efx: title += "Effect" elif is_controller: title += "Controller Synth" else: title += "Synth" title += " sid = %s" % sid frame_north = factory.frame(main) frame_north.grid(row=0, column=0, columnspan=2, sticky='ew', padx=4, pady=8) logo_filename = os.path.join("resources", synth_type, "logo_small.png") lab_logo = factory.image_label(frame_north, logo_filename, synth_type) lab_id = factory.dialog_title_label(frame_north, title) lab_logo.grid(row=0, column=0, padx=8) lab_id.grid(row=0, column=1) # Audio Input Buses frame_audio_in = factory.label_frame(main, "Audio Input Buses") row = 0 for i in range(MAX_BUS_COUNT): try: b = specs["audio-input-buses"][i] param = b[0] lab_name = factory.label(frame_audio_in, "%d - %s" % (i + 1, param)) combo = factory.audio_bus_combobox(frame_audio_in, self.app) combo.set(b[1]) lab_name.grid(row=row, column=0, sticky="w", padx=4, pady=4) combo.grid(row=row, column=1, sticky="w", padx=4, pady=4) self._combo_audio_in[param] = combo except IndexError: lab_dummy = factory.label(frame_audio_in, "%d - n/a" % (i + 1, )) lab_dummy.grid(row=row, column=0) row += 1 factory.padding_label(frame_audio_in).grid(row=row, column=0) frame_audio_in.grid(row=1, column=0, padx=4, pady=4, sticky='ew') # Audio Output Buses frame_audio_out = factory.label_frame(main, "Audio Output Buses") row = 0 for i in range(MAX_BUS_COUNT): try: b = specs["audio-output-buses"][i] param = b[0] lab_name = factory.label(frame_audio_out, "%d - %s" % (i + 1, param)) combo = factory.audio_bus_combobox(frame_audio_out, self.app) combo.set(b[1]) lab_name.grid(row=row, column=0, sticky="w", padx=4, pady=4) combo.grid(row=row, column=1, sticky="w", padx=4, pady=4) self._combo_audio_out[param] = combo except IndexError: lab_dummy = factory.label(frame_audio_out, "%d - n/a" % (i + 1, )) lab_dummy.grid(row=row, column=0) row += 1 factory.padding_label(frame_audio_out).grid(row=row, column=0) frame_audio_out.grid(row=5, column=0, padx=4, pady=4, sticky='ew') # Control Input Buses frame_control_in = factory.label_frame(main, "Control Input Buses") row = 0 for i in range(MAX_BUS_COUNT): try: b = specs["control-input-buses"][i] param = b[0] lab_name = factory.label(frame_control_in, "%d - %s" % (i + 1, param)) combo = factory.control_bus_combobox(frame_control_in, self.app) combo.set(b[1]) lab_name.grid(row=row, column=0, sticky="w", padx=4, pady=4) combo.grid(row=row, column=1, sticky="w", padx=4, pady=4) self._combo_control_in[param] = combo except IndexError: lab_dummy = factory.label(frame_control_in, "%d - n/a" % (i + 1, )) lab_dummy.grid(row=row, column=0) row += 1 factory.padding_label(frame_control_in).grid(row=row, column=0) frame_control_in.grid(row=1, column=3, padx=4, pady=4, sticky='ew') # Control Output Buses frame_control_out = factory.label_frame(main, "Control Output Buses") row = 0 for i in range(MAX_BUS_COUNT): try: b = specs["control-output-buses"][i] param = b[0] lab_name = factory.label(frame_control_out, "%d - %s" % (i + 1, param)) combo = factory.control_bus_combobox(frame_control_out, self.app) combo.set(b[1]) lab_name.grid(row=row, column=0, sticky="w", padx=4, pady=4) combo.grid(row=row, column=1, sticky="w", padx=4, pady=4) self._combo_control_out[param] = combo except IndexError: lab_dummy = factory.label(frame_control_out, "%d - n/a" % (i + 1, )) lab_dummy.grid(row=row, column=0) row += 1 factory.padding_label(frame_control_out).grid(row=row, column=0) frame_control_out.grid(row=5, column=3, padx=4, pady=4, sticky='ew') # Buffers # if specs["buffers"]: # frame_buffers = factory.label_frame(main, "Buffers") # row = 0 # for param in specs["buffers"]: # lab_name = factory.label(frame_buffers, param) # combo = factory.buffer_combobox(frame_buffers, self.app) # lab_name.grid(row=row, column=0, sticky="w", padx=4, pady=4) # combo.grid(row=row, column=1, sticky="w", padx=4, pady=4) # self._buffername_map[param] = combo # row += 1 # factory.padding_label(frame_buffers).grid(row=row, column=0, sticky='ew') # frame_buffers.grid(row=9, column=3, padx=4, pady=4) # Keymode self.var_keymode = StringVar() self.var_voice_count = StringVar() self.var_voice_count.set(8) frame_keymode = factory.label_frame(main, "Key mode") col = 0 for km in specs["keymodes"]: rb = factory.radio(frame_keymode, km, self.var_keymode, km) rb.grid(row=0, column=col, sticky="w", padx=4, pady=4) col += 1 self.var_keymode.set(specs["keymodes"][0]) # Set default keymode lab_vc = factory.label(frame_keymode, "Voice count") spin_vc = factory.int_spinbox(frame_keymode, self.var_voice_count, from_=1, to=128) lab_vc.grid(row=1, column=0, padx=4) spin_vc.grid(row=1, column=1, columnspan=3, padx=4, pady=4) frame_keymode.grid(row=9, column=0, padx=4, pady=4, sticky='ew') factory.padding_label(frame_keymode).grid(row=2, column=0) # South Toolbar toolbar = factory.frame(main) b_help = factory.help_button(toolbar, command=self.display_help) b_accept = factory.accept_button(toolbar, command=self.accept) b_cancel = factory.cancel_button(toolbar, command=self.cancel) b_help.grid(row=0, column=0, sticky="w") factory.padding_label(toolbar).grid(row=0, column=1) b_accept.grid(row=0, column=2, sticky="e") b_cancel.grid(row=0, column=3, sticky="e") toolbar.grid(row=10, column=0, columnspan=5, sticky="ew", padx=4, pady=8)
def separator(self): return self.add("", factory.label(self, ""))
def __init__(self, master, app): Toplevel.__init__(self, master) self.config(background=factory.pallet("DIALOG-BG")) self.wm_title = "MIDI Controllers" self.app = app self.config = app.config self.parser = app.ls_parser self._current_controller = 0 self._save_backup() main = factory.frame(self, modal=True) main.pack(expand=True) main.pack_propagate(False) lab_title = factory.label(main, "MIDI Controller Names", modal=True) self.lab_warning = factory.warning_label(main, "", modal=True) frame_list = factory.frame(main, modal=True) frame_list.config(width=248, height=320) frame_list.pack_propagate(False) self.listbox = factory.listbox(frame_list, command=self.select_controller) self.listbox.pack(expand=True, fill=BOTH) sb = factory.scrollbar(main, yclient=self.listbox) self.refresh() self.var_name = StringVar() entry_name = factory.entry(main, self.var_name) button_bar = factory.frame(main, modal=True) b_refresh = factory.refresh_button(button_bar, command=self.refresh) b_help = factory.help_button(button_bar, command=self.display_help) b_accept = factory.accept_button(button_bar, command=self.accept) b_cancel = factory.cancel_button(button_bar, command=self.cancel) lab_title.grid(row=0, column=0, columnspan=4, pady=8) frame_list.grid(row=1, column=0, rowspan=6, columnspan=4, sticky=N) sb.grid(row=1, column=4, rowspan=6, sticky=NS, padx=4) factory.label(main, "Name", modal=True).grid(row=7, column=0, padx=4, sticky="w") entry_name.grid(row=7, column=1, columnspan=1, sticky=W, padx=4, pady=8) self.lab_warning.grid(row=8, column=0, columnspan=5, sticky=W) button_bar.grid(row=9, column=0, columnspan=5, sticky=EW, padx=4, pady=4) b_refresh.grid(row=0, column=0) b_help.grid(row=0, column=1) b_accept.grid(row=0, column=2) b_cancel.grid(row=0, column=3) entry_name.bind('<Return>', self.change_name) entry_name.bind('<Down>', self.increment_selection) entry_name.bind('<Up>', self.decrement_selection) self.listbox.bind('<Down>', self.increment_selection) self.listbox.bind('<Up>', self.decrement_selection) self.protocol("WM_DELETE_WINDOW", None) self.grab_set() self.mainloop()
def _build_south_panel(self, south): self._midi_input_ports = mido.get_input_names() self._midi_output_ports = mido.get_output_names() port_rows = max(len(self._midi_input_ports), len(self._midi_output_ports)) init_id = self.config.global_osc_id() init_host = self.config["host"] init_port = self.config["port"] init_client = self.config["client"] init_client_port = self.config["client_port"] init_input = self.config["midi-receiver-name"] init_output = self.config["midi-transmitter-name"] self.var_id = StringVar() self.var_host = StringVar() self.var_port = StringVar() self.var_client = StringVar() self.var_client_port = StringVar() self.var_input = StringVar() self.var_output = StringVar() def restore_defaults(): self.var_id.set(init_id) self.var_host.set(init_host) self.var_port.set(init_port) self.var_client.set(init_client) self.var_client_port.set(init_client_port) self.var_input.set(init_input) self.var_output.set(init_output) restore_defaults() e_id = factory.entry(south, self.var_id) e_host = factory.entry(south, self.var_host) e_port = factory.entry(south, self.var_port) e_client = factory.entry(south, self.var_client) e_client_port = factory.entry(south, self.var_client_port) #factory.padding_label(south).grid(row=0, column=0, ipadx=8, ipady=8) e_id.grid(row=1, column=1, columnspan=2) e_host.grid(row=2, column=1, columnspan=2) e_port.grid(row=2, column=5, columnspan=2) e_client.grid(row=3, column=1, columnspan=2) e_client_port.grid(row=3, column=5, columnspan=2) port_count = max(len(self._midi_input_ports), len(self._midi_output_ports)) lab_id = factory.label(south, "OSC ID") lab_host = factory.label(south, "Host") lab_host_port = factory.label(south, "Port") lab_client = factory.label(south, "Client") lab_client_port = factory.label(south, "Port") lab_midi_input = factory.label(south, "MIDI Input") lab_midi_output = factory.label(south, "MIDI Output") # factory.padding_label(south).grid(row=4, column=3, ipadx=8, ipady=8) lab_id.grid(row=1, column=0, columnspan=1, ipadx=8, ipady=8) lab_host.grid(row=2, column=0, columnspan=1) lab_host_port.grid(row=3, column=4, columnspan=1, ipadx=4) lab_client.grid(row=3, column=0, columnspan=1) lab_client_port.grid(row=3, column=4, columnspan=1) lab_midi_input.grid(row=5, column=1, columnspan=2, ipady=8) lab_midi_output.grid(row=5, column=5, columnspan=2, ipady=8) for n,p in enumerate(self._midi_input_ports): rb = factory.radio(south, str(p), self.var_input, str(p)) rb.grid(row=n+6, column=1, sticky="W") for n,p in enumerate(self._midi_output_ports): rb = factory.radio(south, str(p), self.var_output, str(p)) rb.grid(row=n+6, column=5, sticky="W") factory.padding_label(south).grid(row=0, column=7, ipadx=36) #b_restore = factory.button(south, "Restore", command=restore_defaults) b_continue = factory.button(south, "Continue", command=self.accept) b_help = factory.help_button(south) b_help.config(command=self.display_help) row = port_count + 6 #b_restore.grid(row=row, column=1, sticky="EW", pady=16) b_continue.grid(row=row, column=1, sticky="EW", pady=16) b_help.grid(row=row, column=3, padx=8, sticky="W") self.lab_warning = factory.label(south, "") self.lab_warning.config(foreground=factory.pallet("warning-fg")) self.lab_warning.grid(row=6, column=7, sticky="EW", columnspan=2, rowspan=4)
def __init__(self, master, param, editor, coarse=(0.001, 1000), limit=(0.001, 9999)): """ Constructs new DecadeControl object. ARGS: master - The TK master widget for these components. param - String, synth parameter. editor - An instance of TkSubEditor coarse - Tuple (a, b) sets range of coarse controls. a and b must both be powers of 10 with a < b. A radio button is created for each power of 10 between a and b. limit - Tuple (mn, mx), sets minimum and maximum value. """ print("DEPRECIATION WARNING: DecadeCounter") super(DecadeControl, self).__init__(param, editor, master) self._min_value, self._max_value = limit start, end = coarse start, end = min(start, end), max(start, end) decades = [] value = start while value <= end: power = log10(value) if power == 0: txt = "1" elif power < 1: txt = "1/%d" % int(10**abs(power)) else: txt = str(int(10**power)) decades.append((value, txt)) value *= 10 decades.reverse() self.var_decade = tk.StringVar() self.var_scale = tk.IntVar() self.var_decade.set(start) self.var_scale.set(1) self._radio_buttons = [] for value, txt in decades: rb = factory.radio(master, txt, self.var_decade, value, command=self.callback, ttip="%s range" % param) widget_key = "radio-range-%d" % value self._widgets[widget_key] = rb self._radio_buttons.append(rb) rb.bind("<Enter>", self.enter_callback) s_scale = factory.scale(master, from_=90, to=0, var=self.var_scale, command=self.callback, ttip="%s scale" % param) s_scale.bind("<Enter>", self.enter_callback) self._widgets["slider"] = s_scale lab_value = factory.label(master, "X.XXX") self._widgets["label-value"] = lab_value self._editor = editor self._param = param
def _build_south_panel(self, south): self._midi_input_ports = mido.get_input_names() self._midi_output_ports = mido.get_output_names() port_rows = max(len(self._midi_input_ports), len(self._midi_output_ports)) init_id = self.config.global_osc_id() init_host = self.config["host"] init_port = self.config["port"] init_client = self.config["client"] init_client_port = self.config["client_port"] init_input = self.config["midi-receiver-name"] init_output = self.config["midi-transmitter-name"] self.var_id = StringVar() self.var_host = StringVar() self.var_port = StringVar() self.var_client = StringVar() self.var_client_port = StringVar() self.var_input = StringVar() self.var_output = StringVar() def restore_defaults(): self.var_id.set(init_id) self.var_host.set(init_host) self.var_port.set(init_port) self.var_client.set(init_client) self.var_client_port.set(init_client_port) self.var_input.set(init_input) self.var_output.set(init_output) restore_defaults() e_id = factory.entry(south, self.var_id) e_host = factory.entry(south, self.var_host) e_port = factory.entry(south, self.var_port) e_client = factory.entry(south, self.var_client) e_client_port = factory.entry(south, self.var_client_port) #factory.padding_label(south).grid(row=0, column=0, ipadx=8, ipady=8) e_id.grid(row=1, column=1, columnspan=2) e_host.grid(row=2, column=1, columnspan=2) e_port.grid(row=2, column=5, columnspan=2) e_client.grid(row=3, column=1, columnspan=2) e_client_port.grid(row=3, column=5, columnspan=2) port_count = max(len(self._midi_input_ports), len(self._midi_output_ports)) lab_id = factory.label(south, "OSC ID") lab_host = factory.label(south, "Host") lab_host_port = factory.label(south, "Port") lab_client = factory.label(south, "Client") lab_client_port = factory.label(south, "Port") lab_midi_input = factory.label(south, "MIDI Input") lab_midi_output = factory.label(south, "MIDI Output") # factory.padding_label(south).grid(row=4, column=3, ipadx=8, ipady=8) lab_id.grid(row=1, column=0, columnspan=1, ipadx=8, ipady=8) lab_host.grid(row=2, column=0, columnspan=1) lab_host_port.grid(row=3, column=4, columnspan=1, ipadx=4) lab_client.grid(row=3, column=0, columnspan=1) lab_client_port.grid(row=3, column=4, columnspan=1) lab_midi_input.grid(row=5, column=1, columnspan=2, ipady=8) lab_midi_output.grid(row=5, column=5, columnspan=2, ipady=8) for n, p in enumerate(self._midi_input_ports): rb = factory.radio(south, str(p), self.var_input, str(p)) rb.grid(row=n + 6, column=1, sticky="W") for n, p in enumerate(self._midi_output_ports): rb = factory.radio(south, str(p), self.var_output, str(p)) rb.grid(row=n + 6, column=5, sticky="W") factory.padding_label(south).grid(row=0, column=7, ipadx=36) #b_restore = factory.button(south, "Restore", command=restore_defaults) b_continue = factory.button(south, "Continue", command=self.accept) b_help = factory.help_button(south) b_help.config(command=self.display_help) row = port_count + 6 #b_restore.grid(row=row, column=1, sticky="EW", pady=16) b_continue.grid(row=row, column=1, sticky="EW", pady=16) b_help.grid(row=row, column=3, padx=8, sticky="W") self.lab_warning = factory.label(south, "") self.lab_warning.config(foreground=factory.pallet("warning-fg")) self.lab_warning.grid(row=6, column=7, sticky="EW", columnspan=2, rowspan=4)
def __init__(self, master, app): Toplevel.__init__(self, master) self.wm_title = "MIDI Channels" self.app = app self.config = app.config self.parser = app.ls_parser self._current_index = 0 self._save_backup() main = factory.frame(self, modal=True) main.pack(expand=True) lab_title = factory.dialog_title_label(main, "MIDI Channels", modal=True) frame_list = factory.frame(main, modal=True) frame_list.config(width=248, height=320) frame_list.pack_propagate(False) self.listbox = factory.listbox(frame_list, command=self.select) self.listbox.pack(expand=True, fill=BOTH) self.lab_warning = factory.warning_label(main) self.var_name = StringVar() entry_name = factory.entry(main, self.var_name) button_bar = factory.frame(main, modal=True) b_refresh = factory.refresh_button(button_bar, command=self.refresh) b_help = factory.help_button(button_bar, command=self.display_help) b_accept = factory.accept_button(button_bar, command=self.accept) b_cancel = factory.cancel_button(button_bar, command=self.cancel) b_refresh.grid(row=0, column=0) b_help.grid(row=0, column=1) b_accept.grid(row=0, column=2) b_cancel.grid(row=0, column=3) lab_title.grid(row=0, column=0, columnspan=5, pady=8) frame_list.grid(row=1, column=0, rowspan=5, columnspan=6, padx=4, pady=8) factory.label(main, text="Name", modal=True).grid(row=6, column=0) entry_name.grid(row=6, column=1, columnspan=4, sticky=W, padx=4, pady=0) self.lab_warning.grid(row=7, column=0, columnspan=5, sticky=W, padx=4, pady=8) button_bar.grid(row=8, column=0, columnspan=5, sticky=EW, padx=4, pady=8) self.refresh() self.protocol("WM_DELETE_WINDOW", None) # ISSUE: Not Working entry_name.bind('<Return>', self.change_name) entry_name.bind('<Down>', self.increment_selection) entry_name.bind('<Up>', self.decrement_selection) self.listbox.bind('<Down>', self.increment_selection) self.listbox.bind('<Up>', self.decrement_selection) self.grab_set() self.mainloop()
def __init__(self, master, synth, src, app): Toplevel.__init__(self, master) self.src = src self.synth = synth self.app = app self.var_curve = StringVar() self.var_modifier = StringVar() self.var_range_low = StringVar() self.var_range_high = StringVar() self.var_limit_low = StringVar() self.var_limit_high = StringVar() self.var_curve.set("linear") self.var_modifier.set("1.0") self.var_range_low.set("0.0") self.var_range_high.set("1.0") self.var_limit_low.set("0.0") self.var_limit_high.set("1.0") frame = factory.frame(self, modal=True) frame.pack(expand=True, fill="both") lab_title = factory.label(frame, "Add MIDI Source Map", modal=True) lab_title.grid(row=0, column=0, columnspan=4, padx=4, pady=8) if src == "cc": lab_src1 = factory.label(frame, "Controller", modal=True) self.combo_source = factory.controller_combobox(frame, app) lab_src1.grid(row=1, column=0, sticky="w", padx=4) self.combo_source.grid(row=1, column=1) else: lab_src1 = factory.label(frame, "Source", modal=True) lab_src2 = factory.label(frame, src, modal=True) self.combo_source = factory.combobox(None, [src]) # Hidden lab_src1.grid(row=1, column=0, sticky="w", padx=4) lab_src2.grid(row=1, column=1, sticky="w") lab_params = factory.label(frame, "Params", modal=True) bnk = synth.bank() params = sorted(bnk.template.keys()) self.combo_params = factory.combobox(frame, params, "Synth parameters") frame_curve = factory.label_frame(frame, "Curve", modal=True) for i, c in enumerate((("Linear", "linear"), ("Exponential","exp"), ("Logistic (S)", "s"), ("Step","step"))): rb = factory.radio(frame_curve, c[0], self.var_curve, c[1], modal=True) rb.config(command=self._auto_modifier_callback) rb.grid(row=i, column=0, columnspan=2, sticky="w", padx=4) lab_modifier = factory.label(frame_curve, "Modifier", modal=True) spin_modifier = factory.float_spinbox(frame_curve, self.var_modifier, -10, 10, "Curve modifier") lab_modifier.grid(row=4, column=0, padx=4, pady=8, sticky="w") spin_modifier.grid(row=4, column=1) frame_range = factory.label_frame(frame, "Range", modal=True) lab_low = factory.label(frame_range, "Low", modal=True) lab_high = factory.label(frame_range, "High", modal=True) spin_range_low = factory.float_spinbox(frame_range, self.var_range_low, -100, 100) spin_range_low.config(command=self._auto_limit_callback) spin_range_high = factory.float_spinbox(frame_range, self.var_range_high, -100, 100) spin_range_high.config(command=self._auto_limit_callback) lab_low.grid(row=0, column=0, sticky="w", padx=4) spin_range_low.grid(row=0, column=1, sticky="ew") lab_high.grid(row=1, column=0, sticky="w", padx=4) spin_range_high.grid(row=1, column=1, sticky="ew") frame_limit = factory.label_frame(frame, "Limit", modal=True) lab_low = factory.label(frame_limit, "Low", modal=True) lab_high = factory.label(frame_limit, "High", modal=True) spin_limit_low = factory.float_spinbox(frame_limit, self.var_limit_low, -100, 100) spin_limit_high = factory.float_spinbox(frame_limit, self.var_limit_high, -100, 100) lab_low.grid(row=0, column=0, sticky="w", padx=4) spin_limit_low.grid(row=0, column=1, sticky="ew") lab_high.grid(row=1, column=0, sticky="w", padx=4) spin_limit_high.grid(row=1, column=1, sticky="ew") toolbar = factory.frame(frame, modal=True) b_help = factory.help_button(toolbar,command=self.help_callback) b_restore = factory.clear_button(toolbar, ttip="Restore defaults", command=self.restore_callback) b_accept = factory.accept_button(toolbar, command=self.accept_callback) b_cancel = factory.cancel_button(toolbar, command=self.cancel_callback) b_help.grid(row=0, column=0, sticky="ew") b_restore.grid(row=0, column=1, sticky="ew") b_accept.grid(row=0, column=2, sticky="ew") b_cancel.grid(row=0, column=3, sticky="ew") lab_params.grid(row=2, column=0, padx=4, sticky="w") self.combo_params.grid(row=2, column=1) frame_curve.grid(row=3, column=0, columnspan=2, padx=4, pady=8, sticky="ew") frame_range.grid(row=4, column=0, columnspan=2, padx=4, pady=4, sticky="ew") frame_limit.grid(row=5, column=0, columnspan=2, padx=4, pady=4, sticky="ew") toolbar.grid(row=6, column=0, columnspan=4, padx=4, pady=8, sticky="ew") if src == "cc": index = self.get_default_controller(synth) if is_string(index): index = int(index[1:4]) self.combo_source.current(index) index = self.get_default_param(synth) self.combo_params.set(index)
def _init_performance_tab(self, master): img = factory.image("resources/Tabs/performance.png") frame = factory.frame(master) master.add(frame, text = "Performance", image=img, compound="top") frame_channel = factory.label_frame(frame, "MIDI Channel") frame_keytab = factory.label_frame(frame, "Key Table") lab_transpose = factory.label(frame, "Transpose") lab_keyrange = factory.label(frame, "Key Range") lab_bend = factory.label(frame, "Bend Range") self.list_channel = factory.listbox(frame_channel) sb_channel = factory.scrollbar(frame_channel) sb_channel.config(command=self.list_channel.yview) self.list_channel.config(yscrollcommand=sb_channel.set) self.list_keytab = factory.listbox(frame_keytab) sb_keytab = factory.scrollbar(frame_keytab) sb_keytab.config(command=self.list_keytab.yview) self.list_keytab.config(yscrollcommand=sb_keytab.set) spin_transpose = factory.int_spinbox(frame, self.var_transpose, -36, 36) spin_keylow = factory.int_spinbox(frame, self.var_keyrange_low, 0, 127) spin_keyhigh = factory.int_spinbox(frame, self.var_keyrange_high, 0, 127) spin_bendrange = factory.int_spinbox(frame, self.var_bendrange, 0, 2400) factory.padding_label(frame).grid(row=0) frame_channel.grid(row=1, column=0, rowspan=4, columnspan=2) self.list_channel.pack(side="left", expand=True, fill="both") sb_channel.pack(after=self.list_channel, side="right", expand=True, fill="y") frame_keytab.grid(row=1, column=2, rowspan=4, columnspan=2) self.list_keytab.pack(side="left", expand=True, fill="both") sb_keytab.pack(after=self.list_keytab, side="right", expand=True, fill="y") factory.padding_label(frame).grid(row=6) lab_transpose.grid(row=7, column=0, sticky="w", padx=4, pady=4) spin_transpose.grid(row=7, column=1, padx=4) lab_keyrange.grid(row=8, column=0, sticky="w", padx=4, pady=4) spin_keylow.grid(row=8, column=1, padx=4) spin_keyhigh.grid(row=8, column=2, padx=4) lab_bend.grid(row=9, column=0, sticky="w", padx=4, pady=4) spin_bendrange.grid(row=9, column=1, padx=4) def channel_callback(_): i = self.list_channel.curselection()[0] c = i+1 self.synth.midi_input_channel(c) self.status("MIDI Input Channel = %s" % c) def keytab_callback(_): i = self.list_keytab.curselection()[0] kt = self.list_keytab.get(i) self.synth.keytable(kt) self.status("Using keytable: %s" % kt) def transpose_callback(*_): try: x = int(self.var_transpose.get()) self.synth.transpose(x) self.status("Transpose = %s" % x) except ValueError: self.warning("Invalid transpose") def keyrange_callback(*_): try: a = int(self.var_keyrange_low.get()) b = int(self.var_keyrange_high.get()) a, b = min(a,b), max(a,b) self.synth.key_range((a,b)) self.status("Key range = [%3d, %3d]" % (a, b)) except ValueError: self.warning("Invalid keyrange") def bend_callback(*_): try: b = int(self.var_bendrange.get()) self.synth.bend_range(b) self.status("Bend range = %s" % b) except ValueError: self.warning("Invalid Bendrange") self.list_channel.bind("<<ListboxSelect>>", channel_callback) self.list_keytab.bind("<<ListboxSelect>>", keytab_callback) spin_transpose.config(command=transpose_callback) spin_transpose.bind("<Return>", transpose_callback) spin_keylow.config(command=keyrange_callback) spin_keylow.bind("<Return>", keyrange_callback) spin_keyhigh.config(command=keyrange_callback) spin_keyhigh.bind("<Return>", keyrange_callback) spin_bendrange.config(command=bend_callback) spin_bendrange.bind("<Return>", bend_callback)
def __init__(self, master, editor, synth): Frame.__init__(self, master) self.editor = editor self.synthhelper = editor.app.ls_parser.synthhelper self.synth = synth self.config(background=factory.bg()) self.pack(anchor="nw", expand=True, fill="both") frame_audio_input = factory.label_frame(self, "Audio Input Buses") frame_audio_output = factory.label_frame(self, "Audio Output Buses") frame_control_input = factory.label_frame(self, "Control Input Buses") frame_control_output = factory.label_frame(self, "Control Output Buses") frame_audio_input.grid(row=0, column=0, rowspan=4, columnspan=4, padx=16, pady=16, sticky='nesw') frame_audio_output.grid(row=4, column=0, rowspan=4, columnspan=4, padx=16, pady=16, sticky='nesw') frame_control_input.grid(row=0, column=4, rowspan=4, columnspan=4, padx=16, pady=16, sticky='nesw') frame_control_output.grid(row=4, column=4, rowspan=4, columnspan=4, padx=16, pady=16, sticky='nesw') specs = synth.specs frame_south = factory.frame(self) frame_south.grid(row=9, column=0, rowspan=1, columnspan=8, sticky='ew', padx=16, pady=16) b_sync = factory.button(frame_south, "Sync", command=self.sync) b_sync.grid(row=0, column=0) # audio inputs self._combo_audio_in = {} row = 0 for i in range(con.MAX_BUS_COUNT): try: b = specs["audio-input-buses"][i] param = b[0] lab_name = factory.label(frame_audio_input, "%d - %s" % (i+1, param)) combo = factory.audio_bus_combobox(frame_audio_input, self.editor.app) combo.param = param combo.bind("<<ComboboxSelected>>", self.audio_in_callback) combo.set(b[1]) lab_name.grid(row=row, column=0, sticky='ew', padx=4, pady=4) combo.grid(row=row, column=1, sticky='ew', padx=4, pady=4) self._combo_audio_in[param] = combo except IndexError: lab_dummy = factory.label(frame_audio_input, "%d - n/a" % (i+1,)) lab_dummy.grid(row=row, column=0) row += 1 # audio output self._combo_audio_out = {} row = 0 for i in range(con.MAX_BUS_COUNT): try: b = specs["audio-output-buses"][i] param = b[0] lab_name = factory.label(frame_audio_output, "%d - %s" % (i+1, param)) combo = factory.audio_bus_combobox(frame_audio_output, self.editor.app) combo.param = param combo.bind("<<ComboboxSelected>>", self.audio_out_callback) combo.set(b[1]) lab_name.grid(row=row, column=0, sticky='ew', padx=4, pady=4) combo.grid(row=row, column=1, sticky='ew', padx=4, pady=4) self._combo_audio_out[param] = combo except IndexError: lab_dummy = factory.label(frame_audio_output, "%d - n/a" % (i+1,)) lab_dummy.grid(row=row, column=0) row += 1 # control inputs self._combo_control_in = {} row = 0 for i in range(con.MAX_BUS_COUNT): try: b = specs["control-input-buses"][i] param = b[0] lab_name = factory.label(frame_control_input, "%d - %s" % (i+1, param)) combo = factory.control_bus_combobox(frame_control_input, self.editor.app) combo.param = param combo.bind("<<ComboboxSelected>>", self.control_in_callback) combo.set(b[1]) lab_name.grid(row=row, column=0, sticky='ew', padx=4, pady=4) combo.grid(row=row, column=1, sticky='ew', padx=4, pady=4) self._combo_control_in[param] = combo except IndexError: lab_dummy = factory.label(frame_control_input, "%d - n/a" % (i+1,)) lab_dummy.grid(row=row, column=0) row += 1 # control output self._combo_control_out = {} row = 0 for i in range(con.MAX_BUS_COUNT): try: b = specs["control-output-buses"][i] param = b[0] lab_name = factory.label(frame_control_output, "%d - %s" % (i+1, param)) combo = factory.control_bus_combobox(frame_control_output, self.editor.app) combo.param = param combo.bind("<<ComboboxSelected>>", self.control_out_callback) combo.set(b[1]) lab_name.grid(row=row, column=0, sticky='ew', padx=4, pady=4) combo.grid(row=row, column=1, sticky='ew', padx=4, pady=4) self._combo_control_out[param] = combo except IndexError: lab_dummy = factory.label(frame_control_output, "%d - n/a" % (i+1,)) lab_dummy.grid(row=row, column=0) row += 14 self.sync()
def __init__(self, master, param, editor): """ Create new OscFrequencyControl object. Widgets are not automatically added to the Tk master. Call the layout method to place widgets using a default layout. ARGS: param - String, SC synth parameter. editor - An instance of TkSubEditor master - Tk container. """ print("DEPRECIATION WARNING: OscFrequencyControl") super(OscFrequencyControl, self).__init__(param, editor, master) octaves = [(3, "+3"), (2, "+2"), (1, "+1"), (0, " 0"), (-1, "-1"), (-2, "-2"), (-3, "-3")] self.var_octave = tk.StringVar() # Octave number -3 ... +3 self.var_transpose = tk.IntVar() # Transpose steps, 0 ... 11 self.var_detune = tk.IntVar() # Detune in cents 0 ... 99 self.var_zero = tk.IntVar() # 0 -> osc != 0, 1 -> osc freq = 0 self.var_octave.set(0) self.var_transpose.set(0) self.var_detune.set(0) self.var_zero.set(0) self._radio_buttons = [] for value, text in octaves: rb = factory.radio(master, text, self.var_octave, value, command=self.callback, ttip="%s octave" % param) widget_key = "radio-octave-%d" % value self._widgets[widget_key] = rb self._radio_buttons.append(rb) rb.bind("<Enter>", self.enter_callback) s_step = factory.scale(master, from_=11, to=0, var=self.var_transpose, command=self.callback, ttip="%s transpose (steps)" % param) s_detune = factory.scale(master, from_=99, to=0, var=self.var_detune, command=self.callback, ttip="%s detune (cents)" % param) cb_zero = factory.checkbutton(master, "Off") cb_zero.config(command=self.callback, var=self.var_zero) ## Labels lab_transpose = factory.label(master, "00") lab_detune = factory.label(master, "000") lab_value = factory.label(master, "1.0000") self._widgets["scale-transpose"] = s_step self._widgets["scale-detune"] = s_detune self._widgets["checkbutton-zero"] = cb_zero self._widgets["label-transpose"] = lab_transpose self._widgets["label-detune"] = lab_detune self._widgets["label-value"] = lab_value self._editor = editor self._param = param s_step.bind("<Enter>", self.enter_callback) s_detune.bind("<Enter>", self.enter_callback)
def _init_midi_tab(self, master): img = factory.image("resources/Tabs/midi.png") frame = factory.frame(master) master.add(frame, text = "Performance", image=img, compound="top") frame_channel = factory.frame(frame) frame_keytab = factory.frame(frame) lab_transpose = factory.label(frame, "Transpose") lab_keyrange = factory.label(frame, "Key Range") lab_bend = factory.label(frame, "Bend Range") self.list_channel = factory.listbox(frame_channel) sb_channel = factory.scrollbar(frame_channel) sb_channel.config(command=self.list_channel.yview) self.list_channel.config(yscrollcommand=sb_channel.set) self.list_keytab = factory.listbox(frame_keytab) sb_keytab = factory.scrollbar(frame_keytab) sb_keytab.config(command=self.list_keytab.yview) self.list_keytab.config(yscrollcommand=sb_keytab.set) spin_transpose = factory.int_spinbox(frame,self.var_transpose,-36,36) spin_keylow = factory.int_spinbox(frame,self.var_keyrange_low,0,127) spin_keyhigh = factory.int_spinbox(frame,self.var_keyrange_high,0,127) spin_bendrange = factory.int_spinbox(frame,self.var_bendrange, 0, 2400) factory.padding_label(frame).grid(row=0) lab_channel = factory.label(frame,"MIDI Input Channel") lab_channel.grid(row=0,column=0,columnspan=2, pady=8) frame_channel.grid(row=1, column=0, rowspan=4, columnspan=2,padx=8,pady=8) self.list_channel.pack(side="left", expand=True, fill="both") sb_channel.pack(after=self.list_channel, side="right", expand=True, fill="y") lab_ktab = factory.label(frame, "Key Table") lab_ktab.grid(row=0,column=2,columnspan=2,pady=8) frame_keytab.grid(row=1, column=2, rowspan=4, columnspan=2,padx=8,pady=8) self.list_keytab.pack(side="left", expand=True, fill="both") sb_keytab.pack(after=self.list_keytab, side="right", expand=True, fill="y") factory.padding_label(frame).grid(row=6) lab_transpose.grid(row=7, column=0, sticky="w", padx=4, pady=4) lab_keyrange.grid(row=8, column=0, sticky="w", padx=4, pady=4) lab_bend.grid(row=9, column=0, sticky="w", padx=4, pady=4) spin_transpose.grid(row=7, column=1, padx=4) spin_keylow.grid(row=8, column=1, padx=4) spin_keyhigh.grid(row=8, column=2, padx=4) spin_bendrange.grid(row=9, column=1, padx=4) def channel_callback(_): i = self.list_channel.curselection()[0] c = i+1 self.synth.midi_input_channel(c) self.status("MIDI Input Channel = %s" % c) def keytab_callback(_): i = self.list_keytab.curselection()[0] kt = self.list_keytab.get(i) self.synth.keytable(kt) self.status("Using keytable: %s" % kt) def transpose_callback(*_): try: x = int(self.var_transpose.get()) self.synth.transpose(x) self.status("Transpose = %s" % x) except ValueError: self.warning("Invalid transpose") def keyrange_callback(*_): try: a = int(self.var_keyrange_low.get()) b = int(self.var_keyrange_high.get()) a, b = min(a,b), max(a,b) self.synth.key_range((a,b)) self.status("Key range = [%3d, %3d]" % (a, b)) except ValueError: self.warning("Invalid keyrange") def bend_callback(*_): try: b = int(self.var_bendrange.get()) self.synth.bend_range(b) self.status("Bend range = %s" % b) except ValueError: self.warning("Invalid Bendrange") self.list_channel.bind("<<ListboxSelect>>", channel_callback) self.list_keytab.bind("<<ListboxSelect>>", keytab_callback) spin_transpose.config(command=transpose_callback) spin_transpose.bind("<Return>", transpose_callback) spin_keylow.config(command=keyrange_callback) spin_keylow.bind("<Return>", keyrange_callback) spin_keyhigh.config(command=keyrange_callback) spin_keyhigh.bind("<Return>", keyrange_callback) spin_bendrange.config(command=bend_callback) spin_bendrange.bind("<Return>", bend_callback)
def __init__(self, master, app, synth_type, is_efx=False, is_controller=False): Toplevel.__init__(self, master) main = factory.frame(self) main.pack(anchor=W, expand=True, fill=BOTH) self.app = app self.stype = synth_type self.is_efx = is_efx self.is_controller = is_controller sid = "%s_%d" % (synth_type, SynthProxy.current_synth_serial_number()) specs = SynthSpecs.global_synth_type_registry[synth_type] self._combo_audio_in = {} # Maps synth parameter to combo box self._combo_audio_out = {} self._combo_control_in = {} self._combo_control_out = {} self._buffername_map = {} title = "Add %s " % synth_type if is_efx: title += "Effect" elif is_controller: title += "Controller Synth" else: title += "Synth" title += " sid = %s" % sid frame_north = factory.frame(main) frame_north.grid(row=0, column=0, columnspan=2, sticky='ew', padx=4, pady=8) logo_filename = os.path.join("resources", synth_type, "logo_small.png") lab_logo = factory.image_label(frame_north, logo_filename, synth_type) lab_id = factory.dialog_title_label(frame_north, title) lab_logo.grid(row=0, column=0, padx=8) lab_id.grid(row=0, column=1) # Audio Input Buses frame_audio_in = factory.label_frame(main, "Audio Input Buses") row = 0 for i in range(MAX_BUS_COUNT): try: b = specs["audio-input-buses"][i] param = b[0] lab_name = factory.label(frame_audio_in, "%d - %s" % (i+1, param)) combo = factory.audio_bus_combobox(frame_audio_in, self.app) combo.set(b[1]) lab_name.grid(row=row, column=0, sticky="w", padx=4, pady=4) combo.grid(row=row, column=1, sticky="w", padx=4, pady=4) self._combo_audio_in[param] = combo except IndexError: lab_dummy = factory.label(frame_audio_in, "%d - n/a" % (i+1, )) lab_dummy.grid(row=row, column=0) row += 1 factory.padding_label(frame_audio_in).grid(row=row, column=0) frame_audio_in.grid(row=1, column=0, padx=4, pady=4, sticky='ew') # Audio Output Buses frame_audio_out = factory.label_frame(main, "Audio Output Buses") row = 0 for i in range(MAX_BUS_COUNT): try: b = specs["audio-output-buses"][i] param = b[0] lab_name = factory.label(frame_audio_out, "%d - %s" % (i+1, param)) combo = factory.audio_bus_combobox(frame_audio_out, self.app) combo.set(b[1]) lab_name.grid(row=row, column=0, sticky="w", padx=4, pady=4) combo.grid(row=row, column=1, sticky="w", padx=4, pady=4) self._combo_audio_out[param] = combo except IndexError: lab_dummy = factory.label(frame_audio_out, "%d - n/a" % (i+1,)) lab_dummy.grid(row=row, column=0) row += 1 factory.padding_label(frame_audio_out).grid(row=row, column=0) frame_audio_out.grid(row=5, column=0, padx=4, pady=4, sticky='ew') # Control Input Buses frame_control_in = factory.label_frame(main, "Control Input Buses") row = 0 for i in range(MAX_BUS_COUNT): try: b = specs["control-input-buses"][i] param = b[0] lab_name = factory.label(frame_control_in, "%d - %s" % (i+1, param)) combo = factory.control_bus_combobox(frame_control_in, self.app) combo.set(b[1]) lab_name.grid(row=row, column=0, sticky="w", padx=4, pady=4) combo.grid(row=row, column=1, sticky="w", padx=4, pady=4) self._combo_control_in[param] = combo except IndexError: lab_dummy = factory.label(frame_control_in, "%d - n/a" % (i+1, )) lab_dummy.grid(row=row, column=0) row += 1 factory.padding_label(frame_control_in).grid(row=row, column=0) frame_control_in.grid(row=1, column=3, padx=4, pady=4, sticky='ew') # Control Output Buses frame_control_out = factory.label_frame(main, "Control Output Buses") row = 0 for i in range(MAX_BUS_COUNT): try: b = specs["control-output-buses"][i] param = b[0] lab_name = factory.label(frame_control_out, "%d - %s" % (i+1, param)) combo = factory.control_bus_combobox(frame_control_out, self.app) combo.set(b[1]) lab_name.grid(row=row, column=0, sticky="w", padx=4, pady=4) combo.grid(row=row, column=1, sticky="w", padx=4, pady=4) self._combo_control_out[param] = combo except IndexError: lab_dummy = factory.label(frame_control_out, "%d - n/a" % (i+1, )) lab_dummy.grid(row=row, column=0) row += 1 factory.padding_label(frame_control_out).grid(row=row, column=0) frame_control_out.grid(row=5, column=3, padx=4, pady=4, sticky='ew') # Buffers # if specs["buffers"]: # frame_buffers = factory.label_frame(main, "Buffers") # row = 0 # for param in specs["buffers"]: # lab_name = factory.label(frame_buffers, param) # combo = factory.buffer_combobox(frame_buffers, self.app) # lab_name.grid(row=row, column=0, sticky="w", padx=4, pady=4) # combo.grid(row=row, column=1, sticky="w", padx=4, pady=4) # self._buffername_map[param] = combo # row += 1 # factory.padding_label(frame_buffers).grid(row=row, column=0, sticky='ew') # frame_buffers.grid(row=9, column=3, padx=4, pady=4) # Keymode self.var_keymode = StringVar() self.var_voice_count = StringVar() self.var_voice_count.set(8) frame_keymode = factory.label_frame(main, "Key mode") col = 0 for km in specs["keymodes"]: rb = factory.radio(frame_keymode, km, self.var_keymode, km) rb.grid(row=0, column=col, sticky="w", padx=4, pady=4) col += 1 self.var_keymode.set(specs["keymodes"][0]) # Set default keymode lab_vc = factory.label(frame_keymode, "Voice count") spin_vc = factory.int_spinbox(frame_keymode, self.var_voice_count, from_=1, to=128) lab_vc.grid(row=1, column=0, padx=4) spin_vc.grid(row=1, column=1, columnspan=3, padx=4, pady=4) frame_keymode.grid(row=9, column=0, padx=4, pady=4, sticky='ew') factory.padding_label(frame_keymode).grid(row=2, column=0) # South Toolbar toolbar = factory.frame(main) b_help = factory.help_button(toolbar, command=self.display_help) b_accept = factory.accept_button(toolbar, command=self.accept) b_cancel = factory.cancel_button(toolbar, command=self.cancel) b_help.grid(row=0, column=0, sticky="w") factory.padding_label(toolbar).grid(row=0, column=1) b_accept.grid(row=0, column=2, sticky="e") b_cancel.grid(row=0, column=3, sticky="e") toolbar.grid(row=10, column=0, columnspan=5, sticky="ew", padx=4, pady=8)