View Issue Details

IDProjectCategoryView StatusLast Update
0003527WishesPlugins API.Dialogpublic2017-10-20 09:43
ReporterJohnDoe Assigned To 
PrioritynormalSeverityfeatureReproducibilityalways
Status newResolutionopen 
Platformx86OSWindowsOS VersionXP SP3
Product Version3.0 
Summary0003527: DM_LISTSETCURPOS и DIF_LISTWRAPMODE
Descriptionhttp://api.farmanager.com/ru/dialogapi/dmsg/dm_listsetcurpos.html
Из Энциклопедии следует, что если попытаться установить курсор на недоступный пункт (disable/hidden/separator), то фар сам скорректирует позицию.

Есть одна особенность: если список с флагом DIF_LISTWRAPMODE, то курсор может перейти через начало/конец списка.

На практике это может быть совсем не то, что требуется, пытаясь например переместиться в конец списка, а оказываемся в начале.

Предлагаю изменить поведение:
1) никогда не переходить через границу списка независимо от DIF_LISTWRAPMODE.
2) в случае, если невозможно переместиться на указанный элемент, и впереди до конца списка доступных нет, то не оставаться на месте (как сейчас), а пробовать перейти на ближайший доступный в указанном направлении.
Steps To Reproducelocal F = far.Flags
local ListItems = {
 {Text="1",Flags=F.LIF_DISABLE},
 {Text="2"},--Flags=F.LIF_SEPARATOR},
 {Text="3"},
 {Text="4"},
 {Text="5",Flags=F.LIF_HIDDEN},
 SelectIndex = 3
 }

local ListFlags = bor(F.DIF_LISTWRAPMODE)
local Items = {
  {F.DI_LISTBOX, 0, 0, 21, 5,ListItems,0,0,ListFlags,"Title",0,UserData},
}

local hDlg = far.DialogInit ("18800692-45A6-4D05-BCCC-32026DA7045A",0,0,22,6,nil,Items,F.FDLG_NONMODAL)
far.Show(hDlg:send(F.DM_LISTSETCURPOS,1,{SelectPos=far.InputBox()}))
Additional InformationМожно было бы представить определённый смысл в текущем поведении, если бы оно сохранялось при указании индекса за пределами списка (например при попытке перейти к элементу 6 в списке из 5 элементов. Но этого не происходит, т.е. текущее поведение неконсистентно.
TagsNo tags attached.
Build

Activities

zg

2017-10-15 13:40

developer   bugnote:0015662

а в чём заключается неконсистентность? в вашем макросе что при указании 5, что 6 — поведение одинаковое, переход на второй элемент.

JohnDoe

2017-10-15 15:30

updater   bugnote:0015663

Last edited: 2017-10-15 15:41

А теперь убираем с 5го элемента LIF_HIDDEN, и поведение меняется.

P.S.
Я понимаю, что можно исправить консистентность можно и в эту сторону - зацикливая список при указании значения за его пределами.
Но считаю, что для АПИ всё-та удобнее предложенный мной вариант поведения, поскольку зациклить список вручную всегда можно в одно действие.

zg

2017-10-15 16:25

developer   bugnote:0015664

т.е. про убирание LIF_HIDDEN нужно было догадаться?

JohnDoe

2017-10-15 16:49

updater   bugnote:0015665

О том, что LIF_HIDDEN влияет на этот кейс, я не знал.

JohnDoe

2017-10-20 07:00

updater   bugnote:0015722

Ещё про DM_LISTSETCURPOS: 0002911

zg

2017-10-20 09:15

developer   bugnote:0015723

индекс сначала приводится к диапазону допустимых, потом уже ищется первый доступный.

JohnDoe

2017-10-20 09:43

updater   bugnote:0015724

И это не противоречит желаемому поведению, описанному в Description.

Issue History

Date Modified Username Field Change
2017-10-14 15:34 JohnDoe New Issue
2017-10-15 13:40 zg Note Added: 0015662
2017-10-15 15:30 JohnDoe Note Added: 0015663
2017-10-15 15:41 JohnDoe Note Edited: 0015663
2017-10-15 16:25 zg Note Added: 0015664
2017-10-15 16:49 JohnDoe Note Added: 0015665
2017-10-20 07:00 JohnDoe Note Added: 0015722
2017-10-20 09:15 zg Note Added: 0015723
2017-10-20 09:43 JohnDoe Note Added: 0015724