View Issue Details

IDProjectCategoryView StatusLast Update
0000047WishesPopup Menupublic2013-02-03 00:34
Reporteralexy Assigned Tovskirdin  
PrioritynormalSeverityfeatureReproducibilityalways
Status closedResolutionfixed 
Fixed in Version2.0 
Summary0000047: *IF_HIDDEN
DescriptionЯ тут вот надумал, а почему бы для FarMenuItemEx и FarListItem не добавить флаги
MIF_HIDDEN и LIF_HIDDEN соответственно? Это очень облегчит написание сужающихся
списков по фильтру, и если я всё понимаю правильно то во время рисования намного
проще не рисовать что-то чем мне в программе постоянно делать realloc.


------- Additional Comments From Valentin Skirdin 2003-04-16 13:25 -------

Идея хорошая, но для этого нужно до неприличия перекрамсать один модуль.
Давай на потом.
TagsNo tags attached.
Build0

Activities

alexy

2009-03-28 17:19

administrator   bugnote:0002847

Валь, может сделаешь в 2.0, Ы? :)

vskirdin

2009-03-30 11:52

administrator   bugnote:0002854

Мне, как "знатному неплагинописателю" :-) нужет тестовый плагин.
сделаешь (как будто эти флаг уже есть)?

CrOm

2009-03-30 12:05

reporter   bugnote:0002855

отличная идея.

еще бы к панелям добавить мобильности (чтобы на каждый чих не надо было перерисовывать ее всю).

vskirdin

2009-03-30 12:26

administrator   bugnote:0002856

в панелях - это да. быстрый поиск в таком варианте был бы весьма... (хотя в этом случае оно называлось бы Fast Filter :-))

в общем почти готово. нужен тестовый плагин, позволяющий:
1. добавлять новые пункты в меню так же с флагом LIF_HIDDEN (0x00200000UL)
2. удалять любые видимые элементы
3. делать апдейт элементам...

(хмм... а может к черту плагин и добавить в базовый функционал функцию клавиатурной фильтрации в менюхах... - тогда быстрее отлажу математику для этого фалага ;-))

DrKnS

2009-03-30 15:06

administrator   bugnote:0002858

> добавить в базовый функционал функцию клавиатурной фильтрации в менюхах

Категорически поддерживаю.

vskirdin

2009-03-30 16:12

administrator   bugnote:0002859

как делать?
1. QuickSearch применяет _HIDDEN
2. QuickSearch тупо перемещается по найденному
проще п.1 (и наверное правильнее)
так... откопал следующее (комментируйте):

1. Горячие клавиши срабатывают только по Alt-Буква/цира
2. Нажимаем Alt, отпускаем.
   Курсор (мигающий) стал на первом символе в текущем итеме
   Начинаем набирать буковки (без alt)
   По мере нахождения соответствия курсор перемещается вправо, а
     позиция утсанавливается на найденный пункт списка.
3. Работают Bs, Left, Right
4. Повторное нажатие Alt - снимает режим поиска.
5. Любая курсорная клавиша (кроме Bs, Left, Right) - снимает режим поиска.

samlyukov

2009-03-30 16:42

reporter   bugnote:0002860

Last edited: 2009-03-30 16:44

в Варповском "The Underscore" можно глянуть наметки будущего поиска.
в принципе тоже самое, т.е.
по Альт вкл режим сопоставления
внизу меню на рамочке появляется [ ] куда попадает ввод буковок
все что подпадает под [бла-бла-бла] остается в меню
т.е почти тоже самое кроме: Курсор (мигающий) стал на первом символе в текущем итеме.

alexy

2009-03-30 18:33

administrator   bugnote:0002861

1. QuickSearch применяет _HIDDEN

vskirdin

2009-04-01 07:12

administrator   bugnote:0002862

в общем я готов выкатить первое приближение (только флаги, без kbd-фильтров).
на чем будем пробовать? двойка или 1.75?

alexy

2009-04-01 07:35

administrator   bugnote:0002863

1.75 это что?

vskirdin

2009-04-01 08:28

administrator   bugnote:0002864

ФАР, естественно

alexy

2009-04-01 09:21

administrator   bugnote:0002865

Не знаю такого.

vskirdin

2009-04-01 10:22

administrator   bugnote:0002866

> Не знаю такого.
ну, значит с него и начну

vskirdin

2009-04-01 14:29

administrator   bugnote:0002867

тут подумалось - может за одно добавить [L|M]IF_GRAYED?
В отличии от DISABLED - пункт так же не активный, но курсор на него становится (выбор такого пункта мышкой или Enter`ом ни к чему не приведет и менюху не закроет)

alexy

2009-04-01 14:30

administrator   bugnote:0002868

Да

vskirdin

2009-04-01 15:13

administrator   bugnote:0002869

кхе... добавочка к палитре:

  COL_MENUGRAYTEXT,
  COL_MENUSELECTEDGRAYTEXT,
  COL_DIALOGCOMBOGRAY,
  COL_DIALOGCOMBOSELECTEDGRAYTEXT,
  COL_DIALOGLISTGRAY,
  COL_DIALOGLISTSELECTEDGRAYTEXT,
  COL_WARNDIALOGCOMBOGRAY,
  COL_WARNDIALOGCOMBOSELECTEDGRAYTEXT,
  COL_WARNDIALOGLISTGRAY,
  COL_WARNDIALOGLISTSELECTEDGRAYTEXT,

вроде ничего не забыл....

vskirdin

2009-04-01 17:02

administrator   bugnote:0002870

2.0 = build 848
1.75 = после build 2555
для быстрого поиска в менюхах имеет смысл завести отдельный виш

chupakabra

2009-04-01 20:37

developer   bugnote:0002872

В энциклопедии опечатка: LIF_GRAYD вместо LIF_GRAYED

chupakabra

2009-04-02 00:11

developer   bugnote:0002873

Плагин для тестирования:
http://farplug.googlecode.com/files/UnInstall_1.10.4_uni_dbg.7z

vskirdin

2009-04-02 08:37

administrator   bugnote:0002874

хмм... ну на первый взгляд (по тестовому плагину) ЭТО работает :-)

chupakabra

2009-04-02 12:16

developer   bugnote:0002875

vskirdin, попробуй включить фильтр (просто набирая буквы на клавиатуре). У меня наблюдаются проблемы.

vskirdin

2009-04-02 13:36

administrator   bugnote:0002876

набирал... а проблемы какие? поконкретнее давай

chupakabra

2009-04-02 13:56

developer   bugnote:0002877

К примеру включаю фильтр, полоса прокрутки показывает что я нахожусь в конце списка, а на самом деле там еще много записей есть. Пытаюсь прокрутить список с помощью клавиши "стрелка вниз" - список не прокручивается, а курсор уходит за пределы окна. Позиционирование курсора с помощью мыши также работает неправильно.

vskirdin

2009-04-02 15:19

administrator   bugnote:0002878

понял. в работе.

alexy

2009-05-29 18:37

administrator   bugnote:0003360

В 960 скроллинг клавой, и отрисовка скролбара должны работать нормально.
Мышку надо доделать таким же образом.

chupakabra

2009-05-29 20:25

developer   bugnote:0003362

alexy, ты проверял на тестовом плагине? У меня не работает.

alexy

2009-05-29 20:28

administrator   bugnote:0003363

Да, проверял на тестовом. Что имено у тебя не работает?

chupakabra

2009-05-29 20:32

developer   bugnote:0003364

К примеру, PageUp и PaqeDown неправильно работают. Скроллинг стрелкой вниз происходит "рывками". При переходе клавишей End в конец списка имеем некорректную отрисовку - пустое место в конце списка.

alexy

2009-05-29 20:40

administrator   bugnote:0003365

Если бы у меня это повторялось так легко. Посмотри на мой патч, там вроде всё понятно, попробуй у себя с дебагером проверить.
У тебя есть ICQ?

chupakabra

2009-05-29 20:45

developer   bugnote:0003366

Отослал 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;
 
       }
     }
a.diff (4,065 bytes)   

alexy

2009-05-29 22:09

administrator   bugnote:0003367

В 962 клава уже должна работать нормально.

alexy

2010-02-12 13:54

administrator   bugnote:0004915

Ну вроде это уже можно закрывать, не?

Issue History

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