def on_switch(self, switch, type): if self.parent.lst_menu.winfo_viewable(): return False if self.parent.param_editor_item: return False if switch == ENC_SELECT: if self.edit_mode: self.enable_edit(False) return True if type == "S": note = self.toggle_event(self.selected_cell[0], self.selected_cell[1]) if note: self.play_note(note) else: self.enable_edit(True) return True elif switch == ENC_SNAPSHOT: if type == "B": libseq.setTransportToStartOfBar() return True if libseq.getPlayState( self.bank, self.sequence) == zynthian_gui_stepsequencer.SEQ_STOPPED: libseq.setPlayState(self.bank, self.sequence, zynthian_gui_stepsequencer.SEQ_STARTING) else: libseq.setPlayState(self.bank, self.sequence, zynthian_gui_stepsequencer.SEQ_STOPPED) return True elif switch == ENC_BACK: self.enable_edit(False) return True return False
def hide(self): self.shown = False self.parent.unregister_zyncoder(zynthian_gui_stepsequencer.ENC_BACK) self.parent.unregister_zyncoder(zynthian_gui_stepsequencer.ENC_SELECT) self.parent.unregister_zyncoder(zynthian_gui_stepsequencer.ENC_LAYER) self.parent.unregister_switch(zynthian_gui_stepsequencer.ENC_SELECT, "SB") self.parent.unregister_switch(zynthian_gui_stepsequencer.ENC_SNAPSHOT, "SB") libseq.setPlayState(self.bank, self.sequence, zynthian_gui_stepsequencer.SEQ_STOPPED) libseq.enableMidiInput(False) self.enable_edit(False) libseq.setRefNote(self.keymap_offset)
def do_grid_size(self, params=None): # To avoid odd behaviour we stop all sequences from playing before changing grid size (blunt but effective!) bank = self.parent.bank for seq in range(libseq.getSequencesInBank(bank)): libseq.setPlayState(bank, seq, zynthian_gui_stepsequencer.SEQ_STOPPED) channels = [] groups = [] for column in range(self.columns): channels.append(libseq.getChannel(bank, column * self.columns, 0)) groups.append(libseq.getGroup(bank, column * self.columns)) new_size = self.parent.get_param("Grid size", "value") delta = new_size - self.columns if delta > 0: # Growing grid so add extra sequences for column in range(self.columns): for row in range(self.columns, self.columns + delta): pad = row + column * new_size libseq.insertSequence(bank, pad) libseq.setChannel(bank, pad, channels[column]) libseq.setGroup(bank, pad, groups[column]) zynseq.set_sequence_name(bank, pad, "%s" % (pad + 1)) for column in range(self.columns, new_size): for row in range(new_size): pad = row + column * new_size libseq.insertSequence(bank, pad) libseq.setChannel(bank, pad, column) libseq.setGroup(bank, pad, column) zynseq.set_sequence_name(bank, pad, "%s" % (pad + 1)) if delta < 0: # Shrinking grid so remove excess sequences libseq.setSequencesInBank(bank, new_size * self.columns) # Lose excess columns for offset in range(new_size, new_size * new_size + 1, new_size): logging.warning("offset: %d", offset) for pad in range(-delta): libseq.removeSequence(bank, offset) self.columns = new_size self.refresh_pending = 1
def stop(self): if self.child == self.pattern_editor: libseq.setPlayState(0, 0, SEQ_STOPPED) libseq.setTransportToStartOfBar()