Как создать разные меню в разных областях? (Фар 3)
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Как создать разные меню в разных областях? (Фар 3)
Как создать разные пункты меню плагина в разных областях? Например, в панелях один пункт, а в редакторе или вьюере или диалоге другой? (Вариация вопроса - разное число пунктов меню в разных областях).
Вопрос по Фар 3, скорей. Рассчитывал, что он будет это позволять, но пока не вижу, может, очевидного.
Вопрос по Фар 3, скорей. Рассчитывал, что он будет это позволять, но пока не вижу, может, очевидного.
Re: Как создать разные меню в разных областях? (Фар 3)
может я глупость скажу, но по твоему объяснению я понял , что тебе надо следующее
только count делаешь больше, а PluginMenuStrings - массив
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;
};
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Как создать разные меню в разных областях? (Фар 3)
sonar
Во-первых, твой код по флагам только для редактора (и конфига, а вопрос не про конфиг, а панели, редактор, вьюер, диалог). Ну это ладно, флагов добавим для других областей. Но тогда во всех областях будет один и тот же пункт, с одним гуидом и одним текстом. А вопрос про разные пункты.
Во-вторых, если мы увеличим число пунктов до Х, то получим одинаковое число Х одинаковых пунктов во всех областях. А надо, допустим, разное число пунктов для разных областей (или одинаковое, но текст и гуиды разные, допустим).
Во-первых, твой код по флагам только для редактора (и конфига, а вопрос не про конфиг, а панели, редактор, вьюер, диалог). Ну это ладно, флагов добавим для других областей. Но тогда во всех областях будет один и тот же пункт, с одним гуидом и одним текстом. А вопрос про разные пункты.
Во-вторых, если мы увеличим число пунктов до Х, то получим одинаковое число Х одинаковых пунктов во всех областях. А надо, допустим, разное число пунктов для разных областей (или одинаковое, но текст и гуиды разные, допустим).
Last edited by NightRoman on Tue 03 Jan, 2012 14:17, edited 1 time in total.
Re: Как создать разные меню в разных областях? (Фар 3)
да, это пример моего кода. думал додумаешь остальное - гуидов нагенерить еще, разные массивы с разными строками
плюс во все функции , которые вызываются при выборе пункта меню приходит гуид. по нему и определяем вызванный элемент
плюс во все функции , которые вызываются при выборе пункта меню приходит гуид. по нему и определяем вызванный элемент
Last edited by ctapmex on Tue 03 Jan, 2012 14:20, edited 1 time in total.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Как создать разные меню в разных областях? (Фар 3)
Но как это поможет создать разные пункты? Куда эти разные массивы подключать, если точка подключения только одна - pInfo->PluginMenu?sonar wrote:да, это пример моего кода. думал додумаешь остальное - гуидов нагенерить еще, разные массивы с разными строками
Re: Как создать разные меню в разных областях? (Фар 3)
не предусмотрено сейчас такое.
разве что извращение на макросах (вроде сейчас можно меню на них делать, и из плагинов исполнять) - вызывается твой один пункт, плагин генерит макрос и исполняет его, появляется меню.
разве что извращение на макросах (вроде сейчас можно меню на них делать, и из плагинов исполнять) - вызывается твой один пункт, плагин генерит макрос и исполняет его, появляется меню.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Как создать разные меню в разных областях? (Фар 3)
Пока не поздно ломать, предлагаю такой АПИ
Именно такой подход применяется к модулям Фарнета (кого и где показывать), подход отработан, так сказать уж несколько лет.
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;
};
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Как создать разные меню в разных областях? (Фар 3)
И если это вдруг будет одобрено и принято, то я бы еще подумал о том, чтобы объединить это
в один массив структур MenuItem { Guid, String, Flags }. Но это уже шашечки.
Code: Select all
const GUID *Guids;
const wchar_t * const *Strings;
const PLUGIN_MENU_FLAGS *Flags;
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: Как создать разные меню в разных областях? (Фар 3)
А в чем проблема? В getplugininfo сделай actl_getwindowinfo и по разному заполни plugininfo в зависимости от результата.NightRoman wrote:Как создать разные пункты меню плагина в разных областях? Например, в панелях один пункт, а в редакторе или вьюере или диалоге другой? (Вариация вопроса - разное число пунктов меню в разных областях).
Вопрос по Фар 3, скорей. Рассчитывал, что он будет это позволять, но пока не вижу, может, очевидного.
Или я неправильно понял вопрос?
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Как создать разные меню в разных областях? (Фар 3)
DrKnS
Все правильно ты понял, и предложил, и я так и делаю (оно не работает в Фар 3, но это наверное баг, не в этой теме).
2) Вместо создания пакета меню один раз на всю жизнь плагина надо пересоздавать меню все время в зависимости от текущего окна.
3) Пункт 2 и в целом такая политика переключения меню прокатит для пре-загружаемых плагинов. А для не пре-загружаемых - что именно будет Фар кешировать? Только то, что плагин показал по типу текущего окна (для панелей, скорей всего, но может и редактор/вьюер быть, если Фар в этом режиме стартанул)? А как Фар узнает про меню в остальных областях (для кеширования и последующего показа без излишней загрузки плагина)?
Все правильно ты понял, и предложил, и я так и делаю (оно не работает в Фар 3, но это наверное баг, не в этой теме).
1) Так это политика партии, что так надо делать? В Фар 2 это рассматривалось как костыль. Надеялся, что в Фар 3 будет иначе.А в чем проблема?
2) Вместо создания пакета меню один раз на всю жизнь плагина надо пересоздавать меню все время в зависимости от текущего окна.
3) Пункт 2 и в целом такая политика переключения меню прокатит для пре-загружаемых плагинов. А для не пре-загружаемых - что именно будет Фар кешировать? Только то, что плагин показал по типу текущего окна (для панелей, скорей всего, но может и редактор/вьюер быть, если Фар в этом режиме стартанул)? А как Фар узнает про меню в остальных областях (для кеширования и последующего показа без излишней загрузки плагина)?
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Как создать разные меню в разных областях? (Фар 3)
Так есть у кого какие соображения по предложенному АПИ? Полная фигня и лучше забыть или есть смысл и отправить на мантис, скажем? Только смысла на мантис особого нет, если что-то такое делать, то надо прямо щас, пока Фар3 еще в бете.
Re: Как создать разные меню в разных областях? (Фар 3)
Похоже, что это только твоему комбайну нужно, так что тебе и решать )
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Как создать разные меню в разных областях? (Фар 3)
Нет, это нужно любому, кто захочет написать не презагружаемый плагин с разными меню в разных областях. Что в этом сверхъестественного? Вроде ничего, но это сейчас невозможно, просто АПИ не позволяет.Maximus5 wrote:Похоже, что это только твоему комбайну нужно, так что тебе и решать )
Re: Как создать разные меню в разных областях? (Фар 3)
IMHO, удобнее, когда плагин предоставляет подменю, а не множит и так не маленькое общее меню.
Тот же Research. Ну нафига, спрашивается, в F11 показывать все сразу?
Поэтому я и сказал - "нужно только тебе".
Тот же Research. Ну нафига, спрашивается, в F11 показывать все сразу?
Поэтому я и сказал - "нужно только тебе".