desktop/src/gui/tray/SyncStatus.qml

139 lines
3.9 KiB
QML

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import Style 1.0
import com.nextcloud.desktopclient 1.0 as NC
RowLayout {
id: root
property alias model: syncStatus
spacing: Style.trayHorizontalMargin
NC.SyncStatusSummary {
id: syncStatus
}
NCBusyIndicator {
id: syncIcon
property int size: Style.trayListItemIconSize * 0.6
property int whiteSpace: (Style.trayListItemIconSize - size)
Layout.preferredWidth: size
Layout.preferredHeight: size
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
Layout.topMargin: 16
Layout.rightMargin: whiteSpace * (0.5 + Style.thumbnailImageSizeReduction)
Layout.bottomMargin: 16
Layout.leftMargin: Style.trayHorizontalMargin + (whiteSpace * (0.5 - Style.thumbnailImageSizeReduction))
padding: 0
imageSource: syncStatus.syncIcon
running: syncStatus.syncing
}
ColumnLayout {
id: syncProgressLayout
Layout.alignment: Qt.AlignVCenter
Layout.topMargin: 8
Layout.rightMargin: Style.trayHorizontalMargin
Layout.bottomMargin: 8
Layout.fillWidth: true
Layout.fillHeight: true
EnforcedPlainTextLabel {
id: syncProgressText
Layout.fillWidth: true
text: syncStatus.syncStatusString
verticalAlignment: Text.AlignVCenter
font.pixelSize: Style.topLinePixelSize
font.bold: true
wrapMode: Text.Wrap
}
Loader {
Layout.fillWidth: true
Layout.preferredHeight: Style.progressBarPreferredHeight
active: syncStatus.syncing && syncStatus.totalFiles > 0
visible: active
sourceComponent: NCProgressBar {
id: syncProgressBar
value: syncStatus.syncProgress
}
}
EnforcedPlainTextLabel {
id: syncProgressDetailText
Layout.fillWidth: true
text: syncStatus.syncStatusDetailString
visible: syncStatus.syncStatusDetailString !== ""
color: palette.midlight
font.pixelSize: Style.subLinePixelSize
wrapMode: Text.Wrap
}
}
CustomButton {
id: syncNowButton
FontMetrics {
id: syncNowFm
font: syncNowButton.contentsFont
}
Layout.rightMargin: Style.trayHorizontalMargin
text: qsTr("Sync now")
padding: Style.smallSpacing
textColor: Style.adjustedCurrentUserHeaderColor
textColorHovered: Style.currentUserHeaderTextColor
contentsFont.bold: true
bgColor: Style.currentUserHeaderColor
visible: !activityModel.hasSyncConflicts &&
!syncStatus.syncing &&
NC.UserModel.currentUser.hasLocalFolder &&
NC.UserModel.currentUser.isConnected
enabled: visible
onClicked: {
if(!syncStatus.syncing) {
NC.UserModel.currentUser.forceSyncNow();
}
}
}
CustomButton {
Layout.preferredWidth: syncNowFm.boundingRect(text).width +
leftPadding +
rightPadding +
Style.standardSpacing * 2
Layout.rightMargin: Style.trayHorizontalMargin
text: qsTr("Resolve conflicts")
textColor: Style.adjustedCurrentUserHeaderColor
textColorHovered: Style.currentUserHeaderTextColor
contentsFont.bold: true
bgColor: Style.currentUserHeaderColor
visible: activityModel.hasSyncConflicts &&
!syncStatus.syncing &&
NC.UserModel.currentUser.hasLocalFolder &&
NC.UserModel.currentUser.isConnected
enabled: visible
onClicked: NC.Systray.createResolveConflictsDialog(activityModel.allConflicts);
}
}