@ -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 |
|||
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 784 B After Width: | Height: | Size: 784 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 991 B After Width: | Height: | Size: 991 B |
Before Width: | Height: | Size: 875 B After Width: | Height: | Size: 875 B |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 712 B After Width: | Height: | Size: 712 B |
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 97 KiB |
@ -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}) |
|||
|
@ -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} |
|||
) |
@ -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 |
@ -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"))); |
|||
} |
@ -1,20 +0,0 @@ |
|||
#ifndef FETCHSHOWID_H |
|||
#define FETCHSHOWID_H |
|||
#include <QNetworkAccessManager> |
|||
#include <QNetworkReply> |
|||
#include <QObject> |
|||
#include <QDebug> |
|||
#include <QString> |
|||
|
|||
|
|||
class FetchShowID : public QObject |
|||
{ |
|||
public: |
|||
FetchShowID(); |
|||
void Fetch(); |
|||
|
|||
private: |
|||
QNetworkAccessManager* n_manager; |
|||
}; |
|||
|
|||
#endif // FETCHSHOWID_H
|
@ -1,28 +0,0 @@ |
|||
<RCC> |
|||
<qresource prefix="/"> |
|||
<file>ui/main.qml</file> |
|||
<file>ui/MenuToolbar.qml</file> |
|||
<file>ui/MenuButton.qml</file> |
|||
<file>ui/PgLive.qml</file> |
|||
<file>ui/PgNews.qml</file> |
|||
<file>ui/AboutProgram.qml</file> |
|||
<file>ui/AudioPlayer.qml</file> |
|||
<file>ui/MediaButton.qml</file> |
|||
<file>Resources/pause-button.svg</file> |
|||
<file>Resources/logo.png</file> |
|||
<file>Resources/play-button.svg</file> |
|||
<file>Resources/menu-background.png</file> |
|||
<file>Resources/dark_leather.png</file> |
|||
<file>Resources/menubtn-background.png</file> |
|||
<file>Resources/blago.png</file> |
|||
<file>Resources/tangra.ico</file> |
|||
<file>Resources/KellySlab-Regular.ttf</file> |
|||
<file>Resources/news-icon.png</file> |
|||
<file>Resources/buuf-pause.png</file> |
|||
<file>Resources/buuf-play.png</file> |
|||
<file>Resources/playbtn-frame.png</file> |
|||
<file>Resources/live.png</file> |
|||
<file>Resources/news.png</file> |
|||
<file>Resources/podcast.png</file> |
|||
</qresource> |
|||
</RCC> |
@ -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" |
|||
|
|||
} |
|||
|
@ -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() |
|||
} |
|||
} |
@ -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" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
@ -0,0 +1,21 @@ |
|||
import QtQuick |
|||
import QtQuick.Controls |
|||
|
|||
Text { |
|||
height: 25 |
|||
width: newsList.width |
|||
id: titleText |
|||
textFormat: Text.RichText |
|||
text: "<style>a:link { color: \"#f9be30\"; font-size: 12px; }</style> <a href=\"" |
|||
+ link + "\">" + title + "</a>" |
|||
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 |
|||
} |
|||
} |
@ -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 |
|||
} |
|||
} |
|||
|
|||
} |
|||
|