Простой способ подсчитать количество окон через PopUpManager?

Я использую PopUpManager, чтобы открыть кучу окон событий.

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

Думая о переменной windowCount, которая увеличивается, когда я добавляю окно, и уменьшается, когда я его удаляю, но, поскольку PopupManager вызывается в разных классах, мне пришлось бы начать бросать события повсюду. Я могу это сделать, но мне интересно, есть ли более простой метод?


person Damon    schedule 20.04.2011    source источник


Ответы (2)


systemManager (вместо PopUpManager, пойди разберись...) предоставляет информацию об открытых в данный момент всплывающих окнах.

Если все ваши всплывающие окна являются модельными, вам будет интересен 'systemManager.numModalWindows':

Количество модальных окон. Модальные окна не позволяют щелкать в других окнах, которые обычно активируют FocusManager в этом окне. PopUpManager изменяет этот счетчик при создании и уничтожении модальных окон.

В противном случае попробуйте 'systemManager.popUpChildren. ':

Список самых верхних (всплывающих) окон, порождаемых этим ISystemManager.

ISystemManager имеет различные типы дочерних элементов, таких как приложение, всплывающие окна, всплывающие подсказки и пользовательские курсоры. Вы можете получить доступ к самым верхним окнам через свойство popUpChildren.

Объект IChildList имеет такие методы, как getChildAt(), и такие свойства, как numChildren. Например, popUpChildren.numChildren дает количество самых верхних окон, и вы можете получить к ним доступ как popUpChildren.getChildAt(i).

person Kevin Gallahan    schedule 20.04.2011
comment
вау хорошо знать! я бы не догадался... и я был так взволнован моим новым классом popUpDistrictManager, который я делал. Я думаю, что больше нет спроса - person Damon; 20.04.2011
comment
к сожалению, я создаю граничные контейнеры, а не окна с помощью диспетчера всплывающих окон, и они, похоже, не считаются popUpChildren... есть свойство numChildren, но оно ненадежно (не совсем уверен, что считается дочерним, но часто бывает больше чем я могу объяснить) - person Damon; 20.04.2011

Я вижу несколько вариантов:

1) Сделайте все ваши окна модальными; так что приложение не может быть использовано, пока окно не будет закрыто. Это аргумент для createPopUp в PopUpManager. Предположительно, у вас нет всплывающих окон, создающих другие всплывающие окна.

2) Создайте свой собственный класс Manager, возможно, расширение класса PopUpManager, которое отслеживает все открытые окна. Тогда у вас будет один источник всех всплывающих окон, и вы сможете поддерживать их таким образом.

person JeffryHouser    schedule 20.04.2011
comment
Изначально они были модальными, но я ненавидел эффект задержки и размытия... расширение PopUpManager может быть самым простым способом... спасибо - person Damon; 20.04.2011
comment
вау, расширение или даже копирование синглетонов не для слабонервных - person Damon; 20.04.2011
comment
@Damon, вы можете удалить размытие и отставание модальных окон с помощью CSS. См. следующие стили modalTransparency, modalTransparencyBlur, modalTransparencyColor и modalTransparencyDuration. Вы можете установить новые значения в global стилях. - person Constantiner; 20.04.2011