eclipse monkey

19
Ilja Panin http://the33cows.com Eclipse Monkey Безграничный функционал Flex Builder

Upload: iljapanin

Post on 12-Jul-2015

4.088 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Eclipse Monkey

Ilja Panin http://the33cows.com

Eclipse Monkey

Безграничный функционал Flex Builder

Page 2: Eclipse Monkey

Ilja Panin http://the33cows.com

Что такое Eclipse Monkey ?

Это плагин к Eclipse который позволяет писать к нему расширения на языке

JavaScript (также Ruby, Python и Groove).

Page 3: Eclipse Monkey

Ilja Panin http://the33cows.com

Установка

Устанавливается как и большинство плагинов Eclipse, адрес сайта:

http://download.eclipse.org/technology/dash/update/

Page 4: Eclipse Monkey

Ilja Panin http://the33cows.com

Основные возможности

• файловая система • запуск программ• веб-запросы • …

Работа с Eclipse Platform:• Workspace• Projects• Debugger• Plug-ins• …

Работа с Java:

Page 5: Eclipse Monkey

Ilja Panin http://the33cows.com

Инициализация скриптов

• Выбор пункта из меню • По сочетанию клавиш• По событию среды

Page 6: Eclipse Monkey

Ilja Panin http://the33cows.com

От теории к практике

Page 7: Eclipse Monkey

Ilja Panin http://the33cows.com

Hello world

/* * Menu: sample > hello word * Key: M3+6 * Kudos: Ilja Panin http://the33cows.com * DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript */ function main(){ Packages.org.eclipse.jface.dialogs.MessageDialog.openInformation(window.getShell(), "Monkey", "Hello World");}

E >

Page 8: Eclipse Monkey

Ilja Panin http://the33cows.com

Стандартные диалоги

Packages.org.eclipse.jface.dialogs.InputDialog Диалог ввода текста

Packages.org.eclipse.swt.widgets.FontDialogДиалог выбора шрифта

Packages.org.eclipse.swt.widgets.ColorDialog Стандартный диалог выбора цвета

Больше информации о диалогах можно найти в хелпе к эклипс платформеИскать в пакете org.eclipse.swt.widgets

E >

Page 9: Eclipse Monkey

Ilja Panin http://the33cows.com

Кастомные диалоги и окна

Можно создать любой произвольный диалог используя SWT: The Standard Widget Toolkit

E >

http://www.eclipse.org/swt/

Page 10: Eclipse Monkey

Ilja Panin http://the33cows.com

Работа с View

Мы можем получить доступ к любому View.

Можем открывать их, закрывать, работать с ними, как это делает платформа или плагины

E >

Подробнее: http://code.google.com/p/monkey-for-flex/wiki/KnowHow

Page 11: Eclipse Monkey

Ilja Panin http://the33cows.com

Использование «чужого» кода

По умолчанию Eclipse Monkey доступны только основные ресурсы платформы. Чтобы начать использовать остальные ресурсы платформы или плагинов нужно воспользоваться функцией:

loadBundle(<имя пакета>)

E >

Пример: loadBundle("com.adobe.flexbuilder.editors.common");//”Загружает” классы Flex Builder

Page 12: Eclipse Monkey

Ilja Panin http://the33cows.com

Работа с JavaРаботая с Eclipse Monkey, мы имеем возможность использовать стандартные объекты Java, их методы и свойства

E >

Пример 1: Packages.java.lang.Runtime.getRuntime().exec("tskill.exe adl");//запукает процесс tskill.exe, который убивает процесс adl// AIR отладчик, подробнее у меня в блоге.

Пример 2:hashSet = new Packages.java.util.HashSet();//создали экземпляр класса HashSet

Page 13: Eclipse Monkey

Ilja Panin http://the33cows.com

Работа с редакторами

Получить текущий редактор можно следующим образом:

var editor = window.getActivePage().getActiveEditor();

Для работы с редактором (получение текста, вставка, текста, управление курсором и выделением) нужно получить ссылку на класс наследованный от org.eclipse.ui.editors.text.TextEditorВ Flex Builder для MXML редактора используя getActiveEditor() мы не получим ссылки на требуемый типа редактора.

Page 14: Eclipse Monkey

Ilja Panin http://the33cows.com

Работа с редакторами. Flex Builder

Flex Builder имеет 3 типа редакторов

MXMLEditor и CSSEditor – сложные редакторы, каждый объединяет в себя визуальный и текстовый редактор. Для получения текстового редактора я использую следующий код:

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(); } } return editor;}

1. ASEditor2. MXMLEditor3. CSSEditor

ASEditor – «простой» редактор, наследуется от org.eclipse.ui.editors.text.TextEditor и мы можем работать с ним сразу

Page 15: Eclipse Monkey

Ilja Panin http://the33cows.com

Работа с редакторами. Вставка, удаление, выделение текста

Для работы с текстом нужно изучить хелп по org.eclipse.ui.editors.text.TextEditor,

org.eclipse.jface.text.TextSelection :)

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

E >

Page 16: Eclipse Monkey

Ilja Panin http://the33cows.com

Flex Builder Code Model

Adobe Flex Builder 3 Extensibility > Adobe Flex Builder 3 Extensibility API Reference

Взяв его на вооружение будем «правильно готовить» билдер :)

Разработчики Flex Builder предоставили нам возможность работать с API Flex Builder. В Help можно даже найти скромный раздел:

Page 17: Eclipse Monkey

Ilja Panin http://the33cows.com

Flex Builder Code Modelдоступ к модели кода

Получить доступ к нему мы можем используя следующий код:

loadBundle("com.adobe.flexbuilder.codemodel");var CMFactory = Packages.com.adobe.flexbuilder.codemodel.common.CMFactory;

Дальше пример того, что можно сделать имея этот класс.

Входной точкой для работы с API Flex Builder является класс

com.adobe.flexbuilder.codemodel.common.CMFactory

Page 18: Eclipse Monkey

Ilja Panin http://the33cows.com

Flex Builder Code Modelавтогенерация кода класс для любого интерфейса

У Flex Builder немного хромает автогенерация кода когда класс имплементирует какой либо интерфейс:

- Код методов создается лишь тогда когда мы выбираем интерфейс при создании класса, если мы добавляем интерфейс потом то мы код приходиться создавать с нуля ручкам.

- Мы не можем задать произвольный шаблон для генерации кода - Если интерфейс наследован от другого то автогенератор добавляет все

методы, и те которые не нужны. Например:

MyAxisRenderer extends UIComponent implements IAxisRenderer где public interface IAxisRenderer extends IUIComponent

При генерации билдером в MyAxisRenderer будут вставлены все методы из IUIComponent хотя они есть т.к. мы наследовались от UIComponent

Возьмем Eclipse Monkey и будем шаманить… E >

Page 19: Eclipse Monkey

Ilja Panin http://the33cows.com

Почитать о Eclipse Monkey

За стартовую точку я советую взять проектmonkey-for-flex