Archive for the ‘Flex Builder 3’ Category
Tuesday, September 8th, 2009
В Flash Builder появилась созможность генерации геттера/сеттера для переменной.
Адоб просто бъет все рекорды по “адобству” использования.
чтобы сгенерить геттер/сеттер нужно набрать объявление переменной, ее тип, наводим курсор на набраный текст и тут 2 варианта:
- Главное меню -> Source -> Generate Getter/Setter…
- Правой кнопкой мыши-> Source -> Generate Getter/Setter…
И появляется оно — окошко генерации:
Лично я не представляю как можно было извратить простую идею генерации небольшого кусочка кода. Вот скажите, зачем мне нужно каждый раз это окошко? Мало того что там несколько полей и галочек, так Flash Builder 4 еще ничего и не запоминает. И каждый раз мне нужно делать одни и те же действия (я предпочитаю вставлять геттеры/сеттеры прям на месте).
А еще мне нравится кнопка превью, наверное человек делавший этот функционал считает, что перед вставкой геттера/сеттера нужно хорошо настроиться, подготовиться, обдумать свое действие и только после этого его выполнить.
Лучше бы сделали темплит кода для этой процедуры (я не говорю даже о глобальном функционале).
Также после перехода на Flash Builder 4 меня подстерегла глобальная засада — изменили коди иерархию объектов в плагине билдера и мои Eclipse Monkey скрипты перестали работать(. Нужно заново изучать чего они натворили и переписывать.
Я все чаще и чаще задумывають над тем чтобы перехать на IDEA. )
Ну и в качестве бонуса:
Главное меню -> Window -> Preferences -> General -> Keys, в фильтр вбиваем Getter выбираем Generate Getter/Setter, кликаем в поле Binding и жмем свою заветную комбинацию клавиш по которой будет вызыватся окошко генерации геттера/сеттера.
Posted in ActionScript 3.0, Flash Builder 4, Flex Builder 3 | 7 Comments »
Sunday, September 6th, 2009
Все “знают” или покрайней мере слышали, что флексовый байндинг не работает в ActionScript 3 проектах, или слышали что он работает, но при этом занимает много места. Из за этого было написано, некоторое количество велосипедов(не мной — другими людьми, если поискать то решения 3 точно можно найти).
Но стороние решения — это плохо, у нас теряется связь с flex проектами.
Года полтора назад передомной встала задача, использовать одни и теже классы в AS3 проекте и во flex проекте, а т.к. большая часть этих классов была обычными байндабл VO, то приходилось в AS3 проекте просто вырезать метатег [Bindable] или попросту делать клонов нужных VO. Благо проект был совсем небольшим и на эти неудобства можно было закрыть глаза.
На днях я таки решил снова попробовать подключить байндинг в AS3 проект, все получилось и на радость мне все оказалось очень хорошо — flexframework доработали и убрали лишние зависимости, теперь флешка с включенным байндингом занимает около 5 кб (релиз версия)!
вот простой пример кода:
package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
import mx.binding.utils.BindingUtils;
[SWF(backgroundColor="#ffffff")]
public class DataBindingSample extends Sprite
{
[Bindable]
public var stageY:Number = 0;
[Bindable]
public var stageX:Number = 0;
private var circle:Sprite;
public function DataBindingSample()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
circle = new Sprite();
circle.graphics.beginFill(0x55aaFF,1);
circle.graphics.drawCircle(0,0,10);
circle.graphics.endFill();
addChild(circle);
BindingUtils.bindProperty(circle,"x", this, "stageX");
BindingUtils.bindProperty(circle,"y", this, "stageY");
stage.addEventListener(MouseEvent.MOUSE_MOVE, changePosition);
}
protected function changePosition(event: MouseEvent): void
{
stageX = event.stageX;
stageY = event.stageY;
}
}
} |
package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
import mx.binding.utils.BindingUtils;
[SWF(backgroundColor="#ffffff")]
public class DataBindingSample extends Sprite
{
[Bindable]
public var stageY:Number = 0;
[Bindable]
public var stageX:Number = 0;
private var circle:Sprite;
public function DataBindingSample()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
circle = new Sprite();
circle.graphics.beginFill(0x55aaFF,1);
circle.graphics.drawCircle(0,0,10);
circle.graphics.endFill();
addChild(circle);
BindingUtils.bindProperty(circle,"x", this, "stageX");
BindingUtils.bindProperty(circle,"y", this, "stageY");
stage.addEventListener(MouseEvent.MOUSE_MOVE, changePosition);
}
protected function changePosition(event: MouseEvent): void
{
stageX = event.stageX;
stageY = event.stageY;
}
}
}
Скомпилированый пример:
Flex Data Binding in AS3 project sample. You need to install adobe flash player 10 to view this content
Всем удачного кодирования!
Posted in ActionScript 3.0, Flex, Flex Builder 3, flex framework | 5 Comments »
Friday, May 1st, 2009
Непрошло и пол года как я подготовил исходники и написал пост о моем докладе на UAFPUG, который был 28 февраля, этого года.
Мой доклад назывался
“Eclipse Monkey — безграничный функционал Flex Builder’а.” как можно догадаться был посвещен прикручиванию Monkey скриптов к Flex Builder’у
В начале небольшая призентация:
По ходу призентации я приводил примеры использования скриптов. В правом углу некоторый слайдов есть метка E> это означает, что вместе со слайдом был пример кода. Примеры скриптов лежать в архиве у меня или в проекте monkey-for-flex на гугл коде. Примеры простые и не очень :).
Непростой пример посвещен использованию модели кода Flex Builder в Monkey Eclipse. Пример лежит в файле create-interface.js Данный пример генерит методы и свойства которые объявлены в выбраном интерфейсе, используя модель кода Flex Builder. Чтобы получить код нужно выделить в коде имя интерфейса и нажать Alt+m и в консоле будет выведен код. Остаеться его только скопипастить. Данный пример не является эталоном работы с моделью кода Flex Builder, это лишь иллюстрация возможностей Eclipse Monkey.
Еще я хочу обратить ваше внимание на библиотечки, которые я написал для более удобной работы.
Эти библиотеки лежат в папке com/the33cows/monkeylib
flexutil.js
Содержит методы для работы с текстовыми редакторами, как обычными так и MXML и CSS редакторов Flex Builder (Получение редактора, добавление текста, перемещение курсора). Библиотека не доделана, но с базовыми вещами справляеться нормально. Приветствуется добавление своих методов и/или советов, критики 🙂
templateUtils.js
Служит для работы с темплитами кода. В файл нужно прописать путь к каталогу где будут храниться файлы с темплитами
this.templateRoot = "< YourPathToTemplates >/templates/";
использование до безобразия простое
include("com/the33cows/monkeylib/templateUtils.js");
...
var tmpl = getTemplate("public-method.tpl"); // загрузили темплит из файла
tmpl = tmpl.replace(/{comments}/g, coments); // заменяем переменные на значения
переменная tmpl содержит строку с кодом, дальше с можно поступать как угодно.
Если есть каки-то вопросы, задавайте. Если есть какие-то пожелания, делитесь) Удачи.
Posted in ActionScript 3.0, Eclipse, Eclipse Monkey, Effective work, Flex Builder 2, Flex Builder 3, Monkey Script | 2 Comments »
Thursday, April 16th, 2009
Работа с mxml и css редактором отличается от работы с обычным редактором который нам предоставляет Eclipse Monkey. Чтобы получить доступ к любому редактору я использую такой метод
loadBundle("com.adobe.flexbuilder.editors.common");
/**
* @return current text editor or null
* @see org.eclipse.ui.editors.text.TextEditor
*/
this.getCurrentTextEditor = function()
{
var editor = window.getActivePage().getActiveEditor();
if (editor)
{
if (editor.getClass().getName() == "com.adobe.flexbuilder.editors.mxml.MXMLEditor"
|| editor.getClass().getName() == "com.adobe.flexbuilder.editors.css.CSSEditor")
{
editor = editor.getCodeEditor();
}
/*
//TODO add others editors that
else if (){}
*/
}
return editor;
} |
loadBundle("com.adobe.flexbuilder.editors.common");
/**
* @return current text editor or null
* @see org.eclipse.ui.editors.text.TextEditor
*/
this.getCurrentTextEditor = function()
{
var editor = window.getActivePage().getActiveEditor();
if (editor)
{
if (editor.getClass().getName() == "com.adobe.flexbuilder.editors.mxml.MXMLEditor"
|| editor.getClass().getName() == "com.adobe.flexbuilder.editors.css.CSSEditor")
{
editor = editor.getCodeEditor();
}
/*
//TODO add others editors that
else if (){}
*/
}
return editor;
}
Данный метод отдает ссылку на инстанс класса наследованого от org.eclipse.ui.editors.text.TextEditor, вернее даже на инстанс, который реализует
org.eclipse.ui.editors.ITextEditor
дальше работаем обычными для эклипса методами:
this.TextSelection = Packages.org.eclipse.jface.text.TextSelection;
this.insertToCursor = function(editor, text, moveCursor)
{
if (editor)
{
var documentProvider = editor.getDocumentProvider();
var doc = documentProvider.getDocument(editor.getEditorInput());
var offset = editor.getSelectionProvider().getSelection().getOffset();
doc.replace(offset, 0, text);
if (moveCursor)
{
var selection = new TextSelection(doc, offset+text.length, 0);
editor.getSelectionProvider().setSelection(selection);
}
}
} |
this.TextSelection = Packages.org.eclipse.jface.text.TextSelection;
this.insertToCursor = function(editor, text, moveCursor)
{
if (editor)
{
var documentProvider = editor.getDocumentProvider();
var doc = documentProvider.getDocument(editor.getEditorInput());
var offset = editor.getSelectionProvider().getSelection().getOffset();
doc.replace(offset, 0, text);
if (moveCursor)
{
var selection = new TextSelection(doc, offset+text.length, 0);
editor.getSelectionProvider().setSelection(selection);
}
}
}
Метод вставляет текст в позицию курсора и если выставлен флаг, перемещает курсор в конец вставленного текста.
Posted in Eclipse, Eclipse Monkey, Flex Builder 3, Monkey Script, mxml | 2 Comments »
Monday, February 23rd, 2009
Про апгрейченый скрипт запуска AIR дебагера:
/*
* Menu: Kill adl an run debug
* Key: M3+d
* Kudos: Ilja Panin http://the33cows.com
* DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
*/
var workspace = Packages.org.eclipse.core.resources.ResourcesPlugin.getWorkspace();
var configToRunName = "[YOU_DEBUG_CONFIGURATION_NAME]";
function main()
{
Packages.java.lang.Runtime.getRuntime().exec("tskill.exe adl");
loadBundle("org.eclipse.debug.ui");
var ProgressMonitorDialog = Packages.org.eclipse.jface.dialogs.ProgressMonitorDialog;
var IRunnableWithProgress = Packages.org.eclipse.jface.operation.IRunnableWithProgress;
var runnableWithProgress = new IRunnableWithProgress({run: runfun});
var monitorDialog = new ProgressMonitorDialog(window.getShell()).run(true, true, runnableWithProgress);;
}
function runfun(monitorDialog)
{
monitorDialog.beginTask("Run debbuger ...", 1);
var plugin = Packages.org.eclipse.debug.core.DebugPlugin;
var launchManager = plugin.getDefault().getLaunchManager();
configurations = launchManager.getLaunchConfigurations();
var conf;
for (var i in configurations)
{
if (configurations[i].getName() == configToRunName )
{
conf = configurations[i];
}
}
if (conf)
{
var launch = Packages.org.eclipse.debug.ui.DebugUITools.buildAndLaunch(conf, "debug", monitorDialog);
}
else
{
debug("project not found!");
}
monitorDialog.done()
}
function debug(s)
{
out.println(s);
} |
/*
* Menu: Kill adl an run debug
* Key: M3+d
* Kudos: Ilja Panin http://the33cows.com
* DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
*/
var workspace = Packages.org.eclipse.core.resources.ResourcesPlugin.getWorkspace();
var configToRunName = "[YOU_DEBUG_CONFIGURATION_NAME]";
function main()
{
Packages.java.lang.Runtime.getRuntime().exec("tskill.exe adl");
loadBundle("org.eclipse.debug.ui");
var ProgressMonitorDialog = Packages.org.eclipse.jface.dialogs.ProgressMonitorDialog;
var IRunnableWithProgress = Packages.org.eclipse.jface.operation.IRunnableWithProgress;
var runnableWithProgress = new IRunnableWithProgress({run: runfun});
var monitorDialog = new ProgressMonitorDialog(window.getShell()).run(true, true, runnableWithProgress);;
}
function runfun(monitorDialog)
{
monitorDialog.beginTask("Run debbuger ...", 1);
var plugin = Packages.org.eclipse.debug.core.DebugPlugin;
var launchManager = plugin.getDefault().getLaunchManager();
configurations = launchManager.getLaunchConfigurations();
var conf;
for (var i in configurations)
{
if (configurations[i].getName() == configToRunName )
{
conf = configurations[i];
}
}
if (conf)
{
var launch = Packages.org.eclipse.debug.ui.DebugUITools.buildAndLaunch(conf, "debug", monitorDialog);
}
else
{
debug("project not found!");
}
monitorDialog.done()
}
function debug(s)
{
out.println(s);
}
Правила применения:
1.заменяем строку [YOU_DEBUG_CONFIGURATION_NAME] на имя конфигурации запуска приложения. Это имя можно найти в меню “Run -> Open Debug Dialog…”
2. заменяем сочетание M3+d на свое (M3 это alt). Для меня alt+d ближе чем F11 🙂
При выполнении скрипт, убивается процесс AIR дебагера и запускает процесс сборки и новый дебагер.
Posted in AIR, Eclipse, Effective work, Flex Builder 3, Monkey Script | Comments Off on Закрываем И запускаем AIR-debugger с помощью Eclipse Monkey