View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000017 | Wishes | Plugins API.Panel | public | 2005-10-21 07:33 | 2013-02-03 00:34 |
Reporter | vskirdin | Assigned To | |||
Priority | normal | Severity | feature | Reproducibility | always |
Status | new | Resolution | open | ||
Summary | 0000017: SM_CUSTOM | ||||
Description | From: 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 номера не были слишком большими - вдруг захочется определить в нем специальные старшие биты, но вместе с тем чтобы он занимал один байт. -------------------------------------------------------------------------- | ||||
Tags | No tags attached. | ||||
Build | |||||