DialogBuilder

Место, где разработчики плагинов могут поделиться своим опытом.
User avatar
DrKnS
Posts: 5149
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 5 times
Been thanked: 190 times

Re: DialogBuilder

Post by DrKnS » Mon 29 Sep, 2014 12:11

Latest post of the previous page:

Ок, но это как бы публичный код и ломать совместимость не очень хорошо, поэтому флаги в конец списка.

Ariman
Posts: 1225
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 26 times
Contact:

Re: DialogBuilder

Post by Ariman » Mon 29 Sep, 2014 12:43

Я порядок выбирал чисто из идентичности с DialogInit. :)

Ariman
Posts: 1225
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 26 times
Contact:

Re: DialogBuilder

Post by Ariman » Wed 01 Oct, 2014 07:49

Зачем фокусировку на кнопку то убрал?

User avatar
DrKnS
Posts: 5149
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 5 times
Been thanked: 190 times

Re: DialogBuilder

Post by DrKnS » Wed 01 Oct, 2014 10:32

Потому что это ломает привычное поведение (курсор на первом элементе) в куче стандартных диалогов.

Ariman
Posts: 1225
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 26 times
Contact:

Re: DialogBuilder

Post by Ariman » Wed 01 Oct, 2014 12:13

Ломать нехорошо, да. Но тут 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: 5149
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 5 times
Been thanked: 190 times

Re: DialogBuilder

Post by DrKnS » Wed 01 Oct, 2014 12:47

Я не совсем понял, зачем вообще фокусить дефолтную кнопку, но если таки сильно надо - возможно, лучше какой-то универасальный метод типа Builder.SetFocus(ControlId).

User avatar
zg
zero-gravity
Posts: 5540
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

Re: DialogBuilder

Post by zg » Wed 01 Oct, 2014 13:11

DrKnS wrote:Я не совсем понял, зачем вообще фокусить дефолтную кнопку
диалог перезаписи же.

User avatar
HaRT
Moderator
Posts: 8645
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 78 times
Been thanked: 142 times

Re: DialogBuilder

Post by HaRT » Wed 01 Oct, 2014 13:20

DrKnS wrote:Я не совсем понял, зачем вообще фокусить дефолтную кнопку
Я тоже не понимаю, зачем, ведь есть [b]CtrlEnter[/b].
Фар есть инструмент, а не нянька. © 2009 DrKnS

Ariman
Posts: 1225
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 26 times
Contact:

Re: DialogBuilder

Post by Ariman » Wed 01 Oct, 2014 13:55

DrKnS wrote:Я не совсем понял, зачем вообще фокусить дефолтную кнопку,
Чтобы не сфокусировалось не то что надо :). В частности, как я уже писал, сейчас фокусируется первая кнопка безотносительно кто там дефолтная.

User avatar
DrKnS
Posts: 5149
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 5 times
Been thanked: 190 times

Re: DialogBuilder

Post by DrKnS » Wed 01 Oct, 2014 14:26

Ну так не делайте дефолтной кнопкой непервую, это неинтуитивно.

Ariman
Posts: 1225
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 26 times
Contact:

Re: DialogBuilder

Post by Ariman » Wed 01 Oct, 2014 20:30

Вопрос интуитивности пусть каждый разработчик решает для себя. Я же не предлагаю в самом Far-е что-то менять. А инструмент должен быть гибким и непротиворечивым.
А какие принципиальные возражения против дополнительного параметра? Вроде ничего не ломает, только возможности расширяет.

Ariman
Posts: 1225
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 26 times
Contact:

DialogBuilder

Post by Ariman » Fri 31 Oct, 2014 13:34

Нашел небольшой глючок в билдере. Если использовать фичу с колонками, и во второй колонке элементов меньше чем в первой, то рамка получается кривая. Билдер считает размер рамки по последнему элементу, но он в таком случае не самый низкий по вертикали.
В аттаче патч. Вместо последнего элемента берется максимальное значение Х2 из всех.
Attachments
columns_box_fix.diff.txt
(821 Bytes) Downloaded 71 times

Ariman
Posts: 1225
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 26 times
Contact:

DialogBuilder

Post by Ariman » Mon 03 Nov, 2014 20:17

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

В итоге edit справа налезет на рамку.
Но тут немного непонятно куда чинить. Это так и задумано, что между колонками промежуток 2 знакоместа выделяется? Или они всё таки впритык должны идти? А то как раз эти 2 символа справа и не хватает для нормальной рамки. Но не зная как было всё задумано сложно предложить патч.

User avatar
DrKnS
Posts: 5149
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 5 times
Been thanked: 190 times

DialogBuilder

Post by DrKnS » Mon 03 Nov, 2014 20:30

Думаю, промежуток должен быть.

Ariman
Posts: 1225
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 26 times
Contact:

DialogBuilder

Post by Ariman » Thu 02 Nov, 2017 13:15

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

User avatar
DrKnS
Posts: 5149
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 5 times
Been thanked: 190 times

DialogBuilder

Post by DrKnS » Sun 05 Nov, 2017 19:18

Ariman wrote:
Thu 02 Nov, 2017 13:15
Полезно, если надо между кнопками что-то вставить.
Это как? Радиокнопки вроде же должны подряд идти.

Ariman
Posts: 1225
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 26 times
Contact:

DialogBuilder

Post by Ariman » Sun 05 Nov, 2017 21:31

DrKnS wrote:
Sun 05 Nov, 2017 19:18
Это как? Радиокнопки вроде же должны подряд идти.
Визуально, естественно. Подвигать Y у кнопок. Типа такого (где имя файла, там edit вставлен).

Code: Select all

──────────────────────────────────────
 Output to
 (•) Single File
   hashlist.md5
 ( ) Separate hash files
 ( ) Display
──────────────────────────────────────
Last edited by Ariman on Sun 05 Nov, 2017 21:32, edited 1 time in total.

Post Reply

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