void SequenceSpace::nextModificationSymbol(set<string>& mod_set, set<string>::iterator iter, SequenceList& seq_list, ModificationSequence mod_seq, Modifier mod_manager) { // Get currently available modification sites. ModificationSites current_sites = mod_manager.getModificationSitesBySymbol(*iter, 1); size_t mod_num = (size_t)gs->getModificationConstraint(*iter); //ModificationSites mod_sites; size_t i = 0; // Non-const version of the container. std::vector<ModificationPosition> current_vec(current_sites.begin(), current_sites.end()); std::vector<ModificationPosition> mod_vec; for(ModificationSites::iterator mod_iter = current_sites.begin(); mod_iter != current_sites.end(); mod_iter++) { mod_vec.push_back(*mod_iter); if(++i >= mod_num) break; } //ModificationSites::iterator CurIter(current_sites.begin()); do { // Set the status of mod_sites to "occupied". Modifier new_manager(mod_manager); for(auto mod_iter = mod_vec.begin(); mod_iter != mod_vec.end(); mod_iter++) { new_manager.modifyModificationStatus(*iter, *mod_iter, 0); } // Select the current combination, set the status and move to the next symbol. ModificationSequence current_seq(mod_seq); ModificationSites mod_sites(mod_vec.begin(), mod_vec.end()); current_seq.insert(std::make_pair(*iter, mod_sites)); set<std::string>::iterator it_copy = iter; it_copy++; if(it_copy == mod_set.end()) { seq_list.push_back(current_seq); continue; } this->nextModificationSymbol(mod_set, it_copy, seq_list, current_seq, new_manager); } while(stdcomb::next_combination(current_vec.begin(), current_vec.end(), mod_vec.begin(), mod_vec.end())); }
bool perfnames::on_button_press_event (GdkEventButton * ev) { int y = int(ev->y); int seqnum = convert_y(y); current_seq(seqnum); if (SEQ64_CLICK_LEFT(ev->button)) { if (perf().is_active(seqnum)) { guint modifiers; /* for filtering out caps/num lock etc. */ modifiers = gtk_accelerator_get_default_mod_mask(); if ((ev->state & modifiers) == SEQ64_SHIFT_MASK) { /* * \new ca 2016-03-15 * If the Shift key is pressed, mute all other sequences. * Inactive sequences are skipped. */ for (int s = 0; s < m_sequence_max; ++s) { if (s != seqnum) { sequence * seq = perf().get_sequence(s); if (not_nullptr(seq)) { bool muted = seq->get_song_mute(); seq->set_song_mute(! muted); } } } } else { sequence * seq = perf().get_sequence(seqnum); bool muted = seq->get_song_mute(); seq->set_song_mute(! muted); } enqueue_draw(); } } return true; }
void toggle_current_sequence() { m_mainperf.sequence_playing_toggle(current_seq()); }
void delete_current_sequence() { m_mainperf.delete_sequence(current_seq()); }
void new_current_sequence () { m_mainperf.new_sequence(current_seq()); }
bool is_current_seq_in_edit () const { return m_mainperf.is_sequence_in_edit(current_seq()); }
bool is_current_seq_active () const { return m_mainperf.is_active(current_seq()); }