DialogBuilder

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

DialogBuilder

Post by Ariman »

В Far 3 появилась такая полезная штука как DialogBuilder. В принципе, удобно, но есть по нему несколько вопросов.

1. Совсем не нашёл поддержку combobox-ов и listbox-ов. Это так и задумано или просто руки не дошли?
2. Как бы там получить доступ к элементам? Например, понадобилось по высоте подвигать группу radiobutton-ов, а они наружу никак не доступны.
User avatar
DrKnS
Posts: 5785
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 10 times
Been thanked: 330 times

Re: Про DialogBuilder.

Post by DrKnS »

DialogBuilder бывает внутренний (FarDlgBuilder.?pp) и внешний (DlgBuilder.hpp).
Поддержка комбобоксов во внутреннем точно есть. До внешнего, вероятно, руки не дошли (зачатки в виде класса ComboBoxBinding есть).

Если чего-то не хватает - предлагайте. Желательно сначала посмотрев на внутренний - может быть велосипед уже изобретён, но не опубликован.
Ariman
Posts: 1299
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 46 times
Contact:

Re: Про DialogBuilder.

Post by Ariman »

DrKnS wrote:Если чего-то не хватает - предлагайте.
Ну раз так, то предлагаю. :) Пока не хватает вот такого:
  • Combobox-ы. Во внутреннем классе действительно всё есть, надо только вытащить один из методов наружу. Подозреваю что это будет что-то вроде:

    Code: Select all

    FarDialogItem *AddComboBox(int *Value, int Width, const DialogBuilderListItem *Items, size_t ItemCount, FARDIALOGITEMFLAGS Flags = DIF_NONE);
  • Listbox-ы. Нигде не реализовано. Но думаю от комбобокса не сильно должно отличаться.
  • Возможности вставлять элементы внутри группы radiobutton-ов. Например, для задания отдельных параметров для каждого элемента списка.
User avatar
DrKnS
Posts: 5785
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 10 times
Been thanked: 330 times

Re: Про DialogBuilder.

Post by DrKnS »

Если предлагать кодом или хотя бы полным описанием интерфейсов - дело пойдет быстрее :)
Ariman
Posts: 1299
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 46 times
Contact:

Re: DialogBuilder

Post by Ariman »

Мы и кодом могём. :)
Вот, для затравки, предложение по комбобоксу. За основу взял код из внутреннего билдера, но переделал немного по-своему. В аттаче diff с кодом.
Attachments
dlg_combo_add.diff.txt
(2.86 KiB) Downloaded 139 times
User avatar
DrKnS
Posts: 5785
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 10 times
Been thanked: 330 times

Re: DialogBuilder

Post by DrKnS »

Добавил.
Ariman
Posts: 1299
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 46 times
Contact:

Re: DialogBuilder

Post by Ariman »

Ну раз так хорошо пошло, то продолжим.
Добавил поддержку листбоксов. Немного переделал предыдущий код для унификации обоих боксов, чтобы копипасту не плодить.
Attachments
dlg_listbox_add.diff.txt
(5.58 KiB) Downloaded 122 times
User avatar
DrKnS
Posts: 5785
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 10 times
Been thanked: 330 times

Re: DialogBuilder

Post by DrKnS »

А для внутреннего не хочешь добавить? :)
Ariman
Posts: 1299
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 46 times
Contact:

Re: DialogBuilder

Post by Ariman »

Если к моему варианту претензий нет, то могу и туда портировать. Надо только определиться что именно и как переносить. Всё таки интерфейс в моем варианте и во внутреннем билдере немного отличается.
User avatar
DrKnS
Posts: 5785
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 10 times
Been thanked: 330 times

Re: DialogBuilder

Post by DrKnS »

Добавил.
Ariman
Posts: 1299
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 46 times
Contact:

Re: DialogBuilder

Post by Ariman »

Новый приступ креатива по расширению билдера. :)
Появилось желание добавлять кнопочки в большем количестве чем OK/Cancel/+1. Плюс не всегда Cancel идет вторым. По этому поводу родилась функция AddButtons, в которую передается массив надписей. Все кнопочки располагаются в ряд на одном уровне. Можно задавать дефолтную кнопку и где именно по порядку Cancel (опционально).

Патч в аттаче. Пришлось поменять некоторые поля в классе, потому что текущая реализация была очень заточена под OK/Cancel.

ЗЫ. Существующий метод AddOKCancel оставлен, но внутри переделан на новую функцию, дабы не плодить одинаковый код.
Attachments
add_buttons.diff.txt
(3.2 KiB) Downloaded 116 times
Ariman
Posts: 1299
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 46 times
Contact:

Re: DialogBuilder

Post by Ariman »

Ну и в догонку. Я вроде обещался портировать листбоксы во внутренний билдер. Как бы вот.
Attachments
far_listbox.diff.txt
(17.05 KiB) Downloaded 124 times
Ariman
Posts: 1299
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 46 times
Contact:

Re: DialogBuilder

Post by Ariman »

По результатам использования небольшая правка патча на кнопки. Подвинем первую кнопку чуть вправо, а то не очень симметрично получается.
Attachments
add_buttons_v2.diff.txt
(3.26 KiB) Downloaded 110 times
User avatar
DrKnS
Posts: 5785
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 10 times
Been thanked: 330 times

Re: DialogBuilder

Post by DrKnS »

Добавил.
Ariman
Posts: 1299
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 12 times
Been thanked: 46 times
Contact:

Re: DialogBuilder

Post by Ariman »

Ещё патчик. Добавил поддержку флагов для диалога во внешнем билдере.
Attachments
dialog_flags.diff.txt
(2.36 KiB) Downloaded 130 times
Post Reply

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