mirror of
https://github.com/nextcloud/desktop.git
synced 2025-10-26 11:17:43 +00:00
Merge pull request #7858 from nextcloud/backport/7854/stable-3.16
[stable-3.16] Fix looks of share note text field
This commit is contained in:
commit
9738daf767
@ -13,7 +13,7 @@
|
||||
<file>src/gui/filedetails/FileDetailsWindow.qml</file>
|
||||
<file>src/gui/filedetails/FileTag.qml</file>
|
||||
<file>src/gui/filedetails/NCInputDateField.qml</file>
|
||||
<file>src/gui/filedetails/NCInputTextEdit.qml</file>
|
||||
<file>src/gui/filedetails/NCInputTextArea.qml</file>
|
||||
<file>src/gui/filedetails/NCInputTextField.qml</file>
|
||||
<file>src/gui/filedetails/NCTabButton.qml</file>
|
||||
<file>src/gui/filedetails/ShareeDelegate.qml</file>
|
||||
|
||||
@ -19,28 +19,20 @@ import QtQuick.Layouts
|
||||
import com.nextcloud.desktopclient
|
||||
import Style
|
||||
|
||||
TextEdit {
|
||||
TextArea {
|
||||
id: root
|
||||
|
||||
readonly property color accentColor: palette.highlight
|
||||
readonly property color secondaryColor: palette.dark
|
||||
readonly property color secondaryColor: palette.placeholderText
|
||||
readonly property alias submitButton: submitButton
|
||||
|
||||
clip: true
|
||||
textMargin: Style.smallSpacing
|
||||
wrapMode: TextEdit.Wrap
|
||||
selectByMouse: true
|
||||
height: Math.max(Style.talkReplyTextFieldPreferredHeight, contentHeight)
|
||||
// no implicitHeight here -- let the textarea take as much as it needs
|
||||
// otherwise it will cut off some text vertically on multi-line strings...
|
||||
|
||||
Rectangle {
|
||||
id: textFieldBorder
|
||||
anchors.fill: parent
|
||||
radius: Style.trayWindowRadius
|
||||
border.width: Style.normalBorderWidth
|
||||
border.color: root.activeFocus ? root.accentColor : root.secondaryColor
|
||||
color: palette.base
|
||||
z: -1
|
||||
}
|
||||
selectByMouse: true
|
||||
rightPadding: submitButton.width
|
||||
|
||||
wrapMode: TextEdit.Wrap
|
||||
|
||||
Button {
|
||||
id: submitButton
|
||||
@ -61,4 +53,3 @@ TextEdit {
|
||||
onClicked: root.editingFinished()
|
||||
}
|
||||
}
|
||||
|
||||
@ -23,7 +23,7 @@ TextField {
|
||||
id: root
|
||||
|
||||
readonly property color accentColor: Style.ncBlue
|
||||
readonly property color secondaryColor: palette.dark
|
||||
readonly property color secondaryColor: palette.placeholderText
|
||||
readonly property alias submitButton: submitButton
|
||||
property bool validInput: true
|
||||
|
||||
|
||||
@ -38,7 +38,6 @@ GridLayout {
|
||||
signal toggleAllowResharing(bool enable)
|
||||
signal togglePasswordProtect(bool enable)
|
||||
signal toggleExpirationDate(bool enable)
|
||||
signal toggleNoteToRecipient(bool enable)
|
||||
signal permissionModeChanged(int permissionMode)
|
||||
|
||||
signal setLinkShareLabel(string label)
|
||||
@ -252,7 +251,6 @@ GridLayout {
|
||||
onToggleHideDownload: root.toggleHideDownload(enable)
|
||||
onTogglePasswordProtect: root.togglePasswordProtect(enable)
|
||||
onToggleExpirationDate: root.toggleExpirationDate(enable)
|
||||
onToggleNoteToRecipient: root.toggleNoteToRecipient(enable)
|
||||
onPermissionModeChanged: root.permissionModeChanged(permissionMode)
|
||||
|
||||
onSetLinkShareLabel: root.setLinkShareLabel(label)
|
||||
|
||||
@ -87,7 +87,6 @@ Page {
|
||||
readonly property bool isFolderItem: shareModelData.sharedItemType === ShareModel.SharedItemTypeFolder
|
||||
readonly property bool isEncryptedItem: shareModelData.sharedItemType === ShareModel.SharedItemTypeEncryptedFile || shareModelData.sharedItemType === ShareModel.SharedItemTypeEncryptedFolder || shareModelData.sharedItemType === ShareModel.SharedItemTypeEncryptedTopLevelFolder
|
||||
|
||||
property bool waitingForNoteEnabledChange: false
|
||||
property bool waitingForExpireDateEnabledChange: false
|
||||
property bool waitingForPasswordProtectEnabledChange: false
|
||||
property bool waitingForExpireDateChange: false
|
||||
@ -101,7 +100,7 @@ Page {
|
||||
}
|
||||
|
||||
function resetNoteField() {
|
||||
noteTextEdit.text = note;
|
||||
noteTextArea.text = note;
|
||||
waitingForNoteChange = false;
|
||||
}
|
||||
|
||||
@ -133,7 +132,7 @@ Page {
|
||||
|
||||
function resetNoteEnabledField() {
|
||||
noteEnabledMenuItem.checked = noteEnabled;
|
||||
waitingForNoteEnabledChange = false;
|
||||
waitingForNoteChange = false;
|
||||
}
|
||||
|
||||
function resetExpireDateEnabledField() {
|
||||
@ -277,7 +276,7 @@ Page {
|
||||
horizontalAlignment: Image.AlignHCenter
|
||||
fillMode: Image.Pad
|
||||
|
||||
source: "image://svgimage-custom-color/edit.svg/" + palette.dark
|
||||
source: "image://svgimage-custom-color/edit.svg/" + palette.windowText
|
||||
sourceSize.width: scrollContentsColumn.rowIconWidth
|
||||
sourceSize.height: scrollContentsColumn.rowIconWidth
|
||||
}
|
||||
@ -501,7 +500,7 @@ Page {
|
||||
horizontalAlignment: Image.AlignHCenter
|
||||
fillMode: Image.Pad
|
||||
|
||||
source: "image://svgimage-custom-color/lock-https.svg/" + palette.dark
|
||||
source: "image://svgimage-custom-color/lock-https.svg/" + palette.windowText
|
||||
sourceSize.width: scrollContentsColumn.rowIconWidth
|
||||
sourceSize.height: scrollContentsColumn.rowIconWidth
|
||||
}
|
||||
@ -607,7 +606,7 @@ Page {
|
||||
horizontalAlignment: Image.AlignHCenter
|
||||
fillMode: Image.Pad
|
||||
|
||||
source: "image://svgimage-custom-color/calendar.svg/" + palette.dark
|
||||
source: "image://svgimage-custom-color/calendar.svg/" + palette.windowText
|
||||
sourceSize.width: scrollContentsColumn.rowIconWidth
|
||||
sourceSize.height: scrollContentsColumn.rowIconWidth
|
||||
}
|
||||
@ -662,16 +661,18 @@ Page {
|
||||
checkable: true
|
||||
checked: root.noteEnabled
|
||||
text: qsTr("Note to recipient")
|
||||
enabled: !root.waitingForNoteEnabledChange
|
||||
enabled: !root.waitingForNoteChange
|
||||
|
||||
onClicked: {
|
||||
root.toggleNoteToRecipient(checked);
|
||||
root.waitingForNoteEnabledChange = true;
|
||||
if (!checked && root.note !== "") {
|
||||
root.setNote("");
|
||||
root.waitingForNoteChange = true;
|
||||
}
|
||||
}
|
||||
|
||||
NCBusyIndicator {
|
||||
anchors.fill: parent
|
||||
visible: root.waitingForNoteEnabledChange
|
||||
visible: root.waitingForNoteChange && !noteEnabledMenuItem.checked
|
||||
running: visible
|
||||
z: 1
|
||||
}
|
||||
@ -682,7 +683,7 @@ Page {
|
||||
height: visible ? implicitHeight : 0
|
||||
spacing: scrollContentsColumn.indicatorSpacing
|
||||
|
||||
visible: root.noteEnabled
|
||||
visible: noteEnabledMenuItem.checked
|
||||
|
||||
Image {
|
||||
Layout.preferredWidth: scrollContentsColumn.indicatorItemWidth
|
||||
@ -692,32 +693,30 @@ Page {
|
||||
horizontalAlignment: Image.AlignHCenter
|
||||
fillMode: Image.Pad
|
||||
|
||||
source: "image://svgimage-custom-color/edit.svg/" + palette.dark
|
||||
source: "image://svgimage-custom-color/edit.svg/" + palette.windowText
|
||||
sourceSize.width: scrollContentsColumn.rowIconWidth
|
||||
sourceSize.height: scrollContentsColumn.rowIconWidth
|
||||
}
|
||||
|
||||
NCInputTextEdit {
|
||||
id: noteTextEdit
|
||||
NCInputTextArea {
|
||||
id: noteTextArea
|
||||
|
||||
Layout.fillWidth: true
|
||||
height: visible ? Math.max(Style.talkReplyTextFieldPreferredHeight, contentHeight) : 0
|
||||
// no height here -- let the textarea figure it out how much it needs
|
||||
submitButton.height: Math.min(Style.talkReplyTextFieldPreferredHeight, height - 2)
|
||||
|
||||
text: root.note
|
||||
enabled: root.noteEnabled &&
|
||||
!root.waitingForNoteChange &&
|
||||
!root.waitingForNoteEnabledChange
|
||||
placeholderText: qsTr("Enter a note for the recipient")
|
||||
enabled: noteEnabledMenuItem.checked && !root.waitingForNoteChange
|
||||
|
||||
onEditingFinished: if(text !== root.note) {
|
||||
onEditingFinished: if (text !== "" && text !== root.note) {
|
||||
root.setNote(text);
|
||||
root.waitingForNoteChange = true;
|
||||
}
|
||||
|
||||
NCBusyIndicator {
|
||||
anchors.fill: parent
|
||||
visible: root.waitingForNoteChange ||
|
||||
root.waitingForNoteEnabledChange
|
||||
visible: root.waitingForNoteChange && noteEnabledMenuItem.checked
|
||||
running: visible
|
||||
z: 1
|
||||
}
|
||||
|
||||
@ -263,7 +263,6 @@ ColumnLayout {
|
||||
onToggleHideDownload: shareModel.toggleHideDownloadFromQml(model.share, enable)
|
||||
onTogglePasswordProtect: shareModel.toggleSharePasswordProtectFromQml(model.share, enable)
|
||||
onToggleExpirationDate: shareModel.toggleShareExpirationDateFromQml(model.share, enable)
|
||||
onToggleNoteToRecipient: shareModel.toggleShareNoteToRecipientFromQml(model.share, enable)
|
||||
onPermissionModeChanged: shareModel.changePermissionModeFromQml(model.share, permissionMode)
|
||||
|
||||
onSetLinkShareLabel: shareModel.setLinkShareLabelFromQml(model.share, label)
|
||||
|
||||
@ -1088,26 +1088,6 @@ void ShareModel::toggleShareExpirationDateFromQml(const QVariant &share, const b
|
||||
toggleShareExpirationDate(ptr, enable);
|
||||
}
|
||||
|
||||
void ShareModel::toggleShareNoteToRecipient(const SharePtr &share, const bool enable) const
|
||||
{
|
||||
if (share.isNull()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const QString note = enable ? tr("Enter a note for the recipient") : QString();
|
||||
if (const auto linkShare = share.objectCast<LinkShare>()) {
|
||||
linkShare->setNote(note);
|
||||
} else if (const auto userGroupShare = share.objectCast<UserGroupShare>()) {
|
||||
userGroupShare->setNote(note);
|
||||
}
|
||||
}
|
||||
|
||||
void ShareModel::toggleShareNoteToRecipientFromQml(const QVariant &share, const bool enable) const
|
||||
{
|
||||
const auto ptr = share.value<SharePtr>();
|
||||
toggleShareNoteToRecipient(ptr, enable);
|
||||
}
|
||||
|
||||
void ShareModel::changePermissionModeFromQml(const QVariant &share, const OCC::ShareModel::SharePermissionsMode permissionMode)
|
||||
{
|
||||
const auto sharePtr = share.value<SharePtr>();
|
||||
|
||||
@ -190,8 +190,6 @@ public slots:
|
||||
void toggleSharePasswordProtectFromQml(const QVariant &share, const bool enable);
|
||||
void toggleShareExpirationDate(const OCC::SharePtr &share, const bool enable) const;
|
||||
void toggleShareExpirationDateFromQml(const QVariant &share, const bool enable) const;
|
||||
void toggleShareNoteToRecipient(const OCC::SharePtr &share, const bool enable) const;
|
||||
void toggleShareNoteToRecipientFromQml(const QVariant &share, const bool enable) const;
|
||||
void changePermissionModeFromQml(const QVariant &share, const OCC::ShareModel::SharePermissionsMode permissionMode);
|
||||
|
||||
void setLinkShareLabel(const QSharedPointer<OCC::LinkShare> &linkShare, const QString &label) const;
|
||||
|
||||
@ -19,7 +19,7 @@ import Style
|
||||
BusyIndicator {
|
||||
id: root
|
||||
|
||||
property color color: palette.dark
|
||||
property color color: palette.windowText
|
||||
property string imageSource: "image://svgimage-custom-color/change.svg/"
|
||||
|
||||
property int imageSourceSizeWidth: 64
|
||||
|
||||
@ -820,7 +820,7 @@ private slots:
|
||||
helper.resetTestData();
|
||||
|
||||
// Test with an existing link share.
|
||||
// This one has a pre-existing password
|
||||
// This one has a pre-existing note
|
||||
helper.appendShareReplyData(_testLinkShareDefinition);
|
||||
QCOMPARE(helper.shareCount(), 1);
|
||||
|
||||
@ -844,7 +844,7 @@ private slots:
|
||||
const auto linkSharePtr = sharePtr.dynamicCast<LinkShare>(); // Need to connect to signal
|
||||
QSignalSpy noteSet(linkSharePtr.data(), &LinkShare::noteSet);
|
||||
|
||||
model.toggleShareNoteToRecipient(sharePtr, false);
|
||||
model.setShareNote(sharePtr, QStringLiteral(""));
|
||||
QVERIFY(noteSet.wait(3000));
|
||||
QCOMPARE(shareIndex.data(ShareModel::NoteEnabledRole).toBool(), false);
|
||||
|
||||
@ -852,7 +852,7 @@ private slots:
|
||||
model.setShareNote(sharePtr, note);
|
||||
QVERIFY(noteSet.wait(3000));
|
||||
QCOMPARE(shareIndex.data(ShareModel::NoteEnabledRole).toBool(), true);
|
||||
// The model stores the recently set password.
|
||||
// The model stores the recently set note.
|
||||
// We want to present the user with it in the UI while the model is alive
|
||||
QCOMPARE(shareIndex.data(ShareModel::NoteRole).toString(), note);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user