RIA crumbs.

Blog about RIA development. ActionScript, JavaScript and more.

Archive for the ‘UI’ Category

Головная боль при скиновании во Flex 3 от Adobe

leave a comment

В процессе глубокого дебага скинов на проекте с использованием Flex 3 поймал грабли на том, что к примеру границы у PanelTitle не хотел быть как и прежде и Accordion не “поднимает” значения атрибута selectedFillColors. Если честно была озадаченность в мозгах и поиски каких-то косяков с нашей стороны, но все оказалось намного проще, на первый взгляд :)

Оказывается что Adobе, в процессе изменения SDK для Flex 3, решили добавить флаг для компилятора -compatibility-version, указав который мы насильно заставляем наше Flex приложение, разработанное с использованем SKD для Flex 3, использовать поведение некоторых UI компонент из старого доброго SDK 2.0.1 :) На Adobe Labs есть описание флага и различий между SDK, а также заметки о том где пользователь наступит на грабли.

Вот такие пироги…

Written by reijii

January 16th, 2008 at 4:43 pm

Тонкости работы с Alert под IE и FF.

one comment

Недавно наткнулся на довольно интересный баг с виджетом Alert. Баг заключается в том, что если мы используем в Alert кнопки, к примеру YES и NO, и вызываем его по старинке:
[code lang="javascript"]
Alert.show( "Some text", "Some title", alertHandler );
[/code]
то все как бы работает. Но в FF у нас все отрабатывает отлично, и мы радостно продолжаем дальше работать, а в IE 6 ( дома нет IE 7, поэтому пишу про 6) перед появлением нашего Alert’a мы наблюдаем ошибку:

TypeError: Error #2007: Parameter source must be non-null.
at flash.accessibility::Accessibility$/sendEvent()
at mx.accessibility::AlertAccImpl/mx.accessibility:AlertAccImpl:
:eventHandler()
at flash.events::EventDispatcher/flash.events:EventDispatcher:
:dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()
at mx.core::UIComponent/set initialized()
at mx.managers::LayoutManager/::doPhasedInstantiation()
at Function/http://adobe.com/AS3/2006/builtin::apply()
at mx.core::UIComponent/::callLaterDispatcher2()
at mx.core::UIComponent/::callLaterDispatcher()

Разглядев в дебагере, где у нас нашлись грабли, видим, что Alert.defaultButton = null. Первая мысль, которая у меня появилась: “А причем тут IE?”; в результате устранения граблей мысль перешла в следующую: “И куда смотрит FF?”.
Суть проблемы в том, что по умолчанию Alert.defaultButton равен 0×0004 ( то есть кнопка OK ), которой в нашем случае нет и в проекте. Вызвав наш Alert с указанием в качестве кнопи по умолчанию одной из существущих у нас, к примеру YES:
[code lang="javascript"]
Alert.show( "Some text", "Some title", alertHandler, null, 0x0001 );
[/code]
всё начинает отлично работать и в IE и в FF.

Если кто знает ответ на то, почему FF “забил” на null, пожалуйста, поделитесь знанием.

UPD: Как по мне, то и Adobe не очень правы, можно было бы ставить по умолчанию не кноку OK, а первую копку в массиве кнопок который есть в Alert.

Written by reijii

October 24th, 2007 at 1:03 am

Posted in Flex,UI

Tagged with , , ,

Делаем процесс “скинования” проще. [Часть 2]

2 comments

Продолжаю обзор Flex Skin Design Extension, на этот раз буду повествовать об extension под Adobe Photosop CS3. Часть первая, об extension в целом и его версии под Adobe Flash CS3, находится тут.

Flex Skin Design Extension под Photoshop представляет собой набор PSD шаблонов и два скрипта (экспорт скина и мастер создания скина).

Установка крайне простая, копируем содержимое архива в папку “\Program Files\Adobe\Adobe Photoshop CS3\Presets“. Теперь можно запускать Photoshop и начинать зверский акт вандализма над стандартными скинами :)

Запускаем Photoshop и запускаем мастер создания скина (File -> Scripts -> New Flex Skin…). Первое отличие от extension под Flash – это наличие выбора создания скина для нескольких компонент или для одного выбранного компонента. При выборе опции создания скина для единичного компонента активируется возможность выбрать диапазон применимости скина (для всех виджетов этого типа в приложении или только для тех, у кого заданный styleName ;) ).

PS - New Flex Skin

Рассмотрим создание скина для кнопки, у которой styleName=”customButton”. После выбора нужных значений и ввода styleName в мастере создание скина жмем Ок и получаем новый документ с импортированными в него заготовками для состояний кнопок (названия слоев и папок заданы в виде Button_customButton_overSkin и т.д., по состояниям виджета), а также хитрая папка с фоновым декором и пояснениями к шаблону (ее нужно скрывать перед экспортом скина, она так и называется – “_HIDE BEFORE EXPORTING”, но об этом потом).

PS - New Flex Skin Edit

После того, как вдоволь поиздевались над скином, прячем папку с названием _HIDE BEFORE EXPORTING и запускаем скрипт экспорта (File -> Scripts -> Export Flex Skins…). Скрипт попросит вас указать, куда будем создавать скины, и после нажатия OK начинаются танцы с бубнами, т.е. сохранение скина. (Фотошоп желательно оставить в покое, так как скрипт устраивает всяческие махинации с создаванием документов и т.д.)

После того, как скрипт закончит злодеяния, заходим в выбранный каталог для экспорта и смотрим, что создалось. А создалось, вопреки ожиданиям на чудо, css или что-то в этом духе – папка assets с четырьмя PNG-24 файлами. Теперь настал час “Ч” – импортировать весь этот artwork в Flex приложение.

Запускаем импорт нашего скина (File -> Import -> Skin Artwork…). Выбираем нашу папку со скином, в качестве значения для поля Folder or Bitmaps, и проект, внешний вид которого мы хотим изменить (также можно выбрать папку, куда все будет свалено, и название CSS файла; по умолчанию стоят названия assets). Next. Выведется список из доступных PNG, в котором можем выбрать, что будет импортироваться, а что – нет. Дополнительно в списке указывается название состояния виджета, на которое будет влиять PNG.

FX - Widget states skin selection

Finish. В папке проекта создается каталог assets, в который скопировались картинки, и в корне создался assets.css, в котором прописан стиль для нашей кнопки, а также в main MXML файл подключили наш CSS.

Fin.

Впечатления: все хорошо, но:

  • В версии для Flash не хватает мультивыбора компонент и указания styleName для единичного компонента, и довольно грязный импорт во Flex: помимо скина там в списке еще масса всякого хлама; хорошо, что все, что относится к скину, выбрано по умолчанию, а остальное отключено;
  • В версии для Photoshop не очень удобно редактировать скины, особенно полупрозрачные градиентные заливки;
  • В версии для Photoshop есть один большой минус: дизайнеру нельзя задать параметры для Scale-9 (это можно будет сделать только в коде, то есть подправить ручками CSS) и результат растровый;

Вроде все перечислил. Если что забыл, пишите, обновлю пост.

Written by reijii

October 12th, 2007 at 5:48 pm

Posted in Flex,UI

Tagged with , , , , , , ,

Делаем процесс “скинования” проще. [Часть 1]

3 comments

Тед Патрик недавно написал о различных новостях от Adobe, в том числе и о Flex Skin Design Extension. Которое должно облегчить жизнь дизайнерам при создании скинов для Flex приложений. Плагин идет под Photoshop, Flash, Illustrator и под FireWorks.

Общая логика – это предоставление набора шаблонов базового внешнего вида Flex компонент, взятых из стандартной темы AeonGraphical, поставляемой с Flex 3, которые путем простого редактирования можно превратить в кастомные скины.

Попытаюсь кратко рассказать про extension под Photoshop и Flash (все CS3).

Итак, начнем с Flash. Extension поставляется в виде mxp файла, установка которого не составляет больших проблем. Благо инсталлируя продукты линейки CS3 помимо самих продуктов, мы получаем еще кучу нужных и не очень штук, в числе нужных – Adobe Extension Manager.

После запуска Flash CS3 на splash screen в разделе “Create From Template” появляется выбор Flex Skins. В котором можно выбрать скин по видам виджетов.

FL splash

Выбрав интересующий скин, создается новый Flash CS3 документ, в котором уже все готово для редактирования, и все довольно приятно разнесено по папочкам в библиотеке. Осталось только изменить то что нам требуется. Scale-9 учтен.

FL edit

Итогом работы станет SWC , содержащий измененый нами скин. При паблише есть галочка Export SWC, выбрана по умолчанию. Импортируем нашу SWC в проект (File->Import..->Skin Artwork), мы получаем уже отскинованые компоненты. То есть, в нашем случае скролбары будут выглядеть, так как мы над ними поиздевались, без указания стилей и прочего.

Обзор как все сделать используя Flex Skin Design Extension и Photoshop будет во второй части.

Written by reijii

October 9th, 2007 at 12:46 pm

Posted in Flash,Flex,UI