View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000047 | Wishes | Popup Menu | public | 2005-10-27 05:46 | 2013-02-03 00:34 |
Reporter | alexy | Assigned To | vskirdin | ||
Priority | normal | Severity | feature | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Fixed in Version | 2.0 | ||||
Summary | 0000047: *IF_HIDDEN | ||||
Description | Я тут вот надумал, а почему бы для FarMenuItemEx и FarListItem не добавить флаги MIF_HIDDEN и LIF_HIDDEN соответственно? Это очень облегчит написание сужающихся списков по фильтру, и если я всё понимаю правильно то во время рисования намного проще не рисовать что-то чем мне в программе постоянно делать realloc. ------- Additional Comments From Valentin Skirdin 2003-04-16 13:25 ------- Идея хорошая, но для этого нужно до неприличия перекрамсать один модуль. Давай на потом. | ||||
Tags | No tags attached. | ||||
Build | 0 | ||||
|
Валь, может сделаешь в 2.0, Ы? :) |
|
Мне, как "знатному неплагинописателю" :-) нужет тестовый плагин. сделаешь (как будто эти флаг уже есть)? |
|
отличная идея. еще бы к панелям добавить мобильности (чтобы на каждый чих не надо было перерисовывать ее всю). |
|
в панелях - это да. быстрый поиск в таком варианте был бы весьма... (хотя в этом случае оно называлось бы Fast Filter :-)) в общем почти готово. нужен тестовый плагин, позволяющий: 1. добавлять новые пункты в меню так же с флагом LIF_HIDDEN (0x00200000UL) 2. удалять любые видимые элементы 3. делать апдейт элементам... (хмм... а может к черту плагин и добавить в базовый функционал функцию клавиатурной фильтрации в менюхах... - тогда быстрее отлажу математику для этого фалага ;-)) |
|
> добавить в базовый функционал функцию клавиатурной фильтрации в менюхах Категорически поддерживаю. |
|
как делать? 1. QuickSearch применяет _HIDDEN 2. QuickSearch тупо перемещается по найденному проще п.1 (и наверное правильнее) так... откопал следующее (комментируйте): 1. Горячие клавиши срабатывают только по Alt-Буква/цира 2. Нажимаем Alt, отпускаем. Курсор (мигающий) стал на первом символе в текущем итеме Начинаем набирать буковки (без alt) По мере нахождения соответствия курсор перемещается вправо, а позиция утсанавливается на найденный пункт списка. 3. Работают Bs, Left, Right 4. Повторное нажатие Alt - снимает режим поиска. 5. Любая курсорная клавиша (кроме Bs, Left, Right) - снимает режим поиска. |
|
в Варповском "The Underscore" можно глянуть наметки будущего поиска. в принципе тоже самое, т.е. по Альт вкл режим сопоставления внизу меню на рамочке появляется [ ] куда попадает ввод буковок все что подпадает под [бла-бла-бла] остается в меню т.е почти тоже самое кроме: Курсор (мигающий) стал на первом символе в текущем итеме. |
|
1. QuickSearch применяет _HIDDEN |
|
в общем я готов выкатить первое приближение (только флаги, без kbd-фильтров). на чем будем пробовать? двойка или 1.75? |
|
1.75 это что? |
|
ФАР, естественно |
|
Не знаю такого. |
|
> Не знаю такого. ну, значит с него и начну |
|
тут подумалось - может за одно добавить [L|M]IF_GRAYED? В отличии от DISABLED - пункт так же не активный, но курсор на него становится (выбор такого пункта мышкой или Enter`ом ни к чему не приведет и менюху не закроет) |
|
Да |
|
кхе... добавочка к палитре: COL_MENUGRAYTEXT, COL_MENUSELECTEDGRAYTEXT, COL_DIALOGCOMBOGRAY, COL_DIALOGCOMBOSELECTEDGRAYTEXT, COL_DIALOGLISTGRAY, COL_DIALOGLISTSELECTEDGRAYTEXT, COL_WARNDIALOGCOMBOGRAY, COL_WARNDIALOGCOMBOSELECTEDGRAYTEXT, COL_WARNDIALOGLISTGRAY, COL_WARNDIALOGLISTSELECTEDGRAYTEXT, вроде ничего не забыл.... |
|
2.0 = build 848 1.75 = после build 2555 для быстрого поиска в менюхах имеет смысл завести отдельный виш |
|
В энциклопедии опечатка: LIF_GRAYD вместо LIF_GRAYED |
|
Плагин для тестирования: http://farplug.googlecode.com/files/UnInstall_1.10.4_uni_dbg.7z |
|
хмм... ну на первый взгляд (по тестовому плагину) ЭТО работает :-) |
|
vskirdin, попробуй включить фильтр (просто набирая буквы на клавиатуре). У меня наблюдаются проблемы. |
|
набирал... а проблемы какие? поконкретнее давай |
|
К примеру включаю фильтр, полоса прокрутки показывает что я нахожусь в конце списка, а на самом деле там еще много записей есть. Пытаюсь прокрутить список с помощью клавиши "стрелка вниз" - список не прокручивается, а курсор уходит за пределы окна. Позиционирование курсора с помощью мыши также работает неправильно. |
|
понял. в работе. |
|
В 960 скроллинг клавой, и отрисовка скролбара должны работать нормально. Мышку надо доделать таким же образом. |
|
alexy, ты проверял на тестовом плагине? У меня не работает. |
|
Да, проверял на тестовом. Что имено у тебя не работает? |
|
К примеру, PageUp и PaqeDown неправильно работают. Скроллинг стрелкой вниз происходит "рывками". При переходе клавишей End в конец списка имеем некорректную отрисовку - пустое место в конце списка. |
|
Если бы у меня это повторялось так легко. Посмотри на мой патч, там вроде всё понятно, попробуй у себя с дебагером проверить. У тебя есть ICQ? |
|
Отослал ICQ через PM |
2009-05-29 22:19
|
a.diff (4,065 bytes)
Index: vmenu.cpp =================================================================== --- vmenu.cpp (revision 3051) +++ vmenu.cpp (working copy) @@ -444,7 +444,7 @@ // ������� Top`� if(GetVisualPos(TopPos)+GetShowItemCount() >= Y2-Y1 && SelectPos == GetShowItemCount()-1) { - if (GetShowItemCount() == ItemCount) + if (GetShowItemCount() != ItemCount) { int i=TopPos; for (int v=0; i >0 && v < 1; i--) @@ -529,7 +529,7 @@ */ if (VisualSelectPos > GetVisualPos(TopPos)+((BoxType!=NO_BOX)?Y2-Y1-2:Y2-Y1)) { - if (GetShowItemCount() == ItemCount) + if (GetShowItemCount() != ItemCount) { int i=SelectPos; for (int v=0; i >0 && v < ((BoxType!=NO_BOX)?Y2-Y1-2:Y2-Y1); i--) @@ -766,7 +766,7 @@ { CriticalSectionLock Lock(CS); - return ((LastAddedItem>=TopPos && LastAddedItem<(TopPos+Y2-Y1)+2) || VMFlags.Check(VMENU_UPDATEREQUIRED)); + return ((GetVisualPos(LastAddedItem)>=GetVisualPos(TopPos) && GetVisualPos(LastAddedItem)<(GetVisualPos(TopPos)+Y2-Y1)+2) || VMFlags.Check(VMENU_UPDATEREQUIRED)); //+1 for real diff //+2 for scrollbar @@ -1097,7 +1097,22 @@ ! ����������� ��������� ������� �� PgUp/PgDn � ������������ ������ VMENU_SHOWNOBOX (NO_BOX) */ - if((I=SelectPos-((BoxType!=NO_BOX)?Y2-Y1-1:Y2-Y1)) < 0) + int y=((BoxType!=NO_BOX)?Y2-Y1-1:Y2-Y1); + if (GetShowItemCount() != ItemCount) + { + int i=SelectPos; + for (int v=0; i >0 && v < y; i--) + { + if(!(Item[i]->Flags&LIF_HIDDEN)) + v++; + } + I=i; + } + else + { + I=SelectPos-y; + } + if(I < 0) I=0; SelectPos=SetSelectPos(I,1); ShowMenu(TRUE); @@ -1106,7 +1121,22 @@ case KEY_PGDN: case KEY_NUMPAD3: { - if((I=SelectPos+((BoxType!=NO_BOX)?Y2-Y1-1:Y2-Y1)) >= ItemCount) + int y=((BoxType!=NO_BOX)?Y2-Y1-1:Y2-Y1); + if (GetShowItemCount() != ItemCount) + { + int i=SelectPos; + for (int v=0; i < ItemCount && v < y; i++) + { + if(!(Item[i]->Flags&LIF_HIDDEN)) + v++; + } + I=i; + } + else + { + I=SelectPos-y; + } + if(I >= ItemCount) I=ItemCount-1; SelectPos=SetSelectPos(I,-1); ShowMenu(TRUE); @@ -1477,15 +1507,17 @@ ItemCount-=Count; - if(SelectPos < TopPos || SelectPos > TopPos+Y2-Y1 || TopPos >= ItemCount) + RecalcItemHiddenCount(); + + if(GetVisualPos(SelectPos) < GetVisualPos(TopPos) || GetVisualPos(SelectPos) > GetVisualPos(TopPos)+Y2-Y1 || GetVisualPos(TopPos) >= GetShowItemCount()) { TopPos=0; VMFlags.Set(VMENU_UPDATEREQUIRED); } // ����� �� ������� �����? - if ((ID >= TopPos && ID < TopPos+Y2-Y1) || - (ID+Count >= TopPos && ID+Count < TopPos+Y2-Y1)) //??? + if ((ID >= TopPos && GetVisualPos(ID) < GetVisualPos(TopPos)+Y2-Y1) || + (ID+Count >= TopPos && GetVisualPos(ID+Count) < GetVisualPos(TopPos)+Y2-Y1)) //??? { VMFlags.Set(VMENU_UPDATEREQUIRED); } @@ -1499,7 +1531,6 @@ VMFlags.Set(VMENU_SELECTPOSNONE); } - RecalcItemHiddenCount(); return(ItemCount); } @@ -1837,15 +1868,17 @@ TopPos=ListPos->TopPos; if(ListPos->TopPos == -1) { - if(ItemCount < MaxHeight) + if(GetShowItemCount() < MaxHeight) + { TopPos=0; + } else { //TopPos=Ret-MaxHeight/2; //????????? - TopPos = (ListPos->SelectPos-ListPos->TopPos+1) > MaxHeight?ListPos->TopPos+1:ListPos->TopPos; - if(TopPos+MaxHeight > ItemCount) - TopPos=ItemCount-MaxHeight; + TopPos = (GetVisualPos(ListPos->SelectPos)-GetVisualPos(ListPos->TopPos)+1) > MaxHeight?ListPos->TopPos+1:ListPos->TopPos; + if(GetVisualPos(TopPos)+MaxHeight > GetShowItemCount()) + TopPos=GetShowItemCount()-MaxHeight; } } |
|
В 962 клава уже должна работать нормально. |
|
Ну вроде это уже можно закрывать, не? |
Date Modified | Username | Field | Change |
---|---|---|---|
2005-10-27 05:46 | alexy | New Issue | |
2009-03-28 17:19 | alexy | Note Added: 0002847 | |
2009-03-30 12:52 | vskirdin | Note Added: 0002854 | |
2009-03-30 13:05 | CrOm | Note Added: 0002855 | |
2009-03-30 13:26 | vskirdin | Note Added: 0002856 | |
2009-03-30 16:06 | DrKnS | Note Added: 0002858 | |
2009-03-30 17:12 | vskirdin | Note Added: 0002859 | |
2009-03-30 17:42 | samlyukov | Note Added: 0002860 | |
2009-03-30 17:44 | samlyukov | Note Edited: 0002860 | |
2009-03-30 17:44 | samlyukov | Note Edited: 0002860 | |
2009-03-30 19:33 | alexy | Note Added: 0002861 | |
2009-04-01 08:12 | vskirdin | Note Added: 0002862 | |
2009-04-01 08:35 | alexy | Note Added: 0002863 | |
2009-04-01 09:28 | vskirdin | Note Added: 0002864 | |
2009-04-01 10:21 | alexy | Note Added: 0002865 | |
2009-04-01 11:22 | vskirdin | Note Added: 0002866 | |
2009-04-01 15:29 | vskirdin | Note Added: 0002867 | |
2009-04-01 15:30 | alexy | Note Added: 0002868 | |
2009-04-01 16:13 | vskirdin | Note Added: 0002869 | |
2009-04-01 17:59 | vskirdin | Status | new => assigned |
2009-04-01 17:59 | vskirdin | Assigned To | => vskirdin |
2009-04-01 18:02 | vskirdin | Note Added: 0002870 | |
2009-04-01 18:02 | vskirdin | Status | assigned => feedback |
2009-04-01 21:37 | chupakabra | Note Added: 0002872 | |
2009-04-02 01:11 | chupakabra | Note Added: 0002873 | |
2009-04-02 09:37 | vskirdin | Note Added: 0002874 | |
2009-04-02 13:16 | chupakabra | Note Added: 0002875 | |
2009-04-02 14:36 | vskirdin | Note Added: 0002876 | |
2009-04-02 14:56 | chupakabra | Note Added: 0002877 | |
2009-04-02 16:19 | vskirdin | Note Added: 0002878 | |
2009-05-29 19:37 | alexy | Note Added: 0003360 | |
2009-05-29 21:25 | chupakabra | Note Added: 0003362 | |
2009-05-29 21:28 | alexy | Note Added: 0003363 | |
2009-05-29 21:32 | chupakabra | Note Added: 0003364 | |
2009-05-29 21:40 | alexy | Note Added: 0003365 | |
2009-05-29 21:45 | chupakabra | Note Added: 0003366 | |
2009-05-29 22:19 | alexy | File Added: a.diff | |
2009-05-29 23:09 | alexy | Note Added: 0003367 | |
2010-02-12 13:54 | alexy | Note Added: 0004915 | |
2010-02-13 09:01 | vskirdin | Build | => 0 |
2010-02-13 09:01 | vskirdin | Status | feedback => closed |
2010-02-13 09:01 | vskirdin | Fixed in Version | => 2.0 |
2010-02-13 09:01 | vskirdin | Resolution | open => fixed |
2013-02-03 00:34 | alexy | Severity | minor => feature |