API custom-колонок (lort)

Место, где разработчики плагинов могут поделиться своим опытом.
lort
Posts: 33
Joined: Thu 25 Dec, 2008 19:42

API custom-колонок (lort)

Post by lort »

Реализовал свою версию колоночного API, пока без FCTL_GETCUSTOMCOLUMNINFO и сортировки через CompareW. Надо бы потестировать, не сломалось ли чего.
Теперь каждый плагин может создавать свои колонки, отображаются они все раздельно, если нужно запихнуть несколько колонок в одну - пишется плагин
В настройках режимов панели колонки задаются в формате [имя]модификаторы
API теперь выглядит так:

Code: Select all

enum PLUGIN_COLUMN_TYPES
{
	PCT_STRING,
	PCT_INT64,
	PCT_UINT64,
	PCT_FILETIME,
	PCT_DOUBLE,
};

struct PluginColumnInfo
{
	int StructSize;
	int Id;
	int Type;
	const wchar_t *UniqueName;
	const wchar_t *Name;
	const wchar_t *Title;
	const wchar_t *SortChar;
	const wchar_t *SortCharRev;
	DWORD Flags;
};
struct PluginInfo
{
  ...
	int PluginColumnNumber;
	PluginColumnInfo *PluginColumns;
};

int    WINAPI _export GetPluginColumnDataW(int ColumnId, const wchar_t *FilePath, void *CustomData, DWORD_PTR *UserData);
void   WINAPI _export FreePluginColumnDataW(int ColumnId, void *CustomData, DWORD_PTR UserData);
В PluginInfo плагин возвращает список колонок, которые он предоставляет, структура PluginColumnInfo описывает одну колонку, в ней поля:
StructSize - размер структуры
Id - идентификатор колонки внутри этого плагина, потом будет передаваться в GetPluginColumnDataW и FreePluginColumnDataW
Type - тип колонки, возможные значения: PCT_STRING, PCT_INT64, PCT_UINT64, PCT_FILETIME, PCT_DOUBLE
UniqueName - уникальное между плагинами название колонки, только латинские буквы, цифры и знак подчеркивания.
Name - название колонки, выводится в меню по Ctrl-F12
Title - заголовок колонки
SortChar - символ, выводящийся для индикации, что идёт сортировка по данной колонке
SortCharRev - то же, что и SortChar, но для обратной сортировки
Flags - пока не используется, должен быть установлен в 0


GetCustomDataW и FreeCustomDataW я переименовал в GetPluginColumnDataW и FreePluginColumnDataW чтобы не возникало путаницы с PluginPanelItem.CustomColumnData
новые параметры тут
ColumnId - идентификатор запрашиваемой/освобождаемой колонки
UserData - внутренние данные плагинана, могут понадобится когда будет реализована сортировка через CompareW

http://filesurf.ru/199817/far.zip.html
lort
Posts: 33
Joined: Thu 25 Dec, 2008 19:42

Re: Хост-плагины и субплагины: универсализация

Post by lort »

Пример плагина на новом API, исходники прилагаются.

Плагин добавляет три колонки:
FSI_ChangeTime - Время модификации NTFS, от обычного времени модификации файла отличается тем, что модификацией тут считается любая запись в MFT для данного файла, в том числе изменение атрибутов, времён, добавление/удаление потоков...
FSI_FragmentsCount - число фрагментов файла
FSI_RealFileSize - размер занимаемый файлом на диске
Attachments
FSInfo.zip
(39.45 KiB) Downloaded 193 times
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Хост-плагины и субплагины: универсализация

Post by Maximus5 »

в функции GetPluginColumnDataW не хватает информации о PluginPanelItem.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Хост-плагины и субплагины: универсализация

Post by John Doe »

lort wrote:Теперь каждый плагин может создавать свои колонки, отображаются они все раздельно, если нужно запихнуть несколько колонок в одну - пишется плагин.
Может оставить и общую, в которую фар выводит "склеенные" колонки?
lort
Posts: 33
Joined: Thu 25 Dec, 2008 19:42

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by lort »

Maximus5 wrote:в функции GetPluginColumnDataW не хватает информации о PluginPanelItem.
А зачем она? Имя файла ведь есть.
John Doe wrote:Может оставить и общую, в которую фар выводит "склеенные" колонки?
Зачем? Если плагинов много - там будет малопонятная мешанина из разной информации, и грузиться всё это будет долго. В принципе можно создать плагин аггрегатор, который будет вызывать GetPluginColumnDataW у других плагинов и отображать полученные данные в своей колонке
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by Maximus5 »

lort wrote:
Maximus5 wrote:в функции GetPluginColumnDataW не хватает информации о PluginPanelItem.
А зачем она? Имя файла ведь есть.
Надо.
1. Есть только "длинное" имя файла. Требуется и короткое которое у фара уже есть
2. PluginPanelItem содержит и другую информацию, которая может потребоваться колоночнуму плагину (UserData/CRC32/Description/...)
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by John Doe »

lort wrote:
John Doe wrote:Может оставить и общую, в которую фар выводит "склеенные" колонки?
Зачем? Если плагинов много - там будет малопонятная мешанина из разной информации, и грузиться всё это будет долго.
Если плагинов много то никто не заставляет отображать эту колонку. А если мало, то было бы в самый раз, а ставить ещё какой-то аггрегатор, который неизвестно возможно ли вообще написать...

А сложно ли научить фар понимать нечто вроде с0+с1+с2 (или как там принято в новом API)?
Kildor
Posts: 1515
Joined: Wed 16 Mar, 2005 06:26
Location: Новосибирск
Been thanked: 1 time
Contact:

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by Kildor »

Не понял, как же выставить такую кастомную колонку? Поставил этот фар, поставил плагин, в CtrlF12 строчки появились, а как настроить панели? Или я чего-то не понял? ;)
Ты мне не выкай!
«ФарФорум не для пользователей!»
Upd:
P.S. Я просто поддерживаю беседу.» © Народ.

xmpp:kildor@jabber.ru
User avatar
Kerberos464
Posts: 1239
Joined: Wed 29 Jul, 2009 20:24
Location: Saint-Petersburg
Has thanked: 19 times
Been thanked: 1 time

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by Kerberos464 »

Kildor wrote:Не понял, как же выставить такую кастомную колонку? Поставил этот фар, поставил плагин, в CtrlF12 строчки появились, а как настроить панели? Или я чего-то не понял? ;)
я тоже вначале не понял, но потом пришло :)
16.09.2012 14:35:28 +0200 - build 2799 - все нативные плагины перестали работать.
30.09.2012 03:26:20 +0200 - build 2851 - все макросы перестали работать.
31.02.2029 25:61:61 +0200 - build 6666 - весь фар перестал работать.
Kildor
Posts: 1515
Joined: Wed 16 Mar, 2005 06:26
Location: Новосибирск
Been thanked: 1 time
Contact:

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by Kildor »

А можно тогда и скриншот получившейся панели? Потому как у меня какая-то лажа выходит (просто, пустые колонки, без заголовка и данных).
Ты мне не выкай!
«ФарФорум не для пользователей!»
Upd:
P.S. Я просто поддерживаю беседу.» © Народ.

xmpp:kildor@jabber.ru
User avatar
Kerberos464
Posts: 1239
Joined: Wed 29 Jul, 2009 20:24
Location: Saint-Petersburg
Has thanked: 19 times
Been thanked: 1 time

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by Kerberos464 »

Kildor wrote:А можно тогда и скриншот получившейся панели? Потому как у меня какая-то лажа выходит (просто, пустые колонки, без заголовка и данных).
а вы в папку плагинов не забыли сами C0-модули положить?
вот скрин (на левой панели во втором столбике - названия исполнителей и песен, их выдирает mp3_c0.dll, а на правой панели - версии файлов, модуль ver_c0.dll)
16.09.2012 14:35:28 +0200 - build 2799 - все нативные плагины перестали работать.
30.09.2012 03:26:20 +0200 - build 2851 - все макросы перестали работать.
31.02.2029 25:61:61 +0200 - build 6666 - весь фар перестал работать.
User avatar
Alexey Samlyukov
Posts: 1765
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by Alexey Samlyukov »

fibre запутался в фарах :)
у меня работает, см скрин.
Attachments
far.GIF
far.GIF (20.66 KiB) Viewed 8638 times
User avatar
Kerberos464
Posts: 1239
Joined: Wed 29 Jul, 2009 20:24
Location: Saint-Petersburg
Has thanked: 19 times
Been thanked: 1 time

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by Kerberos464 »

Alexey Samlyukov wrote:fibre запутался в фарах :)
у меня работает, см скрин.
у меня тоже работает, скрин выше.
в фарах я не запутался.
16.09.2012 14:35:28 +0200 - build 2799 - все нативные плагины перестали работать.
30.09.2012 03:26:20 +0200 - build 2851 - все макросы перестали работать.
31.02.2029 25:61:61 +0200 - build 6666 - весь фар перестал работать.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by John Doe »

Так и есть, запутался. Тут уже альтернативную версию АПИ обсуждают, а под неё пока всего один единственный демо-плагин.

PS
Очень громоздко получается с этими [FSI_... ... ...]
User avatar
Kerberos464
Posts: 1239
Joined: Wed 29 Jul, 2009 20:24
Location: Saint-Petersburg
Has thanked: 19 times
Been thanked: 1 time

Re: Универсальные Custom-колонки, предоставляемые плагинами

Post by Kerberos464 »

а, ну тогда ладно, извините :)
16.09.2012 14:35:28 +0200 - build 2799 - все нативные плагины перестали работать.
30.09.2012 03:26:20 +0200 - build 2851 - все макросы перестали работать.
31.02.2029 25:61:61 +0200 - build 6666 - весь фар перестал работать.
Post Reply

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