Statesmanager — различия между версиями
Vlegkun (обсуждение | вклад) м |
(→Альтернативное описание состояний, взятое прямиком из кода) |
||
(не показано 6 промежуточных версий 6 участников) | |||
Строка 33: | Строка 33: | ||
*'''add_first_uni''' - добавить событие в начало очереди на открытие, но если данное событие уже добавлено в очередь, то повторно оно не добавиться (удобно если окно не должно открываться дважды); | *'''add_first_uni''' - добавить событие в начало очереди на открытие, но если данное событие уже добавлено в очередь, то повторно оно не добавиться (удобно если окно не должно открываться дважды); | ||
*'''add_last''' - добавить событие в конец очереди на открытие; | *'''add_last''' - добавить событие в конец очереди на открытие; | ||
− | *'''add_last_uni''' - добавить событие в | + | *'''add_last_uni''' - добавить событие в конец очереди на закрытие, но если данное событие уже добавлено в очередь, то повторно оно не добавиться; |
*'''add_popup''' - добавить в очередь попапов событие, и сразу его открыть (добавляется в очередь беков на закрытие в начало). Примечание попапы добавляются в свою очередь на закрытие и открытие, параметры объекта statesmanagera (n_back и n_next) не повышаются при добавления попапа. | *'''add_popup''' - добавить в очередь попапов событие, и сразу его открыть (добавляется в очередь беков на закрытие в начало). Примечание попапы добавляются в свою очередь на закрытие и открытие, параметры объекта statesmanagera (n_back и n_next) не повышаются при добавления попапа. | ||
*'''add_popup_uni''' - добавить попап с проверкой уникальности; | *'''add_popup_uni''' - добавить попап с проверкой уникальности; | ||
Строка 42: | Строка 42: | ||
*'''delete''' - удалить из очереди элемент с id из param; | *'''delete''' - удалить из очереди элемент с id из param; | ||
*'''log''' - записывает в лог, три очереди ( очередь next и две очереди беков (попапы и окна)): | *'''log''' - записывает в лог, три очереди ( очередь next и две очереди беков (попапы и окна)): | ||
− | *'''add_state_last''' - добавить в очередь состояний вызываемых при закрытых окнах | + | *'''add_state_last''' - добавить в очередь состояний вызываемых при закрытых окнах |
+ | *'''double_back''' - активировать back текущего и следующего событий в очереди на закрытие; | ||
+ | *'''triple_back''' - активировать back текущего и двух следующих событий в очереди на закрытие; | ||
+ | *'''back_top''' - активировать back для самого верхнего события в очереди на закрытие (будет закрыто самое верхнее окно по Z; чтобы данный функционал работал корректно - мы должны: 1) менеджер окон поставить выше всех окон (в ините идёт очистка информации об окнах); 2) окна должны иметь тип "mwindow" или установленный флаг "isWindow==1"); П.С. в случае, если окно не будет соответствовать п.2 - окно не сможет быть закрыто, но не переживайте в логе будет запись и в режиме дебага вылезет варнинг http://joxi.ru/krDOJ9vUKMeEzA | ||
================================================== | ================================================== | ||
Строка 64: | Строка 67: | ||
==Альтернативное описание состояний, взятое прямиком из кода== | ==Альтернативное описание состояний, взятое прямиком из кода== | ||
− | "idle", //!< Состояние | + | "idle", //!< Состояние покоя |
"add_first", //!< Добавить событие в начало очереди | "add_first", //!< Добавить событие в начало очереди | ||
"add_last", //!< Добавить событие в конец очереди | "add_last", //!< Добавить событие в конец очереди | ||
Строка 79: | Строка 82: | ||
"double_back", //!< двойной back (и отличная песня ZZ Top, к тому же) | "double_back", //!< двойной back (и отличная песня ZZ Top, к тому же) | ||
"triple_back" //!< тройной back | "triple_back" //!< тройной back | ||
− | |||
=Схема работы= | =Схема работы= | ||
Строка 100: | Строка 102: | ||
*'''1) Открываем окно с результатами:''' | *'''1) Открываем окно с результатами:''' | ||
− | :Из машины окна, вызываем состояние ''next'' машине обработчику менеджера окон (9win_root). Предварительно записываем состояния для закрытия и открытия данного окна( | + | :Из машины окна, вызываем состояние ''next'' машине обработчику менеджера окон (9win_root). Предварительно записываем состояния для закрытия и открытия данного окна машины (состояния ''close'' и ''open'' соответственно): |
::[[Файл:Statesmanager W next.png]] | ::[[Файл:Statesmanager W next.png]] | ||
− | :В машине обработчике менеджера окон (9win_root), в состоянии ''next'' мы задаём менеджеру окон и передаём состояние ''add_first'', а затем ''next''. То есть мы добавляем первым в очередь на открытие наше окно с результатами и | + | :В машине обработчике менеджера окон (9win_root), в состоянии ''next'' мы задаём менеджеру окон и передаём состояние ''add_first'', а затем ''next''. То есть мы добавляем первым в очередь на открытие наше окно с результатами и его открываем: |
::[[Файл:Statesmanager Next.png]] | ::[[Файл:Statesmanager Next.png]] | ||
Строка 110: | Строка 112: | ||
*'''2) Добавляем в очередь окно с задачей:''' | *'''2) Добавляем в очередь окно с задачей:''' | ||
− | :Из машины окна, вызываем состояние ''add'' машине обработчику менеджера окон (9win_root). Предварительно записываем состояния для закрытия и открытия данного окна( | + | :Из машины окна, вызываем состояние ''add'' машине обработчику менеджера окон (9win_root). Предварительно записываем состояния для закрытия и открытия данного окна машины (состояния ''close'' и ''open'' соответственно): |
::[[Файл:Statesmanager W add.png]] | ::[[Файл:Statesmanager W add.png]] |
Текущая версия на 07:56, 17 декабря 2020
Объект предназначен для постановки объектов в очередь выполнения единообразными командами. Можно применять для управления отображением всплывающих окон.
Содержание
Свойства
Процесс
- объект открытия (obj) - объект который будет переведён в заданное состояние, если данный объект будет первым в очереди на открытие и передадим менеджеру окон состояние next;
- состояние открытия (st) - перевести выбранный объект в заданное состояние;
- объект back (obj_b) - объект который будет переведён в заданное состояние, если данный объект будет первым в очереди на закрытие и передадим менеджеру окон состояние back;
- состояние back (st_b) - перевести выбранный объект в заданное состояние.
Визуализация окон
- fading_t - Время фейдинга для окон типа по альфе. Statesmanager'у должен приходить таймер!!!
Дополнительные параметры
изменить состояние объекта - очередь back пуста:
- объект ( obj ) - Перевести объект в состояние из следующего поля;
- состояние ( st ) - Новое состояние для объекта из предыдущего поля.
изменить состояние объекта - очередь next пуста:
- объект ( obj ) - Перевести объект в состояние из следующего поля;
- состояние ( st ) - Новое состояние для объекта из предыдущего поля.
Параметры которые мы можем считать из statesmanager
- n_back - количество событий в очереди на закрытие (не учитывая события добавленные как попапы);
- n_next - количество событий в очереди на открытие (не учитывая события добавленные как попапы).
- n_popup - количество событий открытых как попапы.
Состояния
- add_first - добавить событие в начало очереди на открытие;
- add_first_uni - добавить событие в начало очереди на открытие, но если данное событие уже добавлено в очередь, то повторно оно не добавиться (удобно если окно не должно открываться дважды);
- add_last - добавить событие в конец очереди на открытие;
- add_last_uni - добавить событие в конец очереди на закрытие, но если данное событие уже добавлено в очередь, то повторно оно не добавиться;
- add_popup - добавить в очередь попапов событие, и сразу его открыть (добавляется в очередь беков на закрытие в начало). Примечание попапы добавляются в свою очередь на закрытие и открытие, параметры объекта statesmanagera (n_back и n_next) не повышаются при добавления попапа.
- add_popup_uni - добавить попап с проверкой уникальности;
- next - активировать первое событие в очереди на открытие;
- back - активировать back для текущего события в очереди на закрытие;
- clear - очищает стек очереди, очищает обе очереди (на открытие и на закрытие, включая попапы);
- clear_back - очищает стек очереди на закрытие ( чистит очередь окон на закрытие, очередь попапов не трогает);
- delete - удалить из очереди элемент с id из param;
- log - записывает в лог, три очереди ( очередь next и две очереди беков (попапы и окна)):
- add_state_last - добавить в очередь состояний вызываемых при закрытых окнах
- double_back - активировать back текущего и следующего событий в очереди на закрытие;
- triple_back - активировать back текущего и двух следующих событий в очереди на закрытие;
- back_top - активировать back для самого верхнего события в очереди на закрытие (будет закрыто самое верхнее окно по Z; чтобы данный функционал работал корректно - мы должны: 1) менеджер окон поставить выше всех окон (в ините идёт очистка информации об окнах); 2) окна должны иметь тип "mwindow" или установленный флаг "isWindow==1"); П.С. в случае, если окно не будет соответствовать п.2 - окно не сможет быть закрыто, но не переживайте в логе будет запись и в режиме дебага вылезет варнинг http://joxi.ru/krDOJ9vUKMeEzA
================================================== NEXT QUEUE id = 15, st = open id = 18, st = open id = 21, st = open id = 72, st = open id = 68, st = open id = 80, st = open id = 80, st = open id = 76, st = open 03/10/14 11:53:17.485: ================================================== POPUP QUEUE 03/10/14 11:53:17.485: ================================================== BACK QUEUE id = 11, st = open
Альтернативное описание состояний, взятое прямиком из кода
"idle", //!< Состояние покоя "add_first", //!< Добавить событие в начало очереди "add_last", //!< Добавить событие в конец очереди "add_first_uni", //!< Добавить событие в начало очереди "add_last_uni", //!< Добавить событие в конец очереди "next", //!< Активировать первое событие в очереди "back", //!< Активировать back для текущего события в очереди "clear", //!< Очистить обе очереди "add_popup", //!< Начать ветку попапов от текущего элемента очереди. Срабатывает //!< сразу, до зачиски всех попапов next не делает ничего, back сначала //!< закрывает попапы "delete", //!< Удалить из очереди элемент с id из param; "log" //!< Вывести содержимое всех трех очередей в лог "double_back", //!< двойной back (и отличная песня ZZ Top, к тому же) "triple_back" //!< тройной back
Схема работы
1) Добавить объекты по одному в очередь
2) вызывать состояния next или back - объекты у которых вызваны состояния убираются из очереди очередь разбирается с конца
Пример реализации
Очередь из окон
Задача: У нас открывается окно 1, после его закрытия открывается окно 2,окно 3 и т.д. (после закрытия одного окна открывается другое).
Пример: Закончили уровень, и после закрытия окна с результатами, мы должны показать два окошка с новыми задачами.
Реализация:
- 1) Открываем окно с результатами:
- Из машины окна, вызываем состояние next машине обработчику менеджера окон (9win_root). Предварительно записываем состояния для закрытия и открытия данного окна машины (состояния close и open соответственно):
- В машине обработчике менеджера окон (9win_root), в состоянии next мы задаём менеджеру окон и передаём состояние add_first, а затем next. То есть мы добавляем первым в очередь на открытие наше окно с результатами и его открываем:
- 2) Добавляем в очередь окно с задачей:
- Из машины окна, вызываем состояние add машине обработчику менеджера окон (9win_root). Предварительно записываем состояния для закрытия и открытия данного окна машины (состояния close и open соответственно):
- В машине обработчике менеджера окон (9win_root), в состоянии add мы задаём менеджеру окон и передаём состояние add_last( то есть мы добавляем окно в конец очереди на открытие).
- 3) Аналогично добавляем другие задачи.
- 4) Для закрытия окна с результатами уровня, мы передаём менеджеру окон состояние back (закрываем окно, первое в списке на закрытие), а затем состояние next (открываем первое окно в очереди на открытие, в нашем случае - первую добавленную задачу) .