@ -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 |
||||
|
*.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(BIN_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") |
||||
set(KF5_DEP_VERSION "5.40.0") |
set(CMAKE_AUTOMOC ON) |
||||
|
set(CMAKE_CXX_STANDARD 17) |
||||
# We need some parts of the ECM CMake helpers. |
set(CMAKE_CXX_STANDARD_REQUIRED ON) |
||||
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") |
|
||||
|
|
||||
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(.) |
qt_standard_project_setup(REQUIRES 6.5) |
||||
include_directories(${Qt5Core_PRIVATE_INCLUDE_DIRS}) |
|
||||
|
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON) |
set(CMAKE_INCLUDE_CURRENT_DIR ON) |
||||
set(CMAKE_AUTOMOC ON) |
set(CMAKE_AUTOMOC ON) |
||||
|
|
||||
include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE) |
if (WIN32) |
||||
include(KDEInstallDirs) |
set(QT_DEFAULT_MEDIA_BACKEND windows) |
||||
include(KDECMakeSettings) |
else() |
||||
|
set(QT_DEFAULT_MEDIA_BACKEND gstreamer) |
||||
include(ECMOptionalAddSubdirectory) |
endif() |
||||
include(ECMAddAppIcon) |
|
||||
include(ECMInstallIcons) |
list(APPEND QML_ASSETS |
||||
|
Assets/tangra.ico |
||||
|
Assets/pause-button.svg |
||||
add_subdirectory(Resources) |
Assets/logo.png |
||||
qt5_add_resources(RESOURCES qml.qrc) |
Assets/play-button.svg |
||||
|
Assets/menu-background.png |
||||
SET(SOURCES |
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 |
main.cpp |
||||
) |
tangratray.h tangratray.cpp |
||||
|
) |
||||
add_executable(tangraplay |
|
||||
${SOURCES} |
qt_add_qml_module(apptangraplay |
||||
${RESOURCES} |
URI TangraPlay |
||||
) |
VERSION 1.0 |
||||
|
RESOURCE_PREFIX /bpetrov.tangraplay/imports |
||||
qt5_use_modules(tangraplay Quick QuickControls2 Core Multimedia ) |
QML_FILES ui/main.qml |
||||
|
ui/AboutProgram.qml |
||||
target_link_libraries(tangraplay |
ui/AudioPlayer.qml |
||||
Qt5::Quick |
ui/MediaButton.qml |
||||
Qt5::QuickControls2 |
ui/MenuButton.qml |
||||
Qt5::Core |
ui/MenuToolbar.qml |
||||
Qt5::Widgets |
ui/PgLive.qml |
||||
Qt5::Gui |
ui/PgNews.qml |
||||
Qt5::Multimedia ) |
ui/NewsDelegate.qml |
||||
|
ui/CurrentShow.qml |
||||
install(TARGETS tangraplay DESTINATION ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) |
RESOURCES |
||||
|
${QML_ASSETS} |
||||
install(PROGRAMS org.petrovs_info.tangraplay.desktop DESTINATION ${KDE_INSTALL_APPDIR}) |
) |
||||
install(FILES org.petrovs_info.tangraplay.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) |
|
||||
|
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 QtQuick 2.0 |
||||
import QtMultimedia 5.15 |
import QtMultimedia |
||||
|
|
||||
Audio { |
|
||||
property variant quality: { |
|
||||
"low" : "http://stream-bg-01.radiotangra.com/Tangra-middle.m3u", |
|
||||
"high" : "http://stream-bg-01.radiotangra.com/Tangra-high.m3u" |
|
||||
} |
|
||||
|
|
||||
|
MediaPlayer { |
||||
|
audioOutput: AudioOutput {} |
||||
source: "http://stream-bg-01.radiotangra.com:8000/Tangra-high" |
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 2.0 |
||||
import QtQuick.Controls 2.15 |
import QtQuick.Controls 2.15 |
||||
|
|
||||
Item { |
Image { |
||||
id: container |
id: buttonIcon |
||||
x: 64 |
x: 64 |
||||
y: 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 { |
function changeIconState() { |
||||
id: buttonIcon |
|
||||
width: 64 |
|
||||
anchors.centerIn: parent |
|
||||
fillMode: Image.PreserveAspectFit |
|
||||
source: isClicked ? "../Resources/buuf-pause.png" : "../Resources/buuf-play.png" |
|
||||
|
|
||||
|
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 |
||||
import QtQuick.Window 2.12 |
import QtQuick.Controls |
||||
import Qt.labs.platform 1.1 |
import QtQml.XmlListModel |
||||
import QtMultimedia 5.15 |
|
||||
|
|
||||
Item { |
Item { |
||||
x: 190 |
x: 190 |
||||
y: 51 |
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 |
||||
|
} |
||||
|
} |
||||
|
|
||||
} |
} |
||||
|