Я пишу какой-то чат в 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
в функцию обратного вызова ... и теперь моя новая проблема здесь