diff --git a/.gitignore b/.gitignore index 75c107b..7f4826b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,54 @@ +# C++ objects and libs +*.slo +*.lo +*.o +*.a +*.la +*.lai +*.so +*.so.* +*.dll +*.dylib + +# Qt-es +object_script.*.Release +object_script.*.Debug +*_plugin_import.cpp +/.qmake.cache +/.qmake.stash *.pro.user +*.pro.user.* +*.qbs.user +*.qbs.user.* +*.moc +moc_*.cpp +moc_*.h +qrc_*.cpp +ui_*.h +*.qmlc +*.jsc +Makefile* +*build-* +*.qm +*.prl + +# Qt unit tests +target_wrapper.* + +# QtCreator +*.autosave + +# QtCreator Qml +*.qmlproject.user +*.qmlproject.user.* + +# QtCreator CMake +CMakeLists.txt.user* + +# QtCreator 4.8< compilation database +compile_commands.json + +# QtCreator local machine specific files for imported projects +*creator.user* + +*_qmlcache.qrc diff --git a/Resources/128-apps-org.petrovs_info.tangraplay.png b/Assets/128-apps-org.petrovs_info.tangraplay.png similarity index 100% rename from Resources/128-apps-org.petrovs_info.tangraplay.png rename to Assets/128-apps-org.petrovs_info.tangraplay.png diff --git a/Resources/16-apps-org.petrovs_info.tangraplay.png b/Assets/16-apps-org.petrovs_info.tangraplay.png similarity index 100% rename from Resources/16-apps-org.petrovs_info.tangraplay.png rename to Assets/16-apps-org.petrovs_info.tangraplay.png diff --git a/Resources/32-apps-org.petrovs_info.tangraplay.png b/Assets/32-apps-org.petrovs_info.tangraplay.png similarity index 100% rename from Resources/32-apps-org.petrovs_info.tangraplay.png rename to Assets/32-apps-org.petrovs_info.tangraplay.png diff --git a/Resources/48-apps-org.petrovs_info.tangraplay.png b/Assets/48-apps-org.petrovs_info.tangraplay.png similarity index 100% rename from Resources/48-apps-org.petrovs_info.tangraplay.png rename to Assets/48-apps-org.petrovs_info.tangraplay.png diff --git a/Resources/64-apps-org.petrovs_info.tangraplay.png b/Assets/64-apps-org.petrovs_info.tangraplay.png similarity index 100% rename from Resources/64-apps-org.petrovs_info.tangraplay.png rename to Assets/64-apps-org.petrovs_info.tangraplay.png diff --git a/Resources/KellySlab-Regular.ttf b/Assets/KellySlab-Regular.ttf similarity index 100% rename from Resources/KellySlab-Regular.ttf rename to Assets/KellySlab-Regular.ttf diff --git a/Resources/blago.png b/Assets/blago.png similarity index 100% rename from Resources/blago.png rename to Assets/blago.png diff --git a/Resources/buuf-pause.png b/Assets/buuf-pause.png similarity index 100% rename from Resources/buuf-pause.png rename to Assets/buuf-pause.png diff --git a/Resources/buuf-play.png b/Assets/buuf-play.png similarity index 100% rename from Resources/buuf-play.png rename to Assets/buuf-play.png diff --git a/Resources/dark_leather.png b/Assets/dark_leather.png similarity index 100% rename from Resources/dark_leather.png rename to Assets/dark_leather.png diff --git a/Resources/live.png b/Assets/live.png similarity index 100% rename from Resources/live.png rename to Assets/live.png diff --git a/Resources/logo.png b/Assets/logo.png similarity index 100% rename from Resources/logo.png rename to Assets/logo.png diff --git a/Resources/menu-background.png b/Assets/menu-background.png similarity index 100% rename from Resources/menu-background.png rename to Assets/menu-background.png diff --git a/Resources/menubtn-background.png b/Assets/menubtn-background.png similarity index 100% rename from Resources/menubtn-background.png rename to Assets/menubtn-background.png diff --git a/Resources/news-icon.png b/Assets/news-icon.png similarity index 100% rename from Resources/news-icon.png rename to Assets/news-icon.png diff --git a/Resources/news.png b/Assets/news.png similarity index 100% rename from Resources/news.png rename to Assets/news.png diff --git a/Resources/pause-button.svg b/Assets/pause-button.svg similarity index 100% rename from Resources/pause-button.svg rename to Assets/pause-button.svg diff --git a/Resources/play-button.svg b/Assets/play-button.svg similarity index 100% rename from Resources/play-button.svg rename to Assets/play-button.svg diff --git a/Resources/playbtn-frame.png b/Assets/playbtn-frame.png similarity index 100% rename from Resources/playbtn-frame.png rename to Assets/playbtn-frame.png diff --git a/Resources/podcast.png b/Assets/podcast.png similarity index 100% rename from Resources/podcast.png rename to Assets/podcast.png diff --git a/Resources/stop-button.svg b/Assets/stop-button.svg similarity index 100% rename from Resources/stop-button.svg rename to Assets/stop-button.svg diff --git a/Resources/tangra.ico b/Assets/tangra.ico similarity index 100% rename from Resources/tangra.ico rename to Assets/tangra.ico diff --git a/CMakeLists.txt b/CMakeLists.txt index 7321797..8d88fd5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,60 +1,84 @@ -project(tangraplay) +cmake_minimum_required(VERSION 3.16 FATAL_ERROR) -cmake_minimum_required(VERSION 3.1 FATAL_ERROR) +project(tangraplay VERSION 0.1 LANGUAGES CXX) -set(BIN_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") -set(QT_MIN_VERSION "5.10.0") -set(KF5_DEP_VERSION "5.40.0") - -# We need some parts of the ECM CMake helpers. -find_package(ECM ${KF5_DEP_VERSION} QUIET REQUIRED NO_MODULE) - -# We append to the module path so modules can be overridden from the command line. -list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +#set(BIN_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") +set(CMAKE_AUTOMOC ON) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) -find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Core Quick QuickControls2 Multimedia Widgets Gui ) +find_package(Qt6 6.5 REQUIRED COMPONENTS Quick Widgets Core QuickControls2 Widgets Gui Multimedia) -include_directories(.) -include_directories(${Qt5Core_PRIVATE_INCLUDE_DIRS}) +qt_standard_project_setup(REQUIRES 6.5) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) -include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE) -include(KDEInstallDirs) -include(KDECMakeSettings) - -include(ECMOptionalAddSubdirectory) -include(ECMAddAppIcon) -include(ECMInstallIcons) - - -add_subdirectory(Resources) -qt5_add_resources(RESOURCES qml.qrc) - -SET(SOURCES +if (WIN32) + set(QT_DEFAULT_MEDIA_BACKEND windows) +else() + set(QT_DEFAULT_MEDIA_BACKEND gstreamer) +endif() + +list(APPEND QML_ASSETS + Assets/tangra.ico + Assets/pause-button.svg + Assets/logo.png + Assets/play-button.svg + Assets/menu-background.png + Assets/dark_leather.png + Assets/menubtn-background.png + Assets/blago.png + Assets/KellySlab-Regular.ttf + Assets/news-icon.png + Assets/buuf-pause.png + Assets/buuf-play.png + Assets/playbtn-frame.png + Assets/live.png + Assets/news.png + Assets/podcast.png +) + +qt_add_executable(apptangraplay main.cpp - ) - -add_executable(tangraplay - ${SOURCES} - ${RESOURCES} - ) - -qt5_use_modules(tangraplay Quick QuickControls2 Core Multimedia ) - -target_link_libraries(tangraplay - Qt5::Quick - Qt5::QuickControls2 - Qt5::Core - Qt5::Widgets - Qt5::Gui - Qt5::Multimedia ) - -install(TARGETS tangraplay DESTINATION ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) - -install(PROGRAMS org.petrovs_info.tangraplay.desktop DESTINATION ${KDE_INSTALL_APPDIR}) -install(FILES org.petrovs_info.tangraplay.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) + tangratray.h tangratray.cpp +) + +qt_add_qml_module(apptangraplay + URI TangraPlay + VERSION 1.0 + RESOURCE_PREFIX /bpetrov.tangraplay/imports + QML_FILES ui/main.qml + ui/AboutProgram.qml + ui/AudioPlayer.qml + ui/MediaButton.qml + ui/MenuButton.qml + ui/MenuToolbar.qml + ui/PgLive.qml + ui/PgNews.qml + ui/NewsDelegate.qml + ui/CurrentShow.qml + RESOURCES + ${QML_ASSETS} +) + +set_target_properties(apptangraplay PROPERTIES + MACOSX_BUNDLE_GUI_IDENTIFIER tangraplay.blago.cloud + MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} + MACOSX_BUNDLE TRUE + WIN32_EXECUTABLE TRUE +) + +target_link_libraries(apptangraplay PRIVATE + Qt6::Quick + Qt6::QuickControls2 + Qt6::Core + Qt6::Widgets + Qt6::Gui + Qt6::Multimedia ) + +install(TARGETS apptangraplay + BUNDLE DESTINATION . + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/Resources/CMakeLists.txt b/Resources/CMakeLists.txt deleted file mode 100644 index 73d7cfe..0000000 --- a/Resources/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ - -ecm_install_icons( - ICONS - 128-apps-org.petrovs_info.tangraplay.png - 64-apps-org.petrovs_info.tangraplay.png - 48-apps-org.petrovs_info.tangraplay.png - 32-apps-org.petrovs_info.tangraplay.png - 16-apps-org.petrovs_info.tangraplay.png - DESTINATION ${ICON_INSTALL_DIR} -) diff --git a/TangraPlay.pro b/TangraPlay.pro deleted file mode 100644 index 9ffdd16..0000000 --- a/TangraPlay.pro +++ /dev/null @@ -1,38 +0,0 @@ -QT += quick gui core widgets - -CONFIG += c++11 - -RC_ICONS = Resources/tangra.ico - -# The following define makes your compiler emit warnings if you use -# any Qt feature that has been marked deprecated (the exact warnings -# depend on your compiler). Refer to the documentation for the -# deprecated API to know how to port your code away from it. -DEFINES += QT_DEPRECATED_WARNINGS - -# You can also make your code fail to compile if it uses deprecated APIs. -# In order to do so, uncomment the following line. -# You can also select to disable deprecated APIs only up to a certain version of Qt. -#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 - -SOURCES += \ - fetchshowid.cpp \ - main.cpp \ - tangratray.cpp - -RESOURCES += qml.qrc - -# Additional import path used to resolve QML modules in Qt Creator's code model -QML_IMPORT_PATH = - -# Additional import path used to resolve QML modules just for Qt Quick Designer -QML_DESIGNER_IMPORT_PATH = - -# Default rules for deployment. -qnx: target.path = /tmp/$${TARGET}/bin -else: unix:!android: target.path = /opt/$${TARGET}/bin -!isEmpty(target.path): INSTALLS += target - -HEADERS += \ - fetchshowid.h \ - tangratray.h diff --git a/fetchshowid.cpp b/fetchshowid.cpp deleted file mode 100644 index 9eaaf28..0000000 --- a/fetchshowid.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "fetchshowid.h" - -FetchShowID::FetchShowID() -{ - n_manager = new QNetworkAccessManager; - - connect(n_manager, SIGNAL(finished(QNetworkReply*)), - this, SLOT(replyFinished(QNetworkReply*))); - -} - - -void FetchShowID::Fetch() { - n_manager->get(QNetworkRequest(QUrl("http://app.radiotangra.com/TMR_monitor_songs"))); -} diff --git a/fetchshowid.h b/fetchshowid.h deleted file mode 100644 index d71a18f..0000000 --- a/fetchshowid.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef FETCHSHOWID_H -#define FETCHSHOWID_H -#include -#include -#include -#include -#include - - -class FetchShowID : public QObject -{ -public: - FetchShowID(); - void Fetch(); - -private: - QNetworkAccessManager* n_manager; -}; - -#endif // FETCHSHOWID_H diff --git a/main.cpp b/main.cpp index 18f83af..ebfd18b 100644 --- a/main.cpp +++ b/main.cpp @@ -3,6 +3,7 @@ #include #include #include "tangratray.h" +#include int main(int argc, char *argv[]) { @@ -10,11 +11,13 @@ int main(int argc, char *argv[]) QApplication app(argc, argv); QQmlApplicationEngine engine; + engine.addImportPath(":/bpetrov.tangraplay/imports"); + TangraTray * tangratray = new TangraTray(); QQmlContext *context = engine.rootContext(); context->setContextProperty("tangraTray", tangratray); - const QUrl url(QStringLiteral("qrc:/ui/main.qml")); + const QUrl url(u"qrc:/bpetrov.tangraplay/imports/TangraPlay/ui/main.qml"_qs); QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { if (!obj && url == objUrl) diff --git a/qml.qrc b/qml.qrc deleted file mode 100644 index ef25b9c..0000000 --- a/qml.qrc +++ /dev/null @@ -1,28 +0,0 @@ - - - ui/main.qml - ui/MenuToolbar.qml - ui/MenuButton.qml - ui/PgLive.qml - ui/PgNews.qml - ui/AboutProgram.qml - ui/AudioPlayer.qml - ui/MediaButton.qml - Resources/pause-button.svg - Resources/logo.png - Resources/play-button.svg - Resources/menu-background.png - Resources/dark_leather.png - Resources/menubtn-background.png - Resources/blago.png - Resources/tangra.ico - Resources/KellySlab-Regular.ttf - Resources/news-icon.png - Resources/buuf-pause.png - Resources/buuf-play.png - Resources/playbtn-frame.png - Resources/live.png - Resources/news.png - Resources/podcast.png - - diff --git a/tangratray.cpp b/tangratray.cpp index 52de6c3..fac0ccd 100644 --- a/tangratray.cpp +++ b/tangratray.cpp @@ -16,8 +16,8 @@ TangraTray::TangraTray(QObject *parent) : QObject(parent) trayIcon = new QSystemTrayIcon(); trayIcon->setContextMenu(trayIconMenu); - setTrayIcon(":Resources/tangra.ico"); - + trayIcon->setToolTip(QString("TagraPlay")); + setTrayIcon(":/bpetrov.tangraplay/imports/TangraPlay/Assets/tangra.ico"); trayIcon->show(); connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), @@ -37,8 +37,9 @@ void TangraTray::iconActivated(QSystemTrayIcon::ActivationReason reason) void TangraTray::setTrayIcon(QString image) { - QIcon icon = QIcon(image), tr("Icon"); + QIcon icon = QIcon(image); trayIcon->setIcon(icon); + trayIcon->show(); } void TangraTray::hideIconTray() diff --git a/ui/AboutProgram.qml b/ui/AboutProgram.qml index baf3f18..7b0a4d8 100644 --- a/ui/AboutProgram.qml +++ b/ui/AboutProgram.qml @@ -1,11 +1,12 @@ -import QtQuick 2.0 -import QtQuick.Dialogs 1.2 +import QtQuick +import QtQuick.Controls +import QtQuick.Dialogs Dialog { - id: aboutDialog - standardButtons: StandardButton.Ok + id: aboutDialo height: 500 width: 400 + title: "About" Image { id: image @@ -14,7 +15,7 @@ Dialog { width: 100 height: 100 fillMode: Image.PreserveAspectFit - source: "../Resources/blago.png" + source: "qrc:/bpetrov.tangraplay/imports/TangraPlay/Assets/blago.png" } Text { @@ -46,7 +47,7 @@ Dialog { y: 172 width: 354 height: 74 - text: qsTr("© 2020 Благовест Петров ( https://petrovs.info ) . Кодът е лиценциран под GNU GPL v3.0. \n Шрифтът е \"Kelly Slab\" и е взет от Google Fonts. Лицензиран е под OFL лиценз.") + text: qsTr("© 2023 Благовест Петров ( https://petrovs.info ) . Кодът е лиценциран под GNU GPL v3.0. \n Шрифтът е \"Kelly Slab\" и е взет от Google Fonts. Лицензиран е под OFL лиценз.") font.family: mainfont.name wrapMode: Text.WrapAtWordBoundaryOrAnywhere font.pixelSize: 12 diff --git a/ui/AudioPlayer.qml b/ui/AudioPlayer.qml index 273f1e4..94b2496 100644 --- a/ui/AudioPlayer.qml +++ b/ui/AudioPlayer.qml @@ -1,11 +1,8 @@ import QtQuick 2.0 -import QtMultimedia 5.15 - -Audio { - property variant quality: { - "low" : "http://stream-bg-01.radiotangra.com/Tangra-middle.m3u", - "high" : "http://stream-bg-01.radiotangra.com/Tangra-high.m3u" - } +import QtMultimedia +MediaPlayer { + audioOutput: AudioOutput {} source: "http://stream-bg-01.radiotangra.com:8000/Tangra-high" + } diff --git a/ui/CurrentShow.qml b/ui/CurrentShow.qml new file mode 100644 index 0000000..c0bc2fe --- /dev/null +++ b/ui/CurrentShow.qml @@ -0,0 +1,31 @@ +import QtQuick 2.0 + +Item { + property string theShow: "" + + function getShow(url) { + let request = new XMLHttpRequest() + + request.onreadystatechange = function () { + if (request.readyState === XMLHttpRequest.DONE) { +// let content = request.response.slice(0, request.response.indexOf("\n")); + let response = { + status : request.status, + headers : request.getAllResponseHeaders(), + content : request.response + }; + }; + theShow = request.responseText.toString().slice(0, request.response.indexOf("\n")); + } + + request.open("GET", "http://app.radiotangra.com/TMR_monitor_songs") + request.send() + } + + Timer { + interval: 30000 + running: true + repeat: true + onTriggered: getShow() + } +} diff --git a/ui/MediaButton.qml b/ui/MediaButton.qml index ebb439a..1d0836e 100644 --- a/ui/MediaButton.qml +++ b/ui/MediaButton.qml @@ -1,18 +1,121 @@ import QtQuick 2.0 import QtQuick.Controls 2.15 -Item { - id: container +Image { + id: buttonIcon x: 64 y: 64 - property bool isClicked : false + property int animationDuration: 250 + fillMode: Image.PreserveAspectFit + source: "qrc:/bpetrov.tangraplay/imports/TangraPlay/Assets/buuf-play.png" + property bool isClicked: false - Image { - id: buttonIcon - width: 64 - anchors.centerIn: parent - fillMode: Image.PreserveAspectFit - source: isClicked ? "../Resources/buuf-pause.png" : "../Resources/buuf-play.png" + function changeIconState() { + if ( thePlayer.playbackState === 1) { + buttonIcon.source = "qrc:/bpetrov.tangraplay/imports/TangraPlay/Assets/buuf-pause.png" + } + else { + buttonIcon.source = "qrc:/bpetrov.tangraplay/imports/TangraPlay/Assets/buuf-play.png" + } + } + + function runAnimation() { + glow.visible = true + animation1.start() + animation2.start() + } + + Connections { + target: mainStack + function activating() { + buttonIcon.changeIconState() + } + } + + MouseArea { + anchors.fill: parent + onClicked: { + root.clicked() + stack.push(viewBeerSize) + } + + onPressed: { + glow.visible = true + animation1.start() + animation2.start() + } + } + + ///////// Click animation + Rectangle { + id: glow + visible: false + + width: parent.width + height: parent.height + color: "#00000000" + radius: 125 + scale: 1.05 + border.color: "#ffffff" + } + + PropertyAnimation { + target: glow + id: animation1 + duration: buttonIcon.animationDuration + loops: 1 + from: 1.05 + to: 1.2 + property: "scale" + } + + ParallelAnimation { + id: animation2 + SequentialAnimation { + PropertyAnimation { + target: glow + duration: buttonIcon.animationDuration + loops: 1 + from: 0.2 + to: 1.0 + property: "opacity" + } + PropertyAnimation { + target: glow + duration: buttonIcon.animationDuration + loops: 1 + from: 1.0 + to: 0.0 + property: "opacity" + } + + PropertyAction { + target: glow + property: "visible" + value: false + } + } + + SequentialAnimation { + PropertyAction { + target: glow + property: "border.width" + value: 20 + } + + PauseAnimation { + duration: 200 + } + + PropertyAnimation { + target: glow + duration: buttonIcon.animationDuration + loops: 1 + from: 20 + to: 10 + property: "border.width" + } + } } } diff --git a/ui/MenuButton.qml b/ui/MenuButton.qml index 05ac2d3..389e42a 100644 --- a/ui/MenuButton.qml +++ b/ui/MenuButton.qml @@ -10,7 +10,7 @@ Rectangle { Image { id: menuButtonBackground - source: "../Resources/menubtn-background.png" + source: "qrc:/bpetrov.tangraplay/imports/TangraPlay/Assets/menubtn-background.png" anchors.fill: parent } diff --git a/ui/MenuToolbar.qml b/ui/MenuToolbar.qml index 2b31fbe..98bc0c6 100644 --- a/ui/MenuToolbar.qml +++ b/ui/MenuToolbar.qml @@ -8,7 +8,7 @@ Item { height: 32 Image { - source: "../Resources/menu-background.png" + source: "qrc:/bpetrov.tangraplay/imports/TangraPlay/Assets/menu-background.png" fillMode: Image.Tile anchors.fill: parent @@ -19,11 +19,11 @@ Item { anchors.fill: parent; property variant clickPos: "1,1" - onPressed: { - clickPos = Qt.point(mouse.x,mouse.y) + onPressed: (mouse)=> { + clickPos = Qt.point(mouse.x, mouse.y) } - onPositionChanged: { + onPositionChanged: (mouse)=> { var delta = Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y) var new_x = mainWindow.x + delta.x var new_y = mainWindow.y + delta.y @@ -63,24 +63,38 @@ Item { color: "#f9c620" } -// Image { -// id: buttonLive -// source: "Resources/live.png" -// anchors.left: appTitle.left -// anchors.leftMargin: 128 -// width: 32 -// height: 32 - -// MouseArea { -// anchors.fill: parent -// hoverEnabled: true -// onClicked: { -// pgLive1.visible = false; -// pgnews1.visible = true; -//// contentLoader.sourceComponent = PgNews -// } -// } -// } + Image { + id: buttonLive + source: "qrc:/bpetrov.tangraplay/imports/TangraPlay/Assets/live.png" + anchors.left: appTitle.left + anchors.leftMargin: 128 + width: 32 + height: 32 + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onClicked: { + mainStack.push(stackLive) + } + } + } + Image { + id: buttonNews + source: "qrc:/bpetrov.tangraplay/imports/TangraPlay/Assets/news.png" + anchors.left: buttonLive.left + anchors.leftMargin: 128 + width: 32 + height: 32 + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onClicked: { + mainStack.push(stackNews) + } + } + } } } } diff --git a/ui/NewsDelegate.qml b/ui/NewsDelegate.qml new file mode 100644 index 0000000..86d4232 --- /dev/null +++ b/ui/NewsDelegate.qml @@ -0,0 +1,21 @@ +import QtQuick +import QtQuick.Controls + +Text { + height: 25 + width: newsList.width + id: titleText + textFormat: Text.RichText + text: " " + title + "" + wrapMode: Text.WordWrap + font.pixelSize: 12 + font.bold: true + onLinkActivated: openLink => Qt.openUrlExternally(link) + MouseArea { + id: mouseArea + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + acceptedButtons: Qt.NoButton + } +} diff --git a/ui/PgLive.qml b/ui/PgLive.qml index 5049d4b..678e34c 100644 --- a/ui/PgLive.qml +++ b/ui/PgLive.qml @@ -5,6 +5,7 @@ import QtMultimedia 5.15 Item { +// property alias playPauseChangeState: playPause.changeIconState() Image { id: logo @@ -14,13 +15,36 @@ Item { width: 260 height: 175 fillMode: Image.PreserveAspectFit - source: "../Resources/logo.png" + source: "qrc:/bpetrov.tangraplay/imports/TangraPlay/Assets/logo.png" + + states: ["mouseFadeIn", "MouseFadeOut"] + state: "mouseFadeOut" + + transitions: [ + Transition { + from: "*" + to: "mouseFadeIn" + NumberAnimation { + target: logo + properties: "scale" + from: 0.95 + to: 1 + duration: 400 + easing.type: Easing.OutBounce + } + } + ] + MouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor - onPressed: { + hoverEnabled: true + onPressed: { Qt.openUrlExternally("http://radiotangra.com") } + onContainsMouseChanged: { + logo.state = containsMouse ? "mouseFadeIn" : "mouseFadeOut" + } } } @@ -30,13 +54,21 @@ Item { y: 291 width: 64 height: 64 + + Component.onCompleted: { + playPause.changeIconState() + } + MouseArea { anchors.fill: parent onClicked: { - mediaControl(); - playPause.isClicked = !playPause.isClicked; + playPause.runAnimation() + mediaControl() +// playPause.isClicked = !playPause.isClicked + playPause.changeIconState() } } + } Text { @@ -59,24 +91,14 @@ Item { y: 259 width: 629 height: 127 - source: "../Resources/playbtn-frame.png" + source: "qrc:/bpetrov.tangraplay/imports/TangraPlay/Assets/playbtn-frame.png" fillMode: Image.PreserveAspectFit - Text { - id: text1 - x: 156 - y: 17 - text: qsTr("Предаване в ефир:") - color: "#f9c620" - font.family: mainfont.name - font.pixelSize: 15 - } - Text { id: text2 x: 156 y: 60 - text: qsTr("В момента звучи:") + text: qsTr("Предаване в ефир: ") + currentShow.theShow color: "#f9c620" font.family: mainfont.name font.pixelSize: 15 @@ -89,3 +111,4 @@ Designer { D{i:0;autoSize:true;height:480;width:640} } ##^##*/ + diff --git a/ui/PgNews.qml b/ui/PgNews.qml index 4e74cf8..379b584 100644 --- a/ui/PgNews.qml +++ b/ui/PgNews.qml @@ -1,38 +1,35 @@ -import QtQuick 2.12 -import QtQuick.Window 2.12 -import Qt.labs.platform 1.1 -import QtMultimedia 5.15 +import QtQuick +import QtQuick.Controls +import QtQml.XmlListModel Item { x: 190 y: 51 - Row { - id: row - x: 8 - y: 50 - width: 624 - height: 400 - spacing: 2 - - Text { - id: text1 - x: 61 - y: 50 - text: qsTr("Гледайте първо видео от новия албум на GOJIRA - той излиза на 3 април") - font.pixelSize: 12 - font.family: mainfont.name - } - Text { - id: text2 - x: 61 - y: 50 - text: qsTr("Историята на BLONDIE в предаването 'РОКЕНДРОЛ' на МОНИ ПАНЧЕВ от 16:00") - font.pixelSize: 12 - font.family: mainfont.name - } - } + XmlListModel { + id: newsModel + + source: "http://www.radiotangra.com/news/rss.html" + query: "/rss/channel/item" + + XmlListModelRole { name: "title"; elementName: "title"; attributeName: ""} + XmlListModelRole { name: "link"; elementName: "link"; attributeName: "" } + } + + ListView { + id: newsList + anchors.fill: parent + anchors.topMargin: 38 + anchors.leftMargin: 39 + anchors.rightMargin: 27 + anchors.bottomMargin: 17 + model: newsModel + delegate: NewsDelegate {} + ScrollBar.vertical: ScrollBar { + policy: ScrollBar.AlwaysOn + } + } } diff --git a/ui/main.qml b/ui/main.qml index a9dc314..0c8aa98 100644 --- a/ui/main.qml +++ b/ui/main.qml @@ -1,9 +1,10 @@ import QtQuick 2.12 -import QtQuick.Window 2.12 +import QtQuick.Controls +import QtQuick.Layouts import Qt.labs.platform 1.1 -import QtMultimedia 5.15 +import QtMultimedia -Window { +ApplicationWindow { title: qsTr("Tangra Mega Rock") id: mainWindow visible: true @@ -13,7 +14,9 @@ Window { maximumHeight: 480 flags: Qt.FramelessWindowHint - FontLoader { id: mainfont; source: "../Resources/KellySlab-Regular.ttf" } + FontLoader { id: mainfont; source: "qrc:/bpetrov.tangraplay/imports/TangraPlay/Assets/KellySlab-Regular.ttf" } + + header: MenuToolbar {} Connections { target: tangraTray @@ -34,15 +37,22 @@ Window { } AudioPlayer { - id: tangraplay + id: thePlayer + } + + CurrentShow { + id: currentShow + Component.onCompleted: { + currentShow.getShow(); + } } function mediaControl() { - if (tangraplay.playbackState != Audio.PlayingState) { - tangraplay.play(); + if (thePlayer.playbackState != MediaPlayer.PlayingState) { + thePlayer.play(); } else { - tangraplay.stop(); + thePlayer.stop(); } return 0; } @@ -52,26 +62,29 @@ Window { anchors.fill: parent visible: true fillMode: Image.Tile - source: "../Resources/dark_leather.png" + source: "qrc:/bpetrov.tangraplay/imports/TangraPlay/Assets/dark_leather.png" - MenuToolbar {} - PgLive { - id: pgLive1 + + StackView { + id: mainStack + initialItem: stackLive + anchors.fill: parent } -// PgNews { -// id: pgNews1 -// visible: false -// } -// Item { -// Component { -// id: myComp -// } + Component { + id: stackLive + PgLive { + id: pgLive + -// Loader { id: contentLoader } + } + } + Component { + id: stackNews + PgNews { id: pgNews } + } -// } } }