Вызов плагина из меню дисков приводит к эмуляции файловой панели. Вызов из меню плагинов настраиваем - если включена опция "Переход в папку по умолчанию", то происходит переход в каталог по умолчанию, иначе вызов плагина приводит к эмуляции панели.
Для создания полноценного плагина на данном этапе нам понадобятся экспортируемые функции:
- GetGlobalInfoW - передать в FAR глобальную информацию о плагине (версия, автор, etc.)
- SetStartupInfoW - получить от FAR начальные значения, необходимые плагину
- GetPluginInfoW - передать в FAR информацию о плагине
- ConfigureW - настройки плагина: показывать ли плагин в меню выбора дисков и задание каталога по умолчанию.
- OpenW - пользователь вызвал плагин
- GetFindDataW - передача в FAR нашего каталога для позиционирования на панели
- FreeFindDataW - вызывается для освобождения памяти, вызывается после GetFindData
- SetDirectoryW - позиционирование на нужном каталоге
- GetOpenPanelInfoW - "расскажем ФАРу о своих достижениях" - параметры панели и все такое
Информацию о "десктопе" берем не из реестра, а WinAPI-функцией SHGetFolderPath(CSIDL_DESKTOP).
Функция OpenW изменилась незначительно. Добавлена проверка на "прыжок" в каталог по умолчанию (Opt.JumpToDefaultFolder) без эмуляции панели.
В функции GetFindDataW динамически создается один элемент файловой панели (в поле PluginPanelItem::Description для информативности добавляем путь к каталогу по умолчанию), код "прыжка" в каталог по умолчанию оставлен в качестве обработчика ошибок. Если опция "прыжка" не выставлена, то ничего не происходит - панель не создается, текущий каталог не меняется. Возвращаем из функции TRUE, если элемент создан или был "прыжок" в дефолтовый каталог, иначе вернем FALSE (панель не будет создана).
Функция FreeFindDataW необходима для того, чтобы освободить память, ранее запрошенную под элемент каталога в функции GetFindDataW.
В функции GetOpenPanelInfoW плагин рассказывает Far Manager о своей панели. В этом уроке плагин выставляет заголовок панели, пустую текущую директорию и флаги OPIF_ADDDOTS (добавить верхний каталог, для выхода из панели плагина), OPIF_SHOWNAMESONLY (показывать имена без путей) и OPIF_USEATTRHIGHLIGHTING (раскраска файлов только по атрибутам). Подробнее по флагам и заполняемым полям см. описание структуры OpenPanelInfo.
Функция SetDirectoryW осуществляет переход в дефолтовую папку при выборе элемента "[Default Dir]".
На этом второй этап заканчиваем. Исходники для этого "урока" можно взять здесь. Разницу в исходных кодах между первым и вторым уроками можно посмотреть, воспользовавшись утилитой diff.exe.