View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0000047 | Wishes | Popup Menu | public | 2005-10-27 04: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 21: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 04:46 | alexy | New Issue | |
| 2009-03-28 17:19 | alexy | Note Added: 0002847 | |
| 2009-03-30 11:52 | vskirdin | Note Added: 0002854 | |
| 2009-03-30 12:05 | CrOm | Note Added: 0002855 | |
| 2009-03-30 12:26 | vskirdin | Note Added: 0002856 | |
| 2009-03-30 15:06 | DrKnS | Note Added: 0002858 | |
| 2009-03-30 16:12 | vskirdin | Note Added: 0002859 | |
| 2009-03-30 16:42 | samlyukov | Note Added: 0002860 | |
| 2009-03-30 16:44 | samlyukov | Note Edited: 0002860 | |
| 2009-03-30 16:44 | samlyukov | Note Edited: 0002860 | |
| 2009-03-30 18:33 | alexy | Note Added: 0002861 | |
| 2009-04-01 07:12 | vskirdin | Note Added: 0002862 | |
| 2009-04-01 07:35 | alexy | Note Added: 0002863 | |
| 2009-04-01 08:28 | vskirdin | Note Added: 0002864 | |
| 2009-04-01 09:21 | alexy | Note Added: 0002865 | |
| 2009-04-01 10:22 | vskirdin | Note Added: 0002866 | |
| 2009-04-01 14:29 | vskirdin | Note Added: 0002867 | |
| 2009-04-01 14:30 | alexy | Note Added: 0002868 | |
| 2009-04-01 15:13 | vskirdin | Note Added: 0002869 | |
| 2009-04-01 16:59 | vskirdin | Status | new => assigned |
| 2009-04-01 16:59 | vskirdin | Assigned To | => vskirdin |
| 2009-04-01 17:02 | vskirdin | Note Added: 0002870 | |
| 2009-04-01 17:02 | vskirdin | Status | assigned => feedback |
| 2009-04-01 20:37 | chupakabra | Note Added: 0002872 | |
| 2009-04-02 00:11 | chupakabra | Note Added: 0002873 | |
| 2009-04-02 08:37 | vskirdin | Note Added: 0002874 | |
| 2009-04-02 12:16 | chupakabra | Note Added: 0002875 | |
| 2009-04-02 13:36 | vskirdin | Note Added: 0002876 | |
| 2009-04-02 13:56 | chupakabra | Note Added: 0002877 | |
| 2009-04-02 15:19 | vskirdin | Note Added: 0002878 | |
| 2009-05-29 18:37 | alexy | Note Added: 0003360 | |
| 2009-05-29 20:25 | chupakabra | Note Added: 0003362 | |
| 2009-05-29 20:28 | alexy | Note Added: 0003363 | |
| 2009-05-29 20:32 | chupakabra | Note Added: 0003364 | |
| 2009-05-29 20:40 | alexy | Note Added: 0003365 | |
| 2009-05-29 20:45 | chupakabra | Note Added: 0003366 | |
| 2009-05-29 21:19 | alexy | File Added: a.diff | |
| 2009-05-29 22: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 |