@@ -557,8 +557,9 @@ void GOSetter::NotifyCmbChanged() {
557
557
m_OrganController->SetOrganModified ();
558
558
}
559
559
560
- void GOSetter::NotifyCmbPushed (bool isChanged) {
561
- if (isChanged && m_state.m_IsActive && !m_state.m_IsModified ) {
560
+ void GOSetter::NotifyCmbPushed (bool isChanged, bool isForceSet) {
561
+ if (
562
+ isChanged && (m_state.m_IsActive || isForceSet) && !m_state.m_IsModified ) {
562
563
m_state.m_IsModified = true ;
563
564
// light the save button if the last loaded combination file is displayed
564
565
if (
@@ -695,6 +696,16 @@ void GOSetter::FromYaml(const YAML::Node &yamlNode) {
695
696
>> *m_framegeneral[i];
696
697
}
697
698
699
+ bool GOSetter::CopyFrameGenerals (
700
+ unsigned fromIdx, unsigned toIdx, bool changedBefore) {
701
+ const GOGeneralCombination *pNewCmb = m_framegeneral[fromIdx];
702
+ GOGeneralCombination *pOldCmb = m_framegeneral[toIdx];
703
+ bool changed = (changedBefore || !pOldCmb->IsEmpty () || !pNewCmb->IsEmpty ());
704
+
705
+ pOldCmb->Copy (pNewCmb);
706
+ return changed;
707
+ }
708
+
698
709
void GOSetter::ButtonStateChanged (int id, bool newState) {
699
710
switch (id) {
700
711
@@ -769,18 +780,25 @@ void GOSetter::ButtonStateChanged(int id, bool newState) {
769
780
case ID_SETTER_CURRENT:
770
781
SetPosition (m_pos);
771
782
break ;
772
- case ID_SETTER_DELETE:
783
+ case ID_SETTER_DELETE: {
784
+ bool changed = false ;
785
+
773
786
for (unsigned j = m_pos; j < m_framegeneral.size () - 1 ; j++)
774
- m_framegeneral[j]-> Copy (m_framegeneral[ j + 1 ] );
787
+ changed = CopyFrameGenerals ( j + 1 , j, changed );
775
788
UpdateAllButtonsLight (nullptr , -1 );
776
- NotifyCmbChanged ( );
789
+ NotifyCmbPushed (changed, true );
777
790
break ;
778
- case ID_SETTER_INSERT:
791
+ }
792
+ case ID_SETTER_INSERT: {
793
+ bool changed = false ;
794
+
779
795
for (unsigned j = m_framegeneral.size () - 1 ; j > m_pos; j--)
780
- m_framegeneral[j]->Copy (m_framegeneral[j - 1 ]);
796
+ changed = CopyFrameGenerals (j - 1 , j, changed);
797
+ UpdateAllButtonsLight (nullptr , -1 );
781
798
SetPosition (m_pos);
782
- NotifyCmbChanged ( );
799
+ NotifyCmbPushed (changed, true );
783
800
break ;
801
+ }
784
802
case ID_SETTER_L0:
785
803
case ID_SETTER_L1:
786
804
case ID_SETTER_L2:
0 commit comments