Compare commits
10 commits
a567428093
...
1f12d93300
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f12d93300 | ||
|
|
851b83a53a | ||
|
|
bcdf3d94f2 | ||
|
|
9e7a55fc20 | ||
|
|
75308b4423 | ||
|
|
a483a380d6 | ||
|
|
39a0356a51 | ||
|
|
2d985ca17d | ||
|
|
e9a031e6d3 | ||
|
|
fe7bbed7c1 |
5
.gitignore
vendored
|
|
@ -1,5 +1,4 @@
|
||||||
*.autosave
|
*.autosave
|
||||||
build-LenaPi-Desktop-Debug
|
build-LenaPi*
|
||||||
build-LenaPi-RasPi-Debug
|
|
||||||
build-LenaPi-RasPi-Release
|
|
||||||
LenaPi/LenaPi.pro.user.4.8-pre1
|
LenaPi/LenaPi.pro.user.4.8-pre1
|
||||||
|
musik
|
||||||
|
|
|
||||||
24
LenaPi/.qmake.stash
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
QMAKE_CXX.QT_COMPILER_STDCXX = 201402L
|
||||||
|
QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 10
|
||||||
|
QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 2
|
||||||
|
QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 1
|
||||||
|
QMAKE_CXX.COMPILER_MACROS = \
|
||||||
|
QT_COMPILER_STDCXX \
|
||||||
|
QMAKE_GCC_MAJOR_VERSION \
|
||||||
|
QMAKE_GCC_MINOR_VERSION \
|
||||||
|
QMAKE_GCC_PATCH_VERSION
|
||||||
|
QMAKE_CXX.INCDIRS = \
|
||||||
|
/usr/arm-linux-gnueabihf/include/c++/10 \
|
||||||
|
/usr/arm-linux-gnueabihf/include/c++/10/arm-linux-gnueabihf \
|
||||||
|
/usr/arm-linux-gnueabihf/include/c++/10/backward \
|
||||||
|
/usr/lib/gcc-cross/arm-linux-gnueabihf/10/include \
|
||||||
|
/usr/arm-linux-gnueabihf/include \
|
||||||
|
/usr/include/arm-linux-gnueabihf \
|
||||||
|
/usr/include
|
||||||
|
QMAKE_CXX.LIBDIRS = \
|
||||||
|
/usr/lib/gcc-cross/arm-linux-gnueabihf/10 \
|
||||||
|
/usr/arm-linux-gnueabihf/lib \
|
||||||
|
/lib/arm-linux-gnueabihf \
|
||||||
|
/lib \
|
||||||
|
/usr/lib/arm-linux-gnueabihf \
|
||||||
|
/usr/lib
|
||||||
|
|
@ -4,16 +4,35 @@
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
EnergySaver::~EnergySaver()
|
||||||
|
{
|
||||||
|
#ifdef ANDROID
|
||||||
|
releaseAndroidLock();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnergySaver::init()
|
||||||
|
{
|
||||||
|
auto saver = instance();
|
||||||
|
saver->mIsAutoShutDownEnabled = false;
|
||||||
|
#ifdef ANDROID
|
||||||
|
saver->initAdroidLocks();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void EnergySaver::init(int interval, const QString &shutdownScript)
|
void EnergySaver::init(int interval, const QString &shutdownScript)
|
||||||
{
|
{
|
||||||
|
auto saver = instance();
|
||||||
|
saver->mIsAutoShutDownEnabled = true;
|
||||||
QFileInfo script(shutdownScript);
|
QFileInfo script(shutdownScript);
|
||||||
if(script.exists()){
|
if(script.exists()){
|
||||||
auto saver = instance();
|
|
||||||
saver->setShutdownScript(shutdownScript);
|
saver->setShutdownScript(shutdownScript);
|
||||||
saver->initTimer(interval*1000);
|
saver->initTimer(interval*1000);
|
||||||
saver->restartTimer();
|
saver->restartTimer();
|
||||||
}
|
}
|
||||||
|
#ifdef ANDROID
|
||||||
|
saver->initAdroidLocks();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -21,15 +40,32 @@ void EnergySaver::init(int interval, const QString &shutdownScript)
|
||||||
EnergySaver *EnergySaver::instance()
|
EnergySaver *EnergySaver::instance()
|
||||||
{
|
{
|
||||||
static EnergySaver* inst;
|
static EnergySaver* inst;
|
||||||
if (inst == nullptr)
|
if (!inst)
|
||||||
{
|
{
|
||||||
inst = new EnergySaver();
|
inst = new EnergySaver();
|
||||||
}
|
}
|
||||||
return inst;
|
return inst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EnergySaver::deactivate()
|
||||||
|
{
|
||||||
|
mIsActive = false;
|
||||||
|
mTimer.stop();
|
||||||
|
setAndroidLock();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnergySaver::activate()
|
||||||
|
{
|
||||||
|
mIsActive = true;
|
||||||
|
restartTimer();
|
||||||
|
releaseAndroidLock();
|
||||||
|
}
|
||||||
|
|
||||||
void EnergySaver::restartTimer()
|
void EnergySaver::restartTimer()
|
||||||
{
|
{
|
||||||
|
// Energy saver is currently deactivated -> Do NOT start timer
|
||||||
|
if(!mIsActive) return;
|
||||||
|
|
||||||
if(mTimer.isActive()){
|
if(mTimer.isActive()){
|
||||||
mTimer.stop();
|
mTimer.stop();
|
||||||
}
|
}
|
||||||
|
|
@ -49,9 +85,59 @@ void EnergySaver::setShutdownScript(const QString &shutdownScript)
|
||||||
mShutdownScript = shutdownScript;
|
mShutdownScript = shutdownScript;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EnergySaver::initAdroidLocks()
|
||||||
|
{
|
||||||
|
#ifdef ANDROID
|
||||||
|
QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");
|
||||||
|
if ( activity.isValid() )
|
||||||
|
{
|
||||||
|
QAndroidJniObject serviceName = QAndroidJniObject::getStaticObjectField<jstring>("android/content/Context","POWER_SERVICE");
|
||||||
|
if ( serviceName.isValid() )
|
||||||
|
{
|
||||||
|
QAndroidJniObject powerMgr = activity.callObjectMethod("getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;",serviceName.object<jobject>());
|
||||||
|
if ( powerMgr.isValid() )
|
||||||
|
{
|
||||||
|
jint levelAndFlags = QAndroidJniObject::getStaticField<jint>("android/os/PowerManager","SCREEN_DIM_WAKE_LOCK");
|
||||||
|
|
||||||
|
QAndroidJniObject tag = QAndroidJniObject::fromString( "My Tag" );
|
||||||
|
|
||||||
|
m_wakeLock = powerMgr.callObjectMethod("newWakeLock", "(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;", levelAndFlags,tag.object<jstring>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnergySaver::setAndroidLock()
|
||||||
|
{
|
||||||
|
#ifdef ANDROID
|
||||||
|
if ( m_wakeLock.isValid() )
|
||||||
|
{
|
||||||
|
m_wakeLock.callMethod<void>("acquire", "()V");
|
||||||
|
qDebug() << "Locked device, can't go to standby anymore";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
assert( false );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnergySaver::releaseAndroidLock()
|
||||||
|
{
|
||||||
|
#ifdef ANDROID
|
||||||
|
if ( m_wakeLock.isValid() )
|
||||||
|
{
|
||||||
|
m_wakeLock.callMethod<void>("release", "()V");
|
||||||
|
qDebug() << "Unlocked device, can now go to standby";
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void EnergySaver::onTimeout()
|
void EnergySaver::onTimeout()
|
||||||
{
|
{
|
||||||
|
if(!mIsAutoShutDownEnabled) return;
|
||||||
std::cout << "Shutting down.";
|
std::cout << "Shutting down.";
|
||||||
#ifndef _DEBUG
|
#ifndef _DEBUG
|
||||||
QProcess p;
|
QProcess p;
|
||||||
|
|
|
||||||
|
|
@ -4,27 +4,39 @@
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
|
#ifdef ANDROID
|
||||||
|
#include <qandroidjniobject.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Class handling energy saving options.
|
* @brief Class handling energy saving options.
|
||||||
*
|
*
|
||||||
* Shut down device if no mouse input is detected and music player
|
* On Android devices, it locks the cpu shutdown while active. On other devices, it
|
||||||
* has not been active or a certain time interval.
|
* will shut down device on timeout if the options are set accordingly and a shutdown script
|
||||||
|
* is provided.
|
||||||
*
|
*
|
||||||
* @todo For now this does only work for Lena's RasPi, where the
|
* In the context of the LenaPi application, it will prevent cpu shutdown on android devices while playing
|
||||||
* shutdown script is positioned in a ceratin hardcoded path.
|
* music. On other devices, it will shutdown the device if no music has been playing and no mouse input was
|
||||||
* Enable/disable energy saving option, timeout and path of
|
* detected for a certain time intervall.
|
||||||
* shutdown script via config
|
|
||||||
*/
|
*/
|
||||||
class EnergySaver : public QObject
|
class EnergySaver : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
explicit EnergySaver(QObject *parent = nullptr) : QObject(parent) {}
|
using QObject::QObject;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
~EnergySaver();
|
||||||
|
/**
|
||||||
|
* @brief Create instance if necessary. The instance will have auto shutdown disabeld.
|
||||||
|
*
|
||||||
|
* Used to prevent sleep on android devices.
|
||||||
|
*/
|
||||||
|
static void init();
|
||||||
/**
|
/**
|
||||||
* @brief Create instance if necessary, configure it and start timer.
|
* @brief Create instance if necessary, configure it and start timer.
|
||||||
|
* @param enabledAutoShutdown Defines whether device will shutdown on inactivity using shutdownScript
|
||||||
* @param interval Timer interval in seconds
|
* @param interval Timer interval in seconds
|
||||||
* @param shutdownScript Path to shutdown script file
|
* @param shutdownScript Path to shutdown script file
|
||||||
* @see EnergySaver::instance
|
* @see EnergySaver::instance
|
||||||
|
|
@ -43,7 +55,19 @@ public:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
/**
|
/**
|
||||||
* @brief Restart shutdown timer, e.g. because of music player activiti
|
* @brief Deactivate energy saver, e.g., as music is currently playing
|
||||||
|
*
|
||||||
|
* Sets locks on adroid devics and stops shutdown-timer.
|
||||||
|
*/
|
||||||
|
void deactivate();
|
||||||
|
/**
|
||||||
|
* @brief Active energy saver
|
||||||
|
*
|
||||||
|
* Releases locks on android devices and restarts shutdown-timer if shutdown option is set.
|
||||||
|
*/
|
||||||
|
void activate();
|
||||||
|
/**
|
||||||
|
* @brief Restart shutdown timer, e.g. because of music player activity
|
||||||
*/
|
*/
|
||||||
void restartTimer();
|
void restartTimer();
|
||||||
|
|
||||||
|
|
@ -54,8 +78,31 @@ private:
|
||||||
*/
|
*/
|
||||||
void initTimer(int interval);
|
void initTimer(int interval);
|
||||||
void setShutdownScript(const QString& shutdownScript);
|
void setShutdownScript(const QString& shutdownScript);
|
||||||
|
/**
|
||||||
|
* @brief Initializes locking or Android devices
|
||||||
|
*/
|
||||||
|
void initAdroidLocks();
|
||||||
|
/**
|
||||||
|
* @brief Sets locks on Android devices to prevent sleep.
|
||||||
|
*
|
||||||
|
* Used to prevent cpu sleep as otherwise music will stop.
|
||||||
|
*/
|
||||||
|
void setAndroidLock();
|
||||||
|
/**
|
||||||
|
* @brief Releases locks on Android devices to allow the device's cpu to go into sleep mode.
|
||||||
|
*/
|
||||||
|
void releaseAndroidLock();
|
||||||
QTimer mTimer;
|
QTimer mTimer;
|
||||||
QString mShutdownScript;
|
QString mShutdownScript;
|
||||||
|
bool mIsActive{false};
|
||||||
|
bool mIsAutoShutDownEnabled{false};
|
||||||
|
|
||||||
|
#ifdef ANDROID
|
||||||
|
/**
|
||||||
|
* @brief Prevent energy saving for Android devices
|
||||||
|
*/
|
||||||
|
QAndroidJniObject m_wakeLock;
|
||||||
|
#endif
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
/**
|
/**
|
||||||
|
|
@ -63,6 +110,7 @@ private slots:
|
||||||
*/
|
*/
|
||||||
void onTimeout();
|
void onTimeout();
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ENERGYSAVER_H
|
#endif // ENERGYSAVER_H
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,20 @@
|
||||||
TEMPLATE = app
|
TEMPLATE = app
|
||||||
|
linux:android {
|
||||||
QT += qml quick
|
QT += androidextras
|
||||||
|
ANDROID_PERMISSIONS += android.permission.WAKE_LOCK
|
||||||
|
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-files
|
||||||
|
QMAKE_CXXFLAGS += -DANDROID=1
|
||||||
|
}
|
||||||
|
QT += qml quick multimedia
|
||||||
CONFIG += c++11
|
CONFIG += c++11
|
||||||
LIBS += -lVLCQtCore -lVLCQtQml
|
LIBS +=
|
||||||
|
|
||||||
SOURCES += main.cpp \
|
SOURCES += main.cpp \
|
||||||
|
controllers/MusicPlayer.cpp \
|
||||||
|
controllers/StyleHandling.cpp \
|
||||||
models/NavigationListModel.cpp \
|
models/NavigationListModel.cpp \
|
||||||
models/NavigationItemModel.cpp \
|
models/NavigationItemModel.cpp \
|
||||||
controllers/NavigationController.cpp \
|
controllers/NavigationController.cpp \
|
||||||
models/UiStateModel.cpp \
|
models/UiStateModel.cpp \
|
||||||
controllers/MusicController.cpp \
|
|
||||||
models/MusicModel.cpp \
|
|
||||||
MouseEventSpy.cpp \
|
MouseEventSpy.cpp \
|
||||||
EnergySaver.cpp \
|
EnergySaver.cpp \
|
||||||
controllers/SettingsHandler.cpp
|
controllers/SettingsHandler.cpp
|
||||||
|
|
@ -41,14 +45,18 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||||
!isEmpty(target.path): INSTALLS += target
|
!isEmpty(target.path): INSTALLS += target
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
|
controllers/MusicPlayer.h \
|
||||||
|
controllers/StyleHandling.h \
|
||||||
|
models/MusicPlayer.h \
|
||||||
models/NavigationListModel.h \
|
models/NavigationListModel.h \
|
||||||
models/NavigationItemModel.h \
|
models/NavigationItemModel.h \
|
||||||
controllers/NavigationController.h \
|
controllers/NavigationController.h \
|
||||||
models/UiStateModel.h \
|
models/UiStateModel.h \
|
||||||
controllers/MusicController.h \
|
|
||||||
models/MusicModel.h \
|
|
||||||
MouseEventSpy.h \
|
MouseEventSpy.h \
|
||||||
EnergySaver.h \
|
EnergySaver.h \
|
||||||
controllers/SettingsHandler.h
|
controllers/SettingsHandler.h
|
||||||
|
|
||||||
INCLUDEPATH+=/usr/local/include
|
INCLUDEPATH+=/usr/local/include
|
||||||
|
|
||||||
|
DISTFILES += \
|
||||||
|
android-files/AndroidManifest.xml
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE QtCreatorProject>
|
<!DOCTYPE QtCreatorProject>
|
||||||
<!-- Written by QtCreator 4.8.2, 2021-09-26T21:51:47. -->
|
<!-- Written by QtCreator 7.0.1, 2022-07-15T15:40:08. -->
|
||||||
<qtcreator>
|
<qtcreator>
|
||||||
<data>
|
<data>
|
||||||
<variable>EnvironmentId</variable>
|
<variable>EnvironmentId</variable>
|
||||||
<value type="QByteArray">{76cb87c9-a04b-479b-87ff-1b3ddab073a7}</value>
|
<value type="QByteArray">{baaf8c13-9b67-4e08-b264-88275a728682}</value>
|
||||||
</data>
|
</data>
|
||||||
<data>
|
<data>
|
||||||
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||||
<value type="int">0</value>
|
<value type="qlonglong">0</value>
|
||||||
</data>
|
</data>
|
||||||
<data>
|
<data>
|
||||||
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
<value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||||
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
||||||
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||||
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||||
|
|
@ -37,6 +37,7 @@
|
||||||
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
||||||
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||||
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
|
||||||
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||||
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
||||||
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
||||||
|
|
@ -45,282 +46,703 @@
|
||||||
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||||
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||||
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
|
||||||
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||||
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||||
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||||
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||||
|
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
|
||||||
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
</data>
|
</data>
|
||||||
<data>
|
<data>
|
||||||
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||||
<valuemap type="QVariantMap">
|
<valuemap type="QVariantMap">
|
||||||
|
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
|
||||||
|
<value type="bool" key="AutoTest.Framework.Boost">true</value>
|
||||||
|
<value type="bool" key="AutoTest.Framework.CTest">false</value>
|
||||||
|
<value type="bool" key="AutoTest.Framework.Catch">true</value>
|
||||||
|
<value type="bool" key="AutoTest.Framework.GTest">true</value>
|
||||||
|
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
|
||||||
|
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
|
||||||
|
<value type="int" key="AutoTest.RunAfterBuild">0</value>
|
||||||
|
<value type="bool" key="AutoTest.UseGlobal">true</value>
|
||||||
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
|
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
|
||||||
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
|
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
|
||||||
|
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.Questionable</value>
|
||||||
|
<valuemap type="QVariantMap" key="ClangTools">
|
||||||
|
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
|
||||||
|
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
|
||||||
|
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
|
||||||
|
<value type="int" key="ClangTools.ParallelJobs">4</value>
|
||||||
|
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
|
||||||
|
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
|
||||||
|
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
|
||||||
|
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
|
||||||
|
</valuemap>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
</data>
|
</data>
|
||||||
<data>
|
<data>
|
||||||
<variable>ProjectExplorer.Project.Target.0</variable>
|
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||||
<valuemap type="QVariantMap">
|
<valuemap type="QVariantMap">
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
|
<value type="QString" key="DeviceType">GenericLinuxOsType</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">armhf/raspi 10.0.1.146</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{f9938f31-357c-4785-aa6e-21a3feac2ebf}</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">armhf/raspi 10.0.1.146</value>
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{9f02fab2-7f72-4b24-bbd8-dbe33e863260}</value>
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/araemer/source/LenaPi/build-LenaPi-Desktop-Debug</value>
|
<value type="int" key="EnableQmlDebugging">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/jmr/privat/src/LenaPi/build-LenaPi-Unnamed-Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/jmr/privat/src/LenaPi/build-LenaPi-Unnamed-Debug</value>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/ar/source/LenaPi/build-LenaPi-Desktop-Release</value>
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/jmr/privat/src/LenaPi/build-LenaPi-Unnamed-Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/jmr/privat/src/LenaPi/build-LenaPi-Unnamed-Release</value>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
||||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/ar/source/LenaPi/build-LenaPi-Desktop-Profile</value>
|
<value type="int" key="EnableQmlDebugging">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/jmr/privat/src/LenaPi/build-LenaPi-Unnamed-Profile</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/jmr/privat/src/LenaPi/build-LenaPi-Unnamed-Profile</value>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
|
||||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
|
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
|
||||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
|
||||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
<value type="int" key="SeparateDebugInfo">0</value>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.CheckForFreeDiskSpaceStep</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedFiles"/>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedHosts"/>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedRemotePaths"/>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedSysroots"/>
|
||||||
|
<value type="QString" key="RemoteLinux.CheckForFreeDiskSpaceStep.PathToCheck">/</value>
|
||||||
|
<value type="qlonglong" key="RemoteLinux.CheckForFreeDiskSpaceStep.RequiredSpace">5242880</value>
|
||||||
|
<valuelist type="QVariantList" key="RemoteLinux.LastDeployedLocalTimes"/>
|
||||||
|
<valuelist type="QVariantList" key="RemoteLinux.LastDeployedRemoteTimes"/>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.KillAppStep</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedFiles"/>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedHosts"/>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedRemotePaths"/>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedSysroots"/>
|
||||||
|
<valuelist type="QVariantList" key="RemoteLinux.LastDeployedLocalTimes"/>
|
||||||
|
<valuelist type="QVariantList" key="RemoteLinux.LastDeployedRemoteTimes"/>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.RsyncDeployStep</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedFiles"/>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedHosts"/>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedRemotePaths"/>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedSysroots"/>
|
||||||
|
<valuelist type="QVariantList" key="RemoteLinux.LastDeployedLocalTimes"/>
|
||||||
|
<valuelist type="QVariantList" key="RemoteLinux.LastDeployedRemoteTimes"/>
|
||||||
|
<value type="QString" key="RemoteLinux.RsyncDeployStep.Flags">-av</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">3</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy locally</value>
|
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">DeployToGenericLinux</value>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
|
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
|
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
|
|
||||||
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
|
|
||||||
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
|
|
||||||
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
|
||||||
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
|
||||||
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
|
||||||
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||||
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
|
||||||
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
|
||||||
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
|
||||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||||
<value type="int">0</value>
|
<value type="QString">0</value>
|
||||||
<value type="int">1</value>
|
<value type="QString">1</value>
|
||||||
<value type="int">2</value>
|
<value type="QString">2</value>
|
||||||
<value type="int">3</value>
|
<value type="QString">3</value>
|
||||||
<value type="int">4</value>
|
<value type="QString">4</value>
|
||||||
<value type="int">5</value>
|
<value type="QString">5</value>
|
||||||
<value type="int">6</value>
|
<value type="QString">6</value>
|
||||||
<value type="int">7</value>
|
<value type="QString">7</value>
|
||||||
<value type="int">8</value>
|
<value type="QString">8</value>
|
||||||
<value type="int">9</value>
|
<value type="QString">9</value>
|
||||||
<value type="int">10</value>
|
<value type="QString">10</value>
|
||||||
<value type="int">11</value>
|
<value type="QString">11</value>
|
||||||
<value type="int">12</value>
|
<value type="QString">12</value>
|
||||||
<value type="int">13</value>
|
<value type="QString">13</value>
|
||||||
<value type="int">14</value>
|
<value type="QString">14</value>
|
||||||
</valuelist>
|
</valuelist>
|
||||||
|
<valuelist type="QVariantList" key="CustomOutputParsers"/>
|
||||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">LenaPi</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">LenaPi2</value>
|
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/ar/source/LenaPi/LenaPi/LenaPi.pro</value>
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">LenaPi.pro</value>
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||||
<value type="QString" key="RunConfiguration.Arguments"></value>
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||||
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.1">
|
||||||
|
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||||
|
<value type="QString">0</value>
|
||||||
|
<value type="QString">1</value>
|
||||||
|
<value type="QString">2</value>
|
||||||
|
<value type="QString">3</value>
|
||||||
|
<value type="QString">4</value>
|
||||||
|
<value type="QString">5</value>
|
||||||
|
<value type="QString">6</value>
|
||||||
|
<value type="QString">7</value>
|
||||||
|
<value type="QString">8</value>
|
||||||
|
<value type="QString">9</value>
|
||||||
|
<value type="QString">10</value>
|
||||||
|
<value type="QString">11</value>
|
||||||
|
<value type="QString">12</value>
|
||||||
|
<value type="QString">13</value>
|
||||||
|
<value type="QString">14</value>
|
||||||
|
</valuelist>
|
||||||
|
<valuelist type="QVariantList" key="CustomOutputParsers"/>
|
||||||
|
<value type="int" key="PE.EnvironmentAspect.Base">1</value>
|
||||||
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.CustomRunConfig</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
|
||||||
|
<value type="int" key="RemoteLinux.EnvironmentAspect.Version">1</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||||
|
<value type="QString" key="RunConfiguration.X11Forwarding">:0.0</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">2</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Target.1</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="QString" key="DeviceType">Android.Device.Type</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Android Qt 5.15.2 (android) Clang Multi-Abi</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Android Qt 5.15.2 (android) Clang Multi-Abi</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{ec9ac26e-ce2e-4aaf-b544-ccaec5b0b918}</value>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||||
|
<value type="int" key="EnableQmlDebugging">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/jmr/privat/src/LenaPi/build-LenaPi-Android_Qt_5_15_2_android_Clang_Multi_Abi-Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/jmr/privat/src/LenaPi/build-LenaPi-Android_Qt_5_15_2_android_Clang_Multi_Abi-Debug</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis">
|
||||||
|
<value type="QString">armeabi-v7a</value>
|
||||||
|
</valuelist>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Copy application data</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidPackageInstallationStep</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.3">
|
||||||
|
<value type="QString" key="BuildTargetSdk">android-31</value>
|
||||||
|
<value type="QString" key="KeystoreLocation"></value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build Android APK</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QmakeProjectManager.AndroidBuildApkStep</value>
|
||||||
|
<value type="bool" key="VerboseOutput">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">4</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||||
|
<value type="int" key="RunSystemFunction">0</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/jmr/privat/src/LenaPi/build-LenaPi-Android_Qt_5_15_2_android_Clang_Multi_Abi-Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/jmr/privat/src/LenaPi/build-LenaPi-Android_Qt_5_15_2_android_Clang_Multi_Abi-Release</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis">
|
||||||
|
<value type="QString">armeabi-v7a</value>
|
||||||
|
</valuelist>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Copy application data</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidPackageInstallationStep</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.3">
|
||||||
|
<value type="QString" key="BuildTargetSdk">android-31</value>
|
||||||
|
<value type="QString" key="KeystoreLocation"></value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build Android APK</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QmakeProjectManager.AndroidBuildApkStep</value>
|
||||||
|
<value type="bool" key="VerboseOutput">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">4</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
<value type="int" key="QtQuickCompiler">0</value>
|
||||||
|
<value type="int" key="RunSystemFunction">0</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
||||||
|
<value type="int" key="EnableQmlDebugging">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/jmr/privat/src/LenaPi/build-LenaPi-Android_Qt_5_15_2_android_Clang_Multi_Abi-Profile</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/jmr/privat/src/LenaPi/build-LenaPi-Android_Qt_5_15_2_android_Clang_Multi_Abi-Profile</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Copy application data</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidPackageInstallationStep</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.3">
|
||||||
|
<value type="QString" key="BuildTargetSdk">android-31</value>
|
||||||
|
<value type="QString" key="KeystoreLocation"></value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build Android APK</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QmakeProjectManager.AndroidBuildApkStep</value>
|
||||||
|
<value type="bool" key="VerboseOutput">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">4</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
<value type="int" key="QtQuickCompiler">0</value>
|
||||||
|
<value type="int" key="RunSystemFunction">0</value>
|
||||||
|
<value type="int" key="SeparateDebugInfo">0</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"><b>Deploy to Android device</b></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidDeployQtStep</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
|
||||||
|
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidDeployConfiguration2</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings">
|
||||||
|
<valuelist type="QVariantList" key="AndroidDeviceAbis">
|
||||||
|
<value type="QString">arm64-v8a</value>
|
||||||
|
<value type="QString">armeabi-v7a</value>
|
||||||
|
<value type="QString">armeabi</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="QString" key="AndroidDeviceSerialNumber">58009fc2</value>
|
||||||
|
<value type="int" key="AndroidVersion.ApiLevel">28</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||||
|
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
|
||||||
|
<value type="QString">cpu-cycles</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
|
||||||
|
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||||
|
<valuelist type="QVariantList" key="Android.PostStartShellCmdListKey">
|
||||||
|
<value type="QString"></value>
|
||||||
|
</valuelist>
|
||||||
|
<valuelist type="QVariantList" key="Android.PreStartShellCmdListKey">
|
||||||
|
<value type="QString"></value>
|
||||||
|
</valuelist>
|
||||||
|
<valuelist type="QVariantList" key="CustomOutputParsers"/>
|
||||||
|
<value type="int" key="PE.EnvironmentAspect.Base">0</value>
|
||||||
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidRunConfiguration:/home/jmr/privat/src/LenaPi/LenaPi/LenaPi.pro</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/jmr/privat/src/LenaPi/LenaPi/LenaPi.pro</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Target.2</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="QString" key="DeviceType">Desktop</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">desktop</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">desktop</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{73308c85-3272-4fe8-8c9f-0eb72285644f}</value>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||||
|
<value type="int" key="EnableQmlDebugging">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/jmr/privat/src/LenaPi/build-LenaPi-desktop-Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/jmr/privat/src/LenaPi/build-LenaPi-desktop-Debug</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||||
|
<value type="int" key="RunSystemFunction">0</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/jmr/privat/src/LenaPi/build-LenaPi-desktop-Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/jmr/privat/src/LenaPi/build-LenaPi-desktop-Release</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
<value type="int" key="RunSystemFunction">0</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
||||||
|
<value type="int" key="EnableQmlDebugging">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/jmr/privat/src/LenaPi/build-LenaPi-desktop-Profile</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/jmr/privat/src/LenaPi/build-LenaPi-desktop-Profile</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
<value type="int" key="RunSystemFunction">0</value>
|
||||||
|
<value type="int" key="SeparateDebugInfo">0</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
|
||||||
|
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||||
|
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
|
||||||
|
<value type="QString">cpu-cycles</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
|
||||||
|
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||||
|
<valuelist type="QVariantList" key="CustomOutputParsers"/>
|
||||||
|
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||||
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/jmr/privat/src/LenaPi/LenaPi/LenaPi.pro</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/jmr/privat/src/LenaPi/LenaPi/LenaPi.pro</value>
|
||||||
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||||
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
|
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
|
||||||
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
|
||||||
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||||
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
|
|
||||||
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/araemer/source/LenaPi/build-LenaPi-Desktop-Debug</value>
|
|
||||||
</valuemap>
|
</valuemap>
|
||||||
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||||
</valuemap>
|
</valuemap>
|
||||||
</data>
|
</data>
|
||||||
<data>
|
<data>
|
||||||
<variable>ProjectExplorer.Project.TargetCount</variable>
|
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||||
<value type="int">1</value>
|
<value type="qlonglong">3</value>
|
||||||
</data>
|
</data>
|
||||||
<data>
|
<data>
|
||||||
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||||
<value type="int">20</value>
|
<value type="int">22</value>
|
||||||
</data>
|
</data>
|
||||||
<data>
|
<data>
|
||||||
<variable>Version</variable>
|
<variable>Version</variable>
|
||||||
<value type="int">20</value>
|
<value type="int">22</value>
|
||||||
</data>
|
</data>
|
||||||
</qtcreator>
|
</qtcreator>
|
||||||
|
|
|
||||||
|
|
@ -1,51 +1,52 @@
|
||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
import QtQuick.Controls 1.4
|
import QtQuick.Controls 1.4
|
||||||
|
import QtQuick.Layouts 1.3
|
||||||
import QtQuick.Controls.Styles 1.4
|
import QtQuick.Controls.Styles 1.4
|
||||||
|
|
||||||
Item {
|
ColumnLayout {
|
||||||
id: container
|
id: container
|
||||||
property var model
|
property var model
|
||||||
|
|
||||||
// manually set height
|
spacing: StyleSpacings.tinySpacing
|
||||||
Component.onCompleted: height = childrenRect.height
|
|
||||||
|
|
||||||
Label{
|
RowLayout{
|
||||||
anchors.left: progress.left
|
Label{
|
||||||
anchors.bottom: progress.top
|
font.pointSize: 9
|
||||||
font.pointSize: 9
|
color: "grey"
|
||||||
color: "grey"
|
text: model.pMediaTitle
|
||||||
text: model.pMediaTitle
|
}
|
||||||
}
|
Item{
|
||||||
|
// spacer
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
|
||||||
Label{
|
Label{
|
||||||
anchors.right: progress.right
|
font.pointSize: 9
|
||||||
anchors.bottom: progress.top
|
color: "grey"
|
||||||
font.pointSize: 9
|
text: model.pTime + " / " + model.pMediaLength
|
||||||
color: "grey"
|
}
|
||||||
text: model.pTime + " / " + model.pMediaLength
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ProgressBar{
|
ProgressBar{
|
||||||
id: progress
|
id: progress
|
||||||
anchors.top: parent.top
|
Layout.fillWidth: true
|
||||||
anchors.left: parent.left
|
|
||||||
|
|
||||||
value: model.pProgress
|
value: model.pProgress
|
||||||
|
|
||||||
style:ProgressBarStyle {
|
style:ProgressBarStyle {
|
||||||
background: Rectangle {
|
background: Rectangle {
|
||||||
radius: 5
|
radius: StyleSizes.progressBackgroundRadius
|
||||||
color: "white"
|
color: "white"
|
||||||
border.color: "grey"
|
border.color: "grey"
|
||||||
border.width: 1
|
border.width: StyleSizes.progressBackgroundBorderWidth
|
||||||
implicitWidth: container.width
|
implicitWidth: container.width
|
||||||
implicitHeight: 10
|
implicitHeight: StyleSizes.progressBackgroundDefaultHeight
|
||||||
}
|
}
|
||||||
progress: Rectangle {
|
progress: Rectangle {
|
||||||
color: "blue"
|
color: "blue"
|
||||||
border.color: "blue"
|
border.color: "blue"
|
||||||
radius: 5
|
radius: StyleSizes.progressBackgroundRadius
|
||||||
implicitHeight: 8
|
implicitHeight: StyleSizes.progressBarDefaultHeight
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ void MouseEventSpy::init()
|
||||||
MouseEventSpy* MouseEventSpy::instance()
|
MouseEventSpy* MouseEventSpy::instance()
|
||||||
{
|
{
|
||||||
static MouseEventSpy* inst;
|
static MouseEventSpy* inst;
|
||||||
if (inst == nullptr)
|
if (!inst)
|
||||||
{
|
{
|
||||||
inst = new MouseEventSpy();
|
inst = new MouseEventSpy();
|
||||||
QGuiApplication* app = qGuiApp;
|
QGuiApplication* app = qGuiApp;
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import QtGraphicalEffects 1.0
|
||||||
Item{
|
Item{
|
||||||
id: container
|
id: container
|
||||||
|
|
||||||
property int margins: 20
|
property int margins: StyleMargins.defaultMargin
|
||||||
|
|
||||||
RoundImageButton{
|
RoundImageButton{
|
||||||
id: backNavigation
|
id: backNavigation
|
||||||
|
|
@ -43,9 +43,9 @@ Item{
|
||||||
Image{
|
Image{
|
||||||
id: cover
|
id: cover
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
height: parent.height-10
|
height: parent.height-StyleMargins.smallMargin
|
||||||
width: height
|
width: height
|
||||||
source: musicModel.pCurrentItem.pImageSource
|
source: musicModel.pCoverImageSource
|
||||||
fillMode: Image.PreserveAspectCrop
|
fillMode: Image.PreserveAspectCrop
|
||||||
layer.enabled: true
|
layer.enabled: true
|
||||||
layer.effect: OpacityMask{
|
layer.effect: OpacityMask{
|
||||||
|
|
@ -64,12 +64,9 @@ Item{
|
||||||
margins: container.margins
|
margins: container.margins
|
||||||
topMargin: closeAppButton.visible ? 2*container.margins : container.margins
|
topMargin: closeAppButton.visible ? 2*container.margins : container.margins
|
||||||
}
|
}
|
||||||
from: 34 // we cannot hear anything if lower than 35%
|
value: musicModel.volume
|
||||||
to: 100
|
|
||||||
stepSize: 1
|
|
||||||
value: musicModel.pAudioVolume
|
|
||||||
onValueChanged: {
|
onValueChanged: {
|
||||||
musicModel.pAudioVolume = value;
|
musicModel.volume = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PlayerControlPannel {
|
PlayerControlPannel {
|
||||||
|
|
|
||||||
|
|
@ -6,24 +6,24 @@ ScrollView{
|
||||||
style: ScrollViewStyle{
|
style: ScrollViewStyle{
|
||||||
transientScrollBars: true
|
transientScrollBars: true
|
||||||
handle: Item {
|
handle: Item {
|
||||||
implicitWidth: 16
|
implicitWidth: StyleSizes.scrollHandleWidth
|
||||||
implicitHeight: 8
|
implicitHeight: StyleSizes.scrollHandleHeight
|
||||||
Rectangle {
|
Rectangle {
|
||||||
color: "blue"
|
color: "blue"
|
||||||
border.color: "black"
|
border.color: "black"
|
||||||
radius: height/2
|
radius: height/2
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
anchors.topMargin: 1
|
anchors.topMargin: StyleMargins.scrollHandleMargin
|
||||||
anchors.leftMargin: 1
|
anchors.leftMargin: StyleMargins.scrollHandleMargin
|
||||||
anchors.rightMargin: 1
|
anchors.rightMargin: StyleMargins.scrollHandleMargin
|
||||||
anchors.bottomMargin: 1
|
anchors.bottomMargin: StyleMargins.scrollHandleMargin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
scrollBarBackground: Rectangle{
|
scrollBarBackground: Rectangle{
|
||||||
color: "transparent"
|
color: "transparent"
|
||||||
border.color: "grey"
|
border.color: "grey"
|
||||||
border.width: 1
|
border.width: StyleSizes.scrollHandleBorderWidth
|
||||||
height: 8
|
height: StyleSizes.scrollHandleHeight
|
||||||
radius: height/2
|
radius: height/2
|
||||||
}
|
}
|
||||||
decrementControl: Item{}
|
decrementControl: Item{}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,12 @@
|
||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
|
import QtQuick.Controls 2.4
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Navigation view containing list view displaying artists or genres and albums
|
* @brief Navigation view containing list view displaying artists or genres and albums
|
||||||
*/
|
*/
|
||||||
Item {
|
Item {
|
||||||
id: container
|
id: container
|
||||||
property int margins: 20
|
property int margins: StyleMargins.defaultMargin
|
||||||
RoundImageButton{
|
RoundImageButton{
|
||||||
id: back
|
id: back
|
||||||
|
|
||||||
|
|
@ -35,21 +36,27 @@ Item {
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
|
||||||
height: 210
|
height: StyleSizes.navigationListHeight
|
||||||
|
|
||||||
color: "#99ffffff"
|
color: "#99ffffff"
|
||||||
|
|
||||||
|
Label{
|
||||||
|
text: debug.pDebugOutput
|
||||||
|
anchors.centerIn: parent
|
||||||
|
visible: text !== ""
|
||||||
|
}
|
||||||
|
|
||||||
ListView{
|
ListView{
|
||||||
id: circleList
|
id: circleList
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
anchors.margins: 20
|
anchors.margins: StyleMargins.defaultMargin
|
||||||
|
|
||||||
height: parent.height - 40
|
height: parent.height - 2*StyleMargins.defaultMargin
|
||||||
|
|
||||||
model: navigationList.pModelItems
|
model: navigationList.pModelItems
|
||||||
spacing: 20
|
spacing: StyleSpacings.defaultSpacing
|
||||||
orientation: ListView.Horizontal
|
orientation: ListView.Horizontal
|
||||||
delegate: NavigationListDelegate{
|
delegate: NavigationListDelegate{
|
||||||
id: delegate
|
id: delegate
|
||||||
|
|
|
||||||
|
|
@ -14,11 +14,11 @@ ItemDelegate{
|
||||||
property alias imageSource: contentImage.source
|
property alias imageSource: contentImage.source
|
||||||
|
|
||||||
|
|
||||||
padding: 5
|
padding: StylePaddings.defaultPadding
|
||||||
|
|
||||||
background: Rectangle{
|
background: Rectangle{
|
||||||
id: background
|
id: background
|
||||||
implicitWidth: 150
|
implicitWidth: StyleSizes.navigationDelegateDefaultSize
|
||||||
implicitHeight: implicitWidth
|
implicitHeight: implicitWidth
|
||||||
radius: container.isCircleDelegate ? height/2 : 0
|
radius: container.isCircleDelegate ? height/2 : 0
|
||||||
color: "blue"
|
color: "blue"
|
||||||
|
|
@ -26,7 +26,7 @@ ItemDelegate{
|
||||||
id: contentImage
|
id: contentImage
|
||||||
source: "qrc:/default_image"
|
source: "qrc:/default_image"
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
anchors.margins: 5
|
anchors.margins: StyleMargins.tinyMargin
|
||||||
|
|
||||||
fillMode: Image.PreserveAspectCrop
|
fillMode: Image.PreserveAspectCrop
|
||||||
layer.enabled: true
|
layer.enabled: true
|
||||||
|
|
|
||||||
|
|
@ -1,62 +1,58 @@
|
||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
|
import QtQuick.Layouts 1.3
|
||||||
|
|
||||||
Item {
|
RowLayout{
|
||||||
id: container
|
id: container
|
||||||
property var model
|
property var model
|
||||||
property var spacing: 20
|
property var spacing: StyleSpacings.defaultSpacing
|
||||||
Row{
|
|
||||||
id: buttons
|
|
||||||
anchors.centerIn: parent
|
|
||||||
spacing: container.spacing
|
|
||||||
|
|
||||||
RoundImageButton{
|
RoundImageButton{
|
||||||
id: previous
|
id: previous
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
|
||||||
diameter: 60
|
diameter: StyleSizes.smallPlayerButtonSize //60
|
||||||
imageSource: "qrc:/icon_previous"
|
imageSource: "qrc:/icon_previous"
|
||||||
|
|
||||||
enabled: model.pHasPrevious
|
enabled: model.pHasPrevious
|
||||||
|
|
||||||
onClicked:{
|
onClicked:{
|
||||||
model.playPrevious();
|
model.playPrevious();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
RoundImageButton{
|
}
|
||||||
id: playPause
|
RoundImageButton{
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
id: playPause
|
||||||
diameter: 80
|
Layout.alignment: Qt.AlignVCenter
|
||||||
imageSource: model.pIsPlaying ? "qrc:/icon_pause" : "qrc:/icon_play"
|
diameter: StyleSizes.largePlayerButtonSize
|
||||||
|
imageSource: model.pIsPlaying ? "qrc:/icon_pause" : "qrc:/icon_play"
|
||||||
|
|
||||||
onClicked:{
|
onClicked:{
|
||||||
model.playPause();
|
model.playPause();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
RoundImageButton{
|
}
|
||||||
id: stop
|
RoundImageButton{
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
id: stop
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
|
||||||
diameter: 60
|
diameter: StyleSizes.smallPlayerButtonSize
|
||||||
imageSource: "qrc:/icon_stop"
|
imageSource: "qrc:/icon_stop"
|
||||||
|
|
||||||
enabled: model.pIsPlaying
|
enabled: model.pIsPlaying
|
||||||
|
|
||||||
onClicked:{
|
onClicked:{
|
||||||
model.stopMusic();
|
model.stopMusic();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
RoundImageButton{
|
}
|
||||||
id: next
|
RoundImageButton{
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
id: next
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
|
||||||
diameter: 60
|
diameter: StyleSizes.smallPlayerButtonSize
|
||||||
imageSource: "qrc:/icon_next"
|
imageSource: "qrc:/icon_next"
|
||||||
|
|
||||||
enabled: model.pHasNext
|
enabled: model.pHasNext
|
||||||
|
|
||||||
onClicked:{
|
onClicked:{
|
||||||
model.playNext();
|
model.playNext();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} //Row
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
|
import QtQuick.Layouts 1.3
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: container
|
id: container
|
||||||
|
|
@ -6,28 +7,29 @@ Rectangle {
|
||||||
property int margins
|
property int margins
|
||||||
|
|
||||||
color: "#99ffffff"
|
color: "#99ffffff"
|
||||||
height: 140
|
height: content.height + 2* margins //StyleSizes.playerControlPanelHeight
|
||||||
|
|
||||||
MediaProgress{
|
|
||||||
id: progress
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.margins: container.margins
|
|
||||||
|
|
||||||
model: container.model
|
ColumnLayout{
|
||||||
// might require height for labels to be shown on RasPi (Qt 5.10)
|
id: content
|
||||||
//2019-04-04: defined in MediaProgress.qml -> test on rasPi
|
spacing: StyleSpacings.smallSpacing
|
||||||
}
|
anchors.margins: container.margins
|
||||||
|
|
||||||
PlayerButtons{
|
|
||||||
id: buttons
|
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.top: progress.bottom
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
|
|
||||||
model: container.model
|
MediaProgress{
|
||||||
spacing: 20
|
id: progress
|
||||||
|
|
||||||
|
model: container.model
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerButtons{
|
||||||
|
id: buttons
|
||||||
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.fillHeight: true
|
||||||
|
model: container.model
|
||||||
|
spacing: StyleSpacings.defaultSpacing
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ Button {
|
||||||
id: container
|
id: container
|
||||||
property alias imageSource: image.source
|
property alias imageSource: image.source
|
||||||
// default button diameter -> default width, readonly
|
// default button diameter -> default width, readonly
|
||||||
readonly property int defaultDiameter: 65
|
readonly property int defaultDiameter: StyleSizes.roundButtonDefaultSize
|
||||||
// button diameter -> width
|
// button diameter -> width
|
||||||
property int diameter: defaultDiameter
|
property int diameter: defaultDiameter
|
||||||
// diameter of content image -> width
|
// diameter of content image -> width
|
||||||
|
|
@ -16,7 +16,7 @@ Button {
|
||||||
|
|
||||||
background: Rectangle{
|
background: Rectangle{
|
||||||
|
|
||||||
border.width: 2
|
border.width: StyleSizes.roundButtonBorderWidth
|
||||||
border.color: "grey"
|
border.color: "grey"
|
||||||
|
|
||||||
color: "white"
|
color: "white"
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ ColumnLayout {
|
||||||
property alias to: slider.to
|
property alias to: slider.to
|
||||||
property alias stepSize: slider.stepSize
|
property alias stepSize: slider.stepSize
|
||||||
property alias value: slider.value
|
property alias value: slider.value
|
||||||
spacing: 5
|
spacing: StyleSpacings.tinySpacing
|
||||||
RoundImageButton{
|
RoundImageButton{
|
||||||
id: increaseButton
|
id: increaseButton
|
||||||
imageSource: "qrc:///icon_increase_volume"
|
imageSource: "qrc:///icon_increase_volume"
|
||||||
|
|
@ -18,9 +18,9 @@ ColumnLayout {
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
Layout.alignment: Qt.AlignHCenter
|
Layout.alignment: Qt.AlignHCenter
|
||||||
orientation: Qt.Vertical
|
orientation: Qt.Vertical
|
||||||
from: 34 // we cannot hear anything if lower than 35%
|
from: 0
|
||||||
to: 100
|
to: 100
|
||||||
stepSize: 1
|
stepSize: 2
|
||||||
value: 50
|
value: 50
|
||||||
}
|
}
|
||||||
RoundImageButton{
|
RoundImageButton{
|
||||||
|
|
|
||||||
86
LenaPi/android-files/AndroidManifest.xml
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<manifest package="org.qtproject.example.LenaPi" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
|
||||||
|
<!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.
|
||||||
|
Remove the comment if you do not require these default permissions. -->
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||||
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||||
|
<uses-permission android:name="android.permission.CAMERA"/>
|
||||||
|
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
||||||
|
|
||||||
|
<!-- The following comment will be replaced upon deployment with default features based on the dependencies of the application.
|
||||||
|
Remove the comment if you do not require these default features. -->
|
||||||
|
<uses-feature android:name="android.hardware.camera" android:required="false"/>
|
||||||
|
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
|
||||||
|
<uses-feature android:name="android.hardware.microphone" android:required="false"/>
|
||||||
|
|
||||||
|
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
|
||||||
|
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="LenaPi" android:extractNativeLibs="true" android:icon="@drawable/icon">
|
||||||
|
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="LenaPi" android:screenOrientation="landscape" android:launchMode="singleTop">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
|
</intent-filter>
|
||||||
|
<!-- Application arguments -->
|
||||||
|
<!-- meta-data android:name="android.app.arguments" android:value="arg1 arg2 arg3"/ -->
|
||||||
|
<!-- Application arguments -->
|
||||||
|
<meta-data android:name="android.app.lib_name" android:value="LenaPi"/>
|
||||||
|
<meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
|
||||||
|
<meta-data android:name="android.app.repository" android:value="default"/>
|
||||||
|
<meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
|
||||||
|
<meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
|
||||||
|
<!-- Deploy Qt libs as part of package -->
|
||||||
|
<meta-data android:name="android.app.bundle_local_qt_libs" android:value="1"/>
|
||||||
|
<!-- Run with local libs -->
|
||||||
|
<meta-data android:name="android.app.use_local_qt_libs" android:value="1"/>
|
||||||
|
<meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
|
||||||
|
<meta-data android:name="android.app.load_local_libs_resource_id" android:resource="@array/load_local_libs"/>
|
||||||
|
<meta-data android:name="android.app.load_local_jars" android:value="jar/QtAndroidBearer.jar:jar/QtAndroid.jar:jar/QtMultimedia.jar"/>
|
||||||
|
<meta-data android:name="android.app.static_init_classes" android:value="org.qtproject.qt5.android.multimedia.QtMultimediaUtils"/>
|
||||||
|
<!-- Used to specify custom system library path to run with local system libs -->
|
||||||
|
<!-- <meta-data android:name="android.app.system_libs_prefix" android:value="/system/lib/"/> -->
|
||||||
|
<!-- Messages maps -->
|
||||||
|
<meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
|
||||||
|
<meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
|
||||||
|
<meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
|
||||||
|
<meta-data android:value="@string/unsupported_android_version" android:name="android.app.unsupported_android_version"/>
|
||||||
|
<!-- Messages maps -->
|
||||||
|
<!-- Splash screen -->
|
||||||
|
<!-- Orientation-specific (portrait/landscape) data is checked first. If not available for current orientation,
|
||||||
|
then android.app.splash_screen_drawable. For best results, use together with splash_screen_sticky and
|
||||||
|
use hideSplashScreen() with a fade-out animation from Qt Android Extras to hide the splash screen when you
|
||||||
|
are done populating your window with content. -->
|
||||||
|
<!-- meta-data android:name="android.app.splash_screen_drawable_portrait" android:resource="@drawable/logo_portrait" / -->
|
||||||
|
<!-- meta-data android:name="android.app.splash_screen_drawable_landscape" android:resource="@drawable/logo_landscape" / -->
|
||||||
|
<!-- meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/logo"/ -->
|
||||||
|
<!-- meta-data android:name="android.app.splash_screen_sticky" android:value="true"/ -->
|
||||||
|
<!-- Splash screen -->
|
||||||
|
<!-- Background running -->
|
||||||
|
<!-- Warning: changing this value to true may cause unexpected crashes if the
|
||||||
|
application still try to draw after
|
||||||
|
"applicationStateChanged(Qt::ApplicationSuspended)"
|
||||||
|
signal is sent! -->
|
||||||
|
<meta-data android:name="android.app.background_running" android:value="false"/>
|
||||||
|
<!-- Background running -->
|
||||||
|
<!-- auto screen scale factor -->
|
||||||
|
<meta-data android:name="android.app.auto_screen_scale_factor" android:value="false"/>
|
||||||
|
<!-- auto screen scale factor -->
|
||||||
|
<!-- extract android style -->
|
||||||
|
<!-- available android:values :
|
||||||
|
* default - In most cases this will be the same as "full", but it can also be something else if needed, e.g., for compatibility reasons
|
||||||
|
* full - useful QWidget & Quick Controls 1 apps
|
||||||
|
* minimal - useful for Quick Controls 2 apps, it is much faster than "full"
|
||||||
|
* none - useful for apps that don't use any of the above Qt modules
|
||||||
|
-->
|
||||||
|
<meta-data android:name="android.app.extract_android_style" android:value="default"/>
|
||||||
|
<!-- extract android style -->
|
||||||
|
</activity>
|
||||||
|
<!-- For adding service(s) please check: https://wiki.qt.io/AndroidServices -->
|
||||||
|
</application>
|
||||||
|
|
||||||
|
<!-- %%INSERT_PERMISSIONS -->
|
||||||
|
<!-- %%INSERT_FEATURES -->
|
||||||
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||||
|
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
||||||
|
<uses-permission android:name="android.permission.PERSISTENT_ACTIVITY"/>
|
||||||
|
</manifest>
|
||||||
BIN
LenaPi/android-files/res/drawable-hdpi/icon.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
LenaPi/android-files/res/drawable-ldpi/icon.png
Normal file
|
After Width: | Height: | Size: 2 KiB |
BIN
LenaPi/android-files/res/drawable-mdpi/icon.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
LenaPi/android-files/res/drawable-xhdpi/icon.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
LenaPi/android-files/res/drawable-xxhdpi/icon.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
LenaPi/android-files/res/drawable-xxxhdpi/icon.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
|
|
@ -1,72 +0,0 @@
|
||||||
#include "MusicController.h"
|
|
||||||
|
|
||||||
#include <QDebug>
|
|
||||||
#include <models/MusicModel.h>
|
|
||||||
#include <VLCQtCore/MediaPlayer.h>
|
|
||||||
#include "EnergySaver.h"
|
|
||||||
|
|
||||||
MusicController::MusicController(QObject *parent) : QObject(parent)
|
|
||||||
{
|
|
||||||
mVlc = new VlcInstance(VlcCommon::args(), this);
|
|
||||||
mModel = new MusicModel(mVlc, this);
|
|
||||||
mPlayer = new VlcMediaListPlayer(mVlc);
|
|
||||||
mVlcAudio = new VlcAudio(mPlayer->mediaPlayer());
|
|
||||||
|
|
||||||
connect(mModel, &MusicModel::navigateTo, this, &MusicController::onNavigationRequest);
|
|
||||||
|
|
||||||
//connect(mModel, &MusicModel::play, mPlayer, &VlcMediaListPlayer::play);
|
|
||||||
connect(mModel, &MusicModel::play, [this](){
|
|
||||||
mVlcAudio->setVolume(mModel->getAudioVolume());
|
|
||||||
mPlayer->play();
|
|
||||||
});
|
|
||||||
connect(mModel, &MusicModel::stop, mPlayer, &VlcMediaListPlayer::stop);
|
|
||||||
connect(mModel, &MusicModel::previous, mPlayer, &VlcMediaListPlayer::previous);
|
|
||||||
connect(mModel, &MusicModel::next, mPlayer, &VlcMediaListPlayer::next);
|
|
||||||
connect(mModel, &MusicModel::pause, mPlayer->mediaPlayer(), &VlcMediaPlayer::pause);
|
|
||||||
connect(mModel, &MusicModel::audioVolumeChanged, mVlcAudio, &VlcAudio::setVolume);
|
|
||||||
|
|
||||||
connect(mPlayer, SIGNAL(nextItemSet(VlcMedia*)), mModel, SLOT(onNextMediaSet(VlcMedia*)));
|
|
||||||
connect(mPlayer->mediaPlayer(), &VlcMediaPlayer::lengthChanged, mModel, &MusicModel::onLengthChanged);
|
|
||||||
connect(mPlayer->mediaPlayer(), &VlcMediaPlayer::timeChanged, mModel, &MusicModel::onTimeChanged);
|
|
||||||
|
|
||||||
// hand over player signals to energy saver in order to determine player activity.
|
|
||||||
connect(mPlayer->mediaPlayer(), &VlcMediaPlayer::timeChanged, EnergySaver::instance(), &EnergySaver::restartTimer);
|
|
||||||
}
|
|
||||||
|
|
||||||
MusicController::~MusicController()
|
|
||||||
{
|
|
||||||
mPlayer->deleteLater();
|
|
||||||
mVlcAudio->deleteLater();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicController::initPlayer(NavigationItemModel *item)
|
|
||||||
{
|
|
||||||
if(item != mModel->getCurrentItem()){
|
|
||||||
mPlayer->stop();
|
|
||||||
mModel->init(item);
|
|
||||||
}
|
|
||||||
if(!mIsMediaListSet){
|
|
||||||
mPlayer->setMediaList(mModel->getMedia());
|
|
||||||
mIsMediaListSet = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicController::setContext(QQmlContext *context)
|
|
||||||
{
|
|
||||||
mContext = context;
|
|
||||||
setContextProperties();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicController::setContextProperties()
|
|
||||||
{
|
|
||||||
if(!mContext) return;
|
|
||||||
mContext->setContextProperty("musicModel", mModel);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicController::onNavigationRequest(NavigationItemModel *item)
|
|
||||||
{
|
|
||||||
if(mModel->isPlaying()) {
|
|
||||||
mModel->playPause();
|
|
||||||
}
|
|
||||||
emit navigateTo(item);
|
|
||||||
}
|
|
||||||
|
|
@ -1,52 +0,0 @@
|
||||||
#ifndef MUSICCONTROLLER_H
|
|
||||||
#define MUSICCONTROLLER_H
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
#include <QQmlContext>
|
|
||||||
#include <models/NavigationItemModel.h>
|
|
||||||
|
|
||||||
#include <VLCQtCore/Common.h>
|
|
||||||
#include <VLCQtCore/Instance.h>
|
|
||||||
#include <VLCQtCore/MediaListPlayer.h>
|
|
||||||
#include <VLCQtCore/Audio.h>
|
|
||||||
|
|
||||||
class MusicModel;
|
|
||||||
|
|
||||||
class MusicController : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void navigateTo(NavigationItemModel* item);
|
|
||||||
|
|
||||||
public:
|
|
||||||
MusicController(QObject *parent = Q_NULLPTR);
|
|
||||||
~MusicController();
|
|
||||||
|
|
||||||
void initPlayer(NavigationItemModel* item);
|
|
||||||
|
|
||||||
void setContext(QQmlContext* context);
|
|
||||||
|
|
||||||
private:
|
|
||||||
void setContextProperties();
|
|
||||||
|
|
||||||
QQmlContext* mContext = Q_NULLPTR;
|
|
||||||
|
|
||||||
MusicModel* mModel = Q_NULLPTR;
|
|
||||||
|
|
||||||
VlcInstance* mVlc = Q_NULLPTR;
|
|
||||||
VlcMediaListPlayer* mPlayer = Q_NULLPTR;
|
|
||||||
VlcAudio* mVlcAudio = Q_NULLPTR;
|
|
||||||
|
|
||||||
bool mIsMediaListSet = false;
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
/**
|
|
||||||
* @brief Stop player if necessary and forward signal navigatTo
|
|
||||||
* @param item target of navigation request
|
|
||||||
* @see navigateTo(NavigationItemModel* item);
|
|
||||||
*/
|
|
||||||
void onNavigationRequest(NavigationItemModel* item);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // MUSICCONTROLLER_H
|
|
||||||
165
LenaPi/controllers/MusicPlayer.cpp
Normal file
|
|
@ -0,0 +1,165 @@
|
||||||
|
#include "MusicPlayer.h"
|
||||||
|
#include <QDir>
|
||||||
|
#include <QMediaPlaylist>
|
||||||
|
#include <controllers/SettingsHandler.h>
|
||||||
|
|
||||||
|
|
||||||
|
MusicPlayer::MusicPlayer(QObject *parent) : QMediaPlayer(parent)
|
||||||
|
{
|
||||||
|
// init audio
|
||||||
|
/// @todo remove magic number
|
||||||
|
setVolume(50);
|
||||||
|
// relay signal to qml
|
||||||
|
connect(this, &QMediaPlayer::stateChanged, this, &MusicPlayer::isPlayingChanged);
|
||||||
|
connect(this, &QMediaPlayer::currentMediaChanged, this, [this](const QMediaContent&){
|
||||||
|
// notify qml to refresh enable state of next and previous button
|
||||||
|
emit hasNextChanged();
|
||||||
|
emit hasPreviousChanged();
|
||||||
|
});
|
||||||
|
connect(this, &QMediaPlayer::positionChanged, this, [this](qint64){
|
||||||
|
emit progressChanged();
|
||||||
|
});
|
||||||
|
connect(this, &QMediaPlayer::durationChanged, this, [this](qint64){
|
||||||
|
emit progressChanged();
|
||||||
|
emit mediaLengthChanged();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void MusicPlayer::init(NavigationItemModel *item)
|
||||||
|
{
|
||||||
|
if(mCurrentItem == item){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mCurrentItem = item;
|
||||||
|
emit coverImageSourceChanged();
|
||||||
|
|
||||||
|
clearPlaylist();
|
||||||
|
|
||||||
|
readMedia(mCurrentItem->getPath());
|
||||||
|
}
|
||||||
|
|
||||||
|
void MusicPlayer::navigateBack()
|
||||||
|
{
|
||||||
|
emit navigateTo(mCurrentItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MusicPlayer::playPause()
|
||||||
|
{
|
||||||
|
if(isPlaying())
|
||||||
|
pause();
|
||||||
|
else
|
||||||
|
play();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MusicPlayer::stopMusic()
|
||||||
|
{
|
||||||
|
if(isPlaying()){
|
||||||
|
stop();
|
||||||
|
resetPlaylistToFirstTrack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MusicPlayer::playNext()
|
||||||
|
{
|
||||||
|
if(!hasNext()) return; // checks if playlist exists
|
||||||
|
playlist()->next();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MusicPlayer::playPrevious()
|
||||||
|
{
|
||||||
|
if(!hasPrevious()) return; // checks if playlist exists
|
||||||
|
playlist()->previous();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MusicPlayer::resetPlaylistToFirstTrack()
|
||||||
|
{
|
||||||
|
if(!playlist() && !playlist()->isEmpty()) return;
|
||||||
|
playlist()->setCurrentIndex(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MusicPlayer::isPlaying() const
|
||||||
|
{
|
||||||
|
return state() == State::PlayingState;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MusicPlayer::hasNext() const
|
||||||
|
{
|
||||||
|
if(!playlist()) return false;
|
||||||
|
const auto nextIndex = playlist()->nextIndex();
|
||||||
|
/* player yields -1 as next index while playing last track
|
||||||
|
*/
|
||||||
|
return nextIndex >=0 && nextIndex < playlist()->mediaCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MusicPlayer::hasPrevious() const
|
||||||
|
{
|
||||||
|
if(!playlist()) return false;
|
||||||
|
const auto previousIndex = playlist()->previousIndex();
|
||||||
|
/* player inits with currentIndex -1 and hence previousIndex = last index
|
||||||
|
* until started. Yet, previousButton should initially be disabled.
|
||||||
|
*/
|
||||||
|
return previousIndex >= 0 && previousIndex < playlist()->currentIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
double MusicPlayer::getProgress() const
|
||||||
|
{
|
||||||
|
if(duration() <= 0 || position() < 0){
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
return (double)position()/duration();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString MusicPlayer::getMediaTitle() const
|
||||||
|
{
|
||||||
|
return metaData("Title").toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString MusicPlayer::getMediaDuration() const
|
||||||
|
{
|
||||||
|
return millisecondsToString(duration());
|
||||||
|
}
|
||||||
|
|
||||||
|
QString MusicPlayer::getPosition() const
|
||||||
|
{
|
||||||
|
return millisecondsToString(position());
|
||||||
|
}
|
||||||
|
|
||||||
|
void MusicPlayer::clearPlaylist()
|
||||||
|
{
|
||||||
|
if(playlist()){
|
||||||
|
playlist()->clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MusicPlayer::readMedia(const QString& path)
|
||||||
|
{
|
||||||
|
auto dir = QDir(path);
|
||||||
|
if(!dir.exists()) return;
|
||||||
|
|
||||||
|
// create playlist if necessary
|
||||||
|
auto playList = playlist();
|
||||||
|
if(!playList){
|
||||||
|
playList = new QMediaPlaylist(this);
|
||||||
|
setPlaylist(playList);
|
||||||
|
}
|
||||||
|
|
||||||
|
// add audio files to playlist
|
||||||
|
dir.setNameFilters(SettingsHandler::getAudioFileNameFilters());
|
||||||
|
auto files = dir.entryInfoList(QDir::Files);
|
||||||
|
for(auto file:files){
|
||||||
|
auto fileName = file.absoluteFilePath();
|
||||||
|
auto fileUrl = QUrl::fromLocalFile(fileName);
|
||||||
|
playList->addMedia(QMediaContent(fileUrl));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString MusicPlayer::millisecondsToString(int timeInMilliseconds) const
|
||||||
|
{
|
||||||
|
int seconds = timeInMilliseconds/1000; // ms to secons
|
||||||
|
int minutes = seconds/60; //seconds to minutes
|
||||||
|
seconds %= 60; // seconds remaining after subtracting minutes
|
||||||
|
// format according to [M]M:ss
|
||||||
|
// at leading zero to seconds if necessary
|
||||||
|
QString secStr = (seconds < 10) ? "0"+QString::number(seconds) : QString::number(seconds);
|
||||||
|
return QString::number(minutes) + ":" + secStr;
|
||||||
|
}
|
||||||
143
LenaPi/controllers/MusicPlayer.h
Normal file
|
|
@ -0,0 +1,143 @@
|
||||||
|
#ifndef MUSICPLAYER_H
|
||||||
|
#define MUSICPLAYER_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QMediaPlayer>
|
||||||
|
#include <models/NavigationItemModel.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief MusicPlayer providing interface to QML and Navigation.
|
||||||
|
*
|
||||||
|
* Adds media from directory referenced by the current navigation item to
|
||||||
|
* playlist and provides interface to QML MusicPlayer.
|
||||||
|
*/
|
||||||
|
class MusicPlayer : public QMediaPlayer
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
Q_PROPERTY(QUrl pCoverImageSource READ getCoverImageSource NOTIFY coverImageSourceChanged)
|
||||||
|
Q_PROPERTY(bool pHasNext READ hasNext NOTIFY hasNextChanged)
|
||||||
|
Q_PROPERTY(bool pHasPrevious READ hasPrevious NOTIFY hasPreviousChanged)
|
||||||
|
Q_PROPERTY(bool pIsPlaying READ isPlaying NOTIFY isPlayingChanged)
|
||||||
|
Q_PROPERTY(double pProgress READ getProgress NOTIFY progressChanged)
|
||||||
|
Q_PROPERTY(QString pMediaLength READ getMediaDuration NOTIFY mediaLengthChanged)
|
||||||
|
Q_PROPERTY(QString pTime READ getPosition NOTIFY progressChanged)
|
||||||
|
Q_PROPERTY(QString pMediaTitle READ getMediaTitle NOTIFY metaDataChanged)
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void navigateTo(NavigationItemModel *item);
|
||||||
|
void coverImageSourceChanged();
|
||||||
|
void hasPreviousChanged();
|
||||||
|
void hasNextChanged();
|
||||||
|
void isPlayingChanged();
|
||||||
|
void progressChanged();
|
||||||
|
void mediaLengthChanged();
|
||||||
|
|
||||||
|
public:
|
||||||
|
MusicPlayer(QObject *parent = Q_NULLPTR);
|
||||||
|
~MusicPlayer() =default;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Init playlist with media from directory referenced by item.
|
||||||
|
* @param item Navigation item representing a leaf
|
||||||
|
* @see void readMedia(const QString& path)
|
||||||
|
*/
|
||||||
|
void init(NavigationItemModel* item);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get path to media cover image.
|
||||||
|
* @return Path to media cover image.
|
||||||
|
*/
|
||||||
|
inline const QString& getCoverImageSource() const {return mCurrentItem->getImageSource();}
|
||||||
|
/**
|
||||||
|
* @brief Indicates whether the media player is currently playing a track.
|
||||||
|
* @return true if media player is playing a track.
|
||||||
|
*/
|
||||||
|
bool isPlaying() const;
|
||||||
|
/**
|
||||||
|
* @brief Indicates whether there is a next item in the playlist.
|
||||||
|
* @return True if there is a next item in the playlist
|
||||||
|
* Does not wrap.
|
||||||
|
*/
|
||||||
|
bool hasNext() const;
|
||||||
|
/**
|
||||||
|
* @brief Indicates whether there is a previous item in the playlist.
|
||||||
|
* @return True if there is a previous item in the playlist
|
||||||
|
* Does not wrap.
|
||||||
|
*/
|
||||||
|
bool hasPrevious() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get media progress as value in between 0 and 1
|
||||||
|
* @return Media progress
|
||||||
|
* 0 corresponds to the beginning and 1 to the end of the current track.
|
||||||
|
*/
|
||||||
|
double getProgress() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get current media title extracted from media meta data (id3 tags)
|
||||||
|
* @return Current media title
|
||||||
|
*/
|
||||||
|
QString getMediaTitle() const;
|
||||||
|
/**
|
||||||
|
* @brief Get duration of the current track
|
||||||
|
* @return Duration of the current track formatted as string
|
||||||
|
* @see QMediaPlayer::duration()
|
||||||
|
* @see millisecondsToString(int timeInMilliseconds) const
|
||||||
|
*/
|
||||||
|
QString getMediaDuration() const;
|
||||||
|
/**
|
||||||
|
* @brief Get current position within the track
|
||||||
|
* @return Postion within the track formatted as string
|
||||||
|
* @see QMediaPlayer::position()
|
||||||
|
* @see millisecondsToString(int timeInMilliseconds) const
|
||||||
|
*/
|
||||||
|
QString getPosition() const;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/**
|
||||||
|
* @brief Navigate back to navgation list
|
||||||
|
*/
|
||||||
|
void navigateBack();
|
||||||
|
/**
|
||||||
|
* @brief Play or pause music depending on whether it is currently playing
|
||||||
|
*/
|
||||||
|
void playPause();
|
||||||
|
/**
|
||||||
|
* @brief Stop music and reset track to first track in playlist
|
||||||
|
*/
|
||||||
|
void stopMusic();
|
||||||
|
/**
|
||||||
|
* @brief Play next track in current playlist if available
|
||||||
|
*/
|
||||||
|
void playNext();
|
||||||
|
/**
|
||||||
|
* @brief Replay previoustrack in current playlist if available
|
||||||
|
*/
|
||||||
|
void playPrevious();
|
||||||
|
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* @brief Resets playlist to first track if playlist exists and is non-empty
|
||||||
|
*/
|
||||||
|
void resetPlaylistToFirstTrack();
|
||||||
|
/**
|
||||||
|
* @brief Clear the current playlist
|
||||||
|
*/
|
||||||
|
void clearPlaylist();
|
||||||
|
/**
|
||||||
|
* @brief Add all media from path to playlist
|
||||||
|
* @param path Path to media
|
||||||
|
*/
|
||||||
|
void readMedia(const QString& path);
|
||||||
|
/**
|
||||||
|
* @brief Format time in milliseconds acoording to [M]m:ss
|
||||||
|
* @param time Time in ms
|
||||||
|
* @return formateted string
|
||||||
|
*/
|
||||||
|
QString millisecondsToString(int timeInMilliseconds) const;
|
||||||
|
|
||||||
|
NavigationItemModel* mCurrentItem = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MUSICPLAYER_H
|
||||||
|
|
@ -1,30 +1,41 @@
|
||||||
#include "NavigationController.h"
|
#include "NavigationController.h"
|
||||||
|
#include <controllers/SettingsHandler.h>
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <EnergySaver.h>
|
||||||
|
|
||||||
#include <models/NavigationItemModel.h>
|
#include <models/NavigationItemModel.h>
|
||||||
#include <models/NavigationListModel.h>
|
#include <models/NavigationListModel.h>
|
||||||
#include <models/UiStateModel.h>
|
#include <models/UiStateModel.h>
|
||||||
#include <controllers/MusicController.h>
|
#include <controllers/MusicPlayer.h>
|
||||||
|
|
||||||
NavigationController::NavigationController(QObject *parent) : QObject(parent),
|
NavigationController::NavigationController(QObject *parent) : QObject(parent),
|
||||||
mRootItem(new NavigationItemModel(this)),
|
mRootItem(new NavigationItemModel(this)),
|
||||||
mNavList(new NavigationListModel(this)),
|
mNavList(new NavigationListModel(this)),
|
||||||
mUiState(new UiStateModel(this)),
|
mUiState(new UiStateModel(this)),
|
||||||
mMusicController(new MusicController(this))
|
mMediaPlayer(new MusicPlayer(this))
|
||||||
{
|
{
|
||||||
connect(mMusicController, &MusicController::navigateTo, [this](NavigationItemModel* item) {
|
connect(mMediaPlayer, &MusicPlayer::navigateTo, [this](NavigationItemModel* item) {
|
||||||
mUiState->showNavigation();
|
mUiState->showNavigation();
|
||||||
mNavList->navigateTo(item);
|
mNavList->navigateTo(item);
|
||||||
});
|
});
|
||||||
|
/* Connect player state to energy saver to prevent device shutdown while playing music.
|
||||||
|
*/
|
||||||
|
connect(mMediaPlayer, &MusicPlayer::isPlayingChanged, this, &NavigationController::startOrStopEnergySaverDependingOnPlayerState);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NavigationController::setDebugOutput(const QString& text)
|
||||||
|
{
|
||||||
|
mDebugOutput = text;
|
||||||
|
emit debugOutputChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NavigationController::init(const QString &rootPath)
|
void NavigationController::init(const QString &rootPath)
|
||||||
{
|
{
|
||||||
auto rootDir = QDir(rootPath);
|
auto rootDir = QDir(rootPath);
|
||||||
if(!rootDir.exists()) return;
|
if(!rootDir.exists()) return;
|
||||||
mRootPath = rootPath;
|
mRootPath = rootPath;
|
||||||
|
|
||||||
add(mRootPath, mRootItem);
|
add(mRootPath, mRootItem);
|
||||||
|
|
||||||
|
|
@ -40,7 +51,6 @@ void NavigationController::setContext(QQmlContext *context)
|
||||||
{
|
{
|
||||||
mContext = context;
|
mContext = context;
|
||||||
setContextProperties();
|
setContextProperties();
|
||||||
mMusicController->setContext(mContext);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NavigationController::setContextProperties()
|
void NavigationController::setContextProperties()
|
||||||
|
|
@ -48,6 +58,8 @@ void NavigationController::setContextProperties()
|
||||||
if(!mContext) return;
|
if(!mContext) return;
|
||||||
mContext->setContextProperty("navigationList", mNavList);
|
mContext->setContextProperty("navigationList", mNavList);
|
||||||
mContext->setContextProperty("uiStateModel", mUiState);
|
mContext->setContextProperty("uiStateModel", mUiState);
|
||||||
|
mContext->setContextProperty("musicModel", mMediaPlayer);
|
||||||
|
mContext->setContextProperty("debug", this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NavigationController::add(const QString &path, NavigationItemModel *parentItem)
|
void NavigationController::add(const QString &path, NavigationItemModel *parentItem)
|
||||||
|
|
@ -75,18 +87,18 @@ bool NavigationController::checkContent(const QString &path)
|
||||||
{
|
{
|
||||||
bool valid = false;
|
bool valid = false;
|
||||||
auto dir =QDir(path);
|
auto dir =QDir(path);
|
||||||
|
// directory must either contain subdirectories or media files
|
||||||
auto subDirsNames = dir.entryList(QDir::AllDirs);
|
auto subDirsNames = dir.entryList(QDir::AllDirs);
|
||||||
if(subDirsNames.length() > 0) {
|
if(subDirsNames.length() > 0) {
|
||||||
valid = true;
|
valid = true;
|
||||||
} else {
|
} else {
|
||||||
|
dir.setNameFilters(SettingsHandler::getAudioFileNameFilters());
|
||||||
auto fileNames = dir.entryList(QDir::Files);
|
auto fileNames = dir.entryList(QDir::Files);
|
||||||
int numAudio = 0;
|
int numAudio = 0;
|
||||||
for(auto file:fileNames){
|
for(auto file:fileNames){
|
||||||
if(file.endsWith(".flac") || file.endsWith(".mp3")){
|
|
||||||
numAudio++;
|
numAudio++;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if(numAudio > 0) valid = true;
|
valid = numAudio > 0;
|
||||||
}
|
}
|
||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
@ -99,7 +111,20 @@ void NavigationController::onNavigationRequest()
|
||||||
if(item->hasChildren())
|
if(item->hasChildren())
|
||||||
mNavList->setModelItems(item->getChildren());
|
mNavList->setModelItems(item->getChildren());
|
||||||
else {
|
else {
|
||||||
mMusicController->initPlayer(item);
|
mMediaPlayer->init(item);
|
||||||
mUiState->showMusicPlayer();
|
mUiState->showMusicPlayer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NavigationController::startOrStopEnergySaverDependingOnPlayerState()
|
||||||
|
{
|
||||||
|
auto* energySaver = EnergySaver::instance();
|
||||||
|
assert(energySaver);
|
||||||
|
if(energySaver){
|
||||||
|
if(mMediaPlayer->isPlaying()){
|
||||||
|
energySaver->deactivate();
|
||||||
|
} else {
|
||||||
|
energySaver->activate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
class NavigationItemModel;
|
class NavigationItemModel;
|
||||||
class NavigationListModel;
|
class NavigationListModel;
|
||||||
class UiStateModel;
|
class UiStateModel;
|
||||||
class MusicController;
|
class MusicPlayer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Main controller controlling ui state, navigation and music player.
|
* @brief Main controller controlling ui state, navigation and music player.
|
||||||
|
|
@ -15,6 +15,12 @@ class MusicController;
|
||||||
class NavigationController : public QObject
|
class NavigationController : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
Q_PROPERTY(QString pDebugOutput READ getDebugOutput NOTIFY debugOutputChanged)
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void debugOutputChanged();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit NavigationController(QObject *parent = nullptr);
|
explicit NavigationController(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
|
@ -37,6 +43,8 @@ public:
|
||||||
*/
|
*/
|
||||||
void setContext(QQmlContext* context);
|
void setContext(QQmlContext* context);
|
||||||
|
|
||||||
|
QString getDebugOutput() const { return mDebugOutput; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* @brief Register models in context
|
* @brief Register models in context
|
||||||
|
|
@ -55,14 +63,22 @@ private:
|
||||||
*/
|
*/
|
||||||
bool checkContent(const QString& path);
|
bool checkContent(const QString& path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set Debug Output. Necessary as Android Debugger does not work yet
|
||||||
|
* @param text Output to show in ui
|
||||||
|
*/
|
||||||
|
void setDebugOutput(const QString& text);
|
||||||
|
|
||||||
NavigationItemModel* mRootItem;
|
NavigationItemModel* mRootItem;
|
||||||
NavigationListModel* mNavList;
|
NavigationListModel* mNavList;
|
||||||
|
|
||||||
UiStateModel* mUiState;
|
UiStateModel* mUiState;
|
||||||
MusicController* mMusicController;
|
MusicPlayer* mMediaPlayer;
|
||||||
|
|
||||||
QString mRootPath = ".";
|
QString mRootPath = ".";
|
||||||
|
|
||||||
|
QString mDebugOutput;
|
||||||
|
|
||||||
QQmlContext* mContext = nullptr;
|
QQmlContext* mContext = nullptr;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|
@ -70,6 +86,7 @@ private slots:
|
||||||
* @brief Either show subdirectories or music player depending on current directory type
|
* @brief Either show subdirectories or music player depending on current directory type
|
||||||
*/
|
*/
|
||||||
void onNavigationRequest();
|
void onNavigationRequest();
|
||||||
|
void startOrStopEnergySaverDependingOnPlayerState();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NAVIGATIONCONTROLLER_H
|
#endif // NAVIGATIONCONTROLLER_H
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
#include "SettingsHandler.h"
|
#include "SettingsHandler.h"
|
||||||
|
#include <QStandardPaths>
|
||||||
|
|
||||||
constexpr const char* const rootPath = "rootPath";
|
constexpr const char* const rootPath = "rootPath";
|
||||||
constexpr const char* const profile = "profile";
|
constexpr const char* const profile = "profile";
|
||||||
|
|
@ -59,11 +60,20 @@ QString SettingsHandler::getShutdownScript() const
|
||||||
|
|
||||||
void SettingsHandler::initDefaults()
|
void SettingsHandler::initDefaults()
|
||||||
{
|
{
|
||||||
mDefaults.insert(rootPath, "/home/ar/source/lenaMusic/");
|
mDefaults.insert(rootPath, QStandardPaths::MusicLocation);
|
||||||
mDefaults.insert(profile, "RasPiTouch");
|
mDefaults.insert(enableEnergySaver, false);
|
||||||
mDefaults.insert(enableEnergySaver, true);
|
|
||||||
mDefaults.insert(timeout, 60);
|
mDefaults.insert(timeout, 60);
|
||||||
mDefaults.insert(shutdownScript, "/usr/local/sbin/do_shutdown.sh");
|
mDefaults.insert(shutdownScript, "/usr/local/sbin/do_shutdown.sh");
|
||||||
|
mDefaults.insert(profile, "RasPiTouch");
|
||||||
|
// @todo add profile Android? Or simply scale ui for RasPi
|
||||||
|
// mDefaults.insert(profile, "Android");
|
||||||
|
|
||||||
|
// Defaults for LenaPi
|
||||||
|
// mDefaults.insert(rootPath, "/home/ar/source/lenaMusic/");
|
||||||
|
// mDefaults.insert(profile, "RasPiTouch");
|
||||||
|
// mDefaults.insert(enableEnergySaver, true);
|
||||||
|
// mDefaults.insert(timeout, 60);
|
||||||
|
// mDefaults.insert(shutdownScript, "/usr/local/sbin/do_shutdown.sh");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,12 @@ public:
|
||||||
|
|
||||||
static SettingsHandler* createSettingsHandlerAndFillWithDefaultsIfMissing(QSettings* settings);
|
static SettingsHandler* createSettingsHandlerAndFillWithDefaultsIfMissing(QSettings* settings);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Provides a name filter for QDir that can be used to filter all audio files with valid formats.
|
||||||
|
* @return name filter for QDir
|
||||||
|
*/
|
||||||
|
static QStringList getAudioFileNameFilters() {return {"*.mp3", "*.flac"};}
|
||||||
|
|
||||||
inline void setSettings(QSettings* settings) { mSettings = settings;}
|
inline void setSettings(QSettings* settings) { mSettings = settings;}
|
||||||
inline QSettings* getSettings() const { return mSettings; }
|
inline QSettings* getSettings() const { return mSettings; }
|
||||||
void fillWithDefaultIfMissing();
|
void fillWithDefaultIfMissing();
|
||||||
|
|
|
||||||
90
LenaPi/controllers/StyleHandling.cpp
Normal file
|
|
@ -0,0 +1,90 @@
|
||||||
|
#include "StyleHandling.h"
|
||||||
|
#include <QGuiApplication>
|
||||||
|
#include <QScreen>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
StyleHandling::StyleHandling(QObject *parent)
|
||||||
|
: QObject{parent}, mStyleSizes(new QQmlPropertyMap(this)),
|
||||||
|
mMargins(new QQmlPropertyMap(this)), mSpacings(new QQmlPropertyMap(this)), mPaddings(new QQmlPropertyMap(this))
|
||||||
|
{
|
||||||
|
// nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
void StyleHandling::calculateAndSetRatio()
|
||||||
|
{
|
||||||
|
qreal refHeight = 480;
|
||||||
|
qreal refWidth = 800;
|
||||||
|
// Scales to fullscreen. No rescaling when changing window size
|
||||||
|
QRect rect = QGuiApplication::primaryScreen()->geometry();
|
||||||
|
qreal height = qMin(rect.width(),rect.height());
|
||||||
|
qreal width = qMax(rect.width(), rect.height());
|
||||||
|
|
||||||
|
mRatio = qMin(height/refHeight, width/refWidth);
|
||||||
|
qDebug() << "mRation=" << mRatio<< "sizes="<<width<<", "<< height<<"\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
void StyleHandling::initStyleSizes()
|
||||||
|
{
|
||||||
|
scaleAndInsert(mStyleSizes, "roundButtonDefaultSize", 65);
|
||||||
|
scaleAndInsert(mStyleSizes, "roundButtonBorderWidth", 2);
|
||||||
|
scaleAndInsert(mStyleSizes, "smallPlayerButtonSize", 60);
|
||||||
|
scaleAndInsert(mStyleSizes, "largePlayerButtonSize", 80);
|
||||||
|
|
||||||
|
scaleAndInsert(mStyleSizes, "scrollHandleWidth", 16);
|
||||||
|
scaleAndInsert(mStyleSizes, "scrollHandleHeight", 8);
|
||||||
|
scaleAndInsert(mStyleSizes, "scrollHandleBorderWidth", 1);
|
||||||
|
|
||||||
|
int progressBackgroundDefaultHeight = 10;
|
||||||
|
scaleAndInsert(mStyleSizes, "progressBackgroundDefaultHeight", progressBackgroundDefaultHeight);
|
||||||
|
scaleAndInsert(mStyleSizes, "progressBackgroundRadius", progressBackgroundDefaultHeight/2);
|
||||||
|
scaleAndInsert(mStyleSizes, "progressBarDefaultHeight", 8);
|
||||||
|
scaleAndInsert(mStyleSizes, "progressBackgroundBorderWidth", 1);
|
||||||
|
|
||||||
|
scaleAndInsert(mStyleSizes, "navigationListHeight", 210);
|
||||||
|
scaleAndInsert(mStyleSizes, "navigationDelegateDefaultSize", 150);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void StyleHandling::initSpacings()
|
||||||
|
{
|
||||||
|
scaleAndInsert(mSpacings, "defaultSpacing", 20);
|
||||||
|
scaleAndInsert(mSpacings, "smallSpacing", 10);
|
||||||
|
scaleAndInsert(mSpacings, "tinySpacing", 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
void StyleHandling::initMargins()
|
||||||
|
{
|
||||||
|
scaleAndInsert(mMargins, "defaultMargin", 20);
|
||||||
|
scaleAndInsert(mMargins, "smallMargin", 10);
|
||||||
|
scaleAndInsert(mMargins, "tinyMargin", 5);
|
||||||
|
scaleAndInsert(mMargins, "scrollHandleMargins", 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void StyleHandling::initPaddings()
|
||||||
|
{
|
||||||
|
scaleAndInsert(mPaddings, "defaultPadding", 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
void StyleHandling::scaleAndInsert(QQmlPropertyMap *map, const QString &key, int value)
|
||||||
|
{
|
||||||
|
map->insert(key, applyRatio(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
int StyleHandling::applyRatio(int size) const
|
||||||
|
{
|
||||||
|
return size*mRatio;
|
||||||
|
}
|
||||||
|
|
||||||
|
void StyleHandling::init(QQmlContext *context)
|
||||||
|
{
|
||||||
|
calculateAndSetRatio();
|
||||||
|
initStyleSizes();
|
||||||
|
initMargins();
|
||||||
|
initSpacings();
|
||||||
|
initPaddings();
|
||||||
|
|
||||||
|
context->setContextProperty("StyleSizes", mStyleSizes);
|
||||||
|
context->setContextProperty("StyleSpacings", mSpacings);
|
||||||
|
context->setContextProperty("StyleMargins", mMargins);
|
||||||
|
context->setContextProperty("StylePaddings", mPaddings);
|
||||||
|
}
|
||||||
81
LenaPi/controllers/StyleHandling.h
Normal file
|
|
@ -0,0 +1,81 @@
|
||||||
|
#ifndef STYLEHANDLING_H
|
||||||
|
#define STYLEHANDLING_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QQmlContext>
|
||||||
|
#include <QQmlPropertyMap>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Contains all style sizes, margins and paddings used throughout the application
|
||||||
|
*
|
||||||
|
* Based on a reference screen size, maps for scaled margins, paddings and spacings are created and
|
||||||
|
* registered in the QML context. The values stored in the maps can then be used from QML.
|
||||||
|
* Map names: StyleSizes, StylePaddings, StyleSpacings, StyleMargins
|
||||||
|
*
|
||||||
|
* Always use values from these maps in QML! Never use magic numbers! They will NOT scale when
|
||||||
|
* the application is run on a different screen.
|
||||||
|
*
|
||||||
|
* See https://doc.qt.io/qt-5/scalability.html
|
||||||
|
*
|
||||||
|
* @todo scale fonts as well?
|
||||||
|
* @todo use dpi for scaling as app is very small on Android?
|
||||||
|
*/
|
||||||
|
class StyleHandling : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit StyleHandling(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Calculates ratio, initializes all maps and registers them in QML context
|
||||||
|
* @param context Context to register Maps in
|
||||||
|
*/
|
||||||
|
void init(QQmlContext* context);
|
||||||
|
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* @brief Calculates ratio from reference screen size and size of the current primary screen and inits member mRatio
|
||||||
|
*/
|
||||||
|
void calculateAndSetRatio();
|
||||||
|
/**
|
||||||
|
* @brief Initializes map containing all sizes (e.g., button or delegate sizes)
|
||||||
|
*/
|
||||||
|
void initStyleSizes();
|
||||||
|
/**
|
||||||
|
* @brief Initializes map containing all spacings
|
||||||
|
*/
|
||||||
|
void initSpacings();
|
||||||
|
/**
|
||||||
|
* @brief Initializes map containing all margins
|
||||||
|
*/
|
||||||
|
void initMargins();
|
||||||
|
/**
|
||||||
|
* @brief Initializes map containing all paddings
|
||||||
|
*/
|
||||||
|
void initPaddings();
|
||||||
|
/**
|
||||||
|
* @brief Scales the value with calculated ratio and inserts it into the given map under the given key
|
||||||
|
* @param map Map to insert key-value pair into
|
||||||
|
* @param key Key used in the map. This is the name used to retrieve the value in QML
|
||||||
|
* @param value Unscaled value
|
||||||
|
* @see mRatio
|
||||||
|
*
|
||||||
|
* In QML the value with the key "defaulSpacing" in the Map "StyleSpacings" is accessed by StyleSpacings.defaultSpacing
|
||||||
|
*/
|
||||||
|
void scaleAndInsert(QQmlPropertyMap* map, const QString& key, int value);
|
||||||
|
/**
|
||||||
|
* @brief Applys ratio to given size
|
||||||
|
* @param size Size to be scaled
|
||||||
|
* @return scaled size
|
||||||
|
* @see mRatio
|
||||||
|
*/
|
||||||
|
int applyRatio(int size) const;
|
||||||
|
|
||||||
|
qreal mRatio = 1.0;
|
||||||
|
QQmlPropertyMap* mStyleSizes = nullptr;
|
||||||
|
QQmlPropertyMap* mMargins = nullptr;
|
||||||
|
QQmlPropertyMap* mSpacings = nullptr;
|
||||||
|
QQmlPropertyMap* mPaddings = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // STYLEHANDLING_H
|
||||||
|
|
@ -4,20 +4,20 @@
|
||||||
#include <QCommandLineParser>
|
#include <QCommandLineParser>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include "controllers/NavigationController.h"
|
#include <controllers/StyleHandling.h>
|
||||||
|
#include <controllers/NavigationController.h>
|
||||||
|
#include <controllers/SettingsHandler.h>
|
||||||
#include "MouseEventSpy.h"
|
#include "MouseEventSpy.h"
|
||||||
#include "EnergySaver.h"
|
#include "EnergySaver.h"
|
||||||
#include "controllers/SettingsHandler.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
|
||||||
QGuiApplication app(argc, argv);
|
QGuiApplication app(argc, argv);
|
||||||
QQmlApplicationEngine engine;
|
QQmlApplicationEngine engine;
|
||||||
|
|
||||||
/* Add command line parser to specify a custom config file
|
/****************************************************************************
|
||||||
* https://doc.qt.io/qt-5/qcommandlineparser.html
|
* Configure and parse commandline arguments
|
||||||
*/
|
****************************************************************************/
|
||||||
QCommandLineParser parser;
|
QCommandLineParser parser;
|
||||||
parser.setApplicationDescription("Lena's music app");
|
parser.setApplicationDescription("Lena's music app");
|
||||||
// Define a custom config file using -c or --config
|
// Define a custom config file using -c or --config
|
||||||
|
|
@ -27,6 +27,12 @@ int main(int argc, char *argv[])
|
||||||
// process commandline arguments
|
// process commandline arguments
|
||||||
parser.process(app);
|
parser.process(app);
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Find and read settings
|
||||||
|
* If a config file is handed over via commandline arguments, it is preferred.
|
||||||
|
* Otherwise, the config in the standard location is used. If none exists yet,
|
||||||
|
* a default config is created.
|
||||||
|
****************************************************************************/
|
||||||
QSettings* settings = nullptr;
|
QSettings* settings = nullptr;
|
||||||
if(!parser.value(configOption).isEmpty()){
|
if(!parser.value(configOption).isEmpty()){
|
||||||
// config was handed over via commandline argument. Use this config if file exists.
|
// config was handed over via commandline argument. Use this config if file exists.
|
||||||
|
|
@ -37,20 +43,35 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!settings){
|
if(!settings){
|
||||||
// default config
|
// create config from default location
|
||||||
settings = new QSettings(QSettings::Scope::UserScope, "MaleyanaSoft", "LenaPi");
|
settings = new QSettings(QSettings::Scope::UserScope, "MaleyanaSoft", "LenaPi");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read Settings */
|
// Read Settings
|
||||||
const auto settingsHandler = SettingsHandler::createSettingsHandlerAndFillWithDefaultsIfMissing(settings);
|
const auto settingsHandler = SettingsHandler::createSettingsHandlerAndFillWithDefaultsIfMissing(settings);
|
||||||
|
|
||||||
|
|
||||||
// init main app
|
/****************************************************************************
|
||||||
|
* init style
|
||||||
|
* Sets default sizes for ui elements. The element size is scaled according
|
||||||
|
* to the device's display size.
|
||||||
|
****************************************************************************/
|
||||||
|
StyleHandling styleHandler;
|
||||||
|
styleHandler.init(engine.rootContext());
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* init main app
|
||||||
|
****************************************************************************/
|
||||||
NavigationController navController;
|
NavigationController navController;
|
||||||
navController.setContext(engine.rootContext());
|
navController.setContext(engine.rootContext());
|
||||||
navController.init(settingsHandler->getRootPath());
|
navController.init(settingsHandler->getRootPath());
|
||||||
navController.setUiProfile(settingsHandler->getProfile());
|
navController.setUiProfile(settingsHandler->getProfile());
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* init energy saver
|
||||||
|
* Prevents sleep on android devices and shuts down other device if inactive
|
||||||
|
* (no music or mouse events) for a certain time intervall
|
||||||
|
****************************************************************************/
|
||||||
if(settingsHandler->isEnergySaverEnabled()){
|
if(settingsHandler->isEnergySaverEnabled()){
|
||||||
/* install MouseEventSpy and energy saver used for auto shut down of device
|
/* install MouseEventSpy and energy saver used for auto shut down of device
|
||||||
* if not used for a predefined time.
|
* if not used for a predefined time.
|
||||||
|
|
@ -59,9 +80,13 @@ int main(int argc, char *argv[])
|
||||||
EnergySaver::init(settingsHandler->getEnergySaverTimeout(), settingsHandler->getShutdownScript());
|
EnergySaver::init(settingsHandler->getEnergySaverTimeout(), settingsHandler->getShutdownScript());
|
||||||
QObject::connect(MouseEventSpy::instance(), &MouseEventSpy::mouseEventDetected,
|
QObject::connect(MouseEventSpy::instance(), &MouseEventSpy::mouseEventDetected,
|
||||||
EnergySaver::instance(), &EnergySaver::restartTimer);
|
EnergySaver::instance(), &EnergySaver::restartTimer);
|
||||||
|
} else {
|
||||||
|
EnergySaver::init();
|
||||||
}
|
}
|
||||||
|
|
||||||
// load GUI
|
/****************************************************************************
|
||||||
|
* load view
|
||||||
|
****************************************************************************/
|
||||||
engine.load(QUrl("qrc:/main.qml"));
|
engine.load(QUrl("qrc:/main.qml"));
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@ import QtQuick.Controls 2.4
|
||||||
|
|
||||||
Window {
|
Window {
|
||||||
visible: true
|
visible: true
|
||||||
width: 800
|
// width: 800
|
||||||
height: 480
|
//height: 480
|
||||||
title: "LenaPi 1.2"
|
title: "LenaPi 1.2"
|
||||||
|
|
||||||
Component.onCompleted: showMaximized();
|
Component.onCompleted: showMaximized();
|
||||||
|
|
|
||||||
|
|
@ -1,218 +0,0 @@
|
||||||
#include "MusicModel.h"
|
|
||||||
#include <QDir>
|
|
||||||
#include <QDebug>
|
|
||||||
#include <VLCQtCore/Media.h>
|
|
||||||
|
|
||||||
MusicModel::MusicModel(VlcInstance* instance, QObject *parent) : QObject(parent),
|
|
||||||
mVlc(instance), mMedia(new VlcMediaList(instance))
|
|
||||||
{
|
|
||||||
/* nothing */
|
|
||||||
}
|
|
||||||
|
|
||||||
MusicModel::~MusicModel()
|
|
||||||
{
|
|
||||||
// do not delete! will cause segmentation fault
|
|
||||||
//if(mMedia)
|
|
||||||
// mMedia->deleteLater();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicModel::init(NavigationItemModel *item)
|
|
||||||
{
|
|
||||||
if(mCurrentItem == item){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mCurrentItem = item;
|
|
||||||
emit currentItemChanged();
|
|
||||||
|
|
||||||
reset();
|
|
||||||
clearMediaList();
|
|
||||||
|
|
||||||
readMedia(mCurrentItem->getPath());
|
|
||||||
|
|
||||||
setMediaTitle(mMedia->at(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicModel::navigateBack()
|
|
||||||
{
|
|
||||||
emit navigateTo(mCurrentItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicModel::playPause()
|
|
||||||
{
|
|
||||||
mIsPlaying = !mIsPlaying;
|
|
||||||
emit isPlayingChanged();
|
|
||||||
if(mIsPlaying)
|
|
||||||
emit play();
|
|
||||||
else
|
|
||||||
emit pause();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicModel::stopMusic()
|
|
||||||
{
|
|
||||||
if(mIsPlaying){
|
|
||||||
mIsPlaying = false;
|
|
||||||
emit isPlayingChanged();
|
|
||||||
|
|
||||||
reset();
|
|
||||||
|
|
||||||
emit stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicModel::playNext()
|
|
||||||
{
|
|
||||||
emit next();
|
|
||||||
if(!mIsPlaying){
|
|
||||||
mIsPlaying = true;
|
|
||||||
emit isPlayingChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicModel::playPrevious()
|
|
||||||
{
|
|
||||||
emit previous();
|
|
||||||
if(!mIsPlaying){
|
|
||||||
mIsPlaying = true;
|
|
||||||
emit isPlayingChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NavigationItemModel *MusicModel::getCurrentItem()
|
|
||||||
{
|
|
||||||
return mCurrentItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
VlcMediaList *MusicModel::getMedia()
|
|
||||||
{
|
|
||||||
return mMedia;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MusicModel::isPlaying() const
|
|
||||||
{
|
|
||||||
return mIsPlaying;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MusicModel::hasNext() const
|
|
||||||
{
|
|
||||||
return mHasNext;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MusicModel::hasPrevious() const
|
|
||||||
{
|
|
||||||
return mHasPrevious;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicModel::setAudioVolume(int newVolume)
|
|
||||||
{
|
|
||||||
if(newVolume != mAudioVolume){
|
|
||||||
if(newVolume > 100){
|
|
||||||
mAudioVolume = 100;
|
|
||||||
} else if(newVolume < 0){
|
|
||||||
mAudioVolume = 0;
|
|
||||||
} else {
|
|
||||||
mAudioVolume = newVolume;
|
|
||||||
}
|
|
||||||
emit audioVolumeChanged(mAudioVolume);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
double MusicModel::getProgress() const
|
|
||||||
{
|
|
||||||
return mCurrentMediaItemProgress;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString MusicModel::getMediaTitle() const
|
|
||||||
{
|
|
||||||
return mMediaTitle;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString MusicModel::getMediaLength()
|
|
||||||
{
|
|
||||||
return timeToString(mCurrentMediaItemLength);
|
|
||||||
}
|
|
||||||
|
|
||||||
QString MusicModel::getTime()
|
|
||||||
{
|
|
||||||
return timeToString(mCurrentTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicModel::onNextMediaSet(VlcMedia *media)
|
|
||||||
{
|
|
||||||
setMediaTitle(media);
|
|
||||||
|
|
||||||
mHasNext = true;
|
|
||||||
mHasPrevious = true;
|
|
||||||
if(mMedia->at(0) == media){
|
|
||||||
mHasPrevious = false;
|
|
||||||
}
|
|
||||||
if(mMedia->at(mMedia->count()-1) == media){
|
|
||||||
mHasNext = false;
|
|
||||||
}
|
|
||||||
emit hasPreviousChanged();
|
|
||||||
emit hasNextChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicModel::onTimeChanged(int time)
|
|
||||||
{
|
|
||||||
mCurrentMediaItemProgress = (double) time / mCurrentMediaItemLength;
|
|
||||||
mCurrentTime = time;
|
|
||||||
emit progressChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicModel::onLengthChanged(int length)
|
|
||||||
{
|
|
||||||
mCurrentMediaItemLength= length;
|
|
||||||
emit mediaLengthChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicModel::reset()
|
|
||||||
{
|
|
||||||
mHasNext = false;
|
|
||||||
mHasPrevious = false;
|
|
||||||
emit hasNextChanged();
|
|
||||||
emit hasPreviousChanged();
|
|
||||||
|
|
||||||
mCurrentMediaItemProgress = 0.0;
|
|
||||||
mCurrentTime = 0.0;
|
|
||||||
emit progressChanged();
|
|
||||||
|
|
||||||
mCurrentMediaItemLength = 0.0;
|
|
||||||
emit mediaLengthChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicModel::clearMediaList()
|
|
||||||
{
|
|
||||||
while(mMedia->count() > 0){
|
|
||||||
mMedia->removeMedia(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicModel::readMedia(const QString& path)
|
|
||||||
{
|
|
||||||
auto dir = QDir(path);
|
|
||||||
if(!dir.exists()) return;
|
|
||||||
|
|
||||||
auto fileNames = dir.entryList(QDir::Files);
|
|
||||||
for(auto file:fileNames){
|
|
||||||
if(file.endsWith(".flac") || file.endsWith(".mp3")){
|
|
||||||
mMedia->addMedia(new VlcMedia(dir.filePath(file), true, mVlc));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QString MusicModel::timeToString(int time)
|
|
||||||
{
|
|
||||||
int sec = time/1000;
|
|
||||||
int min = sec/60;
|
|
||||||
sec = sec-min*60;
|
|
||||||
QString secStr = (sec < 10) ? "0"+QString::number(sec) : QString::number(sec);
|
|
||||||
return QString::number(min) + ":" + secStr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MusicModel::setMediaTitle(VlcMedia *media)
|
|
||||||
{
|
|
||||||
auto list = media->currentLocation().split("/");
|
|
||||||
auto title = list.at(list.count() -1 );
|
|
||||||
mMediaTitle = title.left(title.lastIndexOf("."));
|
|
||||||
emit mediaTitleChanged();
|
|
||||||
}
|
|
||||||
|
|
@ -1,100 +0,0 @@
|
||||||
#ifndef MUSICMODEL_H
|
|
||||||
#define MUSICMODEL_H
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
|
|
||||||
#include <models/NavigationItemModel.h>
|
|
||||||
#include <VLCQtCore/MediaList.h>
|
|
||||||
|
|
||||||
class MusicModel : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
Q_PROPERTY(QObject* pCurrentItem READ getCurrentItem NOTIFY currentItemChanged)
|
|
||||||
Q_PROPERTY(bool pHasNext READ hasNext NOTIFY hasNextChanged)
|
|
||||||
Q_PROPERTY(bool pHasPrevious READ hasPrevious NOTIFY hasPreviousChanged)
|
|
||||||
Q_PROPERTY(bool pIsPlaying READ isPlaying NOTIFY isPlayingChanged)
|
|
||||||
Q_PROPERTY(double pProgress READ getProgress NOTIFY progressChanged)
|
|
||||||
Q_PROPERTY(QString pMediaLength READ getMediaLength NOTIFY mediaLengthChanged)
|
|
||||||
Q_PROPERTY(QString pTime READ getTime NOTIFY progressChanged)
|
|
||||||
Q_PROPERTY(QString pMediaTitle READ getMediaTitle NOTIFY mediaTitleChanged)
|
|
||||||
Q_PROPERTY(int pAudioVolume READ getAudioVolume WRITE setAudioVolume NOTIFY audioVolumeChanged)
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void navigateTo(NavigationItemModel *item);
|
|
||||||
void currentItemChanged();
|
|
||||||
void play();
|
|
||||||
void pause();
|
|
||||||
void stop();
|
|
||||||
void previous();
|
|
||||||
void next();
|
|
||||||
void hasPreviousChanged();
|
|
||||||
void hasNextChanged();
|
|
||||||
void isPlayingChanged();
|
|
||||||
void progressChanged();
|
|
||||||
void mediaLengthChanged();
|
|
||||||
void mediaTitleChanged();
|
|
||||||
void audioVolumeChanged(int newVolume);
|
|
||||||
|
|
||||||
public:
|
|
||||||
MusicModel(VlcInstance* instance, QObject *parent = Q_NULLPTR);
|
|
||||||
~MusicModel();
|
|
||||||
|
|
||||||
void init(NavigationItemModel* item);
|
|
||||||
|
|
||||||
Q_INVOKABLE void navigateBack();
|
|
||||||
Q_INVOKABLE void playPause();
|
|
||||||
Q_INVOKABLE void stopMusic();
|
|
||||||
Q_INVOKABLE void playNext();
|
|
||||||
Q_INVOKABLE void playPrevious();
|
|
||||||
|
|
||||||
NavigationItemModel *getCurrentItem();
|
|
||||||
|
|
||||||
VlcMediaList *getMedia();
|
|
||||||
|
|
||||||
bool isPlaying() const;
|
|
||||||
bool hasNext() const;
|
|
||||||
bool hasPrevious() const;
|
|
||||||
|
|
||||||
inline int getAudioVolume() const { return mAudioVolume; }
|
|
||||||
/**
|
|
||||||
* @brief Set audio volume. Information is transferred to VlcAudio
|
|
||||||
* @param newVolume value between 0 and 100 (audio level in percent)
|
|
||||||
* Ensures that volume is inbetween 0 and 100. If this range is exceeded,
|
|
||||||
* the volume is set to the lowest and highest allowed value, respectively.
|
|
||||||
*/
|
|
||||||
void setAudioVolume(int newVolume);
|
|
||||||
|
|
||||||
double getProgress() const;
|
|
||||||
|
|
||||||
QString getMediaTitle() const;
|
|
||||||
QString getMediaLength();
|
|
||||||
QString getTime();
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void onNextMediaSet(VlcMedia* media);
|
|
||||||
void onTimeChanged(int time);
|
|
||||||
void onLengthChanged(int length);
|
|
||||||
|
|
||||||
private:
|
|
||||||
void reset();
|
|
||||||
void clearMediaList();
|
|
||||||
void readMedia(const QString& path);
|
|
||||||
void setMediaTitle(VlcMedia* media);
|
|
||||||
QString timeToString(int time);
|
|
||||||
|
|
||||||
|
|
||||||
bool mIsPlaying = false;
|
|
||||||
bool mHasNext = false;
|
|
||||||
bool mHasPrevious = false;
|
|
||||||
int mCurrentMediaItemLength = 0;
|
|
||||||
int mCurrentTime = 0;
|
|
||||||
double mCurrentMediaItemProgress = 0;
|
|
||||||
int mAudioVolume{50};
|
|
||||||
QString mMediaTitle = QString("");
|
|
||||||
NavigationItemModel* mCurrentItem = Q_NULLPTR;
|
|
||||||
VlcMediaList* mMedia = Q_NULLPTR;
|
|
||||||
VlcInstance* mVlc = Q_NULLPTR;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // MUSICMODEL_H
|
|
||||||
|
|
@ -10,12 +10,12 @@ NavigationItemModel::NavigationItemModel(QObject *parent) : QObject(parent),
|
||||||
qRegisterMetaType<NavigationItemModel*>("NavigationItemModel*");
|
qRegisterMetaType<NavigationItemModel*>("NavigationItemModel*");
|
||||||
}
|
}
|
||||||
|
|
||||||
QString NavigationItemModel::getImageSource() const
|
const QString& NavigationItemModel::getImageSource() const
|
||||||
{
|
{
|
||||||
return mImageSource;
|
return mImageSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString NavigationItemModel::getPath() const
|
const QString& NavigationItemModel::getPath() const
|
||||||
{
|
{
|
||||||
return mPath;
|
return mPath;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,13 +36,13 @@ public:
|
||||||
* represented by this item. If no such image is found, a default image is displayed
|
* represented by this item. If no such image is found, a default image is displayed
|
||||||
* on the delegate.
|
* on the delegate.
|
||||||
*/
|
*/
|
||||||
QString getImageSource() const;
|
const QString &getImageSource() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get path to folder represented by this navigation item.
|
* @brief Get path to folder represented by this navigation item.
|
||||||
* @return Path to folder
|
* @return Path to folder
|
||||||
*/
|
*/
|
||||||
QString getPath() const;
|
const QString& getPath() const;
|
||||||
/**
|
/**
|
||||||
* @brief Set folder path and set image source displayed on delegate.
|
* @brief Set folder path and set image source displayed on delegate.
|
||||||
* @param path Path to directory that is represented by this navigation item.
|
* @param path Path to directory that is represented by this navigation item.
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QHash>
|
#include <QHash>
|
||||||
|
#include <qstandardpaths.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Handles state of UI by providing the qml source.
|
* @brief Handles state of UI by providing the qml source.
|
||||||
|
|
|
||||||
BIN
LenaPi/resources/icon.jpeg
Normal file
|
After Width: | Height: | Size: 36 KiB |