Фар3: AnalyseW + OPEN_ANALYSE

Разработка Far.
Post Reply
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Фар3: AnalyseW + OPEN_ANALYSE

Post by NightRoman »

Я правильно понимаю, что AnalyseW только анализирует файл, а панель надо открывать по OPEN_ANALYSE? Если да, то как в OPEN_ANALYSE узнать, для какого именно файла делается открытие? Может, это OpenInfo.Data по задумке? У меня там вроде 0.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Фар3: AnalyseW + OPEN_ANALYSE

Post by Maximus5 »

Ты вроде должен сохранить то, что пришло в AnalyseW.
Дико неудобно, да...
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: Фар3: AnalyseW + OPEN_ANALYSE

Post by NightRoman »

А если AnalyseW не приводит к открытию (например, более одного открывальщика нашлось и для моего OPEN_ANALYSE не вызывается), то кто и когда будет освобождать подвешенные в AnalyseW глобальные данные, ждущие OPEN_ANALYSE ? Или такой ситуации не может быть?
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Фар3: AnalyseW + OPEN_ANALYSE

Post by Maximus5 »

Освобождение запомненных данных - это проблемы плагина (и API).
Освободить ты их сможешь видимо в после ExitFarW или при следующем вызове AnalyseW/OpenW.
Вобщем это как-то не то...
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Фар3: AnalyseW + OPEN_ANALYSE

Post by Maximus5 »

Я бы предложил что-то вроде
Attachments
Analyse.diff.7z
(688 Bytes) Downloaded 174 times
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

Re: Фар3: AnalyseW + OPEN_ANALYSE

Post by Ariman »

Присоединяюсь к мысли, что с OPEN_ANALYZE надо бы передать информацию о том какой файл мы открываем. А то сейчас как-то странно это реализовано.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Фар3: AnalyseW + OPEN_ANALYSE

Post by Maximus5 »

Извините, я чего-то набредил и случайно сообщение отредактировал. W.I.
User avatar
WARP ItSelf
Самый умный
Posts: 1011
Joined: Tue 15 Mar, 2005 23:19
Contact:

Re: Фар3: AnalyseW + OPEN_ANALYSE

Post by WARP ItSelf »

В свете решения данного вопроса возникли 2 варианта:

1. Analyse возвращает HANDLE, появляется CloseAnalyse. CloseAnalyse вызывается для всех, кто не был выбран. Для выбранного плагина вызывается Open.

2. Analyse возвращает HANDLE, Close расширяется флагом (nMode {MODE_PANEL и MODE_ANALYSE}). Далее то же самое.

P.S. Это уведомительный опрос, в настоящий момент выбран и считается приоритетным 1 вариант.
Никто не знал, а я...
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: Фар3: AnalyseW + OPEN_ANALYSE

Post by NightRoman »

Есть вопрос вообще не связанный с заданным выше. Не рассматривается такая возможность, что у плагина А у самого более одного варианта/кандидата на открытие файла - В1, В2? Плюс также есть другой плагин Б, который претендует на открытие - В3. Как быть плагину А? Задать вопрос что выбрать - В1 или В2? А если реально пользователь выберет В3, то этот диалог получается напрасным. А если цель пользователя выбрать В1 или В2, то тогда последующий или предыдущий вопрос Фара о выборе между плагинами А и Б будет лишним.

Ситуация может быть типичной для плагинов с субплагинами/модулями. Пример - FarNet, но могут быть и другие плагины открывашки файлов, которые просто оболочку для своих субплагинов/модулей предоставляют.

В случае с Фарнет он просто разошлет OPEN_ANALYSE (в преобразованном виде) тем модулям, которые на это подписались. Что если в ответ на это их более одного вызвались открывать? Как рекомендуется такую ситуацию разрулить? (Пока-то я приостановил использование OPEN_ANALYSE в Фарнет, все равно еще АПИ устаканивается, но интересно на будущее).

Некоторая аналогия - по F11 Фар предлагает выбрать пользователю не только разные плагины, но и разные команды одного и того же плагина. OPEN_ANALYSE - в сущности похожая ситуация, только команды плагинов узко специализированы именно на этот файл. Если из более 1, Фар показывает в сущности меню плагинов для этого файла. Но в этом меню более одного элемента от плагина быть не может в отличие от F11 меню.
User avatar
WARP ItSelf
Самый умный
Posts: 1011
Joined: Tue 15 Mar, 2005 23:19
Contact:

Re: Фар3: AnalyseW + OPEN_ANALYSE

Post by WARP ItSelf »

Пока идеала достичь не получится. Т.е. можно усложнить все это с добавлением пунктов меню B1 и B2 в меню выбора, но это, пожалуй, перебор. Хотя посмотреть на точный план можно. В newarc я так делаю - выясняю все субплагины, которые готовый открыть файл и запоминаю. Потом говорю фару, что newarc готов открыть файл. Фар рисует меню, если выбран newarc, то я рисую свое меню с выбором B1 и B2.
Никто не знал, а я...
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: Фар3: AnalyseW + OPEN_ANALYSE

Post by NightRoman »

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

Post by NightRoman »

WARP ItSelf wrote:1. Analyse возвращает HANDLE, появляется CloseAnalyse. CloseAnalyse вызывается для всех, кто не был выбран. Для выбранного плагина вызывается Open.
Кажется интуитивным и здравым вариантом.

Как вариация, можно возвращать не только HANDLE, но c ним и указатель на функу void X(HANDLE), которую Фар дернет для невыбранных. Если плугу на самом деле ничего не надо освобождать, он может передавать просто 0. Тогда и нет нужды экспортировать лишнюю функцию.
User avatar
Alexey Samlyukov
Posts: 1765
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

Re: Фар3: AnalyseW + OPEN_ANALYSE

Post by Alexey Samlyukov »

смотрю:
+ HANDLE WINAPI AnalyseW(const struct AnalyseInfo *Info);
+ void WINAPI CloseAnalyseW(const struct CloseAnalyseInfo *Info);

+struct OpenAnalyseInfo
+{
+ size_t StructSize;
+ struct AnalyseInfo* Info;
+ HANDLE Handle;
+};

+struct CloseAnalyseInfo
+{
+ size_t StructSize;
+ HANDLE Handle;
+};
все правильно? OpenAnalyseInfo для OpenW()?

upd. все правильно. глянул в сорцы, для OpenW().
User avatar
zg
zero-gravity
Posts: 6038
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Фар3: AnalyseW + OPEN_ANALYSE

Post by zg »

всё правильно.
Post Reply

Return to “Development”