View Issue Details

IDProjectCategoryView StatusLast Update
0000017WishesPlugins API.Panelpublic2013-02-03 00:34
Reportervskirdin Assigned To 
PrioritynormalSeverityfeatureReproducibilityalways
Status newResolutionopen 
Summary0000017: SM_CUSTOM
DescriptionFrom: Michael Yutsis <michael.y@...>
To: farbugs@yahoogroups.com
Date: Wed, 25 Jul 2001 17:26:49 +0300

> MY> Так как насчет дополнительных режимов сортировки для плагинов?
> MY> Предложить свой вариант решения или у тебя в планах есть свой?
> Давай. Но это в 1.70 не будет (на 1.71 спланируем).

Я решил отправить это в рассылку, пусть народ пообсуждает. Если обсуждения
не будет - сам выберу и сам разработаю дополнения к API.

Вижу три возможных варианта.

ВАРИАНТ 1 - МИНИМАЛЬНЫЙ.
Можно обойтись существующим API - просто взять и считать в своем Compare,
что если мы получили, скажем, SM_UNSORTED, то сортировать согласно
какой-нибудь внутренней переменной dwMySortMode, согласно тому, что юзер
выберет в нашем собственном Ctrl-F12.
Тут есть некрасивость: придется самому рисовать Ctrl-F12, чтобы добавлять
в него свои критерии. А на меню, которое вызывается из F9-Enter-Sort
modes, плагин вообще никак повлиять не может.
И еще недостаток - значок в углу панели будет неправильно отображать
сортировку.

ОТСТУПЛЕНИЕ НАСЧЕТ CTRL-F12.
Вообще, если в PanelModesArray, который возвращает OpenPluginInfo,
присутствуют ненулевые ColumnTitles, то надо бы вставлять в меню по
Ctrl-F12 именно их: вместо Name - тот, который стоит напротив буквы N в
ColumnTypes, и т.д. И если есть C0...C1 - то добавлять их дополнительными
пунктами.

ВАРИАНТ 2 - SM_CUSTOM.
В OPENPLUGININFO_SORTMODES заводится специальная константа - SM_CUSTOM,
означающая нестандартную сортировку, задаваемую плагином. В остальном - то
же, что и в варианте 1, только значок в углу панели придумывается
специальный. Вся ответственность за поддержание этой сортировки - на
плагине. В меню по Ctrl-F12 можно (при выполнении определенного условия)
добавить пункт Plugin-defined..., открывающий дополнительное меню,
задаваемое плагином. Можно для этого меню расширить API, и чтобы плагин
мог даже этот значок задавать :)

ВАРИАНТ 3 - ПО ДЕСЯТИ СТОЛБЦАМ.
В OPENPLUGININFO_SORTMODES вводятся десять дополнительных режимов
сортировки - SM_CUSTOMCOL0...SM_CUSTOMCOL9 - по числу дополнительных
столбцов в CustomColumnData. Эти режимы в углу панели могут обозначаться
цифирками 0-9. Как обозначать прямой/обратный порядок, я еще не
придумал :) В Ctrl-F12 показываются названия этих столбцов как
дополнительные пункты меню. Если юзер выбрал один из них - Фар может даже
их автоматически сортировать по строкам, получаемым в CustomColumnData,
безо всякого плагинового Compare. Недостаток - сортировать можно только по
тем критериям, которые соответствуют колонкам текущего режима.
--------------------------------------------------------------------------

To: farbugs@yahoogroups.com
From: Andrzej Novosiolov <andrzej@...>
Date: Thu, 26 Jul 2001 10:41:07 +0300

> Вижу три возможных варианта.

Я за этот:

> ВАРИАНТ 2 - SM_CUSTOM.

только с дополнением по поводу

> В меню по Ctrl-F12 можно (при выполнении определенного условия)
> добавить пункт Plugin-defined..., открывающий дополнительное меню,
> задаваемое плагином. Можно для этого меню расширить API, и чтобы плагин
> мог даже этот значок задавать :)

Не дополнительное подменю, а просто вставлять в меню сортировок определённые
плагином режимы, после основных.

В struct OpenPluginInfo добавляем поля:
  struct CustomSortMode *CustomSortModes;
  int CustomSortModesNumber;

Где CustomSortModes - указатель на предоставляемый плагином массив структур
следующего вида:

struct CustomSortMode {
  int Mode; // номер режима, равен SM_CUSTOM + n (n >= 0)
  char DirectOrderLetter,
       ReverseOrderLetter; // буквы для показа в углу панели
  char Description; // для показа в меню сортировок
  };

При этом SM_CUSTOM вставляется в хвост enum OPENPLUGININFO_SORTMODES с
каким-нибудь достаточно большим значением, по аналогии с WM_USER.

--------------------------------------------------------------------------

From: Michael Yutsis <michael.y@...>
To: farpluginsapi@yahoogroups.com
Date: Sun, 31 Mar 2002 09:51:13 +0200

Нынешний API не позволяет определять собственные режимы сортировки
(нажмите в ProcList'е Ctrl-F12 - поймете, зачем они нужны). Сейчас
приходится всячески извращаться, что не есть хорошо.

Предлагается:

- добавить к режимам сортировки в OPENPLUGININFO_SORTMODES режим

SM_CUSTOM = 32

Плагин может задавать любой режим от SM_CUSTOM и выше, и фар будет его
корректно обрабатывать: при повторном выборе сортировки с тем же номером
менять порядок, с новым номером - считать режим изменённым.

При сортировке панели, если плагин в Compare() не хочет сам сортировать
свои режимы >=SM_CUSTOM, фар должен его считать SM_UNSORTED.
Собственно, единственная причина введения этой константы - чтобы фар знал,
когда менять режим сортировки, а когда - порядок.

Если включен режим >=SM_CUSTOM, буква сортировки на панели может
отсутствовать, или быть точкой или звездочкой.

Почему именно 32 - чтобы была возможность до custom добавлять новые
фаровские режимы (ну, а вдруг?) при постоянном SM_CUSTOM, но чтобы CUSTOM
номера не были слишком большими - вдруг захочется определить в нем
специальные старшие биты, но вместе с тем чтобы он занимал один байт.

--------------------------------------------------------------------------
TagsNo tags attached.
Build

Activities

There are no notes attached to this issue.

Issue History

Date Modified Username Field Change
2005-10-21 07:33 vskirdin New Issue
2013-02-03 00:34 alexy Severity minor => feature