FarNet — плагин для написания плагинов на .NET языках

Здесь можно обсудить ваш любимый плагин.
dogwatch
Posts: 12
Joined: Thu 13 Oct, 2005 00:52

Re: FarNet — плагин для написания плагинов на .NET языках

Post by dogwatch »

Latest post of the previous page:

NightRoman wrote:1) Хорошо. А разве еще нет? Я вроде везде такое пихал, знаю, что удобно.
нет, если верить доке. спасибо
2) А IDialog.GetControl(Int32) не годится (как индекс становится слишком большим, она вернет нал)?
хм. а вот это проглядел! тогда отбой ;)
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

HaRT wrote:
NightRoman wrote:но вот для обычных (родных) диалогов Фар вроде количество элементов не сообщает, нет АПИ
Хм, а вот в макросах есть Dlg.ItemCount
В макросах может быть. Но для плагинов я не нашел. Может не доглядел, ткните носом.
User avatar
lordmuzer
Posts: 533
Joined: Mon 12 Nov, 2007 22:05
Location: Киев
Has thanked: 20 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by lordmuzer »

object Data есть у IDialog и IPanel. а у IControl нету. добавить бы немешало, если это не сложно.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: FarNet — плагин для написания плагинов на .NET языках

Post by DrKnS »

NightRoman wrote:ткните носом.
while(getdialogitem(i)) i++;
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

DrKnS wrote:
NightRoman wrote:ткните носом.
while(getdialogitem(i)) i++;
А, ну такой "АПИ" есть и у Фарнета. Любой может написать себе список сам:

Code: Select all

List<IControl> controls = new List<IControl>();
for(int i = 0;;)
{
	IControl control = dialog.GetControl(i++);
	if (control == null)
		return controls;
	controls.Add(control);
}
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

Вроде учел все последние пожелания в 4.3.6, если что забыл, напоминайте.

С гуидами для операций модулей мне понравился подход, спасибо за совет, многое упрощает, а сам бы я еще долго к этому шел без наводки на размышления. Сразу и межмодульное взаимодействие появилось в этой версии, это пока technology preview так сказать, оно уже работает, но будет еще развиваться.
User avatar
lordmuzer
Posts: 533
Joined: Mon 12 Nov, 2007 22:05
Location: Киев
Has thanked: 20 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by lordmuzer »

снова о RegisterModule*/ Unregister
уже когда то говорили. сейчас снова, нельзя удалить конкретный Module, что не совсем удобно.
можно ли сделать Unregister(Guid id) ?
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

lordmuzer wrote:снова о RegisterModule*/ Unregister
уже когда то говорили. сейчас снова, нельзя удалить конкретный Module, что не совсем удобно.
можно ли сделать Unregister(Guid id) ?
Смотрим сюда
FarNet.IFar.GetModuleCommand|Filer|Tool(Guid)
и у него сюда
FarNet.IModuleAction.Unregister()

Не на всякий чих должен быть один метод в одном месте.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

И кроме того даже если проглядеть то, как это делается по Guid - ты когда регистрируешь операцию получаешь назад ее представителя (IModuleAction), можно и сохранить у себя ссылочку, а потом вызвать по ней Unregister().
User avatar
lordmuzer
Posts: 533
Joined: Mon 12 Nov, 2007 22:05
Location: Киев
Has thanked: 20 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by lordmuzer »

а, точно )
IModuleManager же свой у каждого ModuleAction.
тоесть получаеться верно. каждый ModuleAction может наделать еще регистраций,
а уж если и убрать понадобилось то найти IModuleAction и работать уже с ним

просто немного путает то что GetModule* возращяет соверщенно отдельную иерархию интервейсов. никак не связаную с классами-наследниками ModuleAction
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

lordmuzer wrote:просто немного путает то что GetModule* возращяет соверщенно отдельную иерархию интервейсов. никак не связаную с классами-наследниками ModuleAction
GetModule* это скорей для межмодульного взаимодействия (можно вызвать операцию любого модуля из любого модуля по Guid, даже если вызываемый модуль еще и не загружен физически). Внутри же модуля правильнее пользоватся вторым советом - зарегистрировали операцию и, если планируем отрегистрировать ее динамически, то сохранили ее ссылку, которой потом пользуемся.

Но раз такой вопрос возник, добавлю пару подсказок в CHM.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

А то, что отдельная иерархия интерфейсов, это вот почему. Зарегистрированная акция (интерфейс IModuleAction, имя с 'I') существует независимо от того загружен ли ее модуль или нет. Если нет, то классов первой иерархии (класс ModuleAction, имя без 'I') в рантайме еще вообще не существует, чего же тогда возвращать? Заместителя - IModuleAction. Напомню сами объекты классов операций создаются только на момент вызова Invoke(). Либо этих классов может вообще не быть - случай динамической регистрации хендлеров с атрибутами. Но представитель IModuleAction есть всегда.
User avatar
lordmuzer
Posts: 533
Joined: Mon 12 Nov, 2007 22:05
Location: Киев
Has thanked: 20 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by lordmuzer »

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

и как я понял, если хранить ссылки на интерфейсы IModule*и потом дергать у них Invoke FarNet уже сам поднимет, если надо, конкретный ModuleAction и тп ?
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

lordmuzer wrote:и как я понял, если хранить ссылки на интерфейсы IModule*и потом дергать у них Invoke FarNet уже сам поднимет, если надо, конкретный ModuleAction и тп ?
Да. Только важно понимать, что внутри модуля для своих же акций этого делать не надо, все и так доступно. Но если очень хочется, пожалуйста, конечно (из Москвы в Питер через Владивосток, почему бы и нет). Это все заложено для того, чтобы акции других модулей вызывать.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

просто если делать плаг с настройками "где показывать" то при изменении таких настроек хочется что б они сразу и применились,
так в общем случае в фаре принято. вот и колупаюсь.
Это будет в Фарнет централизованно сделано для всех модулей (когда руки дойдут) через конфиг Фарнета. Так что не знаю, стоит ли такое внутри модуля делать.
User avatar
lordmuzer
Posts: 533
Joined: Mon 12 Nov, 2007 22:05
Location: Киев
Has thanked: 20 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by lordmuzer »

NightRoman wrote:Это будет в Фарнет централизованно сделано для всех модулей (когда руки дойдут) через конфиг Фарнета. Так что не знаю, стоит ли такое внутри модуля делать.
О! о таком же я точно не знал)
просто реально тот Unr* нужен только для таких вот выкрутасов. иначе незачем он вообще. если фар нет дат такое делать то все ок.
Post Reply

Return to “Обсуждение плагинов”