View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003527 | Wishes | Plugins API.Dialog | public | 2017-10-14 15:34 | 2017-10-20 09:43 |
Reporter | JohnDoe | Assigned To | |||
Priority | normal | Severity | feature | Reproducibility | always |
Status | new | Resolution | open | ||
Platform | x86 | OS | Windows | OS Version | XP SP3 |
Product Version | 3.0 | ||||
Summary | 0003527: DM_LISTSETCURPOS и DIF_LISTWRAPMODE | ||||
Description | http://api.farmanager.com/ru/dialogapi/dmsg/dm_listsetcurpos.html Из Энциклопедии следует, что если попытаться установить курсор на недоступный пункт (disable/hidden/separator), то фар сам скорректирует позицию. Есть одна особенность: если список с флагом DIF_LISTWRAPMODE, то курсор может перейти через начало/конец списка. На практике это может быть совсем не то, что требуется, пытаясь например переместиться в конец списка, а оказываемся в начале. Предлагаю изменить поведение: 1) никогда не переходить через границу списка независимо от DIF_LISTWRAPMODE. 2) в случае, если невозможно переместиться на указанный элемент, и впереди до конца списка доступных нет, то не оставаться на месте (как сейчас), а пробовать перейти на ближайший доступный в указанном направлении. | ||||
Steps To Reproduce | local 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 элементов. Но этого не происходит, т.е. текущее поведение неконсистентно. | ||||
Tags | No tags attached. | ||||
Build | |||||
|
а в чём заключается неконсистентность? в вашем макросе что при указании 5, что 6 — поведение одинаковое, переход на второй элемент. |
|
А теперь убираем с 5го элемента LIF_HIDDEN, и поведение меняется. P.S. Я понимаю, что можно исправить консистентность можно и в эту сторону - зацикливая список при указании значения за его пределами. Но считаю, что для АПИ всё-та удобнее предложенный мной вариант поведения, поскольку зациклить список вручную всегда можно в одно действие. |
|
т.е. про убирание LIF_HIDDEN нужно было догадаться? |
|
О том, что LIF_HIDDEN влияет на этот кейс, я не знал. |
|
Ещё про DM_LISTSETCURPOS: 0002911 |
|
индекс сначала приводится к диапазону допустимых, потом уже ищется первый доступный. |
|
И это не противоречит желаемому поведению, описанному в Description. |
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 |