From 95dc70b75164ab0e0a84e8c73a09b753e5a71c3f Mon Sep 17 00:00:00 2001
From: SeeLook <SeeLook@localhost>
Date: Thu, 28 Dec 2017 18:07:08 +0100
Subject: [PATCH] Use main score object for displaying key name logic instead
 of Qt bindings in QML

---
 src/libs/core/tnootkaqml.cpp  | 2 +-
 src/main/tmainscoreobject.cpp | 9 +++++++++
 src/main/tmainscoreobject.h   | 4 ++++
 src/qml/MainScore.qml         | 6 +-----
 4 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/src/libs/core/tnootkaqml.cpp b/src/libs/core/tnootkaqml.cpp
index 7819bbfde..d366e97cb 100755
--- a/src/libs/core/tnootkaqml.cpp
+++ b/src/libs/core/tnootkaqml.cpp
@@ -199,7 +199,7 @@ QString TnootkaQML::minorKeyName(int key) {
 
 
 QString TnootkaQML::majAndMinKeyName(int key) {
-  return TkeySignature(static_cast<char>(key)).getMajorName() + QLatin1String("<br>") + TkeySignature(static_cast<char>(key)).getMinorName();
+  return majorKeyName(key) + QLatin1String("<br>") + minorKeyName(key);
 }
 
 
diff --git a/src/main/tmainscoreobject.cpp b/src/main/tmainscoreobject.cpp
index f176e0442..33f4392f6 100644
--- a/src/main/tmainscoreobject.cpp
+++ b/src/main/tmainscoreobject.cpp
@@ -101,6 +101,15 @@ void TmainScoreObject::setScoreObject(TscoreObject* scoreObj) {
   connect(m_scoreObj, &TscoreObject::singleNoteChanged, this, &TmainScoreObject::singleModeSlot);
   connect(GLOB, &Tglobals::showEnharmNotesChanged, this, &TmainScoreObject::checkSingleNoteVisibility);
   connect(GLOB, &Tglobals::enableDoubleAccidsChanged, this, &TmainScoreObject::checkSingleNoteVisibility);
+  connect(m_scoreObj, &TscoreObject::keySignatureChanged, [=]{
+    if (GLOB->keySignatureEnabled() && GLOB->showKeyName() && !GLOB->isExam())
+      emit keyNameTextChanged();
+  });
+}
+
+
+QString TmainScoreObject::keyNameText() const {
+  return m_scoreObj ? NOO->majAndMinKeyName(m_scoreObj->keySignature()) : QString();
 }
 
 
diff --git a/src/main/tmainscoreobject.h b/src/main/tmainscoreobject.h
index 167e10a72..f8a05d394 100644
--- a/src/main/tmainscoreobject.h
+++ b/src/main/tmainscoreobject.h
@@ -59,6 +59,7 @@ class TmainScoreObject : public QObject
   Q_PROPERTY(Taction* zoomOutAct READ zoomOutAct)
   Q_PROPERTY(Taction* zoomInAct READ zoomInAct)
   Q_PROPERTY(QList<QObject*> scoreActions READ scoreActions NOTIFY scoreActionsChanged)
+  Q_PROPERTY(QString keyNameText READ keyNameText NOTIFY keyNameTextChanged)
 
 public:
   explicit TmainScoreObject(QObject* parent = nullptr);
@@ -82,6 +83,8 @@ public:
 
   QList<QObject*> scoreActions() { return m_scoreActions; }
 
+  QString keyNameText() const;
+
 // redirected from TscoreObject
   void setReadOnly(bool ro);
   void clearScore();
@@ -102,6 +105,7 @@ public:
 
 signals:
   void scoreActionsChanged();
+  void keyNameTextChanged();
   // redirected from TscoreObject
   void clicked();
 
diff --git a/src/qml/MainScore.qml b/src/qml/MainScore.qml
index 3218a2b13..f7cbcc093 100644
--- a/src/qml/MainScore.qml
+++ b/src/qml/MainScore.qml
@@ -88,10 +88,7 @@ Score {
     y: clef === Tclef.PianoStaffClefs ? 3.7 : 6.2
     color: activPal.text
     font { family: "Sans"; pixelSize: 2 }
-    text: getKeyNameText()
-    function getKeyNameText() {
-      return enableKeySign && firstStaff.keySignature ? Noo.majAndMinKeyName(firstStaff.keySignature.key) : ""
-    }
+    text: GLOB.showKeyName && enableKeySign ? mainObj.keyNameText : ""
   }
 
   // private
@@ -108,7 +105,6 @@ Score {
   }
   Connections {
     target: GLOB
-    onKeyNameChanged: keyName.text = Qt.binding(keyName.getKeyNameText)
     onClefTypeChanged: score.clef = GLOB.clefType
   }
   Connections {
-- 
GitLab