Я пишу что-то вроде чата в Ada, используя Gtk+ (технически GtkAda). И у меня проблемы с некоторыми Gtk. Мое окно состоит из Entry
, TextView
и Button
(Отправить).
Сложная часть находится в обработчике On_Button_Send_Clicked
(процедура, которая обрабатывает сигнал «нажатие» на кнопку). Я хочу прочитать текстовую форму Entry
и поместить ее в TextView
, но как я могу получить доступ к TextView
и Entry
из процедуры, которая имеет доступ только к Button
, так как я связываю сигнал с обработчиком таким образом:
package Handlers is new Gtk.Handlers.Callback
(Widget_Type => Gtk_Widget_Record);
procedure On_Button_Send_Clicked
(Object : access Gtk_Widget_Record'Class);
...
Handlers.Connect
(Button, "clicked", Handlers.To_Marshaller (On_Button_Send_Clicked'access);
Мой вопрос: существуют ли какие-либо методы, такие как Get_Gtk_Entry
или Get_Text_View
, которые были бы простыми? Или есть другой способ, но такой же простой?
Я также наткнулся на решение, в котором я объявляю запись:
type Widget_Collection_Record is new Glib.Object.GObject_Record with record
Terminal : Gtk.GEntry.Gtk_Entry;
Text_Field : Gtk.Text_View.Gtk_Text_View;
end record;
и сделайте обратный вызов следующим образом:
package Widget_Collection_Cb is new Gtk.Handlers.Callback
(Widget_Type => Widget_Collection_Record);
procedure On_Button_Send_Clicked
(Object : access Widget_Collection_Record'Class);
Но теперь у меня другой вопрос: как связать сигнал от Button
с обработчиком, ведь виджет Button
не входит в состав моего Widget_Collection_Record
?
Я не уверен, ясно ли я говорю...
Поэтому, пожалуйста, если вы знаете что-то, что может решить мою проблему, пожалуйста, напишите - это может быть C, C++, Python - я попытаюсь преобразовать это в Ada ;D
И резюме моей проблемы:
Как я могу написать обработчик для чтения из Entry
и записи в Text_View
при нажатии Button
?
Изменить: вопрос закрыт. Я знаю, что неясно, о чем я просил, и поэтому я выбрал способ передачи записи User_Data
в обратный вызов... и теперь моя новая проблема здесь
glade
; сгенерированный исходный код Ады может быть полезен. - person trashgod   schedule 21.01.2012