View Issue Details

IDProjectCategoryView StatusLast Update
0001943Far ManagerPlugins API.Dialogpublic2011-12-13 20:00
Reportershmuel Assigned Tovskirdin  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Platformx86OSWindowsOS VersionXP SP3
Product Version3.0 
Fixed in Version3.0 
Summary0001943: Исправление некоторых дефектов функции Message
DescriptionФункция Message ограничивает высоту выводимого диалога высотой экрана, отбрасывая при этом не помещающиеся по высоте строки тела сообщения. В реализации этого "отбрасывания", однако, есть два дефекта:

1. Фактически ограничивается общее число элементов, без учёта соотношения количества строк тела сообщения и количества кнопок. В результате, если количество кнопок более 1, ограничение происходит преждевременно, и высота результирующего диалога получается меньше высоты экрана (чем больше кнопок - тем меньше высота диалога). То-есть, отбрасывается больше строк тела сообщения, чем необходимо.

2. При отбрасывании строк, их текст переходит на кнопки, то-есть текстом первой кнопки становится текст первой отбрасываемой строки и т.д.

Приложенный патч исправляет данные два дефекта.
Steps To ReproduceПриложенный тестовый плагин позволяет вызывать функцию Message с командной строки с двумя параметрами: ItemsNumber и ButtonsNumber. Например, вызов
    test1: 32 10
означает требование к плагину вывести на экран диалог с общим количеством элементов 32, из которых 10 будут кнопками.

Задавая разные комбинации этих параметров, можно наблюдать поведение функции Message.
TagsNo tags attached.
Build2297

Activities

shmuel

2011-12-13 06:16

developer  

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)
 	{
plugapi.cpp.patch (1,063 bytes)   

shmuel

2011-12-13 06:18

developer  

test1.zip (4,673 bytes)

vskirdin

2011-12-13 17:38

administrator   bugnote:0008146

build 2297

shmuel

2011-12-13 19:58

developer   bugnote:0008149

Спасибо.

Issue History

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