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

Здесь можно обсудить ваш любимый плагин.
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 »

Latest post of the previous page:

Connect\Disconnect у простых классов вообще не будет. Будет просто вызов. Поскольку класс создан только на этот вызов, этого достаточно. Приведите пример, когда нет.

И будет один класс, который, если имплементирован, будет создаваться один раз. Вот там будет Connect\Disconnect для всего модуля.

Про панели предложение не совсем понятно. По мне так вот очень удобно именно, как есть. Просто и гибко, и соответствует панельной архитектуре Фара, на событиях. Понятно, что можно всяких врапперов много написать. Ну так пусть это себе модуль и делает на свой вкус, а базовая панель остается простой. Но я не против улучшить что-то, если аргументы будут убедительные. Пока - нет. Пока был просто тезис без аргументов.
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 »

Простые классы будут для простоты. Когда применяется сложный глобальный класс (хост модуля) вообще нет нужды в простых классах по сути, ибо в Connect хост может добавить какие угодно меню и события сам без всяких дополнительных классов. По такой схеме работает PSF например.

Но если цель модуля - одна простая операция, то лучше использовать класс хелпер по типу операции.

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

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

Post by lordmuzer »

да, по первому пукну вроде б все хорошо. если Connect\Disconnec вынести отдельно, а модули активировать по вызову только для Invoke будет и удобно, не без путаницы.

про панели.
на событиях все красиво и просто, ровно до тех пор пока панелька простотая, действий делает немного и тп. (короче все в одном классе) )
но если пробывать вынести логику работы из класса модуля куда то дальше, то приходиться протягивать туда IPanel что б подписать на его события. получаеться кривовато.
логично в классе наследнике (нашем модуле) сконструировать панель, проставить ей всякие свойства и подсунуть интерфейс-контроллер. я так и делаю, только через обвертку которая привязывает это все дело.
конечно, если события уже хорошо прижились и показали себя неплохо можно и так оставить.
DiRTy_GaRRy
Posts: 705
Joined: Tue 05 Apr, 2005 09:26
Been thanked: 3 times
Contact:

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

Post by DiRTy_GaRRy »

Нормальную выгрузку сборок сделать можно, но для этого придётся все плагины грузить в отдельные AppDomain. Как это скажется на производительность и гибкости хз. Но, если я не ошибаюсь, MEF построен именно на этом подходе, да и в unmanaged world, особенно у браузеров, подобный подход в последнне время стал модным.
Ы?
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 »

DiRTy_GaRRy wrote:Нормальную выгрузку сборок сделать можно, но для этого придётся все плагины грузить в отдельные AppDomain. Как это скажется на производительность и гибкости хз. Но, если я не ошибаюсь, MEF построен именно на этом подходе, да и в unmanaged world, особенно у браузеров, подобный подход в последнне время стал модным.
До опыта - плохо скажется на производительности и гибкости. Такой подход хорош, если модуль вещь в себе. А у нас это не так. Модули активно работают с ядром Фарнета и наоборот ядро с ними. Если между ними поставить доп. барьер, будет только хуже. А ради чего все это, что просто иметь возможность несколько кило памяти освободить? Овчинка выделки не стоит, на рантайм этих отделных домейнов куда больше ресурсов понадобится, скорей всего.
User avatar
lordmuzer
Posts: 533
Joined: Mon 12 Nov, 2007 22:05
Location: Киев
Has thanked: 20 times
Contact:

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

Post by lordmuzer »

о. я и не подумал даже. а у нас в рабочем проекте так плагины и грузятся. каждый в своем AppDomain. оно то работает быстро, но только RAM кушает. так как оно опять же в каждый AppDomain грузит clr. но тут я не уверен. надо протестировать.
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
То, что для сложных панелей нужен своего рода "контроллер" - это да, практика это показывает. Часто нужен некий вспомогательный класс, я его хостом панели называю, у панели даже свойство такое есть, куда он может себя прилепить, бывает полезно для коммуникации двух таких панелей между собой.

Такой хост используется в частности в PowerShellFar. Из PowerShellFar за несколько лет много обкатанных фич перекочевало в ядро Фарнета. А вот интерфейс этого хоста панели что-то не тянет туда пока переносить, не уверен в универсальности. Когда же этот хост вообще не декларирован, как сейчас, любой модуль реализует его сам как надо ему, а не дизайнеру опубликованного интерфейса хоста, если бы он был опубликован.

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

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

Post by lordmuzer »

ладно) вобытия то такое, можно и подписаться...

снова вопросы. по IPanel, а точнее по Info.SetMode()
допустим, я делаю так

Code: Select all

Panel.Info.SetMode(
    PanelViewMode.Full,
    new PanelModeInfo
    {
        Columns = new FarColumn[]
                    {
                        new SetColumn{Type = "N", Name = "Name", Width = -30},                                   
                        new SetColumn{Type = "C0", Name = "Path", Width = 0}
                    }
    }
);

Panel.ViewMode = PanelViewMode.Full;
а при создании FarFile в OnGettingData примерно так

Code: Select all

FarFile farFile = new SetFile
                {
                    Name = item.Name,
                    Data = item
                };

farFile.Columns = new String[] { item.Command };

Panel.Files.Add(farFile);
но потом вижу только панель с одной колонкой с моим item.Command. примеры смотрел, но наверно маловато )
и IsAlignedExtensions можно добавить ? потому как панели с "не файлами" смотрятса кривовато.
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
1)

Code: Select all

Panel.ViewMode = PanelViewMode.Full;
Это уже св-во панели после запуска. А до запуска надо установить это: Panel.Info.StartViewMode.

2)
а у тебя версия Фарнет какая? наверное не последняя, там как раз был баг пофиксен с отрицательными (процентными) ширинами колонок

3)
IsAlignedExtensions - а оно есть в Фар АПИ? Есть - добавлю. Нет - не знаю пока.
User avatar
lordmuzer
Posts: 533
Joined: Mon 12 Nov, 2007 22:05
Location: Киев
Has thanked: 20 times
Contact:

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

Post by lordmuzer »

1. ок.
2. хм. вот с этим как то ошибся. не заметил анонса 4,3,4
3. вот про фар апи, не знаю. сорри. в самом конце заметил в коментариях к PanelModeInfo. сообщил что вот как бы надо )
User avatar
lordmuzer
Posts: 533
Joined: Mon 12 Nov, 2007 22:05
Location: Киев
Has thanked: 20 times
Contact:

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

Post by lordmuzer »

да с колонками разобрался. спасибо. с версии 4,3,4 все отлично работает
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 »

Ага нашел у себя
Properties IsAlignedExtensions and IsCaseConversion can be implemented in the future on demand.
Значит есть в АПИ. ОК, добавлю.
User avatar
lordmuzer
Posts: 533
Joined: Mon 12 Nov, 2007 22:05
Location: Киев
Has thanked: 20 times
Contact:

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

Post by lordmuzer »

Начинаю полупаться с диалогами )
Версия FarNet 4.3.4, Far 2.0 x86 1400
Делаю так:

Code: Select all

Dialog = _far.CreateDialog(-1, -1, 66, 18);            

IButton currentButton = null;

currentButton = Dialog.AddButton(10, 14, "Ok");
currentButton.ButtonClicked += OnOkClick;
currentButton.CenterGroup = true;
Dialog.Default = currentButton;

currentButton = Dialog.AddButton(20, 14, "Cancel");
currentButton.ButtonClicked += OnCancelClick;
currentButton.CenterGroup = true;
Dialog.Cancel = currentButton;

Dialog.Show()
Получаеться диалог, 2 кнопки, как ожидалось.
но сам диалог - просто серая панель. нету ни рамки, ничего.
Заголовок еще можно дописать руками, но я так понимаю что рамка то должна быть.
NoPanel = false.
User avatar
[e]Bu$ter
Posts: 792
Joined: Mon 30 May, 2005 23:05
Location: Беларусь, Минск
Contact:

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

Post by [e]Bu$ter »

Рамку нужно самому добавлять, через Dialog.AddBox(...). C нейже и заголовок выставляется.
Смотрите пример в FileVersionInfo.
User avatar
lordmuzer
Posts: 533
Joined: Mon 12 Nov, 2007 22:05
Location: Киев
Has thanked: 20 times
Contact:

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

Post by lordmuzer »

ой. ну так и думал что протупил. надо спать по ночам, а не плагины писать )
спасибо
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.5 обещанная новая архитектура запущена. Простые модули теперь писать еще проще, "все можно пихать в сам класс вызываемой операции". Сложные модули - наверное, без разницы, все равно там обычно одним классом не обойдешься. Но зато до Фара теперь из любого места, в том числе и из вспомогательных классов, доступаемся одинаково - объект Far.Net виден абсолютно отовсюду.
Post Reply

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