Russian Qt Forum
Ноябрь 24, 2024, 00:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 3 [4]   Вниз
  Печать  
Автор Тема: Реализация Undo/Redo действий пользователя в случае mdi интерфейса  (Прочитано 25734 раз)
nata267
Гость
« Ответ #45 : Июнь 20, 2012, 13:22 »

подождите, но ведь тогда посдеднем в стеке undo будет не удаление, а перетаскивание rectangle и только вернув его обратно, мы можем вернуть обратно объект.
Конечно, но это к частному вопросу о позиционировании. А мы упёрлись в проблему воссоздания объекта.

ну а как ещё решить проблему без конкретики? если вы ставите задачу абстрактно, я её могу понимать неправильно, подругому чем вы и мы говорим на разных языках
Записан
nata267
Гость
« Ответ #46 : Июнь 20, 2012, 13:26 »

возможно, способ удаления (удалять или прятать) как раз таки и зависит от конокретных случаев. сколько у удаляемых объектов связей и как их восстанавливать. может если связей много и для восстановления потребуется объект по величине такой же как удаляемый, то уместно действительно прятать а не удалять и просто решить проблему связей
Записан
alexis031182
Гость
« Ответ #47 : Июнь 20, 2012, 13:31 »

а если нужно другое поведение, если нужно чтобы он в удаленном состоянии передвинулся. допустим у нас есть контейнер, который содержит набор виджетов. один мы удалили, контейнер передвинули в другое место, виджет восстановили. он должен быть в контейнере, а не за его пределами
Операция undo, если глобальна, не даст восстановить объект, пока не отменятся предыдущие в стеке операции (например, смена положения). Если же undo для контейнера, то смена положения контейнера никак не повлияет на восстанавливаемый объект.
Записан
alexis031182
Гость
« Ответ #48 : Июнь 20, 2012, 13:33 »

ну а как ещё решить проблему без конкретики? если вы ставите задачу абстрактно, я её могу понимать неправильно, подругому чем вы и мы говорим на разных языках
Вот мы с Вами по ходу дела, по Вашим вопросам и уточняем, отчего могут быть проблемы в той или иной ситуации на практике. Норм Улыбающийся
Записан
alexis031182
Гость
« Ответ #49 : Июнь 20, 2012, 13:36 »

возможно, способ удаления (удалять или прятать) как раз таки и зависит от конокретных случаев. сколько у удаляемых объектов связей и как их восстанавливать. может если связей много и для восстановления потребуется объект по величине такой же как удаляемый, то уместно действительно прятать а не удалять и просто решить проблему связей
Уместным в этой ситуации будет на мой взгляд вообще запретить undo/redo для таких объектов.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #50 : Июнь 20, 2012, 13:45 »

подождите, но ведь тогда посдеднем в стеке undo будет не удаление, а перетаскивание rectangle и только вернув его обратно, мы можем вернуть обратно объект.
Вернуть-то вернем, но его позиция не будет равна на момент "удаления"

а если нужно другое поведение, если нужно чтобы он в удаленном состоянии передвинулся. допустим у нас есть контейнер, который содержит набор виджетов. один мы удалили, контейнер передвинули в другое место, виджет восстановили. он должен быть в контейнере, а не за его пределами
Это может иметь смысл, но это уже не undo,

Какую-то глобальную карту надо иметь обо всех конектах.
А как она должна выглядеть? Что должно быть ключом? И не взять ли ширше - обо всех (подлежаших undo) объектах? А не замахнуться ли нам на Вильяма Шекспира - и формализовать весь механизм связей?

Но давайте не частить - слишком бурное обсуждение утомляет Улыбающийся Пусть мысли созреют, достаточно на сегодня
Записан
nata267
Гость
« Ответ #51 : Июнь 20, 2012, 13:45 »

другой пример. если у нас иерархическая структура и мы удаляем узел, как быть с потомками? куда их переносить для восстановления?

Записан
nata267
Гость
« Ответ #52 : Июнь 20, 2012, 13:49 »

подождите, но ведь тогда посдеднем в стеке undo будет не удаление, а перетаскивание rectangle и только вернув его обратно, мы можем вернуть обратно объект.
Вернуть-то вернем, но его позиция не будет равна на момент "удаления"



а позиция должна быть равна на момент удаления, причем позиция должна вернуться не только у него, но и не удаленных тоже, мы же их всех вместе перетаскивали и их перетавкивание относилось к перетаскиванию rectangle если я не ошибаюсь
Записан
alexis031182
Гость
« Ответ #53 : Июнь 20, 2012, 13:52 »

Какую-то глобальную карту надо иметь обо всех конектах.
А как она должна выглядеть? Что должно быть ключом? И не взять ли ширше - обо всех (подлежаших undo) объектах? А не замахнуться ли нам на Вильяма Шекспира - и формализовать весь механизм связей?
Я к тому, что эта информация не помешала бы. А уж как и чего - второй вопрос. Точнее первый, всё тот же Смеющийся
Записан
alexis031182
Гость
« Ответ #54 : Июнь 20, 2012, 13:58 »

другой пример. если у нас иерархическая структура и мы удаляем узел, как быть с потомками? куда их переносить для восстановления?
Потомков придётся грохать тоже. И восстанавливать при восстановлении родителя. В этой уже ситуации мы как никогда близко находимся к тому, чтобы запрещение undo/redo было вполне себе рациональным решением. Естественно, что решение о подобном должно приниматься в каждом конкретном случае отдельно.
Записан
nata267
Гость
« Ответ #55 : Июнь 20, 2012, 14:15 »

другой пример. если у нас иерархическая структура и мы удаляем узел, как быть с потомками? куда их переносить для восстановления?
Потомков придётся грохать тоже. И восстанавливать при восстановлении родителя. В этой уже ситуации мы как никогда близко находимся к тому, чтобы запрещение undo/redo было вполне себе рациональным решением. Естественно, что решение о подобном должно приниматься в каждом конкретном случае отдельно.

а может в этой ситуации прятать?
Записан
alexis031182
Гость
« Ответ #56 : Июнь 20, 2012, 14:39 »

а может в этой ситуации прятать?
Нет, ну конечно прятать или нет - решать разработчику. Просто он должен иметь ввиду возможные проблемы, о которых мы говорим.
Записан
Страниц: 1 2 3 [4]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.067 секунд. Запросов: 23.