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

Место, где разработчики плагинов могут поделиться своим опытом.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

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

Post by Maximus5 »

Latest post of the previous page:

и еще, ver_c0 - версия *.exe и *.dll в C0

"на подумать".
Заход в System32 станет очень тяжелым (понятно, что ver будет сильно оптимизирован, но все-таки). Хорошо бы наверное как минимум показать окошко типа прогресса, как максимум - по Esc предложить дочитать, но без обработки плагинами.
User avatar
Alexey Samlyukov
Posts: 1765
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

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

Post by Alexey Samlyukov »

мои предложения по организации С0:
1.все режимы колонок оставить прежними, а под режимы с Custom-колонкой(-ами) переопределить Alternative full, назвать пункт Alternative.
2.по пункту Alternative показывать меню с режимами созданными пользователями (думаю, меню похожее по принципу на меню фильтров).
3.диалог создания\редактирования надо глянуть у ТС и позаимствовать от-туда чего-нибудь...
lort
Posts: 33
Joined: Thu 25 Dec, 2008 19:42

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

Post by lort »

Ещё хорошо бы добавить понятие "тип колонки" - строка, int64, uint64, FILETIME, ...
В соответствии с типом будет производиться сортировка по этой колонке, плюс можно будет использовать существующие модификаторы для даты/размера. Я это примерно так вижу:

Code: Select all

struct CustomColumnInfo
{
  int Id;
  int Type;
  wchar_t *UniqueName;
  wchar_t *Name;
  wchar_t *Title;
};

struct PluginInfo
{
  ...
  int CustomColumnNumber;
  CustomColumnInfo *CustomColumns;
};
в PluginInfo добавляется список описаний колонок плагина, CustomColumnInfo - описание одной колонки, там:
Id - идентификатор колонки внутри этого плагина, потом будет передаваться в GetCustomDataW для запроса этой колонки
Type - тип колонки. 1 - строка, 2 - int64, 3 - unit64, 4 - FILETIME, ...
UniqueName - уникальное между плагинами название колонки, только латинские буквы и цифры. Используется в диалоге настройки режимов панели, там оно вводится, например, так: {имя}модификаторы,{имя2}модификаторы2...
Name - название колонки, выводится в меню по Ctrl-F12
Title - заголовок колонки

GetCustomDataW меняем так:
int WINAPI GetCustomDataW(int ColumnId, const wchar_t *FilePath, void *CustomData)
ColumnId - идентификатор запрашиваемой колонки
User avatar
Alexey Samlyukov
Posts: 1765
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

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

Post by Alexey Samlyukov »

насчет ТС и его АПИ, вроде, можно глянуть тут
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

lort wrote:Ещё хорошо бы добавить понятие "тип колонки" - строка, int64, uint64, FILETIME, ...
лично мне этот тоталовский подход не нравится. если уж надо сортировать не как строку, то лучше два поля: display и sort. если второго нет, сортировать по первому. проще и универсальнее.
Игорь Юдинцев
Posts: 726
Joined: Sun 03 Apr, 2005 22:00
Location: Казань
Been thanked: 2 times

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

Post by Игорь Юдинцев »

Пусть сам плагин и сортирует:

Code: Select all

//Сравнение двух элементов файловой панели по содержимому custom-колонки; вызывается Far'ом при сортировке
int WINAPI EXP_NAME(ComparePanelItems)(const PPluginPanelItem Item1, const PPluginPanelItem Item2);
UPD: Подумав, пришёл к выводу, что это не самая лучшая идея.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

Игорь Юдинцев wrote:Пусть сам плагин и сортирует:
есть CompareW. SM_CUSTOM можно добавить. но customdata всё равно указатель нужен.
User avatar
t-rex
Страшный и ужасный
Posts: 4910
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 8 times
Contact:

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

Post by t-rex »

Меня лично этот функционал вообще не интересует, так что отдаю в хорошие руки, кто берёт?
a1822
Posts: 33
Joined: Mon 13 Jul, 2009 07:18

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

Post by a1822 »

Maximus5 wrote:Хорошо бы наверное как минимум показать окошко типа прогресса, как максимум - по Esc предложить дочитать, но без обработки плагинами.
Не, как максимум - это опрашивать содержимое колонки у плагина в отдельном потоке и отрисовывать по мере получения данных от него, не блокируя интерфейс.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

a1822 wrote:Не, как максимум - это опрашивать содержимое колонки у плагина в отдельном потоке и отрисовывать по мере получения данных от него, не блокируя интерфейс.
хорошо бы, только что-то никто не присылает патчей.
User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 2 times

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

Post by Centaur »

zg wrote:
lort wrote:Ещё хорошо бы добавить понятие "тип колонки" - строка, int64, uint64, FILETIME, ...
лично мне этот тоталовский подход не нравится. если уж надо сортировать не как строку, то лучше два поля: display и sort. если второго нет, сортировать по первому. проще и универсальнее.
Тип нужен не только для сортировки, но также для правильного отображения/выравнивания и для фильтрации.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

Centaur wrote:Тип нужен не только для сортировки, но также для правильного отображения/выравнивания и для фильтрации.
для выравнивания — флаг. отображение и так правильное — строка ж.
lort
Posts: 33
Joined: Thu 25 Dec, 2008 19:42

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

Post by lort »

t-rex wrote:Меня лично этот функционал вообще не интересует, так что отдаю в хорошие руки, кто берёт?
Я могу заняться, надо только определиться как api в итоге выглядеть должно.
Я всё-таки за явное указание типа данных - так можно задействовать существующие модификаторы, и если в будущем ещё какой-то модификатор появляется, то он автоматически во всех плагинах заработает.
Для хитрых сортировок можно действительно CompareW задействовать, это даже без добавления колонок пригодиться может, но тут ещё вопрос - как передать плагину по какой колонке идёт сортировка?
И что в PanelInfo.SortMode должно возвращаться при сортировке по плагиновой колонке?
Игорь Юдинцев
Posts: 726
Joined: Sun 03 Apr, 2005 22:00
Location: Казань
Been thanked: 2 times

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

Post by Игорь Юдинцев »

Предполагается, что разные плагины предоставляют для колонки C0 разнородную информацию, поэтому разумно было бы при сортировке по C0 группировать файлы по «связанному» с ними плагину (т. е. плагину, который предоставил содержимое колонки для этого файла).

Внутри такой группы прекрасно работает сортировка средствами самого плагина (через CompareW) без введения лишних сущностей вроде типа данных; сами же группы можно отсортировать по имени плагина.
lort
Posts: 33
Joined: Thu 25 Dec, 2008 19:42

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

Post by lort »

А если один плагин несколько колонок создаёт? Можно задать SM_CUSTOM=0x80000000, а младшие биты будут номером колонки, плюс добавить FCTL_GETCUSTOMCOLUMNINFO для получения информации о колонке:

FCTL_GETCUSTOMCOLUMNINFO - получить информацию о плагиновой колонке
Param1 - внутренний порядковый номер колонки начиная с 0, номер колонки не меняется в течение сессии фара, если колонки с таким номером нет - возвращается 0
Param2 - указатель на CustomColumnInfo, если NULL - возвращается необходимый размер буфера
User avatar
HaRT
Moderator
Posts: 10800
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 219 times
Been thanked: 357 times

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

Post by HaRT »

Maximus5 wrote:Заход в System32 станет очень тяжелым (понятно, что ver будет сильно оптимизирован, но все-таки).
Не дороговато-ли дёргать на каждый файл все плагины этого типа? Может стоит сразу для всего списка (либо только видимых на панели) файлов запрашивать за один вызов?
Фар есть инструмент, а не нянька. © 2009 DrKnS
Post Reply

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