<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; Получить ID дочернего элемента GUI, созданного Glade с GtkBuilder]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=25566&amp;type=atom" />
	<updated>2012-12-17T18:57:12Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=25566</id>
		<entry>
			<title type="html"><![CDATA[Re: Получить ID дочернего элемента GUI, созданного Glade с GtkBuilder]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=315183#p315183" />
			<content type="html"><![CDATA[<p>Чтобы получать имя виджета функцией gtk_widget_get_name(widget) нужно вначале установить это имя<br />примерно так: </p><p>gtk_widget_set_name(GTK_WIDGET (gtk_builder_get_object (builder, &quot;entry1&quot;)), &quot;entry_size_cell&quot;);</p><p>тогда при обходе дочерних виджетов:<br />gtk_container_foreach(GTK_CONTAINER(dialog_param), (GtkCallback) get_params, NULL);</p><p>в функции&nbsp; get_params можно получить нужный виджет:</p><br /><p>get_params (GtkWidget *widget, gpointer p)<br />{<br />&nbsp; if (GTK_IS_CONTAINER(widget))<br />&nbsp; {<br />&nbsp; &nbsp; gtk_container_foreach(GTK_CONTAINER(widget), (GtkCallback)get_params, p);<br />&nbsp; }<br />&nbsp; else if (GTK_IS_ENTRY(widget))<br />&nbsp; {<br />&nbsp; &nbsp; const char * name = gtk_widget_get_name(widget);</p><p>&nbsp; &nbsp; if ( ! strcmp(name,&quot;entry_size_cell&quot;))<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; cell = atoi(gtk_entry_get_text(GTK_ENTRY(widget)));<br />&nbsp; &nbsp; }<br />....</p>]]></content>
			<author>
				<name><![CDATA[jo-jimm]]></name>
				<uri>https://linuxforum.ru/profile.php?id=27235</uri>
			</author>
			<updated>2012-12-17T18:57:12Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=315183#p315183</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Получить ID дочернего элемента GUI, созданного Glade с GtkBuilder]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=314239#p314239" />
			<content type="html"><![CDATA[<p>Доброго времени суток.<br />Кто-нибудь знает, как получить ID дочернего контрола, созданного Glade с GtkBuilder?</p><p>Что имеется ввиду:<br />При инициализации программы во время загрузки файла glade понятно как получить указатель на структуру нужного элемента:<br />что-то типа </p><p>typedef struct {<br />&nbsp; GtkWidget *m_window;<br />&nbsp; GtkWidget *statusbar;<br />&nbsp; GtkWidget *m_image;<br />&nbsp; guint&nbsp; &nbsp; &nbsp;statusbar_context_id;<br />&nbsp; gchar&nbsp; &nbsp; &nbsp;*filename;<br />} mozaic, * pmozaic;</p><p>GtkDialog * dialog_param;</p><p>....</p><p>&nbsp; &nbsp; gtk_builder_add_from_file (builder, BUILDER_XML_FILE, NULL);<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; pm-&gt;m_window = GTK_WIDGET (gtk_builder_get_object (builder, &quot;main_window&quot;));<br />&nbsp; &nbsp; pm-&gt;m_image = GTK_WIDGET (gtk_builder_get_object (builder, &quot;m_image&quot;));<br />&nbsp; &nbsp; pm-&gt;statusbar = GTK_WIDGET (gtk_builder_get_object (builder, &quot;statusbar&quot;));<br />&nbsp; &nbsp; dialog_param = GTK_DIALOG (gtk_builder_get_object (builder, &quot;dialog_param&quot;));<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; gtk_builder_connect_signals (builder, pm);<br />&nbsp; &nbsp; g_object_unref (G_OBJECT (builder));</p><p>а вот как потом в обработчике получить конкретный контрол GtkEntry, который вложен в dialog_param?</p><p>Я пока пришел только к такой вещи:</p><p>прохожу по всем элементам диалога</p><p>Это я вызываю в обработчике активации диалога:</p><p>gtk_container_foreach(GTK_CONTAINER(dialog_param),(GtkCallback) cb_get_param_value, NULL);</p><p>сама калбэк функция:</p><p>void <br />cb_get_param_value(GtkWidget * widget, gpointer callback_data)<br />{<br />&nbsp; g_print(&quot;%s\n&quot;,gtk_widget_get_name(widget));<br />&nbsp; if (GTK_IS_ENTRY(widget))<br />&nbsp; {<br />&nbsp; &nbsp; g_print(&quot;\t%s\n&quot;,gtk_entry_get_text(GTK_ENTRY(widget)));</p><p>.....</p><p>&nbsp; }<br />&nbsp; else if (GTK_IS_CONTAINER (widget))<br />&nbsp; {<br />&nbsp; &nbsp; gtk_container_foreach(GTK_CONTAINER(widget),(GtkCallback) cb_get_param_value, NULL);<br />&nbsp; }<br />}</p><p>И вот как мне в этой функции получить конкретный GtkEntry?</p><p>Потому что gtk_widget_get_name(widget) возвращает строку GtkEntry, а не имя, которое я задавал для него в Glade в поле name на вкладке General.</p><p>Как вообще получают дочерние элементы, когда интерфейс создается в glade с GtkBuilder? <br />Чтобы получать их не в момент загрузки файла glade, а получать именно тогда, когда нужно.</p>]]></content>
			<author>
				<name><![CDATA[jo-jimm]]></name>
				<uri>https://linuxforum.ru/profile.php?id=27235</uri>
			</author>
			<updated>2012-12-12T16:12:51Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=314239#p314239</id>
		</entry>
</feed>
