QML-тип Remorse
Ненадолго появляющиеся элементы интерфейса (области), которые позволяет отменить разрушающее действие (удаление). Подробнее…
Строка импорта: | import Sailfish.Silica 1.0 |
Наследуется от: | QtObject |
Методы
- itemAction(Item parent, string text, object callback, int timeout)
- popupAction(Page parent, string text, object callback, int timeout)
Подробное описание
Объект-одиночка типа Remorse
позволяет отсрочить разрушающее действие (удаление) на некоторое время. Если коснуться
специальной области отмены (remorse prompt) до истечения этого времени, действие будет отменено.
Есть четыре распространённых способа использовать элементы Remorse
.
1. Удаление элемента из списка или сетки
Когда пользователь выбирает удалить элемент в контекстном меню, приложение показывает элемент для отмены действия вместо
удаленного элемента с описанием «Удалено». Рекомендуемый способ реализовать удаление элемента — использовать функцию
remorseDelete(), чтобы оставить жизненный цикл объекта Remorse
для обработки
Silica.
ListItem {
id: listItem
menu: Component {
ContextMenu {
MenuItem {
text: "Удалить"
onClicked: listItem.remorseDelete(function() { model.remove(index) })
}
}
}
}
2. Удаление полноэкранного элемента
Когда пользователь решает удалить полноэкранный элемент (изображение, документ, видео, электронное письмо и т. п.),
приложение открывает страницу полноэкранного просмотра, временно скрывает соответствующий элемент из списка или сетки на
родительской странице, задавая настройки, и показывает элемент для отмены действия. Ожидающий удаления элемент можно
скрыть, установив для свойства hidden
компонента ListItem значение true
.
Page {
PullDownMenu {
MenuItem {
text: "Удалить"
onClicked: {
var remorse = Remorse.popupAction(root, "", function() {
pageStack.pop()
})
// Следует обратить внимание, что удаление данных из модели часто требует времени. Если скрытый элемент будет удалён слишком рано
listPage.idPendingDeletion = Qt.binding(function() { return remorse && remorse.active ? model.id : -1 })
}
}
}
ListItem {
hidden: model.id === listPage.idPendingDeletion
}
}
3. Очистка данных
Когда пользователь решает очистить сохранённые данные (счётчики, кеши, историю и т. п.), страница скрывает очищенные данные и показывает всплывающее окно с описанием «Очищено».
Page {
property Item remorse
DetailItem {
label: "Отправлено"
value: Format.formatFileSize(remorse && remorse.active ? 0 : model.totalSent)
}
Button {
text: "Очистить"
onClicked: remorse = Remorse.popupAction("Очищено", function () { model.clearCounter() })
}
}
4. Удаление нескольких элементов
Когда пользователь выбирает несколько элементов для удаления, приложение скрывает соответствующий список или элементы
сетки из представления и отображает всплывающий элемент для отмены действия. Ожидающие удаления элементы можно скрыть,
установив для свойства hidden
компонента ListItem значение true
.
Page {
PullDownMenu {
MenuItem {
text: "Удалить"
onClicked: remorse = Remorse.popupAction(root, "", function() { model.delete(selectedItems) })
}
}
ListItem {
hidden: remorse && remorse.active && model.selected
}
}
При вызове метода itemAction() в него передаётся родительский элемент типа Item. При этом область отмены с таймером обратного отсчёта создаётся как элемент типа RemorseItem, который заполняет границы элемента родительского элемента.
При вызове метода popupAction() в него передаётся родительский элемент страницы типа Page. При этом область отмены с таймером обратного отсчёта создается как элемент типа RemorsePopup, который отображается в верхней части указанной родительской страницы.
См. также RemorseItem и RemorsePopup.
Описание методов
itemAction(Item parent, string text, object callback, int timeout)
Отображает RemorsePopup
вместо parent с указанным text, описывающим выполняемое действие.
Текстовое описание является необязательным, наиболее распространённым вариантом использования элемента для отмены
действия является удаление, когда строку text можно оставить пустой.
Рекомендуемый способ использования RemorseItem — использовать функцию remorseDelete().
text должен содержать глагол, описывающий совершаемое действие. Следует использовать прошедшее время, чтобы яснее указать, что от пользователя не требуется никаких дополнительных шагов, если он не хочет отменить действие. Например, элемент, который раньше выводил текст «Очистка данных», теперь будет отображать «Данные очищены».
По истечении тайм-аута будет вызвана функция callback. Следует обратить внимание, что выполнение обратного вызова происходит в области действия компонента для отмены действия, и ссылки на объекты на странице или в контексте делегата, которые запрашивали элемент для отмены, могут быть недоступны.
Параметр timeout является необязательным. Если не указано иное, будет использоваться значение по умолчанию 4000 мс.
В примере ниже продемонстрировано использование объекта-одиночки Remorse
для удаления элемента списка при нажатии на
делегата:
import QtQuick 2.2
import Sailfish.Silica 1.0
Page {
id: page
SilicaListView {
anchors.fill: parent
model: ListModel {
id: listModel
Component.onCompleted: {
for (var i=0; i<10; i++) {
append({"name": "Элемент " + i})
}
}
}
delegate: BackgroundItem {
id: myDelegate
width: ListView.view.width
Label {
text: model.name
anchors.centerIn: parent
}
onClicked: {
var idx = index
Remorse.itemAction(myDelegate, "", function() { listModel.remove(idx) })
}
}
}
}
См. также RemorseItem.
popupAction(Page parent, string text, object callback, int timeout)
Отображает объект типа RemorsePopup в верхней части страницы parent с заданным текстом text.
По истечении тайм-аута будет вызвана функция callback. Следует обратить внимание, что выполнение обратного вызова происходит в области действия компонента для отмены действия, и ссылки на объекты на странице или в контексте делегата, которые запрашивали элемент для отмены, могут быть недоступны.
Параметр timeout является необязательным. Если не указано иное, будет использоваться значение по умолчанию 4000 мс.
См. также RemorsePopup.