// following functions use current Selection to determine range of frames bool EDITOR::handleColumnSet() { RowsSelection* current_selection = selection.getCopyOfCurrentRowsSelection(); if (current_selection->size() == 0) return false; RowsSelection::iterator current_selection_begin(current_selection->begin()); RowsSelection::iterator current_selection_end(current_selection->end()); // inspect the selected frames, if they are all set, then unset all, else set all bool unset_found = false, changes_made = false; for(RowsSelection::iterator it(current_selection_begin); it != current_selection_end; it++) { if (!markersManager.getMarkerAtFrame(*it)) { unset_found = true; break; } } if (unset_found) { // set all for(RowsSelection::iterator it(current_selection_begin); it != current_selection_end; it++) { if (!markersManager.getMarkerAtFrame(*it)) { if (markersManager.setMarkerAtFrame(*it)) { changes_made = true; pianoRoll.redrawRow(*it); } } } if (changes_made) history.registerMarkersChange(MODTYPE_MARKER_SET, *current_selection_begin, *current_selection->rbegin()); } else { // unset all for(RowsSelection::iterator it(current_selection_begin); it != current_selection_end; it++) { if (markersManager.getMarkerAtFrame(*it)) { markersManager.removeMarkerFromFrame(*it); changes_made = true; pianoRoll.redrawRow(*it); } } if (changes_made) history.registerMarkersChange(MODTYPE_MARKER_REMOVE, *current_selection_begin, *current_selection->rbegin()); } if (changes_made) selection.mustFindCurrentMarker = playback.mustFindCurrentMarker = true; return changes_made; }
void EDITOR::setMarkers() { RowsSelection* current_selection = selection.getCopyOfCurrentRowsSelection(); if (current_selection->size()) { RowsSelection::iterator current_selection_begin(current_selection->begin()); RowsSelection::iterator current_selection_end(current_selection->end()); bool changes_made = false; for(RowsSelection::iterator it(current_selection_begin); it != current_selection_end; it++) { if (!markersManager.getMarkerAtFrame(*it)) { if (markersManager.setMarkerAtFrame(*it)) { changes_made = true; pianoRoll.redrawRow(*it); } } } if (changes_made) { selection.mustFindCurrentMarker = playback.mustFindCurrentMarker = true; history.registerMarkersChange(MODTYPE_MARKER_SET, *current_selection_begin, *current_selection->rbegin()); } } }
bool EDITOR::handleColumnSetUsingPattern() { RowsSelection* current_selection = selection.getCopyOfCurrentRowsSelection(); if (current_selection->size() == 0) return false; RowsSelection::iterator current_selection_begin(current_selection->begin()); RowsSelection::iterator current_selection_end(current_selection->end()); int pattern_offset = 0, current_pattern = taseditorConfig.currentPattern; bool changes_made = false; for(RowsSelection::iterator it(current_selection_begin); it != current_selection_end; it++) { // skip lag frames if (taseditorConfig.autofirePatternSkipsLag && greenzone.lagLog.getLagInfoAtFrame(*it) == LAGGED_YES) continue; if (patterns[current_pattern][pattern_offset]) { if (!markersManager.getMarkerAtFrame(*it)) { if (markersManager.setMarkerAtFrame(*it)) { changes_made = true; pianoRoll.redrawRow(*it); } } } else { if (markersManager.getMarkerAtFrame(*it)) { markersManager.removeMarkerFromFrame(*it); changes_made = true; pianoRoll.redrawRow(*it); } } pattern_offset++; if (pattern_offset >= (int)patterns[current_pattern].size()) pattern_offset -= patterns[current_pattern].size(); } if (changes_made) { history.registerMarkersChange(MODTYPE_MARKER_PATTERN, *current_selection_begin, *current_selection->rbegin(), patternsNames[current_pattern].c_str()); selection.mustFindCurrentMarker = playback.mustFindCurrentMarker = true; return true; } else return false; }