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