DialogBuilder

Место, где разработчики плагинов могут поделиться своим опытом.
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

Re: DialogBuilder

Post by Ariman »

Latest post of the previous page:

Ещё патчик. Добавил поддержку флагов для диалога во внешнем билдере.
Attachments
dialog_flags.diff.txt
(2.36 KiB) Downloaded 251 times
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: DialogBuilder

Post by DrKnS »

Ок, но это как бы публичный код и ломать совместимость не очень хорошо, поэтому флаги в конец списка.
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

Re: DialogBuilder

Post by Ariman »

Я порядок выбирал чисто из идентичности с DialogInit. :)
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

Re: DialogBuilder

Post by Ariman »

Зачем фокусировку на кнопку то убрал?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: DialogBuilder

Post by DrKnS »

Потому что это ломает привычное поведение (курсор на первом элементе) в куче стандартных диалогов.
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

Re: DialogBuilder

Post by Ariman »

Ломать нехорошо, да. Но тут 2 проблемки вылезает:
1. Если всё таки захочется зафокусить дефолтную кнопку, то не получится. Может тогда параметр один добавить ещё для такого случая?

Code: Select all

void AddButtons(int ButtonCount, const int* MessageIDs, int defaultButtonIndex = 0, int cancelButtonIndex = -1, bool focusOnDefaultButton = false)
...
if (defaultButtonIndex == i)
{
	NewButton->Flags |= DIF_DEFAULTBUTTON;
	if (focusOnDefaultButton)
		NewButton->Flags |= DIF_FOCUS;
}
2. Если в диалоге нет активных элементов кроме ряда кнопок, и дефолтная кнопка не первая, то получается странное поведение: дефолтная кнопка одна, а фокус всегда на другой кнопке - самой первой. В принципе, добавления параметра выше позволит решить эту проблему правильными аргументами, но какое-то слабое решение.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: DialogBuilder

Post by DrKnS »

Я не совсем понял, зачем вообще фокусить дефолтную кнопку, но если таки сильно надо - возможно, лучше какой-то универасальный метод типа Builder.SetFocus(ControlId).
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: DialogBuilder

Post by zg »

DrKnS wrote:Я не совсем понял, зачем вообще фокусить дефолтную кнопку
диалог перезаписи же.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Re: DialogBuilder

Post by HaRT »

DrKnS wrote:Я не совсем понял, зачем вообще фокусить дефолтную кнопку
Я тоже не понимаю, зачем, ведь есть [b]CtrlEnter[/b].
Фар есть инструмент, а не нянька. © 2009 DrKnS
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

Re: DialogBuilder

Post by Ariman »

DrKnS wrote:Я не совсем понял, зачем вообще фокусить дефолтную кнопку,
Чтобы не сфокусировалось не то что надо :). В частности, как я уже писал, сейчас фокусируется первая кнопка безотносительно кто там дефолтная.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: DialogBuilder

Post by DrKnS »

Ну так не делайте дефолтной кнопкой непервую, это неинтуитивно.
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

Re: DialogBuilder

Post by Ariman »

Вопрос интуитивности пусть каждый разработчик решает для себя. Я же не предлагаю в самом Far-е что-то менять. А инструмент должен быть гибким и непротиворечивым.
А какие принципиальные возражения против дополнительного параметра? Вроде ничего не ломает, только возможности расширяет.
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

DialogBuilder

Post by Ariman »

Нашел небольшой глючок в билдере. Если использовать фичу с колонками, и во второй колонке элементов меньше чем в первой, то рамка получается кривая. Билдер считает размер рамки по последнему элементу, но он в таком случае не самый низкий по вертикали.
В аттаче патч. Вместо последнего элемента берется максимальное значение Х2 из всех.
Attachments
columns_box_fix.diff.txt
(821 Bytes) Downloaded 236 times
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

DialogBuilder

Post by Ariman »

В догонку. Оказалось что и горизонтально рамка неправильно считается. Правая колонка может налазить на рамку. Чтобы увидеть эффект можно следующий код запустить.

В итоге edit справа налезет на рамку.
Но тут немного непонятно куда чинить. Это так и задумано, что между колонками промежуток 2 знакоместа выделяется? Или они всё таки впритык должны идти? А то как раз эти 2 символа справа и не хватает для нормальной рамки. Но не зная как было всё задумано сложно предложить патч.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

DialogBuilder

Post by DrKnS »

Думаю, промежуток должен быть.
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

DialogBuilder

Post by Ariman »

Поработаю немного археологом, чтобы новую тему не создавать.
Сочинил тут патчик с небольшим причесываем билдера:
1. Для некоторых контролов есть 2 метода: и с текстом надписи и с id (из Lng файлов), а для некоторых только с id. Внедрил всеобщее равенство.
2. AddRadioButtons теперь возвращает не void, а указатель на первую кнопку. Полезно, если надо между кнопками что-то вставить.
Я эти модификации у себя использовал, но думаю и ещё кому-нибудь могут пригодиться.
Attachments
dlg_builder_tweaks_patch.txt
(4.39 KiB) Downloaded 244 times
Post Reply

Return to “Разработка плагинов”