This repository has been archived on 2023-11-19. You can view files and clone it, but cannot push or open issues or pull requests.
goober-bb10/assets/ProfilePage.qml
2016-11-11 16:10:08 -08:00

290 lines
11 KiB
QML

/*
* Copyright (C) 2016 Morgan McMillian <gilag@monkeystew.com>
*
* This file is apart of the Goober application, a client for pnut.io
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import bb.cascades 1.4
import org.labsquare 1.0
Page {
property variant user
property variant theme: Application.themeSupport.theme.colorTheme.style
property string lorem: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse non enim tellus. Donec vestibulum enim urna, eget faucibus diam commodo a. Donec eget hendrerit metus. Pellentesque vehicula nisi nec vehicula ullamcorper. Aliquam a elit eget mi fringilla porta fermentum eget eros. Phasellus vestibulum nulla sed elit congue adipiscing. Cras imperdiet urna ac ipsum volutpat lobortis. Maecenas vehicula tortor at viverra convallis. Curabitur nibh massa, tristique id felis ut, venenatis faucibus dui. Donec fringilla, mi nec tincidunt dignissim, neque nunc semper mi, quis rutrum diam turpis sit amet erat. Cras a sodales nisi. Nunc sit amet diam sed lectus molestie cursus convallis et erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis vitae varius leo. Mauris eu leo a nunc bibendum rutrum euismod et ipsum. "
signal follow(string uid)
signal unfollow(string uid)
signal block(string uid)
signal unblock(string uid)
signal mute(string uid)
signal unmute(string uid)
signal getPosts(string uid)
ScrollView {
Container {
Container {
layout: DockLayout {
}
horizontalAlignment: HorizontalAlignment.Fill
preferredHeight: cover.height
Container {
Container {
opacity: 0.6
WebImageView {
id: cover
preferredWidth: 1440
maxHeight: ui.du(24)
scalingMethod: ScalingMethod.AspectFill
//imageSource: "asset:///icons/default_cover.png"
url: user.content.cover_image.link
}
}
}
Container {
layout: StackLayout {
orientation: LayoutOrientation.LeftToRight
}
topPadding: ui.sdu(3)
leftPadding: ui.sdu(3)
verticalAlignment: VerticalAlignment.Center
Container {
background: (theme === VisualStyle.Bright) ? Color.create("#e9e9e9") : Color.create("#282828")
WebImageView {
//imageSource: "asset:///icons/laughing_man.png"
url: user.content.avatar_image.link
maxHeight: ui.du(14)
maxWidth: ui.du(14)
}
}
Container {
leftPadding: ui.sdu(3)
rightPadding: ui.sdu(3)
horizontalAlignment: HorizontalAlignment.Fill
//background: (theme === VisualStyle.Bright) ? Color.create("#e9e9e9") : Color.create("#282828")
Container {
Label {
//text: "Morgan McMillian"
text: user.name
textStyle.fontWeight: FontWeight.Bold
textStyle.fontSize: FontSize.Large
}
}
Container {
Label {
//text: "thrrgilag"
text: user.username
textStyle.fontSize: FontSize.Medium
}
}
}
}
}
Container {
topPadding: ui.sdu(3)
leftPadding: ui.sdu(3)
rightPadding: ui.sdu(3)
layout: DockLayout {
}
horizontalAlignment: HorizontalAlignment.Fill
Container {
preferredWidth: ui.du(45)
Label {
//text: lorem
text: user.content.html
multiline: true
textFormat: TextFormat.Html
}
}
Container {
horizontalAlignment: HorizontalAlignment.Right
rightPadding: ui.sdu(3)
Container {
id: counts
layout: StackLayout {
orientation: LayoutOrientation.LeftToRight
}
horizontalAlignment: HorizontalAlignment.Right
Label {
text: qsTr("Following")
}
Label {
text: user.counts.following
}
}
Container {
layout: StackLayout {
orientation: LayoutOrientation.LeftToRight
}
horizontalAlignment: HorizontalAlignment.Right
Label {
text: qsTr("Followers")
}
Label {
text: user.counts.followers
}
}
Container {
layout: StackLayout {
orientation: LayoutOrientation.LeftToRight
}
horizontalAlignment: HorizontalAlignment.Right
Label {
text: qsTr("Posts")
}
Label {
text: user.counts.posts
}
}
Container {
layout: StackLayout {
orientation: LayoutOrientation.LeftToRight
}
horizontalAlignment: HorizontalAlignment.Right
Label {
text: qsTr("Bookmarks")
}
Label {
text: user.counts.bookmarks
}
}
}
}
SegmentedControl {
Option {
id: opt_posts
text: qsTr("Posts")
}
Option {
id: opt_following
text: qsTr("Following")
}
Option {
id: opt_followers
text: qsTr("Followers")
}
onSelectedOptionChanged: {
if (selectedOption == opt_posts) {
threadModel.clear()
getPosts(user.id)
} else if (selectedOption == opt_following) {
threadModel.clear()
// do something
} else if (selectedOption == opt_followers) {
threadModel.clear()
// do something
}
}
}
ListView {
id: threadView
//preferredHeight: threadModel.size()
//preferredHeight: ( height of content row + content padding ) * count of entires in ListView
dataModel: ArrayDataModel {
id: threadModel
}
listItemComponents: [
ListItemComponent {
id: root
PostItem {
id: postitem
}
}
]
function sendReply(text, pid) {
pnut.sendReply(text, pid);
}
function getUserName() {
return _app.setting("username")
}
function viewProfile(userobj) {
var page = profilePage.createObject();
page.user = userobj
page.follow.connect(follow)
page.unfollow.connect(unfollow)
page.block.connect(block)
page.unblock.connect(unblock)
page.mute.connect(mute)
page.unmute.connect(unmute)
nav.push(page);
}
function ccOnReply() {
if (_app.setting("cc") === "true") {
return true
} else {
return false
}
}
}
}
}
function loadThread(data) {
threadModel.append(data);
}
actions: [
ActionItem {
title: (user.you_follow) ? qsTr("Unfollow") : qsTr("Follow")
ActionBar.placement: ActionBarPlacement.OnBar
onTriggered: {
if (user.you_follow) {
unfollow(user.id)
} else {
follow(user.id)
}
}
imageSource: (user.you_follow) ? "asset:///icons/minus-circle.png" : "asset:///icons/ic_add.png"
enabled: (_app.setting("username") === user.username) ? false : true
},
ActionItem {
title: (user.you_muted) ? qsTr("Unmute") : qsTr("Mute")
ActionBar.placement: ActionBarPlacement.InOverflow
onTriggered: {
if (user.you_muted) {
unmute(user.id)
} else {
mute(user.id)
}
}
imageSource: (user.you_muted) ? "asset:///icons/bell.png" : "asset:///icons/bell-slash.png"
enabled: (_app.setting("username") === user.username) ? false : true
},
ActionItem {
title: (user.you_blocked) ? qsTr("Unblock") : qsTr("Block")
ActionBar.placement: ActionBarPlacement.InOverflow
onTriggered: {
if (user.you_blocked) {
unblock(user.id)
} else {
block(user.id)
}
}
imageSource: "asset:///icons/ic_cancel.png"
enabled: (_app.setting("username") === user.username) ? false : true
}
]
}