Statesmanager

Материал из wiki.appsalutecreator.com
Версия от 07:56, 17 декабря 2020; Gdavidenko (обсуждение | вклад) (Альтернативное описание состояний, взятое прямиком из кода)
Перейти к: навигация, поиск

Объект предназначен для постановки объектов в очередь выполнения единообразными командами. Можно применять для управления отображением всплывающих окон.

Свойства

Процесс

  • объект открытия (obj) - объект который будет переведён в заданное состояние, если данный объект будет первым в очереди на открытие и передадим менеджеру окон состояние next;
  • состояние открытия (st) - перевести выбранный объект в заданное состояние;
  • объект back (obj_b) - объект который будет переведён в заданное состояние, если данный объект будет первым в очереди на закрытие и передадим менеджеру окон состояние back;
  • состояние back (st_b) - перевести выбранный объект в заданное состояние.

Визуализация окон

  • fading_t - Время фейдинга для окон типа по альфе. Statesmanager'у должен приходить таймер!!!


Дополнительные параметры

+.png изменить состояние объекта - очередь back пуста:

объект ( obj ) - Перевести объект в состояние из следующего поля;
состояние ( st ) - Новое состояние для объекта из предыдущего поля.

+.png изменить состояние объекта - очередь 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 соответственно):
Statesmanager W next.png
В машине обработчике менеджера окон (9win_root), в состоянии next мы задаём менеджеру окон и передаём состояние add_first, а затем next. То есть мы добавляем первым в очередь на открытие наше окно с результатами и его открываем:
Statesmanager Next.png


  • 2) Добавляем в очередь окно с задачей:
Из машины окна, вызываем состояние add машине обработчику менеджера окон (9win_root). Предварительно записываем состояния для закрытия и открытия данного окна машины (состояния close и open соответственно):
Statesmanager W add.png
В машине обработчике менеджера окон (9win_root), в состоянии add мы задаём менеджеру окон и передаём состояние add_last( то есть мы добавляем окно в конец очереди на открытие).
Statesmanager.Add.png


  • 3) Аналогично добавляем другие задачи.


  • 4) Для закрытия окна с результатами уровня, мы передаём менеджеру окон состояние back (закрываем окно, первое в списке на закрытие), а затем состояние next (открываем первое окно в очереди на открытие, в нашем случае - первую добавленную задачу) .