Merge branch 'notifications-improvements' into ui-improvements

This commit is contained in:
molan-git 2020-06-09 18:59:39 +02:00
commit 4218867748
6 changed files with 75 additions and 27 deletions

View file

@ -53,6 +53,7 @@ HEADERS += src/dbusAdaptor.h
HEADERS += src/dbus.h HEADERS += src/dbus.h
DISTFILES += qml/harbour-tooter.qml \ DISTFILES += qml/harbour-tooter.qml \
qml/images/tooter-cover.svg \
qml/pages/ConversationPage.qml \ qml/pages/ConversationPage.qml \
qml/pages/ProfilePage.qml \ qml/pages/ProfilePage.qml \
qml/pages/SettingsPage.qml \ qml/pages/SettingsPage.qml \
@ -75,7 +76,6 @@ DISTFILES += qml/harbour-tooter.qml \
qml/pages/Browser.qml \ qml/pages/Browser.qml \
qml/lib/API.js \ qml/lib/API.js \
qml/images/icon-s-following \ qml/images/icon-s-following \
qml/images/tooter.svg \
qml/images/icon-m-emoji.svg \ qml/images/icon-m-emoji.svg \
qml/images/icon-m-profile.svg \ qml/images/icon-m-profile.svg \
qml/images/icon-l-profile.svg \ qml/images/icon-l-profile.svg \

View file

@ -46,19 +46,21 @@ CoverBackground {
break; break;
} }
} }
Image { Image {
id: bg id: bg
source: "../images/tooter-cover.svg"
horizontalAlignment: Image.AlignLeft
verticalAlignment: Image.AlignBottom
fillMode: Image.PreserveAspectFit
anchors { anchors {
bottom : parent.bottom bottom : parent.bottom
left: parent.left left: parent.left
right: parent.right right: parent.right
top: parent.top top: parent.top
} }
horizontalAlignment: Image.AlignLeft
verticalAlignment: Image.AlignBottom
fillMode: Image.PreserveAspectFit
source: "../images/tooter.svg"
} }
Timer { Timer {
id: timer id: timer
interval: 60*1000 interval: 60*1000
@ -69,34 +71,34 @@ CoverBackground {
Image { Image {
id: iconNot id: iconNot
source: "image://theme/icon-s-alarm?" + Theme.highlightColor
anchors { anchors {
left: parent.left left: parent.left
top: parent.top top: parent.top
leftMargin: Theme.paddingLarge leftMargin: Theme.paddingLarge
topMargin: Theme.paddingLarge topMargin: Theme.paddingLarge
} }
source: "image://theme/icon-s-alarm?" + Theme.highlightColor
} }
Label { Label {
id: notificationsLbl id: notificationsLbl
text: " "
color: Theme.highlightColor
anchors { anchors {
left: iconNot.right left: iconNot.right
leftMargin: Theme.paddingMedium leftMargin: Theme.paddingMedium
verticalCenter: iconNot.verticalCenter verticalCenter: iconNot.verticalCenter
} }
text: " "
color: Theme.highlightColor
} }
Label { Label {
text: "Tooter"
color: Theme.secondaryColor
anchors { anchors {
right: parent.right right: parent.right
rightMargin: Theme.paddingLarge rightMargin: Theme.paddingLarge
verticalCenter: iconNot.verticalCenter verticalCenter: iconNot.verticalCenter
} }
text: "Tooter"
color: Theme.primaryColor
} }
signal activateapp(string person, string notice) signal activateapp(string person, string notice)

View file

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -67,7 +67,7 @@ Page {
} }
SilicaListView { SilicaListView {
id: conversationList id: myList
header: PageHeader { header: PageHeader {
title: headerTitle // pageTitle pushed from MainPage.qml or VisualContainer.qml title: headerTitle // pageTitle pushed from MainPage.qml or VisualContainer.qml
} }

View file

@ -5,12 +5,12 @@ import QtMultimedia 5.0
FullscreenContentPage { FullscreenContentPage {
id: mediaPage id: mediaPage
allowedOrientations: Orientation.All
property string type: "" property string type: ""
property string previewURL: "" property string previewURL: ""
property string mediaURL: "" property string mediaURL: ""
allowedOrientations: Orientation.All
Component.onCompleted: function(){ Component.onCompleted: function(){
console.log(type) console.log(type)
console.log(previewURL) console.log(previewURL)
@ -29,10 +29,10 @@ FullscreenContentPage {
Flickable { Flickable {
id: videoFlickable id: videoFlickable
visible: false visible: false
anchors.fill: parent clip: true
contentWidth: imageContainer.width contentWidth: imageContainer.width
contentHeight: imageContainer.height contentHeight: imageContainer.height
clip: true anchors.fill: parent
Image { Image {
id: videoPreview id: videoPreview
@ -45,7 +45,7 @@ FullscreenContentPage {
id: video id: video
anchors.fill: parent anchors.fill: parent
onErrorStringChanged: function(){ onErrorStringChanged: function(){
videoError.visible = true; videoError.visible = true
} }
onStatusChanged: { onStatusChanged: {
console.log(status) console.log(status)
@ -84,18 +84,21 @@ FullscreenContentPage {
} }
} }
onStopped: function() { onStopped: function() {
stop() if (video.duration < 30000)
video.play()
else
video.stop()
} }
IconButton { IconButton {
id: playerIcon id: playerIcon
icon.source: "image://theme/icon-m-play"
anchors { anchors {
left: parent.left left: parent.left
bottom: parent.bottom bottom: parent.bottom
leftMargin: Theme.horizontalPageMargin leftMargin: Theme.horizontalPageMargin
bottomMargin: Theme.horizontalPageMargin bottomMargin: Theme.horizontalPageMargin
} }
icon.source: "image://theme/icon-m-play"
onClicked: function() { onClicked: function() {
if (video.playbackState === MediaPlayer.PlayingState) if (video.playbackState === MediaPlayer.PlayingState)
video.pause() video.pause()
@ -161,7 +164,7 @@ FullscreenContentPage {
clip: true clip: true
anchors.fill: parent anchors.fill: parent
onHeightChanged: if (imagePreview.status === Image.Ready) { onHeightChanged: if (imagePreview.status === Image.Ready) {
imagePreview.fitToScreen(); imagePreview.fitToScreen()
} }
Item { Item {
@ -218,11 +221,11 @@ FullscreenContentPage {
PinchArea { PinchArea {
id: pinchArea id: pinchArea
opacity: 0.3
property real minScale: 1.0 property real minScale: 1.0
property real maxScale: 3.0 property real maxScale: 3.0
opacity: 0.3
anchors.fill: parent anchors.fill: parent
enabled: imagePreview.status === Image.Ready enabled: imagePreview.status === Image.Ready
pinch.target: imagePreview pinch.target: imagePreview

View file

@ -10,8 +10,9 @@ BackgroundItem {
signal navigateTo(string link) signal navigateTo(string link)
width: parent.width width: parent.width
height: mnu.height + miniHeader.height + (typeof attachments !== "undefined" && attachments.count ? media.height + Theme.paddingLarge + Theme.paddingMedium: Theme.paddingLarge) + lblContent.height + Theme.paddingLarge + (miniStatus.visible ? miniStatus.height : 0) height: if (myList.type === "notifications" && ( model.type === "favourite" || model.type === "reblog" )) {
mnu.height + miniHeader.height + Theme.paddingLarge + lblContent.height + Theme.paddingLarge + (miniStatus.visible ? miniStatus.height : 0)
} else mnu.height + miniHeader.height + (typeof attachments !== "undefined" && attachments.count ? media.height + Theme.paddingLarge + Theme.paddingMedium: Theme.paddingLarge) + lblContent.height + Theme.paddingLarge + (miniStatus.visible ? miniStatus.height : 0) + (iconDirectMsg.visible ? iconDirectMsg.height : 0)
Rectangle { Rectangle {
id: bgDirect id: bgDirect
x: 0 x: 0
@ -37,6 +38,20 @@ BackgroundItem {
} }
} */ } */
Rectangle {
id: bgNotifications
x: 0
y: 0
visible: myList.type === "notifications" && ( model.type === "favourite" || model.type === "reblog" )
width: parent.width
height: parent.height
opacity: 0.5
gradient: Gradient {
GradientStop { position: -0.5; color: "transparent" }
GradientStop { position: 0.4; color: Theme.highlightDimmerColor }
}
}
MiniStatus { MiniStatus {
id: miniStatus id: miniStatus
anchors { anchors {
@ -83,6 +98,13 @@ BackgroundItem {
} }
} }
Rectangle {
visible: myList.type === "notifications" && ( model.type === "favourite" || model.type === "reblog" )
opacity: 0.5
color: Theme.highlightDimmerColor
anchors.fill: avatar
}
Image { Image {
id: iconTR id: iconTR
visible: typeof status_reblogged !== "undefined" && status_reblogged visible: typeof status_reblogged !== "undefined" && status_reblogged
@ -96,8 +118,23 @@ BackgroundItem {
} }
} }
Image {
id: iconDirectMsg
visible: status_visibility == 'direct'
width: Theme.iconSizeMedium
height: width
source: "image://theme/icon-m-mail"
anchors {
horizontalCenter: avatar.horizontalCenter
top: avatar.bottom
topMargin: Theme.paddingMedium
left: avatar.left
}
}
Rectangle { Rectangle {
color: Theme.highlightDimmerColor id: bgReblogAvatar
color: Theme.secondaryColor
width: Theme.iconSizeSmall width: Theme.iconSizeSmall
height: width height: width
visible: typeof status_reblog !== "undefined" && status_reblog visible: typeof status_reblog !== "undefined" && status_reblog
@ -109,6 +146,7 @@ BackgroundItem {
} }
Image { Image {
id: reblogAvatar
asynchronous: true asynchronous: true
smooth: true smooth: true
opacity: status === Image.Ready ? 1.0 : 0.0 opacity: status === Image.Ready ? 1.0 : 0.0
@ -136,9 +174,13 @@ BackgroundItem {
text: content.replace(new RegExp("<a ", 'g'), '<a style="text-decoration: none; color:'+(pressed ? Theme.secondaryColor : Theme.highlightColor)+'" ') text: content.replace(new RegExp("<a ", 'g'), '<a style="text-decoration: none; color:'+(pressed ? Theme.secondaryColor : Theme.highlightColor)+'" ')
textFormat: Text.RichText textFormat: Text.RichText
font.pixelSize: Theme.fontSizeSmall font.pixelSize: Theme.fontSizeSmall
linkColor: Theme.highlightColor linkColor: if (myList.type === "notifications" && ( model.type === "favourite" || model.type === "reblog" )) {
Theme.secondaryHighlightColor
} else Theme.highlightColor
wrapMode: Text.Wrap wrapMode: Text.Wrap
color: (pressed ? Theme.highlightColor : (!highlight ? Theme.primaryColor : Theme.secondaryColor)) color: if (myList.type === "notifications" && ( model.type === "favourite" || model.type === "reblog" )) {
(pressed ? Theme.secondaryHighlightColor : (!highlight ? Theme.secondaryColor : Theme.secondaryHighlightColor))
} else (pressed ? Theme.highlightColor : (!highlight ? Theme.primaryColor : Theme.secondaryColor))
height: if (model.type === "follow") { height: if (model.type === "follow") {
Theme.paddingLarge Theme.paddingLarge
} else content.length ? (contentWarningLabel.paintedHeight > paintedHeight ? contentWarningLabel.paintedHeight : paintedHeight) : 0 } else content.length ? (contentWarningLabel.paintedHeight > paintedHeight ? contentWarningLabel.paintedHeight : paintedHeight) : 0
@ -213,6 +255,7 @@ BackgroundItem {
MediaBlock { MediaBlock {
id: media id: media
visible: myList.type !== "notifications" && ( model.type !== "favourite" || model.type !== "reblog" )
model: typeof attachments !== "undefined" ? attachments : Qt.createQmlObject('import QtQuick 2.0; ListModel { }', Qt.application, 'InternalQmlObject'); model: typeof attachments !== "undefined" ? attachments : Qt.createQmlObject('import QtQuick 2.0; ListModel { }', Qt.application, 'InternalQmlObject');
height: Theme.iconSizeExtraLarge * 2 height: Theme.iconSizeExtraLarge * 2
anchors { anchors {