@@ -825,22 +825,20 @@ void MainPanel::mirrorSelNotesVertically() {
825825 repaint ();
826826}
827827
828- void MainPanel::numBarsChanged () {
829- bool deletedSmth = false ;
828+ void MainPanel::numBarsChanged (bool manualChange ) {
829+ bool deletedNotes = false ;
830830 size_t notesNum = notes.size ();
831831 for (int i = 0 ; i < notesNum; ++i) {
832832 if (notes[i].time + notes[i].duration > params->get_num_bars ()) {
833833 deleteNote (i);
834834 i--;
835835 notesNum--;
836- deletedSmth = true ;
836+ deletedNotes = true ;
837837 }
838838 }
839- deletedSmth = (std::erase_if (params->ratiosMarks ,
840- [&](const auto &ratioMark) {
841- return (ratioMark.time > params->get_num_bars ());
842- }) > 0 ) ||
843- deletedSmth;
839+ bool deleteRatioMarks = (std::erase_if (params->ratiosMarks , [&](const auto &ratioMark) {
840+ return (ratioMark.time > params->get_num_bars ());
841+ }) > 0 );
844842 if (viewport != nullptr ) {
845843 float min_bar_width_px =
846844 static_cast <float >(viewport->getViewWidth ()) / params->get_num_bars ();
@@ -849,12 +847,13 @@ void MainPanel::numBarsChanged() {
849847 editor->changeBarWidthPx (bar_width_px);
850848 }
851849 }
852- remakeKeys ();
853- updateLayout ();
854-
855- if (deletedSmth ) {
850+ if (deletedNotes) {
851+ remakeKeys ();
852+ }
853+ if (manualChange && (deletedNotes || deleteRatioMarks) ) {
856854 saveState ();
857855 }
856+ updateLayout ();
858857}
859858
860859int python_mod (int a, int b) {
@@ -1721,7 +1720,8 @@ void MainPanel::mouseDrag(const juce::MouseEvent &event) {
17211720 if ((initialTotalCentsForDrag.size () == 1 ) && !keys.empty ()) {
17221721 int initialTotalCents = initialTotalCentsForDrag[0 ];
17231722 int newTotalCents = initialTotalCents + dcents;
1724- newTotalCents = findNearestKeyTotalCents (newTotalCents, keys, params->num_octaves );
1723+ newTotalCents =
1724+ findNearestKeyTotalCents (newTotalCents, keys, params->num_octaves );
17251725 dcents = newTotalCents - initialTotalCents;
17261726
17271727 auto it = std::find_if (notes.begin (), notes.end (),
@@ -2044,11 +2044,15 @@ void MainPanel::mouseUp(const juce::MouseEvent &event) {
20442044 if (isDrawingRatioMark) {
20452045 if ((ratioMarkStartPoint != ratioMarkLastPoint) && !keys.empty ()) {
20462046
2047- int startKeyTotalCents = yToTotalCents (ratioMarkStartPoint.getY (), params->num_octaves , octave_height_px);
2048- startKeyTotalCents = findNearestKeyTotalCents (startKeyTotalCents, keys, params->num_octaves );
2047+ int startKeyTotalCents =
2048+ yToTotalCents (ratioMarkStartPoint.getY (), params->num_octaves , octave_height_px);
2049+ startKeyTotalCents =
2050+ findNearestKeyTotalCents (startKeyTotalCents, keys, params->num_octaves );
20492051
2050- int lastKeyTotalCents = yToTotalCents (ratioMarkLastPoint.getY (), params->num_octaves , octave_height_px);
2051- lastKeyTotalCents = findNearestKeyTotalCents (lastKeyTotalCents, keys, params->num_octaves );
2052+ int lastKeyTotalCents =
2053+ yToTotalCents (ratioMarkLastPoint.getY (), params->num_octaves , octave_height_px);
2054+ lastKeyTotalCents =
2055+ findNearestKeyTotalCents (lastKeyTotalCents, keys, params->num_octaves );
20522056
20532057 if (startKeyTotalCents != lastKeyTotalCents) {
20542058 float startTime = ratioMarkStartPoint.getX () / bar_width_px;
@@ -2361,17 +2365,21 @@ void MainPanel::reattachRatiosMarks(int dcents) {
23612365 RatioMark &ratioMark = *it;
23622366 bool changed = false ;
23632367 int higherKeyTotalCents = ratioMark.getHigherKeyTotalCents ();
2364- if (!keysFromAllNotes.contains (higherKeyTotalCents % 1200 ) && !keysFromAllNotes.empty ()) {
2365- int nearestKeyTotalCents = findNearestKeyTotalCents (higherKeyTotalCents, keysFromAllNotes, params->num_octaves );
2368+ if (!keysFromAllNotes.contains (higherKeyTotalCents % 1200 ) &&
2369+ !keysFromAllNotes.empty ()) {
2370+ int nearestKeyTotalCents = findNearestKeyTotalCents (
2371+ higherKeyTotalCents, keysFromAllNotes, params->num_octaves );
23662372 int diff = std::abs (nearestKeyTotalCents - higherKeyTotalCents);
23672373 if ((diff <= maxCentsChange) && (diff > 0 )) {
23682374 higherKeyTotalCents = nearestKeyTotalCents;
23692375 changed = true ;
23702376 }
23712377 }
23722378 int lowerKeyTotalCents = ratioMark.getLowerKeyTotalCents ();
2373- if (!keysFromAllNotes.contains (lowerKeyTotalCents % 1200 ) && !keysFromAllNotes.empty ()) {
2374- int nearestKeyTotalCents = findNearestKeyTotalCents (lowerKeyTotalCents, keysFromAllNotes, params->num_octaves );
2379+ if (!keysFromAllNotes.contains (lowerKeyTotalCents % 1200 ) &&
2380+ !keysFromAllNotes.empty ()) {
2381+ int nearestKeyTotalCents = findNearestKeyTotalCents (
2382+ lowerKeyTotalCents, keysFromAllNotes, params->num_octaves );
23752383 int diff = std::abs (nearestKeyTotalCents - lowerKeyTotalCents);
23762384 if ((diff <= maxCentsChange) && (diff > 0 )) {
23772385 lowerKeyTotalCents = nearestKeyTotalCents;
0 commit comments