Окно чата с Gtk+
Я пишу какой-то чат в Аде, используя 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
перезвонить... и теперь моя новая проблема здесь
1 ответ
Обычно я использую эту ссылку: http://www.univ-orleans.fr/sciences/info/ressources/webada/doc/gtkada/gtkada_rm/index.html
Вы не предоставили много информации об организации вашего проекта. Но если у вас есть простая процедура, где вы все объявляете, то:
procedure foo is
-- variables
E : GTk_GEntry;
T : Gtk_Text_View;
...
procedure On_Button_Send_Clicked (Object : access Gtk_Widget_Record'Class) is
begin
S : String := Get_Text (E);
B : Gtk_Text_Buffer := Get_Buffer (T);
begin
Set_Text (B, S);
...
end On_Button_Send_Clicked;
begin
...
Handlers.Connect
(Button, "clicked", Handlers.To_Marshaller (On_Button_Send_Clicked'access);
...
end foo