@@ -706,6 +706,9 @@ FBox::FBox(System* parent)
706
706
resetProperty (Pid::BOTTOM_MARGIN);
707
707
resetProperty (Pid::TOP_GAP);
708
708
resetProperty (Pid::BOTTOM_GAP);
709
+ resetProperty (Pid::EXCLUDE_FROM_OTHER_PARTS);
710
+ resetProperty (Pid::APPEARANCE_LINKED_TO_MASTER);
711
+ resetProperty (Pid::POSITION_LINKED_TO_MASTER);
709
712
}
710
713
711
714
void FBox::init ()
@@ -722,7 +725,7 @@ void FBox::init()
722
725
723
726
StringList diagramsNamesInScore;
724
727
std::vector<EngravingItem*> harmonyOrDiagramsInScore;
725
- for (mu::engraving::Segment* segment = masterScore ()->firstSegment (mu::engraving::SegmentType::ChordRest); segment;
728
+ for (mu::engraving::Segment* segment = score ()->firstSegment (mu::engraving::SegmentType::ChordRest); segment;
726
729
segment = segment->next1 (mu::engraving::SegmentType::ChordRest)) {
727
730
for (EngravingItem* item : segment->annotations ()) {
728
731
if (!item || !item->part ()) {
@@ -749,6 +752,8 @@ void FBox::init()
749
752
}
750
753
}
751
754
755
+ m_diagramsOrderInScore = diagramsNamesInScore;
756
+
752
757
for (size_t i = 0 ; i < oldDiagramsNames.size (); ++i) {
753
758
String oldName = oldDiagramsNames[i];
754
759
if (!muse::contains (diagramsNamesInScore, oldName)) {
@@ -766,19 +771,6 @@ void FBox::init()
766
771
score ()->undo (new AddFretDiagramToFretBox (newDiagram, idx));
767
772
}
768
773
}
769
-
770
- StringList currentDiagrams;
771
- for (EngravingItem* item : el ()) {
772
- currentDiagrams.push_back (toFretDiagram (item)->harmonyText ().toLower ());
773
- }
774
-
775
- if (!m_invisibleDiagrams.empty ()) {
776
- updateInvisibleDiagrams (currentDiagrams);
777
- }
778
-
779
- if (!m_diagramsOrder.empty ()) {
780
- updateDiagramsOrder (currentDiagrams);
781
- }
782
774
}
783
775
784
776
void FBox::add (EngravingItem* e)
@@ -848,9 +840,7 @@ PropertyValue FBox::getProperty(Pid propertyId) const
848
840
case Pid::RIGHT_MARGIN:
849
841
return m_contentAlignmentH == AlignH::RIGHT ? VBox::getProperty (propertyId) : PropertyValue ();
850
842
case Pid::FRET_FRAME_DIAGRAMS_ORDER:
851
- return !m_diagramsOrder.empty () ? m_diagramsOrder.join (FRET_BOX_DIAGRAMS_SEPARATOR) : PropertyValue ();
852
- case Pid::FRET_FRAME_INVISIBLE_DIAGRAMS:
853
- return !m_invisibleDiagrams.empty () ? m_invisibleDiagrams.join (FRET_BOX_DIAGRAMS_SEPARATOR) : PropertyValue ();
843
+ return diagramsOrder ().join (FRET_BOX_DIAGRAMS_SEPARATOR);
854
844
default :
855
845
return VBox::getProperty (propertyId);
856
846
}
@@ -880,10 +870,7 @@ bool FBox::setProperty(Pid propertyId, const PropertyValue& val)
880
870
resetProperty (Pid::RIGHT_MARGIN);
881
871
break ;
882
872
case Pid::FRET_FRAME_DIAGRAMS_ORDER:
883
- m_diagramsOrder = val.value <String>().split (FRET_BOX_DIAGRAMS_SEPARATOR);
884
- break ;
885
- case Pid::FRET_FRAME_INVISIBLE_DIAGRAMS:
886
- m_invisibleDiagrams = val.value <String>().split (FRET_BOX_DIAGRAMS_SEPARATOR);
873
+ reorderElements (val.value <String>().split (FRET_BOX_DIAGRAMS_SEPARATOR));
887
874
break ;
888
875
default :
889
876
return VBox::setProperty (propertyId, val);
@@ -907,9 +894,12 @@ PropertyValue FBox::propertyDefault(Pid propertyId) const
907
894
case Pid::FRET_FRAME_H_ALIGN:
908
895
return static_cast <int >(AlignH::HCENTER);
909
896
case Pid::FRET_FRAME_DIAGRAMS_ORDER:
910
- return PropertyValue ();
911
- case Pid::FRET_FRAME_INVISIBLE_DIAGRAMS:
912
- return PropertyValue ();
897
+ return m_diagramsOrderInScore.join (FRET_BOX_DIAGRAMS_SEPARATOR);
898
+ case Pid::EXCLUDE_FROM_OTHER_PARTS:
899
+ return true ;
900
+ case Pid::APPEARANCE_LINKED_TO_MASTER:
901
+ case Pid::POSITION_LINKED_TO_MASTER:
902
+ return false ;
913
903
default :
914
904
return VBox::propertyDefault (propertyId);
915
905
}
@@ -946,81 +936,25 @@ void FBox::undoReorderElements(const StringList& newOrder)
946
936
triggerLayout ();
947
937
}
948
938
949
- ElementList FBox::orderedElements ( bool includeInvisible) const
939
+ void FBox::reorderElements ( const StringList& newOrder)
950
940
{
951
- ElementList elements = el ();
952
- const StringList& diagramsOrder = this ->diagramsOrder ();
953
- if (diagramsOrder.empty ()) {
954
- return elements;
955
- }
956
-
957
- std::sort (elements.begin (), elements.end (), [&diagramsOrder](const EngravingItem* a, const EngravingItem* b) {
958
- const FretDiagram* diagramA = toFretDiagram (a);
959
- const String diagramAHarmonyName = diagramA->harmonyText ().toLower ();
960
-
961
- const FretDiagram* diagramB = toFretDiagram (b);
962
- const String diagramBHarmonyName = diagramB->harmonyText ().toLower ();
963
-
964
- auto itA = std::find (diagramsOrder.begin (), diagramsOrder.end (), diagramAHarmonyName);
965
- auto itB = std::find (diagramsOrder.begin (), diagramsOrder.end (), diagramBHarmonyName);
966
-
967
- return itA < itB;
941
+ std::sort (m_el.begin (), m_el.end (), [&](EngravingItem* a, EngravingItem* b) {
942
+ String nameA = toFretDiagram (a)->harmonyText ().toLower ();
943
+ String nameB = toFretDiagram (b)->harmonyText ().toLower ();
944
+ auto iterA = std::find (newOrder.begin (), newOrder.end (), nameA);
945
+ auto iterB = std::find (newOrder.begin (), newOrder.end (), nameB);
946
+ return iterA < iterB;
968
947
});
969
-
970
- if (!includeInvisible) {
971
- const StringList& invisibleDiagrams = this ->invisibleDiagrams ();
972
-
973
- muse::remove_if (elements, [&invisibleDiagrams](const EngravingItem* element){
974
- const FretDiagram* diagram = toFretDiagram (element);
975
- const String diagramHarmonyName = diagram->harmonyText ().toLower ();
976
- return muse::contains (invisibleDiagrams, diagramHarmonyName);
977
- });
978
- }
979
-
980
- return elements;
981
948
}
982
949
983
- void FBox::undoSetInvisibleDiagrams ( const StringList& invisibleDiagrams)
950
+ StringList FBox::diagramsOrder () const
984
951
{
985
- StringList diagrams;
986
- for (const String& harmonyName : invisibleDiagrams) {
987
- diagrams.push_back (harmonyName.toLower ());
988
- }
989
-
990
- undoChangeProperty (Pid::FRET_FRAME_INVISIBLE_DIAGRAMS, diagrams.join (FRET_BOX_DIAGRAMS_SEPARATOR));
991
- triggerLayout ();
992
- }
993
-
994
- void FBox::updateDiagramsOrder (const StringList& currentDiagrams)
995
- {
996
- if (currentDiagrams == m_diagramsOrder) {
997
- return ;
998
- }
999
-
1000
- m_diagramsOrder.erase (std::remove_if (m_diagramsOrder.begin (), m_diagramsOrder.end (),
1001
- [&](const String& harmonyName) { return !muse::contains (currentDiagrams, harmonyName); }),
1002
- m_diagramsOrder.end ());
1003
-
1004
- String previousHarmonyName;
1005
- for (const String& harmonyName : currentDiagrams) {
1006
- if (!muse::contains (m_diagramsOrder, harmonyName)) {
1007
- size_t index = 0 ;
1008
- if (!previousHarmonyName.empty ()) {
1009
- index = std::find (m_diagramsOrder.begin (), m_diagramsOrder.end (), previousHarmonyName) - m_diagramsOrder.begin () + 1 ;
1010
- }
1011
-
1012
- m_diagramsOrder.insert (m_diagramsOrder.begin () + index, harmonyName);
1013
- }
1014
-
1015
- previousHarmonyName = harmonyName;
952
+ StringList result;
953
+ for (EngravingItem* item : m_el) {
954
+ result.push_back (toFretDiagram (item)->harmonyText ().toLower ());
1016
955
}
1017
- }
1018
956
1019
- void FBox::updateInvisibleDiagrams (const StringList& currentDiagrams)
1020
- {
1021
- m_invisibleDiagrams.erase (std::remove_if (m_invisibleDiagrams.begin (), m_invisibleDiagrams.end (),
1022
- [&](const String& harmonyName) { return !muse::contains (currentDiagrams, harmonyName); }),
1023
- m_invisibleDiagrams.end ());
957
+ return result;
1024
958
}
1025
959
1026
960
// ---------------------------------------------------------
0 commit comments