Показать сообщение отдельно
Старый 12.08.2012, 23:19
trashcoder вне форума Посмотреть профиль Отправить личное сообщение для trashcoder Найти все сообщения от trashcoder
  № 1  
Ответить с цитированием
trashcoder

Регистрация: Jul 2012
Сообщений: 10
Записей в блоге: 1
По умолчанию Как сделать s:TitleWindow (не)активным без PopUpManager'а?

Как сделать s:TitleWindow (не)активным без PopUpManager'а? (То есть, речь идет не о фокусе и не об enabled, а о состояниях, которые inactiveGroup) Менять currentState вручную или наследоваться от него видится мне слегка костыльным, когда все, что нужно там уже есть. Но, к сожалению, свойство active у TitleWindow приватное, и изменить извне его можно только через слушатель:
Код AS3:
//TitleWindow.as
 
private function activateHandler(event:Event):void
{
    active = true;
    invalidateSkinState();
}
 
private function deactivateHandler(event:Event):void
{
    active = false;
    invalidateSkinState();
}
 
private function addActivateHandlers():void
{
    focusManager.addEventListener(FlexEvent.FLEX_WINDOW_ACTIVATE, 
        activateHandler, false, 0, true);
    focusManager.addEventListener(FlexEvent.FLEX_WINDOW_DEACTIVATE, 
        deactivateHandler, false, 0, true);
}
Но тут начинается магия. Как диспатчить эти события совершенно непонятно, ведь focusManager - один на контейнер, а в FlexEvent'е никакой информации о том, к чему именно оно относится, нет. Само собой, это не работает:
Код AS3:
titleWindow.focusManager.dispatchEvent(new FlexEvent(FlexEvent.FLEX_WINDOW_DEACTIVATE));
Но как-то же оно работает в PopUpManager'e, хотя в исходнике PopUpManagerImpl ничего к этому относящегося не нашел. Какие тут есть варианты?