Large update. Added Video, Image and Live item views. Added Live search

This commit is contained in:
Digital Artifex
2026-08-05 19:58:24 -04:00
parent 5b2500c841
commit e5627742d2
46 changed files with 3416 additions and 578 deletions
+92 -24
View File
@@ -15,6 +15,15 @@ Item
property int resultWidth: 256
property int resultHeight: 245
property bool popup: false
property bool loading: packsModel.state === NewestPacksModel.Loading ||
imagesModel.state === FeaturedImagesModel.Loading ||
videosModel.state === FeaturedVideosModel.Loading;
onWidthChanged:() => {
packsModel.resultsPerPage = resultsPerRow
imagesModel.resultsPerPage = resultsPerRow
videosModel.resultsPerPage = resultsPerRow
}
clip: true
@@ -23,19 +32,19 @@ Item
NewestPacksModel
{
id: packsModel
resultsPerPage: homePageRoot.resultsPerRow
resultsPerPage: 0
}
FeaturedImagesModel
{
id: imagesModel
resultsPerPage: homePageRoot.resultsPerRow
resultsPerPage: 0
}
FeaturedVideosModel
{
id: videosModel
resultsPerPage: homePageRoot.resultsPerRow
resultsPerPage: 0
}
Rectangle
@@ -46,6 +55,7 @@ Item
ColumnLayout
{
id: resultsLayout
visible: opacity > 0.01
anchors.fill: parent
anchors.margins: Constants.mediumMargin
@@ -95,9 +105,14 @@ Item
onTriggered: () => packsPaginator.currentIndex = parent.index
function onViewMoreTriggered()
onViewMoreTriggered: () =>
{
showWallpaperPopup(parent.index)
}
onThumbnailChanged: () =>
{
console.log(index + " " + thumbnail + " " + parent.thumbnail)
}
}
}
@@ -196,12 +211,8 @@ Item
pexels: true
selected: videosPaginator.currentIndex === parent.index
onTriggered: () => packsPaginator.currentIndex = parent.index
onViewMoreTriggered:() =>
{
viewMoreImagePopup.opacity = 1
}
onTriggered: () => videosPaginator.currentIndex = parent.index
onViewMoreTriggered:() => showVideoPopup(parent.index)
}
}
}
@@ -232,6 +243,7 @@ Item
id: popupContainer
anchors.fill: parent
opacity: 0
visible: opacity > 0.01
color: palette.base
ImageView
@@ -239,6 +251,39 @@ Item
id: viewMoreImagePopup
anchors.fill: parent
opacity: 0
visible: opacity > 0.01
Behavior on opacity {
NumberAnimation
{
duration: 250
}
}
}
VideoView
{
id: viewMoreVideoPopup
anchors.fill: parent
opacity: 0
visible: opacity > 0.01
//model: videosModel.itemModel
Behavior on opacity {
NumberAnimation
{
duration: 250
}
}
}
PackView
{
id: viewMoreWallpaperPopup
anchors.fill: parent
opacity: 0
visible: opacity > 0.01
//model: videosModel.itemModel
Behavior on opacity {
NumberAnimation
@@ -259,9 +304,7 @@ Item
states: [
State {
name: "loading"
when: packsModel.state === NewestPacksModel.Loading ||
imagesModel.state === FeaturedImagesModel.Loading ||
videosModel.state === FeaturedVideosModel.Loading;
when: homePageRoot.loading
PropertyChanges
{
@@ -319,7 +362,6 @@ Item
property: "opacity";
}
}
]
function showImagePopup(index)
@@ -328,30 +370,56 @@ Item
viewMoreImagePopup.authorUrl = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.AuthorUrlRole)
viewMoreImagePopup.description = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.DescriptionRole)
viewMoreImagePopup.uuid = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.UuidRole)
viewMoreImagePopup.thumbnail = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.ThumbnailRole)
viewMoreImagePopup.small = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.SmallUrlRole)
viewMoreImagePopup.medium = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.MediumUrlRole)
viewMoreImagePopup.large = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.LargeUrlRole)
viewMoreImagePopup.extraLarge = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.ExtraLargeUrlRole)
viewMoreImagePopup.thumbnail = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.LargeThumbnailRole)
viewMoreImagePopup.original = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.OriginalUrlRole)
viewMoreImagePopup.portrait = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.PortraitUrlRole)
viewMoreImagePopup.landscape = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.LandscapeUrlRole)
viewMoreImagePopup.smallSize = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.SmallSizeRole)
viewMoreImagePopup.mediumSize = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.MediumSizeRole)
viewMoreImagePopup.largeSize = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.LargeSizeRole)
viewMoreImagePopup.extraLargeSize = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.ExtraLargeSizeRole)
viewMoreImagePopup.originalSize = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.OriginalSizeRole)
viewMoreImagePopup.backgroundPortrait = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.BackgroundPortraitRole)
viewMoreImagePopup.backgroundLandscape = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.BackgroundLandscapeRole)
viewMoreImagePopup.fullScreen = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.ScreenUrlRole)
viewMoreImagePopup.portraitSize = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.PortraitSizeRole)
viewMoreImagePopup.landscapeSize = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.LandscapeSizeRole)
viewMoreImagePopup.fullScreenSize = imagesModel.data(imagesModel.index(index,0), FeaturedImagesModel.ScreenSizeRole)
viewMoreImagePopup.opacity = 1
popupContainer.opacity = 1
resultsLayout.opacity = 0
homePageRoot.popup = true
}
function showVideoPopup(index)
{
videosModel.setItem(index)
viewMoreVideoPopup.author = videosModel.data(videosModel.index(index,0), FeaturedVideosModel.AuthorRole)
viewMoreVideoPopup.authorUrl = videosModel.data(videosModel.index(index,0), FeaturedVideosModel.AuthorUrlRole)
viewMoreVideoPopup.uuid = videosModel.data(videosModel.index(index,0), FeaturedVideosModel.UuidRole)
viewMoreVideoPopup.thumbnail = videosModel.data(videosModel.index(index,0), FeaturedVideosModel.ThumbnailRole)
viewMoreVideoPopup.modelIndex = index
viewMoreVideoPopup.model = videosModel.itemModel
viewMoreVideoPopup.opacity = 1
resultsLayout.opacity = 0
popupContainer.opacity = 1
homePageRoot.popup = true
}
function showWallpaperPopup(index)
{
viewMoreWallpaperPopup.author = packsModel.data(packsModel.index(index,0), NewestPacksModel.AuthorRole)
viewMoreWallpaperPopup.authorId = packsModel.data(packsModel.index(index,0), NewestPacksModel.AuthorIdRole)
viewMoreWallpaperPopup.description = packsModel.data(packsModel.index(index,0), NewestPacksModel.DescriptionRole)
viewMoreWallpaperPopup.thumbnail = packsModel.data(packsModel.index(index,0), NewestPacksModel.ThumbnailRole)
viewMoreWallpaperPopup.opacity = 1
popupContainer.opacity = 1
resultsLayout.opacity = 0
homePageRoot.popup = true
}
function closePopup()
{
viewMoreImagePopup.opacity = 0
viewMoreVideoPopup.opacity = 0
viewMoreWallpaperPopup.opacity = 0
popupContainer.opacity = 0
resultsLayout.opacity = 1
homePageRoot.popup = false
}
}
+21 -21
View File
@@ -14,6 +14,8 @@ Item
property string query
readonly property bool searchable: paginator.searchable
property bool popup: false
property int resultWidth: 256
property int resultHeight: 245
ImageSearchModel
{
@@ -33,8 +35,8 @@ Item
{
id: resultDelegate
width: 256
height: 245
width: resultWidth
height: resultHeight
required property string author
required property string description
@@ -50,6 +52,7 @@ Item
description: parent.description
thumbnail: parent.thumbnail
uuid: parent.uuid
pexels: true
selected: paginator.currentIndex === parent.index
onTriggered: () => paginator.currentIndex = parent.index
@@ -93,27 +96,23 @@ Item
function showImagePopup(index)
{
viewMoreImagePopup.author = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.AuthorRole)
viewMoreImagePopup.authorUrl = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.AuthorUrlRole)
viewMoreImagePopup.description = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.DescriptionRole)
viewMoreImagePopup.uuid = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.UuidRole)
viewMoreImagePopup.thumbnail = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.ThumbnailRole)
viewMoreImagePopup.small = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.SmallUrlRole)
viewMoreImagePopup.medium = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.MediumUrlRole)
viewMoreImagePopup.large = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.LargeUrlRole)
viewMoreImagePopup.extraLarge = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.ExtraLargeUrlRole)
viewMoreImagePopup.original = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.OriginalUrlRole)
viewMoreImagePopup.portrait = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.PortraitUrlRole)
viewMoreImagePopup.landscape = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.LandscapeUrlRole)
viewMoreImagePopup.smallSize = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.SmallSizeRole)
viewMoreImagePopup.mediumSize = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.MediumSizeRole)
viewMoreImagePopup.largeSize = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.LargeSizeRole)
viewMoreImagePopup.extraLargeSize = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.ExtraLargeSizeRole)
viewMoreImagePopup.originalSize = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.OriginalSizeRole)
viewMoreImagePopup.portraitSize = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.PortraitSizeRole)
viewMoreImagePopup.landscapeSize = searchModel.data(searchModel.index(index,0), FeaturedImagesModel.LandscapeSizeRole)
viewMoreImagePopup.author = searchModel.data(searchModel.index(index,0), ImageSearchModel.AuthorRole)
viewMoreImagePopup.authorUrl = searchModel.data(searchModel.index(index,0), ImageSearchModel.AuthorUrlRole)
viewMoreImagePopup.description = searchModel.data(searchModel.index(index,0), ImageSearchModel.DescriptionRole)
viewMoreImagePopup.uuid = searchModel.data(searchModel.index(index,0), ImageSearchModel.UuidRole)
viewMoreImagePopup.thumbnail = searchModel.data(searchModel.index(index,0), ImageSearchModel.LargeThumbnailRole)
viewMoreImagePopup.original = searchModel.data(searchModel.index(index,0), ImageSearchModel.OriginalUrlRole)
viewMoreImagePopup.portrait = searchModel.data(searchModel.index(index,0), ImageSearchModel.PortraitUrlRole)
viewMoreImagePopup.landscape = searchModel.data(searchModel.index(index,0), ImageSearchModel.LandscapeUrlRole)
viewMoreImagePopup.backgroundPortrait = searchModel.data(searchModel.index(index,0), ImageSearchModel.BackgroundPortraitRole)
viewMoreImagePopup.backgroundLandscape = searchModel.data(searchModel.index(index,0), ImageSearchModel.BackgroundLandscapeRole)
viewMoreImagePopup.fullScreen = searchModel.data(searchModel.index(index,0), ImageSearchModel.ScreenUrlRole)
viewMoreImagePopup.portraitSize = searchModel.data(searchModel.index(index,0), ImageSearchModel.PortraitSizeRole)
viewMoreImagePopup.landscapeSize = searchModel.data(searchModel.index(index,0), ImageSearchModel.LandscapeSizeRole)
viewMoreImagePopup.fullScreenSize = searchModel.data(searchModel.index(index,0), ImageSearchModel.ScreenSizeRole)
viewMoreImagePopup.opacity = 1
popupContainer.opacity = 1
paginator.opacity = 0
rootItem.popup = true
}
@@ -121,6 +120,7 @@ Item
{
viewMoreImagePopup.opacity = 0
popupContainer.opacity = 0
paginator.opacity = 1
rootItem.popup = false
}
}
+61 -6
View File
@@ -11,6 +11,9 @@ Item
property string query
readonly property bool searchable: paginator.searchable
property bool popup: false
property int resultWidth: 256
property int resultHeight: 245
PackSearchModel
{
@@ -39,6 +42,7 @@ Item
required property string uuid
required property string thumbnail
required property string authorId
required property int index
SearchResultItem
{
@@ -47,15 +51,66 @@ Item
description: parent.description
thumbnail: parent.thumbnail
uuid: parent.uuid
selected: paginator.currentIndex === parent.index
selected: resultDelegate.highlighted
}
onTriggered: () => paginator.currentIndex = parent.index
MouseArea
{
anchors.fill: parent
onClicked: paginator.currentIndex = index
onViewMoreTriggered: () =>
{
showWallpaperPopup(parent.index)
}
}
}
}
Rectangle
{
id: popupContainer
anchors.fill: parent
opacity: 0
color: palette.base
PackView
{
id: viewMoreWallpaperPopup
anchors.fill: parent
opacity: 0
visible: opacity > 0.01
//model: videosModel.itemModel
Behavior on opacity {
NumberAnimation
{
duration: 250
}
}
}
Behavior on opacity {
NumberAnimation
{
duration: 250
}
}
}
function closePopup()
{
viewMoreWallpaperPopup.opacity = 0
popupContainer.opacity = 0
paginator.opacity = 1
rootItem.popup = false
}
function showWallpaperPopup(index)
{
viewMoreWallpaperPopup.author = searchModel.data(searchModel.index(index,0), PackSearchModel.AuthorRole)
viewMoreWallpaperPopup.authorId = searchModel.data(searchModel.index(index,0), PackSearchModel.AuthorIdRole)
viewMoreWallpaperPopup.description = searchModel.data(searchModel.index(index,0), PackSearchModel.DescriptionRole)
viewMoreWallpaperPopup.thumbnail = searchModel.data(searchModel.index(index,0), PackSearchModel.ThumbnailRole)
viewMoreWallpaperPopup.opacity = 1
popupContainer.opacity = 1
paginator.opacity = 0
rootItem.popup = true
}
}
+73 -13
View File
@@ -13,6 +13,9 @@ Item
property string query
readonly property bool searchable: paginator.searchable
property bool popup: false
property int resultWidth: 256
property int resultHeight: 245
VideoSearchModel
{
@@ -27,37 +30,94 @@ Item
anchors.fill: parent
model: searchModel
loading: model.state === VideoSearchModel.Loading
visible: opacity > 0.01
delegate: ItemDelegate
{
id: resultDelegate
width: 256
height: 245
width: resultWidth
height: resultHeight
required property string author
required property string description
required property string uuid
required property string thumbnail
required property string author
required property string authorId
required property string authorUrl
required property string thumbnail
required property int index
SearchResultItem
{
anchors.fill: parent
title: parent.author
description: parent.description
author: parent.author
description: qsTr("No description available")
thumbnail: parent.thumbnail
uuid: parent.uuid
pexels: true
selected: paginator.currentIndex === parent.index
selected: resultDelegate.highlighted
}
onTriggered: () => paginator.currentIndex = parent.index
MouseArea
{
anchors.fill: parent
onClicked: paginator.currentIndex = index
onViewMoreTriggered: () =>
{
showVideoPopup(parent.index)
}
}
}
}
Rectangle
{
id: popupContainer
anchors.fill: parent
opacity: 0
visible: opacity > 0.01
color: palette.base
VideoView
{
id: viewMoreVideoPopup
anchors.fill: parent
opacity: 0
Behavior on opacity
{
NumberAnimation
{
duration: 250
}
}
}
Behavior on opacity
{
NumberAnimation
{
duration: 250
}
}
}
function showVideoPopup(index)
{
searchModel.setItem(index)
viewMoreVideoPopup.author = searchModel.data(searchModel.index(index,0), VideoSearchModel.AuthorRole)
viewMoreVideoPopup.authorUrl = searchModel.data(searchModel.index(index,0), VideoSearchModel.AuthorUrlRole)
viewMoreVideoPopup.uuid = searchModel.data(searchModel.index(index,0), VideoSearchModel.UuidRole)
viewMoreVideoPopup.thumbnail = searchModel.data(searchModel.index(index,0), VideoSearchModel.ThumbnailRole)
viewMoreVideoPopup.modelIndex = index
viewMoreVideoPopup.model = searchModel.itemModel
viewMoreVideoPopup.opacity = 1
paginator.opacity = 0
popupContainer.opacity = 1
rootItem.popup = true
}
function closePopup()
{
viewMoreVideoPopup.opacity = 0
popupContainer.opacity = 0
paginator.opacity = 1
rootItem.popup = false
}
}