View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001943 | Far Manager | Plugins API.Dialog | public | 2011-12-13 06:16 | 2011-12-13 20:00 |
Reporter | shmuel | Assigned To | vskirdin | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Platform | x86 | OS | Windows | OS Version | XP SP3 |
Product Version | 3.0 | ||||
Fixed in Version | 3.0 | ||||
Summary | 0001943: Исправление некоторых дефектов функции Message | ||||
Description | Функция Message ограничивает высоту выводимого диалога высотой экрана, отбрасывая при этом не помещающиеся по высоте строки тела сообщения. В реализации этого "отбрасывания", однако, есть два дефекта: 1. Фактически ограничивается общее число элементов, без учёта соотношения количества строк тела сообщения и количества кнопок. В результате, если количество кнопок более 1, ограничение происходит преждевременно, и высота результирующего диалога получается меньше высоты экрана (чем больше кнопок - тем меньше высота диалога). То-есть, отбрасывается больше строк тела сообщения, чем необходимо. 2. При отбрасывании строк, их текст переходит на кнопки, то-есть текстом первой кнопки становится текст первой отбрасываемой строки и т.д. Приложенный патч исправляет данные два дефекта. | ||||
Steps To Reproduce | Приложенный тестовый плагин позволяет вызывать функцию Message с командной строки с двумя параметрами: ItemsNumber и ButtonsNumber. Например, вызов test1: 32 10 означает требование к плагину вывести на экран диалог с общим количеством элементов 32, из которых 10 будут кнопками. Задавая разные комбинации этих параметров, можно наблюдать поведение функции Message. | ||||
Tags | No tags attached. | ||||
Build | 2297 | ||||
|
plugapi.cpp.patch (1,063 bytes)
Index: plugapi.cpp =================================================================== --- plugapi.cpp (revision 6966) +++ plugapi.cpp (working copy) @@ -1128,7 +1128,7 @@ { *MsgTemp=L'\0'; MsgItems[I]=Msg; - Msg+=StrLength(Msg)+1; + Msg=MsgTemp+1; if (*Msg == L'\0') break; @@ -1147,12 +1147,6 @@ MsgItems[i]=Items[i]; } - // ���������� �� ������ - if (ItemsNumber > static_cast<SIZE_T>(ScrY-2)) - { - ItemsNumber=ScrY-2-(Flags&0x000F0000?1:0); - } - /* $ 22.03.2001 tran ItemsNumber++ -> ++ItemsNumber ������ ��������� ������� */ @@ -1191,6 +1185,16 @@ break; } + // ���������� �� ������ + size_t MaxLinesNumber = static_cast<size_t>(ScrY-3-(ButtonsNumber?1:0)); + size_t LinesNumber = ItemsNumber-ButtonsNumber-1; + if (LinesNumber > MaxLinesNumber) + { + ItemsNumber -= (LinesNumber-MaxLinesNumber); + for (int i=1; i <= ButtonsNumber; i++) + MsgItems[MaxLinesNumber+i]=MsgItems[LinesNumber+i]; + } + // ���������� ����� if (PluginNumber != -1) { |
|
|
|
build 2297 |
|
Спасибо. |
Date Modified | Username | Field | Change |
---|---|---|---|
2011-12-13 06:16 | shmuel | New Issue | |
2011-12-13 06:16 | shmuel | File Added: plugapi.cpp.patch | |
2011-12-13 06:18 | shmuel | File Added: test1.zip | |
2011-12-13 11:38 | vskirdin | Assigned To | => vskirdin |
2011-12-13 11:38 | vskirdin | Status | new => assigned |
2011-12-13 17:38 | vskirdin | Note Added: 0008146 | |
2011-12-13 17:38 | vskirdin | Status | assigned => feedback |
2011-12-13 19:58 | shmuel | Note Added: 0008149 | |
2011-12-13 19:58 | shmuel | Status | feedback => assigned |
2011-12-13 19:58 | shmuel | Status | assigned => resolved |
2011-12-13 20:00 | vskirdin | Build | => 2297 |
2011-12-13 20:00 | vskirdin | Status | resolved => closed |
2011-12-13 20:00 | vskirdin | Resolution | open => fixed |
2011-12-13 20:00 | vskirdin | Fixed in Version | => 3.0 |