Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > Psycho Tiger

Рейтинг: 5.00. Голосов: 2.

FlashDevelop: хорошо шаблоним

Запись от Psycho Tiger размещена 26.08.2010 в 16:28
Обновил(-а) Psycho Tiger 29.08.2010 в 20:49

Есть такая отличная программа для написания кода - Flash Develop.
Она поражает красотой компиляции, простотой настройки, удобством использования. И есть у неё одна "киллер"-фича, по моему мнению - это Contextual Code Generation. По умолчанию вызывается по ctrl+shift+1. Благодаря ей можно генерировать getters/setters, создавать методы-обработчики, переносить переменные из локальных в приватные поля класса... Много умеет и очень экономит время написания кода.
Но вот только не всё делает она по фен-шую. Например, сеттеры и геттеры она генерирует без проверки на текущее значение переменной, это не совсем правильно. И в обработчиках она создаёт имя аргумента e:Event, а не event - как просит нас Code convention. Но всё поправимо:
В Flash Develop выбираем Tools -> Application Files,
Далее идём в Data/ASCompletion и обнаруживаем файл Generator.txt

Он то нам и нужен, в нём мы можем изменять генерацию кода как нам угодно.
Вот мой:
Код:
ImplementHeader	$(Boundary)\n\n/* INTERFACE {0} */
ImplementPart	\n\n{0}$(CSLB){{\n\t{1}\n}}
Function	{0}$(CSLB){{\n\t\n}}
Variable	{0}$(EntryPoint);
Delegate	{0} function {1}():{2} $(CSLB){{\n\t$(EntryPoint)\n}}
EventHandler	{0} function {1}(event:{2}):{3} $(CSLB){{\n\t$(EntryPoint)\n}}
Getter	{0} function get {1}():{2} {{ $(EntryPoint)return {3}; }}
Setter	{0} function set {1}(value:{2}):{4} $(CSLB){{\n\tif ({3} == value) return;\n\t$(EntryPoint){3} = 

value;\n}}
MethodOverride	({0}):{1} $(CSLB){{\n\t$(EntryPoint){2}\n}}
Добавлено event:Event и проверка на сеттеры-геттеры, как описано выше. Теперь по феншую.

Идём в корень FlashDevelop`а и видим папку Projects. Внутри заготовки для создания проектов - проекты я создаю только AS3 - AS3 Project, поэтому лезу в
Projects\120 ActionScript 3 - AS3 Project\src\$(PackagePath)
и меняю файл Main.as.template:
Код AS3:
package $(PackageName)$(CSLB){
	import flash.display.Sprite;
	import flash.events.Event;
 
	/**
	$(CBI)* ...
	$(CBI)* @author $(DefaultUser)
	$(CBI)*/
	public class Main extends Sprite $(CSLB){
 
		public function Main():void $(CSLB){
			if (super.stage) init();
			else super.addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(event:Event = null):void $(CSLB){
			super.removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
		}
 
	}
 
}
Теперь первое событие в базовом классе тоже носит имя event
А ещё я пишу super, в примере я тоже проставил super куда надо. Кто-то пишет this, но не пишет super, кто то пишет и то, и то - это дело вкуса и требование компании, в которой Вы работаете. Файл прост, я уверен, что Вы сможете сделать его таким, каким Вам надо


Чтобы писалось private static вместо static private и им похожим при генерации кода по ctrl+shift+1 - как просит нас Code Convention - можно поменять флаг вот здесь:
F10 -> Settings -> ASCompletion -> Start Declaration With Access Modifier
Спасибо Mur4ik за информацию.
Всего комментариев 43

Комментарии

Старый 26.08.2010 16:38 КорДум вне форума
КорДум
 
Аватар для КорДум
Тигер, полезно, но в версии в моей версии 3.2.1 нет Generator.txt по указанному адресу ни где-либо еще...
Старый 26.08.2010 18:23 Aloran вне форума
Aloran
В 3.2.2 точно есть.
Старый 26.08.2010 19:12 incvizitor вне форума
incvizitor
 
Аватар для incvizitor
У меня вообще 3.0.6 стоит, и файл есть
Старый 26.08.2010 19:14 Котяра вне форума
Котяра
 
Аватар для Котяра
А я привык к e. Думаю сложно не понять что это.
За урок - спасибо. Вызов контекст-генератора у меня стоит на кнопке alt+a (типа авто)- код пишу всегда с ним. До того обленился, что ФБ напрягает, не говоря о флэшЦС.
А как написать свой генератор?
Например, хочу автогенерацию метатега [Event..] на dispatchEvent повесить..
Возможно?
Старый 26.08.2010 21:49 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Круто, спасибо! А я-то думал - где все это найти... =)
Старый 26.08.2010 22:19 switcher! вне форума
switcher!
Цитата:
А я привык к e. Думаю сложно не понять что это.
+ String(100500)

Цитата:
Вызов контекст-генератора у меня стоит на кнопке alt+a (типа авто)- код пишу всегда с ним
До того обленился, что ФБ напрягает, не говоря о флэшЦС.
Использую только, чтобы сгенерить метод из названия и проставить импорты. Иногда get/set методы, под настроение. В остальном - не удобно. Генерация контекстных методов происходит либо сразу за телом текущего метода, либо в конце класса. А потом его приходится вручную тащить в сортированные по имени и модификатору доступа списки методов.
+ я пишу this перед именем обработчика в addEventListener (хандлер, как правило - приватный метод этого же класса). И контекстный генератор тут же погибает, предлагая сгенерировать обычный метод.

Цитата:
Например, хочу автогенерацию метатега [Event..] на dispatchEvent повесить..
а зачем он нужен? Для mxml/flex, когда можно в теге привязать к событию хандлер, или для FB, когда в выпадающем списке можно увидеть MyEvent.SOME_EVENT - еще можно понять. А для AS3+FD он вообще хоть для чего-то нужен?
Читал, что и в FD должно выскакивать MyEvent.SOME_EVENT, но сколько не копипастил примеры, сколько не экспериментировал - лезут все те же нативные эвенты.
Разве что... для справки генерить. Мол, посмотрел на список Event-тегов и понял, что класс "умеет" слушать/испускать?

Цитата:
А как написать свой генератор?
Видимо, c# + FD = плагин. А как иначе? Если соберешься разобраться в этом и написать урок - сдерживать не стану )))

UPD:
Цитата:
Круто, спасибо! А я-то думал - где все это найти... =)
гуглится как "context generation flashdevelop" => Configuration
Обновил(-а) switcher! 26.08.2010 в 22:22
Старый 26.08.2010 22:25 Котяра вне форума
Котяра
 
Аватар для Котяра
Цитата:
А для AS3+FD он вообще хоть для чего-то нужен?
Автокомплит событий obj при obj.addEventListener.
Цитата:
Читал, что и в FD должно выскакивать MyEvent.SOME_EVENT, но сколько не копипастил примеры, сколько не экспериментировал - лезут все те же нативные эвенты.
нормально всё показывает - что-то у вас не то.
нужно перед описанием класса вставить:
Код AS3:
[Event(name="goto", type="ru.k0t0vich.pano.gui.menu.MenuEvent")]
Цитата:
Использую только, чтобы сгенерить метод из названия и проставить импорты. Иногда get/set методы, под настроение. В остальном - не удобно. Генерация контекстных методов происходит либо сразу за телом текущего метода, либо в конце класса. А потом его приходится вручную тащить в сортированные по имени и модификатору доступа списки методов.
а ёще перевод из локальной переменной в проперти класса, автогенерация хэндлеров, переменных итп. Очень удобно при определённом навыке. я текста почти не пишу - всё на автокомплитах да сниппетах)
А тащить куда-то и переформировывать саму структуру текста - глупости - есть smart в панели Outline и кнопка ф4.
Обновил(-а) Котяра 26.08.2010 в 22:35
Старый 26.08.2010 22:37 switcher! вне форума
switcher!
ааа, понятно. Контекстная генерация еще и super не любит. Я экспериментировал внутри класса (где определен тег Event) со строчкой вида:
Код AS3:
super.addEventListener(...
еще один камень в огород встроенной контекстной генерации.
Старый 26.08.2010 22:40 Котяра вне форума
Котяра
 
Аватар для Котяра
если в супере нет тега - то с какого он должен автокомплититься?
Старый 26.08.2010 22:49 switcher! вне форума
switcher!
а с какого он считает, что если я добавляю слушатель по сигнатуре метода суперкласса, то и эвенты я могу слушать только его, родные ?
Старый 26.08.2010 22:56 Котяра вне форума
Котяра
 
Аватар для Котяра
а вообще я против употребления super.method. иногда это мешает, но ни разу не помогало.
Старый 26.08.2010 23:11 switcher! вне форума
switcher!
Помогает постоянно. Особенно, когда пишется ядро классов, фреймворк.
Порой так же бывает полезно визуально понять, что сей метод определен не в этом классе. Например, когда просматриваешь код по прошествии энного времени.

Мешает, мешает... Теоретически при изменениях, когда происходит смещение свойств по ветке: родители/дети - может помешать. Но при грамотном планировании это происходит редко... Больше ничего не припомнил.
В любом случае, использование super спасает от куда большего геморроя, чем его не использование, имо.

В холивар вступать не буду. Воин по поводу super уже произошло немало. Можно найти в поиске. Не хочу перегонять из пустого в порожнее.
Старый 27.08.2010 00:32 iNils вне форума
iNils
 
Аватар для iNils
Цитата:
К сожалению не смог найти как поменять static и модификатор ацессора местами.
static private выглдит не по фен-шую, хочу private-static
Это происходит по генерации метода, например, из другого статичного метода. Или геттеров сеттеров для статичной переменной...
Это прошито в самом коде FD и для смены нужно брать из свн, менять и перекомпилировать FD самому.
Старый 27.08.2010 00:39 iNils вне форума
iNils
 
Аватар для iNils
Цитата:
А тащить куда-то и переформировывать саму структуру текста - глупости - есть smart в панели Outline и кнопка ф4.
Мой код должен меня радовать своей структурой, а не кашей.
Старый 28.08.2010 13:06 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Outline не пользуюсь, а ctrl+F и F4 жму постоянно.
Не ожидал столько комментариев на эту статью. )
Старый 28.08.2010 21:37 ir73 вне форума
ir73
Цитата:
Например, хочу автогенерацию метатега [Event..] на dispatchEvent повесить..
Возможно?
Как раз это было в моем TODO листе, будет в следующей версии (не та, которая на днях будет, а следом)
Старый 28.08.2010 21:40 Mur4ik вне форума
Mur4ik
Цитата:
Цитата:
К сожалению не смог найти как поменять static и модификатор ацессора местами.
static private выглдит не по фен-шую, хочу private-static
Это происходит по генерации метода, например, из другого статичного метода. Или геттеров сеттеров для статичной переменной...
Это прошито в самом коде FD и для смены нужно брать из свн, менять и перекомпилировать FD самому.
А кажися это все же где то в настройках лежит.

Наверное тут F10 -> Settings -> ASCompletion -> Start Declaration With Access Modifier
Старый 28.08.2010 21:40 ir73 вне форума
ir73
Цитата:
И есть у неё одна "киллер"-фича, по моему мнению - это Contextual Code Generation.
FD умеет всего-то процентов 20 от того, что в FDT есть (я про contextual code generation) и процентов 10 от того, что есть у ява коммьюнрити в Эклипсе Так что я б эту фичу назвал не киллер, а must-have.
Старый 28.08.2010 21:42 ir73 вне форума
ir73
Цитата:
А кажися это все же где то в настройках лежит.

Наверное тут F10 -> Settings -> ASCompletion -> Start Declaration With Access Modifier
это поможет всего лишь в 30% случаев, остальное захардкодено
Старый 28.08.2010 21:44 Mur4ik вне форума
Mur4ik
Цитата:
FD умеет всего-то процентов 20 от того, что в FDT есть (я про contextual code generation)
Ваши патчи хорошо поправили ситуацию, я их долго ждал, и теперь уже не 20% а примерно 80-90%.

Цитата:
это поможет всего лишь в 30% случаев, остальное захардкодено
Я уже точно не помню, но раньше практически все было через ASGenerator и захардкодженных других мест не видел.
Обновил(-а) Mur4ik 28.08.2010 в 21:47
Старый 28.08.2010 22:05 ir73 вне форума
ir73
Цитата:
Я уже точно не помню, но раньше практически все было через ASGenerator и захардкодженных других мест не видел.
теперь нет я не видел такой опции раньше, а по конвенции static впереди стоит всегда, так что сорри. Потом может поправлю под сеттинги
Старый 29.08.2010 04:35 iNils вне форума
iNils
 
Аватар для iNils
Цитата:
Как раз это было в моем TODO листе, будет в следующей версии (не та, которая на днях будет, а следом)
Судя по комментам в свн FD, тебе персональный от меня респект!
Старый 29.08.2010 10:40 ir73 вне форума
ir73
Цитата:
Судя по комментам в свн FD, тебе персональный от меня респект!
сеньк ю! кстати, я теперь не делаю патчи, я теперь сам коммиттер.

Цитата:
Ваши патчи хорошо поправили ситуацию, я их долго ждал, и теперь уже не 20% а примерно 80-90%.
спасибо, но все еще далеко не так сладко, но будет становиться круче от версии к версии это точно
Старый 29.08.2010 12:45 iNils вне форума
iNils
 
Аватар для iNils
Цитата:
я теперь не делаю патчи, я теперь сам коммиттер.
Поздравляю!
Старый 29.08.2010 16:25 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
ir73, Вы наверно, путаете с другим языком. По конвенции у нас static стоит после. Во всяком случае так написано)
http://opensource.adobe.com/wiki/dis...ng+Conventions
Код:
The static keyword

If present, put this after the access specifier.

Do this:

public static const MOVE:String = "move"

Not this:

static public const MOVE:String = "move";
Обновил(-а) Psycho Tiger 29.08.2010 в 16:36
Старый 29.08.2010 19:48 ir73 вне форума
ir73
Цитата:
теперь нет я не видел такой опции раньше, а по конвенции static впереди стоит всегда, так что сорри. Потом может поправлю под сеттинги
оказывается все не так плохо, фича работает везде. Единственное, с форматированием трабл небольшой в режиме когда "private static", но это старый баг и легко устранимый.
Старый 29.08.2010 20:40 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
ir73, я честно слоупок в деле svn и окололежащих. Я понимаю, что это, как это, но это дело у меня идёт очень тяжело.

Вы очень молодец, что внесли много разных фич в FD и мне очень хочется их попробовать. Людям удается это сделать до релиз версии 3.2.3, как я понимаю, и я тоже очень хочу. Пожалуйста, дайте ссылку или пинок в каком направлении двигаться, чтобы у меня получилось.

P.S. я почти вменяемый.
Обновил(-а) Psycho Tiger 29.08.2010 в 20:43
Старый 29.08.2010 20:51 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Кстати да, ir73, поддерживаю Котяру.
Можно попросить чтобы по dispatchEvent автоматически добавлялся метатег? Если Вы сделаете это - будет очень здорово.
Старый 29.08.2010 21:06 ir73 вне форума
ir73
если не билдить из свн, то тогда отсюда можно скачать
http://www.flashdevelop.org/communit...t+build#p15998
но это не самый последний
Старый 31.08.2010 11:37 ir73 вне форума
ir73
Цитата:
Кстати да, ir73, поддерживаю Котяру.
Можно попросить чтобы по dispatchEvent автоматически добавлялся метатег? Если Вы сделаете это - будет очень здорово.
уже в свн (плюс еще кое чего http://www.flashdevelop.org/communit...php?f=5&t=7152)
Старый 31.08.2010 11:46 i.o. вне форума
i.o.
 
Аватар для i.o.
Молодец, огромное спасибо))

PS: лично от меня небольшое пожелание на будущее: если не сложно, было бы круто иметь в настройках отдельную подсветку для входящих параметров функции
Обновил(-а) i.o. 31.08.2010 в 11:55
Старый 03.09.2010 16:11 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Спасибо за очередной плагин. Очень ценим.
Старый 03.09.2010 20:57 3p.station вне форума
3p.station
 
Аватар для 3p.station
клаасно вам а как же быть маководам (параллели не ставлю)
Старый 03.09.2010 22:29 Котяра вне форума
Котяра
 
Аватар для Котяра
по идее - можно создать форк и под моно компилить.. только никто этим не занимается.. есть наверное расхождения с чистым .net.
Старый 03.09.2010 22:41 ir73 вне форума
ir73
какой-то порт FD в процессе, демаю в этом году будет что-то гоотовое. Но вообще, человек, покупая мак, осознанно идет на то, что софта под него в 1000 раз меньше чем на виндоусе.
Старый 03.09.2010 23:15 3p.station вне форума
3p.station
 
Аватар для 3p.station
ну ,человек, в моем случае,я, покупал мак в первую очередь для музтворчества ( :
а потом уже, как оказалось, стал флешером ггггг
Старый 04.09.2010 00:48 iNils вне форума
iNils
 
Аватар для iNils
Можно купить и нормальный ноут для работы.
Старый 04.09.2010 01:02 Котяра вне форума
Котяра
 
Аватар для Котяра
а нахрена мак для музтворчества? под винду мало кубэйзов и всяких асидов?
Легенда про "супер приспособленность мака для дизайнеров и музыкантов" ?
Враньё полное.
Старый 04.09.2010 01:35 3p.station вне форума
3p.station
 
Аватар для 3p.station
купить можно ( : тока вот будет в облом его возить все время с собой (много рутешествую)

то Котяра: не будем поднимать бесконечный разговор о "мак VS ПС", ибо тема скатится в оффтоп или будут удалятся сообщения модераторами, - скажу только что у меня был сначала обычный ноут, потом макбук 13 - через время пришлось его продать, а когда снова покупал ноут то уже не сомневался что мне нужно, сейчас имею макбук про 17 и очень этому рад
а вот FD было бы канешно неплохо , ща использую ЦС5 - лучше пока что нашел
Старый 08.09.2010 16:09 KiL33 вне форума
KiL33
 
Аватар для KiL33
3p.station, не продавай макбук, возможно ты еще переквалифицируешься в руббисты (:
Старый 18.05.2011 01:39 SARFEX вне форума
SARFEX
 
Аватар для SARFEX
Generator.txt нет в папке, как быть? (версия 3.3.4)
Старый 18.05.2011 11:14 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
Generator.txt нет в папке, как быть? (версия 3.3.4)
Создайте новый проект. В нем создайте приватную переменную. Выделите эту переменную и нажмите ctrl-shift-1. В появившемся меню выберите любой пункт и нажмите enter. После этого Generator.txt появится. После смены настроек в Generator.txt нужен перезапуск FD
Старый 21.05.2011 00:03 SARFEX вне форума
SARFEX
 
Аватар для SARFEX
gloomyBrain, спасибо

Извините что тут пишу, подскажите плиз как автоматически отформатировать код во FlashDevelop (типа кнопки "Автоформат" во flash ide), никак не могу найти (а может и нет её)
Обновил(-а) SARFEX 21.05.2011 в 16:45
 

 


Часовой пояс GMT +4, время: 23:15.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.