1 //=============================================================================
2 //  MuseScore
3 //  Music Composition & Notation
4 //
5 //  Copyright (C) 2012 Werner Schweer and others
6 //
7 //  This program is free software; you can redistribute it and/or modify
8 //  it under the terms of the GNU General Public License version 2
9 //  as published by the Free Software Foundation and appearing in
10 //  the file LICENSE.GPL
11 //=============================================================================
12 
13 #include "inspectorFret.h"
14 #include "libmscore/fret.h"
15 #include "libmscore/score.h"
16 
17 namespace Ms {
18 
19 //---------------------------------------------------------
20 //   InspectorFretDiagram
21 //---------------------------------------------------------
22 
InspectorFretDiagram(QWidget * parent)23 InspectorFretDiagram::InspectorFretDiagram(QWidget* parent)
24    : InspectorElementBase(parent)
25       {
26       f.setupUi(addWidget());
27 
28       const std::vector<InspectorItem> iiList = {
29             { Pid::COLOR,        0, e.color,       e.resetColor       },
30             { Pid::VISIBLE,      0, e.visible,     e.resetVisible     },
31             { Pid::OFFSET,       0, e.offset,      e.resetOffset      },
32             { Pid::MAG,          0, f.mag,         f.resetMag         },
33             { Pid::PLACEMENT,    0, f.placement,   f.resetPlacement   },
34             { Pid::FRET_STRINGS, 0, f.strings,     f.resetStrings     },
35             { Pid::FRET_FRETS,   0, f.frets,       f.resetFrets       },
36             { Pid::FRET_NUT,     0, f.showNut,     f.resetShowNut     },
37             { Pid::ORIENTATION,  0, f.orientation, f.resetOrientation },
38             };
39       const std::vector<InspectorPanel> ppList = {
40             { f.title, f.panel }
41             };
42 
43       dotTypeButtons = {
44             f.circleSelect,
45             f.crossSelect,
46             f.triangleSelect,
47             f.squareSelect
48             };
49 
50       mapSignals(iiList, ppList);
51 
52       FretDiagram* diagram = toFretDiagram(inspector->element());
53       int fretNumber = diagram->fretOffset() + 1;
54       f.fretNumber->setValue(fretNumber);
55       f.resetFretNumber->setEnabled(fretNumber != 1);
56 
57       connect(f.fretNumber,      SIGNAL(valueChanged(int)), SLOT(fretNumberChanged(int)));
58       connect(f.resetFretNumber, SIGNAL(resetClicked()),    SLOT(resetFretNumber()));
59 
60       connect(f.circleSelect,   SIGNAL(toggled(bool)), SLOT(circleButtonToggled(bool)));
61       connect(f.crossSelect,    SIGNAL(toggled(bool)), SLOT(crossButtonToggled(bool)));
62       connect(f.triangleSelect, SIGNAL(toggled(bool)), SLOT(triangleButtonToggled(bool)));
63       connect(f.squareSelect,   SIGNAL(toggled(bool)), SLOT(squareButtonToggled(bool)));
64       connect(f.toggleBarre,    SIGNAL(toggled(bool)), SLOT(barreButtonToggled(bool)));
65       connect(f.toggleMultidot, SIGNAL(toggled(bool)), SLOT(multidotButtonToggled(bool)));
66       connect(f.clearButton,    SIGNAL(clicked()),     SLOT(clearButtonClicked()));
67       }
68 
69 //---------------------------------------------------------
70 //   valueChanged
71 //---------------------------------------------------------
72 
valueChanged(int idx)73 void InspectorFretDiagram::valueChanged(int idx)
74       {
75       InspectorElementBase::valueChanged(idx);
76       FretDiagram* fd = toFretDiagram(inspector->element());
77       f.diagram->setFretDiagram(fd);
78       }
79 
80 //---------------------------------------------------------
81 //   setElement
82 //---------------------------------------------------------
83 
setElement()84 void InspectorFretDiagram::setElement()
85       {
86       InspectorElementBase::setElement();
87       FretDiagram* fd = toFretDiagram(inspector->element());
88       f.diagram->setFretDiagram(fd);
89       }
90 
91 //---------------------------------------------------------
92 //   fretNumberChanged
93 //---------------------------------------------------------
94 
fretNumberChanged(int fretNumber)95 void InspectorFretDiagram::fretNumberChanged(int fretNumber)
96       {
97       FretDiagram* fd = toFretDiagram(inspector->element());
98       fd->score()->startCmd();
99       fd->undoChangeProperty(Pid::FRET_OFFSET, fretNumber - 1);
100       fd->score()->endCmd();
101       f.resetFretNumber->setEnabled(fretNumber != 1);
102       f.diagram->setFretDiagram(fd);
103       }
104 
105 //---------------------------------------------------------
106 //   resetFretNumberClicked
107 //---------------------------------------------------------
108 
resetFretNumber()109 void InspectorFretDiagram::resetFretNumber()
110       {
111       FretDiagram* fd = toFretDiagram(inspector->element());
112       int fretNumber = 1;
113       fd->score()->startCmd();
114       fd->undoChangeProperty(Pid::FRET_OFFSET, fretNumber - 1);
115       fd->score()->endCmd();
116       f.fretNumber->setValue(fretNumber);
117       f.resetFretNumber->setEnabled(false);
118       f.diagram->setFretDiagram(fd);
119       }
120 
121 //---------------------------------------------------------
122 //   genericButtonToggled
123 //---------------------------------------------------------
124 
genericButtonToggled(QPushButton * b,bool v,FretDotType dtype)125 void InspectorFretDiagram::genericButtonToggled(QPushButton* b, bool v, FretDotType dtype)
126       {
127       for (QPushButton* p : dotTypeButtons) {
128             p->blockSignals(true);
129             p->setChecked(false);
130             }
131 
132       if (v) {
133             f.diagram->setCurrentDotType(dtype);
134             b->setChecked(true);
135             }
136 
137       f.diagram->setAutomaticDotType(!v);
138 
139       for (QPushButton* p : dotTypeButtons)
140             p->blockSignals(false);
141       }
142 //---------------------------------------------------------
143 //   circleButtonToggled
144 //---------------------------------------------------------
145 
circleButtonToggled(bool v)146 void InspectorFretDiagram::circleButtonToggled(bool v)
147       {
148       genericButtonToggled(f.circleSelect, v, FretDotType::NORMAL);
149       }
150 
151 //---------------------------------------------------------
152 //   crossButtonToggled
153 //---------------------------------------------------------
154 
crossButtonToggled(bool v)155 void InspectorFretDiagram::crossButtonToggled(bool v)
156       {
157       genericButtonToggled(f.crossSelect, v, FretDotType::CROSS);
158       }
159 
160 //---------------------------------------------------------
161 //   squareButtonToggled
162 //---------------------------------------------------------
163 
squareButtonToggled(bool v)164 void InspectorFretDiagram::squareButtonToggled(bool v)
165       {
166       genericButtonToggled(f.squareSelect, v, FretDotType::SQUARE);
167       }
168 
169 //---------------------------------------------------------
170 //   triangleButtonToggled
171 //---------------------------------------------------------
172 
triangleButtonToggled(bool v)173 void InspectorFretDiagram::triangleButtonToggled(bool v)
174       {
175       genericButtonToggled(f.triangleSelect, v, FretDotType::TRIANGLE);
176       }
177 
178 //---------------------------------------------------------
179 //   barreButtonToggled
180 //---------------------------------------------------------
181 
barreButtonToggled(bool v)182 void InspectorFretDiagram::barreButtonToggled(bool v)
183       {
184       f.diagram->setBarreMode(v);
185       }
186 
187 //---------------------------------------------------------
188 //   multidotButtonToggled
189 //---------------------------------------------------------
190 
multidotButtonToggled(bool v)191 void InspectorFretDiagram::multidotButtonToggled(bool v)
192       {
193       f.diagram->setMultidotMode(v);
194       }
195 
196 //---------------------------------------------------------
197 //   clearButtonClicked
198 //---------------------------------------------------------
199 
clearButtonClicked()200 void InspectorFretDiagram::clearButtonClicked()
201       {
202       f.diagram->clear();
203       }
204 }
205