import Style 1.0
import com.nextcloud.desktopclient 1.0
-RowLayout {
+Repeater {
id: root
- spacing: 20
-
property string objectType: ""
property variant linksForActionButtons: []
property variant linksContextMenu: []
signal triggerAction(int actionIndex)
signal showReplyField()
- Repeater {
- id: actionsRepeater
- // a max of maxActionButtons will get dispayed as separate buttons
- model: root.linksForActionButtons
-
- ActivityActionButton {
- id: activityActionButton
-
- Layout.minimumWidth: primaryButton ? Style.activityItemActionPrimaryButtonMinWidth : Style.activityItemActionSecondaryButtonMinWidth
- Layout.preferredHeight: parent.height
-
- verb: model.modelData.verb
- primaryButton: (model.index === 0 && verb !== "DELETE") || model.modelData.primary
- isTalkReplyButton: verb === "REPLY"
-
- text: model.modelData.label
-
- adjustedHeaderColor: Style.adjustedCurrentUserHeaderColor
-
- icon.source: model.modelData.imageSource ? model.modelData.imageSource + Style.adjustedCurrentUserHeaderColor : ""
- imageSourceHover: model.modelData.imageSourceHovered ? model.modelData.imageSourceHovered + Style.currentUserHeaderTextColor : ""
-
- onClicked: isTalkReplyButton ? root.showReplyField() : root.triggerAction(model.index)
- }
- }
-
- Loader {
- // actions that do not fit maxActionButtons limit, must be put into a context menu
- id: moreActionsButtonContainer
-
- Layout.preferredWidth: parent.height
- Layout.topMargin: Style.roundedButtonBackgroundVerticalMargins
- Layout.bottomMargin: Style.roundedButtonBackgroundVerticalMargins
- Layout.fillHeight: true
-
- active: root.displayActions && (root.linksContextMenu.length > 0)
- visible: active
+ model: root.linksForActionButtons
- sourceComponent: Button {
- id: moreActionsButton
+ CustomButton {
+ id: activityActionButton
- icon.source: "qrc:///client/theme/more.svg"
- icon.color: Style.ncTextColor
+ property string verb: model.modelData.verb
+ property bool isTalkReplyButton: verb === "REPLY"
- background: Rectangle {
- color: parent.hovered ? Style.lightHover : root.moreActionsButtonColor
- radius: width / 2
- }
+ Layout.alignment: Qt.AlignTop | Qt.AlignRight
- NCToolTip {
- visible: parent.hovered
- text: qsTr("Show more actions")
- }
+ hoverEnabled: true
+ padding: Style.smallSpacing
+ display: Button.TextOnly
- Accessible.name: qsTr("Show more actions")
+ text: model.modelData.label
- onClicked: moreActionsButtonContextMenu.popup(moreActionsButton.x, moreActionsButton.y);
+ icon.source: model.modelData.imageSource ? model.modelData.imageSource + Style.adjustedCurrentUserHeaderColor : ""
- Connections {
- target: root.flickable
+ onClicked: isTalkReplyButton ? root.showReplyField() : root.triggerAction(model.index)
- function onMovementStarted() {
- moreActionsButtonContextMenu.close();
- }
- }
- }
+ textColor: Style.adjustedCurrentUserHeaderColor
+ textColorHovered: Style.currentUserHeaderTextColor
+ contentsFont.bold: true
+ bgColor: Style.currentUserHeaderColor
}
}
import Style 1.0
import com.nextcloud.desktopclient 1.0
-RowLayout {
+Item {
id: root
property variant activityData: {{}}
signal dismissButtonClicked()
- spacing: Style.trayHorizontalMargin
-
Item {
id: thumbnailItem
- Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter
- Layout.preferredWidth: root.iconSize
- Layout.preferredHeight: model.thumbnail && model.thumbnail.isMimeTypeIcon ? root.iconSize * 0.9 : root.iconSize
+
readonly property int imageWidth: width * (1 - Style.thumbnailImageSizeReduction)
readonly property int imageHeight: height * (1 - Style.thumbnailImageSizeReduction)
readonly property int thumbnailRadius: model.thumbnail && model.thumbnail.isUserAvatar ? width / 2 : 3
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+
+ implicitHeight: model.thumbnail && model.thumbnail.isMimeTypeIcon ? root.iconSize * 0.9 : root.iconSize
+ implicitWidth: root.iconSize
+
Loader {
id: thumbnailImageLoader
anchors.fill: parent
}
}
- Column {
- id: activityTextColumn
-
- Layout.topMargin: Style.activityContentSpace
- Layout.fillWidth: true
- Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
-
- spacing: Style.activityContentSpace
-
- EnforcedPlainTextLabel {
- id: activityTextTitle
- text: (root.activityData.type === "Activity" || root.activityData.type === "Notification") ? root.activityData.subject : root.activityData.message
- height: (text === "") ? 0 : implicitHeight
- width: parent.width
- elide: Text.ElideRight
- wrapMode: Text.Wrap
- maximumLineCount: 2
- font.pixelSize: Style.topLinePixelSize
- color: Style.ncTextColor
- visible: text !== ""
- }
+ ColumnLayout {
+ id: activityContentLayout
- EnforcedPlainTextLabel {
- id: activityTextInfo
- text: (root.activityData.type === "Sync") ? root.activityData.displayPath
- : (root.activityData.type === "File") ? root.activityData.subject
- : (root.activityData.type === "Notification") ? root.activityData.message
- : ""
- height: (text === "") ? 0 : implicitHeight
- width: parent.width
- elide: Text.ElideRight
- wrapMode: Text.Wrap
- maximumLineCount: 2
- font.pixelSize: Style.subLinePixelSize
- color: Style.ncTextColor
- visible: text !== ""
- }
+ anchors.left: thumbnailItem.right
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
- EnforcedPlainTextLabel {
- id: activityTextDateTime
- text: root.activityData.dateTime
- height: (text === "") ? 0 : implicitHeight
- width: parent.width
- elide: Text.ElideRight
- wrapMode: Text.Wrap
- maximumLineCount: 2
- font.pixelSize: Style.subLinePixelSize
- color: Style.ncSecondaryTextColor
- visible: text !== ""
- }
+ spacing: Style.smallSpacing
+
+ RowLayout {
+ Layout.fillWidth: true
+ Layout.maximumWidth: activityContentLayout.width
+
+ spacing: Style.trayHorizontalMargin
+
+ EnforcedPlainTextLabel {
+ id: activityTextTitle
+ text: (root.activityData.type === "Activity" || root.activityData.type === "Notification") ? root.activityData.subject : root.activityData.message
+ height: (text === "") ? 0 : implicitHeight
+
+ Layout.maximumWidth: activityContentLayout.width - Style.trayHorizontalMargin -
+ (activityTextDateTime.visible ? activityTextDateTime.width + Style.trayHorizontalMargin : 0) -
+ (dismissActionButton.visible ? dismissActionButton.width + Style.trayHorizontalMargin : 0)
+ Layout.alignment: Qt.AlignTop | Qt.AlignLeft
+
+ elide: Text.ElideRight
+ wrapMode: Text.Wrap
+ maximumLineCount: 1
+ font.pixelSize: Style.topLinePixelSize
+ color: Style.ncTextColor
+ visible: text !== ""
+
+ NCToolTip {
+ text: parent.text
+ visible: parent.hovered
+ }
+ }
+
+ Item {
+ Layout.fillWidth: true
+ Layout.leftMargin: -Style.trayHorizontalMargin
+ }
+
+ EnforcedPlainTextLabel {
+ id: activityTextDateTime
+
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
+ height: (text === "") ? 0 : implicitHeight
+ width: parent.width
+
+ text: root.activityData.dateTime
+ elide: Text.ElideRight
+ wrapMode: Text.Wrap
+ maximumLineCount: 2
+ font.pixelSize: Style.subLinePixelSize
+ color: Style.ncSecondaryTextColor
+ visible: text !== ""
+ }
+
+ RoundButton {
+ id: dismissActionButton
- EnforcedPlainTextLabel {
- id: talkReplyMessageSent
- text: root.activityData.messageSent
- height: (text === "") ? 0 : implicitHeight
- width: parent.width
- elide: Text.ElideRight
- wrapMode: Text.Wrap
- maximumLineCount: 2
- font.pixelSize: Style.topLinePixelSize
- color: Style.ncSecondaryTextColor
- visible: text !== ""
+ Layout.preferredWidth: Style.dismissButtonSize
+ Layout.preferredHeight: Style.dismissButtonSize
+ Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
+
+ visible: root.showDismissButton && !fileDetailsButton.visible
+
+ icon.source: "image://svgimage-custom-color/clear.svg" + "/" + Style.ncTextColor
+
+ flat: true
+ display: Button.IconOnly
+ hoverEnabled: true
+ padding: 0
+
+ NCToolTip {
+ text: qsTr("Dismiss")
+ visible: parent.hovered
+ }
+
+ onClicked: root.dismissButtonClicked()
+ }
}
- }
- RoundButton {
- id: dismissActionButton
+ RowLayout {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.minimumHeight: Style.minimumActivityItemHeight
+ Layout.maximumWidth: root.width - thumbnailItem.width
+ spacing: Style.trayHorizontalMargin
+
+ EnforcedPlainTextLabel {
+ id: activityTextInfo
+
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.alignment: Qt.AlignTop | Qt.AlignLeft
+
+ text: (root.activityData.type === "Sync") ? root.activityData.displayPath
+ : (root.activityData.type === "File") ? root.activityData.subject
+ : (root.activityData.type === "Notification") ? root.activityData.message
+ : ""
+ height: (text === "") ? 0 : implicitHeight
+ elide: Text.ElideRight
+ wrapMode: Text.Wrap
+ maximumLineCount: 2
+ font.pixelSize: Style.subLinePixelSize
+ color: Style.ncTextColor
+ visible: text !== ""
+ }
+
+ Item {
+ Layout.fillWidth: true
+ }
+
+ Button {
+ id: fileDetailsButton
- Layout.preferredWidth: Style.headerButtonIconSize
- Layout.preferredHeight: Style.headerButtonIconSize
+ Layout.preferredWidth: Style.headerButtonIconSize
+ Layout.preferredHeight: Style.headerButtonIconSize
+ Layout.alignment: Qt.AlignTop | Qt.AlignRight
- visible: root.showDismissButton && !fileDetailsButton.visible
+ icon.source: "image://svgimage-custom-color/more.svg" + "/" + Style.adjustedCurrentUserHeaderColor
- icon.source: "image://svgimage-custom-color/clear.svg" + "/" + Style.ncTextColor
- //imageSourceHover: "image://svgimage-custom-color/clear.svg" + "/" + UserModel.currentUser.headerTextColor
+ NCToolTip {
+ text: qsTr("Open file details")
+ visible: parent.hovered
+ }
- flat: true
- display: Button.IconOnly
- hoverEnabled: true
- padding: 0
- //toolTipText: qsTr("Dismiss")
+ flat: true
+ display: Button.IconOnly
+ hoverEnabled: true
+ padding: 0
- //bgColor: Style.menuBorder
+ visible: model.showFileDetails
- onClicked: root.dismissButtonClicked()
- }
+ onClicked: Systray.presentShareViewInTray(model.openablePath)
+ }
+
+ EnforcedPlainTextLabel {
+ id: talkReplyMessageSent
- Button {
- id: fileDetailsButton
+ height: (text === "") ? 0 : implicitHeight
+ width: parent.width
+ Layout.alignment: Qt.AlignTop | Qt.AlignRight
- Layout.preferredWidth: Style.headerButtonIconSize
- Layout.preferredHeight: Style.headerButtonIconSize
+ text: root.activityData.messageSent
+ elide: Text.ElideRight
+ wrapMode: Text.Wrap
+ maximumLineCount: 2
+ font.pixelSize: Style.topLinePixelSize
+ color: Style.ncSecondaryTextColor
+ visible: text !== ""
+ }
- icon.source: "image://svgimage-custom-color/more.svg" + "/" + Style.adjustedCurrentUserHeaderColor
- //imageSourceHover: "image://svgimage-custom-color/more.svg" + "/" + Style.currentUserHeaderTextColor
- //toolTipText: qsTr("Open file details")
- //bgColor: Style.currentUserHeaderColor
+ ActivityItemActions {
+ id: activityActions
- flat: true
- display: Button.IconOnly
- padding: 0
+ visible: !isFileActivityList && activityData.linksForActionButtons.length > 0 && !isTalkReplyOptionVisible
- visible: model.showFileDetails
+ Layout.fillWidth: true
+ Layout.leftMargin: Style.trayListItemIconSize + Style.trayHorizontalMargin
+ Layout.preferredHeight: Style.standardPrimaryButtonHeight
+ Layout.alignment: Qt.AlignTop | Qt.AlignRight
- onClicked: Systray.presentShareViewInTray(model.openablePath)
+ displayActions: activityData.displayActions
+ objectType: activityData.objectType
+ linksForActionButtons: activityData.linksForActionButtons
+ linksContextMenu: activityData.linksContextMenu
+
+ maxActionButtons: activityModel.maxActionButtons
+
+ onTriggerAction: activityModel.slotTriggerAction(model.activityIndex, actionIndex)
+
+ onShowReplyField: isTalkReplyOptionVisible = true
+ }
+ }
}
}