Документация
ОС Аврора 5.1.5

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.

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.