Окно чата с Gtk + - PullRequest
       20

Окно чата с Gtk +

0 голосов
/ 16 января 2012

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

1 Ответ

0 голосов
/ 01 мая 2012

Обычно я использую эту ссылку: 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
...