Page 1 of 1

Косметические дефекты позиционирования в отфильтрованном списке

Posted: Sun 28 Jul, 2019 14:33
by John Doe
Для примера можно использовать список истории AltF11 (он обычно многократно превышает высоту окна, поэтому годится для демонстрации))

Обычно список всегда заполняет доступное пространство, т.е. если мы переместимся на последний его элемент, то этот элемент будет в самом низу.

Однако если в списке присутствуют скрытые элементы, то всё становится необычно: последний элемент больше не в конце списка, это хорошо видно при переходе в конец с помощью Ctrl-End, или (в замкнутом списке) с первого элемента на последний по клавише Up.

Даже после отключения фильтра дефекты сохраняются.

Косметические дефекты позиционирования в отфильтрованном списке

Posted: Sun 28 Jul, 2019 15:09
by DrKnS
John Doe wrote:
Sun 28 Jul, 2019 14:33
последний элемент больше не в конце списка, это хорошо видно
А где? (У меня в конце, мне не видно.)

Косметические дефекты позиционирования в отфильтрованном списке

Posted: Sun 28 Jul, 2019 17:08
by John Doe
DrKnS wrote:
Sun 28 Jul, 2019 15:09
А где? (У меня в конце, мне не видно.)
Действия в простейшем варианте такие:
- отфильтровать минимально, чтобы видимая область окна оставалась заполнена
- находясь на первом элементе нажать Up

Результат:
- из всего списка на экране отображается одна строка, и находится она в верхней позиции

Косметические дефекты позиционирования в отфильтрованном списке

Posted: Sun 28 Jul, 2019 17:11
by zg
у меня тоже не воспроизводится. макросов никаких нет?

Косметические дефекты позиционирования в отфильтрованном списке

Posted: Sun 28 Jul, 2019 17:16
by John Doe
Да, действительно, без плагинов не вопроизводится, буду искать у себя.

Косметические дефекты позиционирования в отфильтрованном списке

Posted: Mon 29 Jul, 2019 08:36
by John Doe
На воспроизведение влиял скрипт, скрывающий сепараторы: http://forum.farmanager.com/viewtopic.p ... 47#p129347

Для простоты, вместо него можно использовать макрос:

Code: Select all

local F = far.Flags

Macro {
  area="Menu"; key="F1";
  action=function()
    local hDlg = far.AdvControl(F.ACTL_GETWINDOWINFO).Id
    local Item = hDlg:send(F.DM_GETDLGITEM,1)
    if Item and Item[1]==F.DI_LISTBOX then
      for i,v in ipairs(Item[6]) do
        if bit64.band(v.Flags,F.LIF_SEPARATOR)~=0 then
          v.Index = i
          v.Flags = bit64.bor(v.Flags,F.LIF_HIDDEN)
          hDlg:send(F.DM_LISTUPDATE,1,v)
        end
      end
    end
  end;
}
На мой взгляд код вполне честный, и ошибка в фаре.

Косметические дефекты позиционирования в отфильтрованном списке

Posted: Wed 31 Jul, 2019 12:31
by zg
5440.