[Risolto] Anjuta: come collegare i widget creati con glade?

Utilizzo di applicazioni in ambito professionale.
Scrivi risposta
Avatar utente
Dr_Berta
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1906
Iscrizione: domenica 31 luglio 2011, 12:37
Desktop: Gnome + Cairo Dock
Distribuzione: Ubuntu 20.04.x x86_64 LTS
Località: Carpi (MO)

[Risolto] Anjuta: come collegare i widget creati con glade?

Messaggio da Dr_Berta »

Ciao a tutti.
Sto iniziando a valutare l'uso di Anjuta per lo sviluppo di applicazioni in GTK+ (GTK3). Ho creato una piccola applicazione di prova dotata di due pagine grafiche create con Anjuta stesso.
Ho definito i nomi delle callback dei vari widget nei files grafici.
Stando a quanto dice la guida, Anjuta dovrebbe automaticamente creare nel file principale i collegamenti con i widget e il codice di base delle callback facendo doppio click sui widget nel glade inspector.
C'è qualcuno che può chiarirmi meglio qual'è il glade inspector e come fare questo passaggio?

Grazie
Ultima modifica di Dr_Berta il domenica 7 ottobre 2012, 23:47, modificato 1 volta in totale.
Ubuntu user #35116. Linux user #550996 - Il cervello è come un paracadute, funziona solo se si apre [Einstein]
Avatar utente
Dr_Berta
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1906
Iscrizione: domenica 31 luglio 2011, 12:37
Desktop: Gnome + Cairo Dock
Distribuzione: Ubuntu 20.04.x x86_64 LTS
Località: Carpi (MO)

Re: Anjuta: come collegare i widget creati con glade?

Messaggio da Dr_Berta »

Aggiornamento: sbirciando accuratamente in rete ho trovato dove spiegano cos'è il glade inspector. Banale, era l'albero grafico che mostra i widget inseriti nell'interfaccia fatta con glade. :shy:
A questo punto ho creato i collegamenti e qui nasce il nuovo problema: i collegamenti non funzionano.
Il software crea una finestra con una immagine e due bottoni: uno per uscire e uno per incrementare il numero di pagina
La finestra si chiama main_window e i due bottoni sono quitButton e startButton.
Ecco il codice:

Codice: Seleziona tutto

#include <config.h>
#include <gtk/gtk.h>

#include <glib/gi18n.h>

typedef struct _pg_manager{
	GtkBuilder *builder;
}page_mngr;

void destroy (GtkWidget *widget, gpointer data);
void Start (GtkWidget *widget, gpointer data);

/* ANJUTA: Widgets declaration for pvs_designer.ui - DO NOT REMOVE */
GtkWidget* quitButton;
GtkWidget* startButton;


/* For testing propose use the local (not installed) ui file */
/* #define UI_FILE PACKAGE_DATA_DIR"/ui/pvs_designer.ui" */
#define UI_FILE "src/pvs_designer.ui"
#define TOP_WINDOW "main_window"
#define MAX_PAGES 2

int apag = 0;
int ppag = 0;
GtkWidget *S_window[MAX_PAGES];

/* Signal handlers */
/* Note: These may not be declared static because signal autoconnection
 * only works with non-static methods
 */

/* Called when the window is closed */
void
destroy (GtkWidget *widget, gpointer data)
{
	gtk_main_quit ();
}

gboolean 
delete_event(GtkWidget *window, GdkEvent *event, gpointer data){
	return FALSE;
}

/* Called when the window is closed */
void
Start (GtkWidget *widget, gpointer data)
{
	ppag = apag;
	apag++;
}


//static GtkWidget*
static void
create_window (page_mngr* pag_info, char* uiname, char* winname, int pag)
{
	GError* error = NULL;

	
	/* Load UI from file */
	pag_info->builder = gtk_builder_new ();
	if (!gtk_builder_add_from_file (pag_info->builder, uiname, &error))
	{
		g_critical ("Couldn't load builder file: %s", error->message);
		g_error_free (error);
	}

	/* Auto-connect signal handlers */
	gtk_builder_connect_signals (pag_info->builder, NULL);

	/* Get the window object from the ui file */
	S_window[pag] = GTK_WIDGET (gtk_builder_get_object (pag_info->builder, winname));
	if (!S_window[pag])
	{
	        g_critical ("Widget \"%s\" is missing in file %s.",
			winname,
			uiname);
	}		
	
	/* ANJUTA: Widgets initialization for pvs_designer.ui - DO NOT REMOVE */
	if(pag == 0){
		quitButton = GTK_WIDGET (gtk_builder_get_object (pag_info->builder, "quitButton"));
		startButton = GTK_WIDGET (gtk_builder_get_object (pag_info->builder, "startButton"));
		g_signal_connect(G_OBJECT(S_window[pag]),"destroy",G_CALLBACK(destroy),NULL);
		g_signal_connect(G_OBJECT(S_window[pag]),"delete_event",G_CALLBACK(delete_event),NULL);
		g_signal_connect(G_OBJECT (quitButton), "clicked", G_CALLBACK (destroy), NULL);
		g_signal_connect(G_OBJECT (startButton), "clicked", G_CALLBACK (Start), NULL);

	}

}


int
main (int argc, char *argv[])
{
	apag = 0;
	ppag = 1;
	page_mngr pag_info;

#ifdef ENABLE_NLS
	bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
	textdomain (GETTEXT_PACKAGE);
#endif

	
	gtk_init (&argc, &argv);

// create page	
	create_window (&pag_info,UI_FILE,TOP_WINDOW,apag);
	
	g_object_unref (pag_info.builder);
	
	gtk_widget_show_all (S_window[apag]);
			
	gtk_main ();
	
	return 0;
}
Quando faccio eseguire il programma si apre la finestra, si vede correttamente l'immagine, ma i bottoni restano disabilitati.
Qualcuno vede dove ho sbagliato?

Ciao
Ubuntu user #35116. Linux user #550996 - Il cervello è come un paracadute, funziona solo se si apre [Einstein]
Avatar utente
Dr_Berta
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1906
Iscrizione: domenica 31 luglio 2011, 12:37
Desktop: Gnome + Cairo Dock
Distribuzione: Ubuntu 20.04.x x86_64 LTS
Località: Carpi (MO)

Re: Anjuta: come collegare i widget creati con glade?

Messaggio da Dr_Berta »

Nessuno ha qualche dritta? :cry:
Sto usando Glade 3.12.1

Ciao
Ubuntu user #35116. Linux user #550996 - Il cervello è come un paracadute, funziona solo se si apre [Einstein]
wally67
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 699
Iscrizione: giovedì 1 marzo 2007, 15:31
Distribuzione: xubuntu 20.04 LTS x86_64 (l'unica)

Re: Anjuta: come collegare i widget creati con glade?

Messaggio da wally67 »

visto che anche io mi sto cimentando con anjuta-glade provo a buttarla li:

non e' che non avendo associato alcun evento ai bottoni questi vengano visualizzati di default disabilitati?

wally 67
Se io do una moneta a te e tu una a me abbiamo entrambi 1 moneta;
ma se io do una idea a te e tu una a me abbiamo entrambi 2 idee.
Avatar utente
Dr_Berta
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1906
Iscrizione: domenica 31 luglio 2011, 12:37
Desktop: Gnome + Cairo Dock
Distribuzione: Ubuntu 20.04.x x86_64 LTS
Località: Carpi (MO)

Re: Anjuta: come collegare i widget creati con glade?

Messaggio da Dr_Berta »

Può darsi,
ma dalle guide che ho letto sembra che basti specificare la funzione di callback e, se esiste, anjuta la trova e crea il collegamento.
Mah, sarà, ma io questa funzionalità l'ho vista solo in parte.
Mi spiego: ho specificato la callback in glade e facendo doppio click sul bottone nel glade inspector ho visto che Anjuta ha rilevato questa cosa ed ha creato il riferimento al bottone. Il problema è che, stando alle guide, usando la funzione

Codice: Seleziona tutto

gtk_builder_connect_signals (builder, NULL);
si dovrebbero creare tutti i collegamenti tra i widget identificati da Anjuta e le relative callback specificate nel file di glade.
E' quest'ultima cosa che non vedo, e quindi il tutto non va.

Ciao
Ubuntu user #35116. Linux user #550996 - Il cervello è come un paracadute, funziona solo se si apre [Einstein]
wally67
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 699
Iscrizione: giovedì 1 marzo 2007, 15:31
Distribuzione: xubuntu 20.04 LTS x86_64 (l'unica)

Re: Anjuta: come collegare i widget creati con glade?

Messaggio da wally67 »

mi dispiace, ma al momento non so darti altri suggerimenti, sono ancora troppo principiante :sorry:

wally 67
Se io do una moneta a te e tu una a me abbiamo entrambi 1 moneta;
ma se io do una idea a te e tu una a me abbiamo entrambi 2 idee.
Avatar utente
Dr_Berta
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1906
Iscrizione: domenica 31 luglio 2011, 12:37
Desktop: Gnome + Cairo Dock
Distribuzione: Ubuntu 20.04.x x86_64 LTS
Località: Carpi (MO)

Re: Anjuta: come collegare i widget creati con glade?

Messaggio da Dr_Berta »

Eureka! Ho risolto il problema ed ora i miei widget vengono gestiti correttamente. :D
Forse non serve, ma ho aggiornato glade alla versione 3.12.1 così riesco ad avere un simulatore della interfaccia.
Il problema dei pulsanti che non erano abilitati era dovuto al fatto che non li avevo resi "sensibili". :o
Riguardo alla gestione dei segnali, ho scoperto che devo definire i widget e poi richiamarli come gobject castando il risultato come gtk_widget, ad esempio:

Codice: Seleziona tutto

GtkWidget* startButton;
startButton = GTK_WIDGET (gtk_builder_get_object (builder, "startButton"));
Per ogni oggetto che voglio gestire devo fare così, siano essi label, entry, bottoni, ecc
Nella funzione callback poi devo castare l'oggetto da widget al suo tipo reale, ad esempio per leggere una entry che si chiama "dev_type" devo fare:

Codice: Seleziona tutto

sprintf(pwr_calc.devType,"%s",gtk_entry_get_text ((GtkEntry*)dev_type));
Facile no? :nono: Ci ho messo un pò a capire come girano le cose e le guide e i tutorial non aiutano.

Ciao
Ubuntu user #35116. Linux user #550996 - Il cervello è come un paracadute, funziona solo se si apre [Einstein]
wally67
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 699
Iscrizione: giovedì 1 marzo 2007, 15:31
Distribuzione: xubuntu 20.04 LTS x86_64 (l'unica)

Re: [Risolto] Anjuta: come collegare i widget creati con gla

Messaggio da wally67 »

ho contento per te!!!

comunque confermo: spesso i tutorial sono piuttosto nebulosi. ma tu a quali ti sei riferito?

wally 67
Se io do una moneta a te e tu una a me abbiamo entrambi 1 moneta;
ma se io do una idea a te e tu una a me abbiamo entrambi 2 idee.
Avatar utente
Dr_Berta
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1906
Iscrizione: domenica 31 luglio 2011, 12:37
Desktop: Gnome + Cairo Dock
Distribuzione: Ubuntu 20.04.x x86_64 LTS
Località: Carpi (MO)

Re: [Risolto] Anjuta: come collegare i widget creati con gla

Messaggio da Dr_Berta »

Ubuntu user #35116. Linux user #550996 - Il cervello è come un paracadute, funziona solo se si apre [Einstein]
wally67
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 699
Iscrizione: giovedì 1 marzo 2007, 15:31
Distribuzione: xubuntu 20.04 LTS x86_64 (l'unica)

Re: [Risolto] Anjuta: come collegare i widget creati con gla

Messaggio da wally67 »

ti ringrazio :ciao:

wally 67
Se io do una moneta a te e tu una a me abbiamo entrambi 1 moneta;
ma se io do una idea a te e tu una a me abbiamo entrambi 2 idee.
Scrivi risposta

Ritorna a “Applicazioni professionali”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti