Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
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
FXDataTarget
Программа в листинге 12.11 — модифицированный вариант предыдущей, в ней демонстрируется применение получателей данных.
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
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
require 'fox16'
include Fox
class ListHandlerWindow < FXMainWindow
def initialize(app)
# Сначала вызвать инициализатор базового класса.
super(app, "List Handler", nil, nil,
DECOR_TITLE | DECOR_CLOSE)
@list = FXList.new(self, nil, 0,
LIST_BROWSESELECT |
LAYOUT_FILL_X)
@list.connect(SEL_COMMAND) do |sender, sel, pos|