Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

В листинге 12.10 демонстрируются переключатели.

Листинг 12.10. Переключатели в FOX

require 'fox16'

include Fox

class RadioButtonHandlerWindow < FXMainWindow

 def initialize(app)

# Invoke base class initialize first

super(app, "Radio Button Handler", nil, nil,

DECOR_TITLE | DECOR_CLOSE)

choices = [ "Good", "Better", "Best" ]

group = FXGroupBox.new(self, "Radio Test Group",

LAYOUT_SIDE_TOP |

FRAME_GROOVE |

LAYOUT_FILL_X)

choices.each do |choice|

FXRadioButton.new(group, choice,

nil, 0,

ICON_BEFORE_TEXT |

LAYOUT_SIDE_TOP)

end

 end

end

application = FXApp.new

main = RadioButtonHandlerWindow.new(application)

application.create

main.show(PLACEMENT_SCREEN)

application.run

Группы переключателей — стандартное средство в графических приложениях, предназначенное для выбора одного из взаимно исключающих вариантов. В данном примере варианты представлены массивом из трех строк:

choices = [ "Good", "Better", "Best" ]

В главное окно добавляется объект

FXGroupBox
, который визуально указывает, что три переключателя взаимосвязаны, а затем в этот контейнер добавляются сами переключатели (по одному на каждый вариант). Но сам контейнер
FXGroupBox
ничего не делает для того, чтобы обеспечить взаимное исключение. Если запустить пример в таком виде, то вы сможете выбрать более одного переключателя.

Есть несколько способов обеспечить ожидаемое поведение переключателей, но в приложениях FOX чаще всего для этой цели используют получатель данных — класс

FXDataTarget
. Это специальный объект, играющий роль хранителя какого-то значения. Как и любой другой объект в FOX,
FXDataTarget
может посылать и получать сообщения.

Программа в листинге 12.11 — модифицированный вариант предыдущей, в ней демонстрируется применение получателей данных.

Листинг 12.11. Переключатели в FOX и получатели данных

require 'fox16'

include Fox

class RadioButtonHandlerWindow < FXMainWindow

 def initialize(app)

# Сначала вызвать инициализатор базового класса.

super(app, "Radio Button Handler", nil, nil,

DECOR_TITLE | DECOR_CLOSE)

choices = [ "Good", "Better", "Best" ]

default_choice = 0

@choice = FXDataTarget.new{default_choice)

group = FXGroupBox.new(self, "Radio Test Group",

LAYOUT_SIDE_TOP |

FRAME_GROOVE |

LAYOUT_FILL_X)

choices.each_with_index do |choice, index|

FXRadioButton.new(group, choice,

@choice, FXDataTarget::ID_OPTION+index,

ICON_BEFORE_TEXT |

LAYOUT_SIDE_TOP)

end

 end

end

application = FXApp.new

main = RadioButtonHandlerWindow.new(application)

application.create

main.show(PLACEMENT_SCREEN)

application.run

В этом примере

@choice
— экземпляр
FXDataTarget
, значением которого является целочисленный индекс выбранного в данный момент положения переключателя. Получатель данных инициализирован нулем, что соответствует элементу «Good» массива
choices
.

При конструировании каждого переключателя задается получатель данных, а идентификатор сообщения от переключателя делается равным

FXDataTarget::ID_OPTION
плюс желаемое значение. Если теперь запустить пример, то вы увидите, что переключатель стал вести себя как положено.

Для добавления в окно списка

FXList
и его инициализации тоже достаточно нескольких строк. Значение
LIST_BROWSESELECT
позволяет выбирать из списка ровно один элемент. В начальный момент выбран самый первый из них. Значение
LIST_SINGLESELECT
допускает выбор не более одного элемента; в этом случае в начальный момент ни один элемент не выбран:

@list = FXList.new(self, nil, 0,

 LIST_BROWSESELECT |

 LAYOUT_FILL_X)

@names = ["Chuck", "Sally", "Franklin", "Schroeder",

 "Woodstock", "Matz", "Lucy"]

@names.each { |name| @list.appendItem(name) }

Отметим, что вместо метода

appendItem
можно использовать оператор вставки в массив, то есть последнюю строку можно было бы записать и так:

@names.each { |name| @list << name }

Весь пример целиком приведен в листинге 12.12. Сообщение обрабатывается в главном окне, в результате выводится выбранный элемент. Если был задан режим

LIST_SINGLE_SELECT
, то важно отличать щелчок, при котором элемент был выбран, от щелчка, который отменил выбор.

Поделиться:
Популярные книги

Неучтенный элемент. Том 10

NikL
10. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 10

Виктор Глухов агент Ада. Компиляция. Книги 1-15

Сухинин Владимир Александрович
Виктор Глухов агент Ада
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Виктор Глухов агент Ада. Компиляция. Книги 1-15

Паладин из прошлого тысячелетия

Еслер Андрей
1. Соприкосновение миров
Фантастика:
боевая фантастика
попаданцы
6.67
рейтинг книги
Паладин из прошлого тысячелетия

7 историй для девочек

Дюма-отец Александр
Детские:
детская проза
4.75
рейтинг книги
7 историй для девочек

Святая Русь

Балашов Дмитрий Михайлович
7. Государи московские
Научно-образовательная:
история
6.17
рейтинг книги
Святая Русь

В плену снов

Джеймс Питер
Top Thriller
Детективы:
триллеры
7.57
рейтинг книги
В плену снов

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12

Елизавета Петровна

Сахаров Андрей Николаевич
11. Романовы. Династия в романах
Проза:
историческая проза
5.50
рейтинг книги
Елизавета Петровна

Посланник

Иевлев Геннадий Васильевич
2. Страж
Фантастика:
научная фантастика
космическая фантастика
5.00
рейтинг книги
Посланник

Дюна: Дом Харконненов

Андерсон Кевин Джей
2. Прелюдия к Дюне
Фантастика:
научная фантастика
7.17
рейтинг книги
Дюна: Дом Харконненов

"Фантастика 2025-25". Компиляция. Книги 1-24

Казанцев Александр Петрович
Фантастика 2025. Компиляция
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Фантастика 2025-25. Компиляция. Книги 1-24

Мэр

Астахов Павел Алексеевич
Проза:
современная проза
7.00
рейтинг книги
Мэр

Стая

Сергеева Оксана Николаевна
1. Стая
Любовные романы:
современные любовные романы
остросюжетные любовные романы
9.37
рейтинг книги
Стая

Сильнейший Столп Империи. Книга 1

Ермоленков Алексей
1. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 1