Archive for the ‘Flex Builder 3’ Category

Flash Builder 4 и генерация геттеров/сеттеров или как это сделать “Супер удобно”

Tuesday, September 8th, 2009

В Flash Builder появилась созможность генерации геттера/сеттера для переменной.

Адоб просто бъет все рекорды по “адобству” использования.

чтобы сгенерить геттер/сеттер нужно набрать объявление переменной, ее тип, наводим курсор на набраный текст и тут 2 варианта:

  1. Главное меню -> Source -> Generate Getter/Setter…
  2. Правой кнопкой мыши-> Source -> Generate Getter/Setter…

И появляется оно — окошко генерации:

Flash Builder 4: Generate getter/setter window

Лично я не представляю как можно было извратить простую идею генерации небольшого кусочка кода. Вот скажите, зачем мне нужно каждый раз это окошко? Мало того что там несколько полей и галочек, так Flash Builder 4 еще ничего и не запоминает. И каждый раз мне нужно делать одни и те же действия (я предпочитаю вставлять геттеры/сеттеры прям на месте).
А еще мне нравится кнопка превью, наверное человек делавший этот функционал считает, что перед вставкой геттера/сеттера нужно хорошо настроиться, подготовиться, обдумать свое действие и только после этого его выполнить.
Лучше бы сделали темплит кода для этой процедуры (я не говорю даже о глобальном функционале).

Также после перехода на Flash Builder 4 меня подстерегла глобальная засада — изменили коди иерархию объектов в плагине билдера и мои Eclipse Monkey скрипты перестали работать(. Нужно заново изучать чего они натворили и переписывать.

Я все чаще и чаще задумывають над тем чтобы перехать на IDEA. )

Ну и в качестве бонуса:
Главное меню -> Window -> Preferences -> General -> Keys, в фильтр вбиваем Getter выбираем Generate Getter/Setter, кликаем в поле Binding и жмем свою заветную комбинацию клавиш по которой будет вызыватся окошко генерации геттера/сеттера.



Flex Data Binding в чистом AS3 проекте

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;
		}
 
	}
}

Скомпилированый пример:

Flex Data Binding in AS3 project sample. You need to install adobe flash player 10 to view this content

Всем удачного кодирования!



UAFPUG 9, мой доклад о Eclipse Monkey

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 содержит строку с кодом, дальше с можно поступать как угодно.

Если есть каки-то вопросы, задавайте. Если есть какие-то пожелания, делитесь) Удачи.



Eclipse Monkey и редакторы Flex Builder

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;
}

Данный метод отдает ссылку на инстанс класса наследованого от 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);	
		}
	}
}

Метод вставляет текст в позицию курсора и если выставлен флаг, перемещает курсор в конец вставленного текста.



Закрываем И запускаем AIR-debugger с помощью Eclipse Monkey

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);
}

Правила применения:
1.заменяем строку [YOU_DEBUG_CONFIGURATION_NAME] на имя конфигурации запуска приложения. Это имя можно найти в меню “Run -> Open Debug Dialog…”
2. заменяем сочетание M3+d на свое (M3 это alt). Для меня alt+d ближе чем F11 :)

При выполнении скрипт, убивается процесс AIR дебагера и запускает процесс сборки и новый дебагер.




]]> rss о RIA от 33 Коровы
Забадать RSS!
]]>
~~~~~~