LCOV - code coverage report
Current view: top level - src/engraving/editing - editfretboarddiagram.cpp Coverage Total Hit
Test: filtered_coverage.info Lines: 80.2 % 96 77
Test Date: 2026-11-05 04:07:02

            Line data    Source code
       1              : /*
       2              :  * SPDX-License-Identifier: GPL-3.0-only
       3              :  * MuseScore-Studio-CLA-applies
       4              :  *
       5              :  * MuseScore Studio
       6              :  * Music Composition & Notation
       7              :  *
       8              :  * Copyright (C) 2025 MuseScore Limited and others
       9              :  *
      10              :  * This program is free software: you can redistribute it and/or modify
      11              :  * it under the terms of the GNU General Public License version 3 as
      12              :  * published by the Free Software Foundation.
      13              :  *
      14              :  * This program is distributed in the hope that it will be useful,
      15              :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      16              :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      17              :  * GNU General Public License for more details.
      18              :  *
      19              :  * You should have received a copy of the GNU General Public License
      20              :  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
      21              :  */
      22              : 
      23              : #include "editfretboarddiagram.h"
      24              : 
      25              : #include "../dom/box.h"
      26              : #include "../dom/fret.h"
      27              : 
      28              : using namespace mu::engraving;
      29              : 
      30              : //---------------------------------------------------------
      31              : //   updateStored
      32              : //---------------------------------------------------------
      33              : 
      34           36 : FretUndoData::FretUndoData(FretDiagram* fd)
      35              : {
      36              :     // We need to store the old barres and markers, since predicting how
      37              :     // adding dots, markers, barres etc. will change things is too difficult.
      38              :     // Update linked fret diagrams:
      39           36 :     m_diagram = fd;
      40           36 :     m_dots = m_diagram->m_dots;
      41           36 :     m_markers = m_diagram->m_markers;
      42           36 :     m_barres = m_diagram->m_barres;
      43              : 
      44           36 :     m_strings = m_diagram->m_strings;
      45           36 :     m_frets = m_diagram->m_frets;
      46           36 :     m_fretOffset = m_diagram->m_fretOffset;
      47           36 :     m_maxFrets = m_diagram->m_maxFrets;
      48           36 :     m_showNut = m_diagram->m_showNut;
      49           36 :     m_orientation = m_diagram->m_orientation;
      50              : 
      51           36 :     m_userMag = m_diagram->m_userMag;
      52              : 
      53           36 :     m_showFingering = m_diagram->m_showFingering;
      54           36 : }
      55              : 
      56              : //---------------------------------------------------------
      57              : //   updateDiagram
      58              : //---------------------------------------------------------
      59              : 
      60           36 : void FretUndoData::updateDiagram()
      61              : {
      62           36 :     if (!m_diagram) {
      63            0 :         ASSERT_X("Tried to undo fret diagram change without ever setting diagram!");
      64              :         return;
      65              :     }
      66              : 
      67              :     // Reset every fret diagram property of the changed diagram
      68              :     // FretUndoData is a friend of FretDiagram so has access to these private members
      69           36 :     m_diagram->m_barres = m_barres;
      70           36 :     m_diagram->m_markers = m_markers;
      71           36 :     m_diagram->m_dots = m_dots;
      72              : 
      73           36 :     m_diagram->m_strings = m_strings;
      74           36 :     m_diagram->m_frets = m_frets;
      75           36 :     m_diagram->m_fretOffset = m_fretOffset;
      76           36 :     m_diagram->m_maxFrets = m_maxFrets;
      77           36 :     m_diagram->m_showNut = m_showNut;
      78           36 :     m_diagram->m_orientation = m_orientation;
      79              : 
      80           36 :     m_diagram->m_userMag = m_userMag;
      81              : 
      82           36 :     m_diagram->m_showFingering = m_showFingering;
      83              : }
      84              : 
      85              : //---------------------------------------------------------
      86              : //   FretDataChange
      87              : //---------------------------------------------------------
      88              : 
      89           32 : void FretDataChange::redo()
      90              : {
      91           32 :     m_undoData = FretUndoData(m_diagram);
      92              : 
      93           32 :     m_diagram->updateDiagram(m_harmonyName);
      94           32 : }
      95              : 
      96           32 : void FretDataChange::undo()
      97              : {
      98           32 :     m_undoData.updateDiagram();
      99           32 : }
     100              : 
     101              : //---------------------------------------------------------
     102              : //   FretDot
     103              : //---------------------------------------------------------
     104              : 
     105            1 : void FretDot::redo()
     106              : {
     107            1 :     undoData = FretUndoData(diagram);
     108              : 
     109            1 :     diagram->setDot(string, fret, add, dtype);
     110            1 :     diagram->triggerLayout();
     111            1 : }
     112              : 
     113            1 : void FretDot::undo()
     114              : {
     115            1 :     undoData.updateDiagram();
     116            1 :     diagram->triggerLayout();
     117            1 : }
     118              : 
     119              : //---------------------------------------------------------
     120              : //   FretMarker
     121              : //---------------------------------------------------------
     122              : 
     123            1 : void FretMarker::redo()
     124              : {
     125            1 :     undoData = FretUndoData(diagram);
     126              : 
     127            1 :     diagram->setMarker(string, mtype);
     128            1 :     diagram->triggerLayout();
     129            1 : }
     130              : 
     131            1 : void FretMarker::undo()
     132              : {
     133            1 :     undoData.updateDiagram();
     134            1 :     diagram->triggerLayout();
     135            1 : }
     136              : 
     137              : //---------------------------------------------------------
     138              : //   FretBarre
     139              : //---------------------------------------------------------
     140              : 
     141            1 : void FretBarre::redo()
     142              : {
     143            1 :     undoData = FretUndoData(diagram);
     144              : 
     145            1 :     diagram->setBarre(string, fret, add);
     146            1 :     diagram->triggerLayout();
     147            1 : }
     148              : 
     149            1 : void FretBarre::undo()
     150              : {
     151            1 :     undoData.updateDiagram();
     152            1 :     diagram->triggerLayout();
     153            1 : }
     154              : 
     155              : //---------------------------------------------------------
     156              : //   FretClear
     157              : //---------------------------------------------------------
     158              : 
     159            1 : void FretClear::redo()
     160              : {
     161            1 :     undoData = FretUndoData(diagram);
     162              : 
     163            1 :     diagram->clear();
     164            1 :     diagram->triggerLayout();
     165            1 : }
     166              : 
     167            1 : void FretClear::undo()
     168              : {
     169            1 :     undoData.updateDiagram();
     170            1 :     diagram->triggerLayout();
     171            1 : }
     172              : 
     173              : //---------------------------------------------------------
     174              : //   AddFretDiagramToFretBox
     175              : //---------------------------------------------------------
     176              : 
     177           22 : AddFretDiagramToFretBox::AddFretDiagramToFretBox(FretDiagram* f, size_t idx)
     178           22 :     : m_fretDiagram(f), m_idx(idx)
     179              : {
     180           22 : }
     181              : 
     182           22 : void AddFretDiagramToFretBox::redo()
     183              : {
     184           22 :     FBox* fbox = toFBox(m_fretDiagram->parent());
     185           22 :     fbox->addAtIdx(m_fretDiagram, m_idx);
     186           22 : }
     187              : 
     188            0 : void AddFretDiagramToFretBox::undo()
     189              : {
     190            0 :     FBox* fbox = toFBox(m_fretDiagram->parent());
     191            0 :     fbox->remove(m_fretDiagram);
     192            0 : }
     193              : 
     194              : //---------------------------------------------------------
     195              : //   RemoveFretDiagramFromFretBox
     196              : //---------------------------------------------------------
     197              : 
     198            0 : RemoveFretDiagramFromFretBox::RemoveFretDiagramFromFretBox(FretDiagram* f)
     199            0 :     : m_fretDiagram(f)
     200              : {
     201            0 :     FBox* fbox = toFBox(f->parent());
     202            0 :     const ElementList& el = fbox->el();
     203            0 :     m_idx = muse::indexOf(el, m_fretDiagram);
     204            0 : }
     205              : 
     206            0 : void RemoveFretDiagramFromFretBox::redo()
     207              : {
     208            0 :     FBox* fbox = toFBox(m_fretDiagram->parent());
     209            0 :     fbox->remove(m_fretDiagram);
     210            0 : }
     211              : 
     212            0 : void RemoveFretDiagramFromFretBox::undo()
     213              : {
     214            0 :     FBox* fbox = toFBox(m_fretDiagram->parent());
     215            0 :     fbox->addAtIdx(m_fretDiagram, m_idx);
     216            0 : }
        

Generated by: LCOV version 2.0-1