Plugin API. Пишем панельный плагин. Шаг2: Начало

Обсуждение энциклопедии.
Post Reply
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Plugin API. Пишем панельный плагин. Шаг2: Начало

Post by Skirda » Wed 12 Dec, 2012 13:59

Добавляем к предыдущему варианту плагина собственную панель, эмулирующую файловую систему. На панели один каталог "[Default Dir]", заход в который должен перебросить нас в каталог по умолчанию.

Вызов плагина из меню дисков приводит к эмуляции файловой панели. Вызов из меню плагинов настраиваем - если включена опция "Переход в папку по умолчанию", то происходит переход в каталог по умолчанию, иначе вызов плагина приводит к эмуляции панели.

Для создания полноценного плагина на данном этапе нам понадобятся экспортируемые функции:
  1. GetGlobalInfoW - передать в FAR глобальную информацию о плагине (версия, автор, etc.)
  2. SetStartupInfoW - получить от FAR начальные значения, необходимые плагину
  3. GetPluginInfoW - передать в FAR информацию о плагине
  4. ConfigureW - настройки плагина: показывать ли плагин в меню выбора дисков и задание каталога по умолчанию.
  5. OpenW - пользователь вызвал плагин
  6. GetFindDataW - передача в FAR нашего каталога для позиционирования на панели
  7. FreeFindDataW - вызывается для освобождения памяти, вызывается после GetFindData
  8. SetDirectoryW - позиционирование на нужном каталоге
  9. GetOpenPanelInfoW - "расскажем ФАРу о своих достижениях" - параметры панели и все такое
Как обычно пропустим функции GetGlobalInfoW, SetStartupInfoW, GetPluginInfoW и ConfigureW. На этом шаге добавились функции SetDirectoryW, GetOpenPanelInfoW и FreeFindDataW.

Информацию о "десктопе" берем не из реестра, а 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.
Attachments
les2.zip
Исходники и бинарники...
(14.44 KiB) Downloaded 162 times
We are the Borg. You will be assimilated.
So Say We All!

Post Reply

Return to “Энциклопедия”