Окно чата с 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
Другие вопросы по тегам