Far.Net 3.2.3
Редактор уже практически работает.
ВНИМАНИЕ: эта версия, вероятно, требует незначительных, но все же изменений в коде существующих плагинов. Администрация приносит извинения за причиненные неудобства - это сделано не для красоты стиля, а для реальной совместимости Far.Net с большим числом потенциальных потребителей, например, стандартную форму обработчиков событий требует PowerShell, поэтому обработчики и приведены к стандартному виду, рекомендуемому (не случайно) самим Microsoft
http://msdn2.microsoft.com/en-us/library/ms229011.aspx.
Список изменений:
*) реализована основная функциональность редактора через списки текстовых строк и строк-объектов; исчерпывающий демонстрационный пример - это PowerShell скрипт Test-Editor-.ps1, прилагающийся к последней версии 1.0.3 плагина PowerShellFar (смотри в анонсах плагинов по соседству); надеюсь, легко сообразить, как его "перевести" на нужный язык, тут главное - идея, чем и как уже можно пользоваться.
*) все интерфейсные коллекции типизированы, то есть переведены на generic - это, возможно, потребует изменений в коде плагинов (скорей приятных, ибо приятнее и безопаснее работать с явными типами, чем заниматься сомнительными приведениями типов).
*) все обработчики событий сделаны "стандартными", то есть типа (object sender, ..EventArgs e). Это изменение наверняка потребует изменений в коде плагинов (менее приятных, но ничего страшного, просто косметика). Пример (C#):
Code: Select all
// в библиотеке:
// было: декларация "нестандартного" обработчика:
public delegate void OnOpenPluginMenuItemDelegate(IPluginMenuItem sender, OpenFrom from);
// стало: декларации нет, используется EventHandler или, в данном случае, EventHandler<OpenPluginMenuItemEventArgs>
// + определен класс OpenPluginMenuItemEventArgs (только для событий, требующих аргументов, в данном случае они есть)
class OpenPluginMenuItemEventArgs
// в вашем коде:
// было: обработчик выглядел так:
void ..OnOpen(IPluginMenuItem sender, OpenFrom from)
// стало: обработчик должен выглядеть так:
void ..OnOpen(object sender, OpenPluginMenuItemEventArgs e)
// *) sender - это тот же IPluginMenuItem, но переданный, как object
// *) старый "OpenFrom from" теперь стал доступен как "e.From"
Итак, обобщаем:
*) запустите сборку вашего кода, если нет проблем - выход, если проблемы, то:
*) во всех обработчиках сделайте: первый аргумент "object sender", sender это тот же тип, что был раньше, просто передается, как object; второй аргумент "EventArgs e", если аргумента вообще не было, или соответствующий данному обработчику "..EventArgs e" - кроме уже упомянутого в примере: 1) "Key key" замените на "KeyEventArgs e", где Key доступно как e.Key; 2) "Mouse mouse" замените на "MouseEventArgs e", где Mouse доступно как e.Mouse; и так далее по аналогии (хотя, вроде все уже и перечислено).