Как создать разные меню в разных областях? (Фар 3)

Место, где разработчики плагинов могут поделиться своим опытом.
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)

Post by NightRoman »

Как создать разные пункты меню плагина в разных областях? Например, в панелях один пункт, а в редакторе или вьюере или диалоге другой? (Вариация вопроса - разное число пунктов меню в разных областях).

Вопрос по Фар 3, скорей. Рассчитывал, что он будет это позволять, но пока не вижу, может, очевидного.
User avatar
ctapmex
Posts: 1241
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Re: Как создать разные меню в разных областях? (Фар 3)

Post by ctapmex »

может я глупость скажу, но по твоему объяснению я понял , что тебе надо следующее

Code: Select all

void WINAPI GetPluginInfoW(struct PluginInfo *pInfo)
{
  static wchar_t* PluginMenuStrings;
  memset(pInfo, 0, sizeof(*pInfo));
  pInfo->Flags = PF_EDITOR | PF_DISABLEPANELS;
  pInfo->StructSize = sizeof(*pInfo);
  pInfo->PluginConfig.Count = 1;
  pInfo->PluginMenu.Count = 1;
  PluginMenuStrings = (wchar_t*)GetMsg(mName);
  pInfo->PluginConfig.Strings = &PluginMenuStrings;
  pInfo->PluginMenu.Strings = &PluginMenuStrings;
  pInfo->PluginConfig.Guids = &PluginConfig;
  pInfo->PluginMenu.Guids = &PluginMenu;
};
только count делаешь больше, а PluginMenuStrings - массив
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)

Post by NightRoman »

sonar
Во-первых, твой код по флагам только для редактора (и конфига, а вопрос не про конфиг, а панели, редактор, вьюер, диалог). Ну это ладно, флагов добавим для других областей. Но тогда во всех областях будет один и тот же пункт, с одним гуидом и одним текстом. А вопрос про разные пункты.

Во-вторых, если мы увеличим число пунктов до Х, то получим одинаковое число Х одинаковых пунктов во всех областях. А надо, допустим, разное число пунктов для разных областей (или одинаковое, но текст и гуиды разные, допустим).
Last edited by NightRoman on Tue 03 Jan, 2012 14:17, edited 1 time in total.
User avatar
ctapmex
Posts: 1241
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Re: Как создать разные меню в разных областях? (Фар 3)

Post by ctapmex »

да, это пример моего кода. думал додумаешь остальное - гуидов нагенерить еще, разные массивы с разными строками

плюс во все функции , которые вызываются при выборе пункта меню приходит гуид. по нему и определяем вызванный элемент
Last edited by ctapmex on Tue 03 Jan, 2012 14:20, edited 1 time in total.
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)

Post by NightRoman »

sonar wrote:да, это пример моего кода. думал додумаешь остальное - гуидов нагенерить еще, разные массивы с разными строками
Но как это поможет создать разные пункты? Куда эти разные массивы подключать, если точка подключения только одна - pInfo->PluginMenu?
User avatar
ctapmex
Posts: 1241
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Re: Как создать разные меню в разных областях? (Фар 3)

Post by ctapmex »

все, понял что ты хочешь. выше нето
User avatar
ctapmex
Posts: 1241
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Re: Как создать разные меню в разных областях? (Фар 3)

Post by ctapmex »

не предусмотрено сейчас такое.
разве что извращение на макросах (вроде сейчас можно меню на них делать, и из плагинов исполнять) - вызывается твой один пункт, плагин генерит макрос и исполняет его, появляется меню.
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)

Post by NightRoman »

Пока не поздно ломать, предлагаю такой АПИ

Code: Select all

// убираем все флаги, которые характеризуют пункты меню, а не плагин
static const PLUGIN_FLAGS
	PF_NONE,
	PF_PRELOAD,
	PF_FULLCMDLINE;

// флаги, которые характеризуют пункты меню, идут отдельно
// также сюда добавляем PMF_CONFIG и PMF_DISK, это тоже пункты меню плагина
static const PLUGIN_MENU_FLAGS
	PMF_DISABLEPANELS,
	PMF_EDITOR,
	PMF_VIEWER,
	PMF_DIALOG,
	PMF_CONFIG,
	PMF_DISK;

// здесь добавляем Flags, каждый пункт меню четко описан, где его показывать
struct PluginMenuItem
{
	const GUID *Guids;
	const wchar_t * const *Strings;
	const PLUGIN_MENU_FLAGS *Flags;
	int Count;
};

// здесь убираем массивы для кофига и меню дисков, это не нужно,
// все уже описано флагами пунктов меню
struct PluginInfo
{
	size_t StructSize;
	PLUGIN_FLAGS Flags;
	struct PluginMenuItem PluginMenu;
	const wchar_t *CommandPrefix;
};
Именно такой подход применяется к модулям Фарнета (кого и где показывать), подход отработан, так сказать уж несколько лет.
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)

Post by NightRoman »

И если это вдруг будет одобрено и принято, то я бы еще подумал о том, чтобы объединить это

Code: Select all

const GUID *Guids;
const wchar_t * const *Strings;
const PLUGIN_MENU_FLAGS *Flags;
в один массив структур MenuItem { Guid, String, Flags }. Но это уже шашечки.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Как создать разные меню в разных областях? (Фар 3)

Post by DrKnS »

NightRoman wrote:Как создать разные пункты меню плагина в разных областях? Например, в панелях один пункт, а в редакторе или вьюере или диалоге другой? (Вариация вопроса - разное число пунктов меню в разных областях).

Вопрос по Фар 3, скорей. Рассчитывал, что он будет это позволять, но пока не вижу, может, очевидного.
А в чем проблема? В getplugininfo сделай actl_getwindowinfo и по разному заполни plugininfo в зависимости от результата.
Или я неправильно понял вопрос?
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)

Post by NightRoman »

DrKnS
Все правильно ты понял, и предложил, и я так и делаю (оно не работает в Фар 3, но это наверное баг, не в этой теме).
А в чем проблема?
1) Так это политика партии, что так надо делать? В Фар 2 это рассматривалось как костыль. Надеялся, что в Фар 3 будет иначе.

2) Вместо создания пакета меню один раз на всю жизнь плагина надо пересоздавать меню все время в зависимости от текущего окна.

3) Пункт 2 и в целом такая политика переключения меню прокатит для пре-загружаемых плагинов. А для не пре-загружаемых - что именно будет Фар кешировать? Только то, что плагин показал по типу текущего окна (для панелей, скорей всего, но может и редактор/вьюер быть, если Фар в этом режиме стартанул)? А как Фар узнает про меню в остальных областях (для кеширования и последующего показа без излишней загрузки плагина)?
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)

Post by NightRoman »

Так есть у кого какие соображения по предложенному АПИ? Полная фигня и лучше забыть или есть смысл и отправить на мантис, скажем? Только смысла на мантис особого нет, если что-то такое делать, то надо прямо щас, пока Фар3 еще в бете.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Как создать разные меню в разных областях? (Фар 3)

Post by Maximus5 »

Похоже, что это только твоему комбайну нужно, так что тебе и решать )
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)

Post by NightRoman »

Maximus5 wrote:Похоже, что это только твоему комбайну нужно, так что тебе и решать )
Нет, это нужно любому, кто захочет написать не презагружаемый плагин с разными меню в разных областях. Что в этом сверхъестественного? Вроде ничего, но это сейчас невозможно, просто АПИ не позволяет.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Как создать разные меню в разных областях? (Фар 3)

Post by Maximus5 »

IMHO, удобнее, когда плагин предоставляет подменю, а не множит и так не маленькое общее меню.
Тот же Research. Ну нафига, спрашивается, в F11 показывать все сразу?
Поэтому я и сказал - "нужно только тебе".
Post Reply

Return to “Разработка плагинов”