From 77b7d9f2736f7900839760e522c4e8e82e7984ee Mon Sep 17 00:00:00 2001
From: SeeLook <seelook@gmail.com>
Date: Fri, 10 Jan 2020 11:16:34 +0100
Subject: [PATCH] Mobile flying menu improvements

- added show/hide animations
- create 'pitch detection action' on C++ side
- add actions only when sound was initialized
- mike flat icon
---
 picts/flat/mic.png                    | Bin 0 -> 3967 bytes
 spare_parts/scalable/glyphs/mic.svg   |  15 +++++++++------
 src/libs/core/Android/tmobilemenu.cpp |   9 +++++++--
 src/libs/core/Android/tmobilemenu.h   |  12 ++++++++----
 src/libs/core/core.qrc                |   2 ++
 src/main/tmainscoreobject.cpp         |   4 ++--
 src/qml/+android/FlyItem.qml          |  13 +++++++++----
 src/qml/+android/MainMenuMobile.qml   |  26 ++++++++++++++------------
 src/qml/MainScore.qml                 |   3 ++-
 9 files changed, 53 insertions(+), 31 deletions(-)
 create mode 100644 picts/flat/mic.png

diff --git a/picts/flat/mic.png b/picts/flat/mic.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ba39b97ee4567630085e416beffeb8284624ec8
GIT binary patch
literal 3967
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
agIhv>27G9-^FRJ9156E3$T#|~5B~@M3tnUZ

literal 0
HcmV?d00001

diff --git a/spare_parts/scalable/glyphs/mic.svg b/spare_parts/scalable/glyphs/mic.svg
index ef5208d1d..7a731f7fc 100644
--- a/spare_parts/scalable/glyphs/mic.svg
+++ b/spare_parts/scalable/glyphs/mic.svg
@@ -11,9 +11,12 @@
    version="1.1"
    id="svg6"
    sodipodi:docname="mic.svg"
-   inkscape:version="0.92.0 r"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14"
    width="8.3094015"
-   height="12">
+   height="12"
+   inkscape:export-filename="../../../picts/mic.png"
+   inkscape:export-xdpi="2044.9126"
+   inkscape:export-ydpi="2044.9126">
   <metadata
      id="metadata10">
     <rdf:RDF>
@@ -22,7 +25,7 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
+        <dc:title />
       </cc:Work>
     </rdf:RDF>
   </metadata>
@@ -36,12 +39,12 @@
      inkscape:pageopacity="0"
      inkscape:pageshadow="2"
      inkscape:window-width="1920"
-     inkscape:window-height="1039"
+     inkscape:window-height="1043"
      id="namedview8"
      showgrid="false"
      inkscape:zoom="14.75"
-     inkscape:cx="-7.4801419"
-     inkscape:cy="3.4888733"
+     inkscape:cx="3.6385022"
+     inkscape:cy="3.7600597"
      inkscape:window-x="0"
      inkscape:window-y="0"
      inkscape:window-maximized="1"
diff --git a/src/libs/core/Android/tmobilemenu.cpp b/src/libs/core/Android/tmobilemenu.cpp
index e7b5374e3..927425275 100644
--- a/src/libs/core/Android/tmobilemenu.cpp
+++ b/src/libs/core/Android/tmobilemenu.cpp
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2017 by Tomasz Bojczuk                                  *
+ *   Copyright (C) 2017-2020 by Tomasz Bojczuk                             *
  *   seelook@gmail.com                                                     *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -21,6 +21,7 @@
 #include "tmtr.h"
 #include "taction.h"
 
+#include <QtGui/qguiapplication.h>
 #include <QtCore/qmath.h>
 #include <QtCore/qdebug.h>
 
@@ -30,6 +31,10 @@ TmobileMenu::TmobileMenu(QQuickItem* parent) :
 {
   setAntialiasing(true);
   setAcceptedMouseButtons(Qt::LeftButton);
+
+  m_pitchDetectAct = new Taction(QGuiApplication::translate("MainMenuMobile", "Pitch recognition",
+                                                            "Android menu entry, could be 'Note recognition' or 'detection' as well"),
+                                 QStringLiteral("mic"), this);
 }
 
 
@@ -37,7 +42,7 @@ TmobileMenu::~TmobileMenu() {}
 
 
 void TmobileMenu::addAction(Taction* a) {
-  m_flyActions.append(QVariant::fromValue(a));
+  m_flyActions.append(a);
   emit flyActionsChanged();
 }
 
diff --git a/src/libs/core/Android/tmobilemenu.h b/src/libs/core/Android/tmobilemenu.h
index deb93af2a..ec2417cb9 100644
--- a/src/libs/core/Android/tmobilemenu.h
+++ b/src/libs/core/Android/tmobilemenu.h
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2017 by Tomasz Bojczuk                                  *
+ *   Copyright (C) 2017-2020 by Tomasz Bojczuk                             *
  *   seelook@gmail.com                                                     *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -36,7 +36,8 @@ class TmobileMenu : public QQuickItem
   Q_PROPERTY(bool pressed READ pressed NOTIFY pressedChanged)
   Q_PROPERTY(bool extra READ extra NOTIFY extraChanged)
   Q_PROPERTY(QQuickItem* currentFly READ currentFly NOTIFY currentFlyChanged)
-  Q_PROPERTY(QVariantList flyActions READ flyActions NOTIFY flyActionsChanged)
+  Q_PROPERTY(QList<QObject*> flyActions READ flyActions NOTIFY flyActionsChanged)
+  Q_PROPERTY(Taction* pitchDetectAct READ pitchDetectAct NOTIFY flyActionsChanged)
 
 
 public:
@@ -49,7 +50,9 @@ public:
 
   QQuickItem* currentFly() { return m_currentFlyItem; }
 
-  QVariantList flyActions() { return m_flyActions; }
+  QList<QObject*> flyActions() { return m_flyActions; }
+
+  Taction* pitchDetectAct() { return m_pitchDetectAct; }
 
   Q_INVOKABLE void addAction(Taction* a);
 
@@ -75,7 +78,8 @@ private:
   bool                        m_pressed = false;
   bool                        m_extra = false;
   QQuickItem                 *m_currentFlyItem = nullptr;
-  QVariantList                m_flyActions;
+  Taction                    *m_pitchDetectAct;
+  QList<QObject*>             m_flyActions;
 };
 
 #endif // TMOBILEMENU_H
diff --git a/src/libs/core/core.qrc b/src/libs/core/core.qrc
index 029f73625..79c8c30b3 100644
--- a/src/libs/core/core.qrc
+++ b/src/libs/core/core.qrc
@@ -97,5 +97,7 @@
         <file>picts/wizard-left.png</file>
         <file>picts/zoom-in.png</file>
         <file>picts/zoom-out.png</file>
+
+        <file alias="picts/mic.png">picts/flat/mic.png</file>
     </qresource>
 </RCC>
diff --git a/src/main/tmainscoreobject.cpp b/src/main/tmainscoreobject.cpp
index 14400f08e..d8e465e71 100644
--- a/src/main/tmainscoreobject.cpp
+++ b/src/main/tmainscoreobject.cpp
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2017-2019 by Tomasz Bojczuk                             *
+ *   Copyright (C) 2017-2020 by Tomasz Bojczuk                             *
  *   seelook@gmail.com                                                     *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -72,7 +72,7 @@ TmainScoreObject::TmainScoreObject(QObject* parent) :
   m_zoomInAct = new Taction(tr("Zoom score in"), QStringLiteral("zoom-in"), this);
 
   m_playAct = new Taction(qTR("TtoolBar", "Play"), QStringLiteral("playMelody"), this);
-  m_recModeAct = new Taction(qApp->translate("MainScore", "Note by note"), QString(), this);
+  m_recModeAct = new Taction(qApp->translate("MainScore", "Note by note"), QStringLiteral("record"), this);
   m_recModeAct->setCheckable(true);
   m_recModeAct->setTip(tr("Notes are written on the score one by one. Either playing, selecting fret or note name adds a new note to the staff automatically."));
   m_openXmlAct = new Taction(qTR("QShortcut", "Open"), QStringLiteral("open"), this);
diff --git a/src/qml/+android/FlyItem.qml b/src/qml/+android/FlyItem.qml
index 8932c8350..53c37c4e1 100644
--- a/src/qml/+android/FlyItem.qml
+++ b/src/qml/+android/FlyItem.qml
@@ -1,5 +1,5 @@
 /** This file is part of Nootka (http://nootka.sf.net)               *
- * Copyright (C) 2017 by Tomasz Bojczuk (seelook@gmail.com)          *
+ * Copyright (C) 2017-2020 by Tomasz Bojczuk (seelook@gmail.com)     *
  * on the terms of GNU GPLv3 license (http://www.gnu.org/licenses)   */
 
 import QtQuick 2.9
@@ -10,11 +10,16 @@ import Nootka 1.0
 TcuteButton {
   property Taction taction: null
 
+  width: Noo.fingerPixels() * 1.5; height: Noo.fingerPixels() * 1.5
   radius: width / 2
 
+  Behavior on scale { enabled: GLOB.useAnimations; NumberAnimation { duration: 150 }}
+  Behavior on x { enabled: GLOB.useAnimations; NumberAnimation { duration: 150 }}
+  Behavior on y { enabled: GLOB.useAnimations; NumberAnimation { duration: 150 }}
+
   Image {
     source: taction ? taction.icon : ""
-    sourceSize.width: parent.width * 0.6
-    x: (parent.width - width) / 2; y: (parent.height - height) / 2
+    height: parent.width * 0.8; width: height * (sourceSize.width / sourceSize.height)
+    anchors.centerIn: parent
   }
-} 
+}
diff --git a/src/qml/+android/MainMenuMobile.qml b/src/qml/+android/MainMenuMobile.qml
index de3e73555..b04246efc 100644
--- a/src/qml/+android/MainMenuMobile.qml
+++ b/src/qml/+android/MainMenuMobile.qml
@@ -49,10 +49,8 @@ TmobileMenu {
     }
   }
 
-  Taction {
-    id: pitchDetectAct
-    text: qsTr("Pitch recognition", "Android menu entry, could be 'Note recognition' or 'detection' as well")
-    icon: "delete"
+  Connections {
+    target: pitchDetectAct
     onTriggered: {
       SOUND.stoppedByUser = !SOUND.stoppedByUser
       if (SOUND.listening)
@@ -155,7 +153,6 @@ TmobileMenu {
     }
   }
 
-
   onClicked: mainDrawer.open()
 
   onFlyClicked: {
@@ -171,16 +168,21 @@ TmobileMenu {
   Repeater {
     model: flyActions
     FlyItem {
-      visible: extra
-      x: flyX(index); y: flyY(index); width: fingerPixels() * 1.5; height: fingerPixels() * 1.5
       taction: modelData
+      x: extra ? flyX(index) : -width; y: extra ? flyY(index) : -height
+      scale: (extra ? 0.99 : 0.01)
       color: currentFly === this ? activPal.highlight : activPal.button
     }
   }
-  Component.onCompleted: {
-    addAction(score.playAct)
-    addAction(score.recModeAct)
-    addAction(pitchDetectAct)
-    addAction(score.clearScoreAct)
+
+  Connections {
+    target: SOUND
+    onInitialized: {
+      addAction(score.playAct)
+      addAction(score.recModeAct)
+      addAction(score.clearScoreAct)
+      addAction(score.randMelodyAct)
+      addAction(pitchDetectAct)
+    }
   }
 }
diff --git a/src/qml/MainScore.qml b/src/qml/MainScore.qml
index 64be50af5..3d2422fab 100644
--- a/src/qml/MainScore.qml
+++ b/src/qml/MainScore.qml
@@ -1,5 +1,5 @@
 /** This file is part of Nootka (http://nootka.sf.net)               *
- * Copyright (C) 2017-2019 by Tomasz Bojczuk (seelook@gmail.com)     *
+ * Copyright (C) 2017-2020 by Tomasz Bojczuk (seelook@gmail.com)     *
  * on the terms of GNU GPLv3 license (http://www.gnu.org/licenses)   */
 
 import QtQuick 2.9
@@ -28,6 +28,7 @@ Score {
   property alias melodyActions: mainObj.melodyActions
   property alias noteActions: mainObj.noteActions
   property alias notesMenuAct: mainObj.notesMenuAct
+  property alias randMelodyAct: mainObj.randMelodyAct
   property alias keyName: keyName
 
   scoreObj.meter: GLOB.rhythmsEnabled && !GLOB.singleNoteMode ? Tmeter.Meter_4_4 : Tmeter.NoMeter
-- 
GitLab