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