Newsgroup: it.comp.os.linux.development
Titolo: Front end con Gtk

Ciao a tutto il newsgroup
Passo subito al mio problema.
Programmo un po' in C (livello molto amatoriale) sopratutto in "ambito"
di calcolo numerico (matematica) ma un po' per passione un po' per
necessita' avevo deciso di arricchire la mia preparazione usando
librerie grafiche... alla fine ho optato per le Gtk. Premetto che sto
incominciando a dare uno sguardo a tutta la documentazione fondamentale
(copiosa) ma volevo una dritta per favorire l'entusiasmo :-)
Ho creato una finestra con un bottone e un oggetto per l'inserimento di 
testi (GtkEntry)... volevo fare in modo che alla pressione del bottone 
venga creato un file in /home/user che ha come nome quello inserito come 
testo... chiaro? :)
Dovrei usare la funzione system() del C?
CIAO e GRAZIE
--
** Linux User : #179148 ***********************
* Principio di Shaw                           *
* Fai un programma che anche un idiota puo'   *
* usare, e soltanto un idiota vorra' usarlo.  *
********************** Linux Machine: #99282 **

Dovrei usare la funzione
system() del C?
Senza aver la pretesa di emulare Vanni ... ;-)
Basta una fopen() o una open(). La dovrai chiamare all'interno del gestore
dell'evento "button_press" (in gtk dovrebbe chiamarsi cosi`) ed il nome del
file dovrai prenderlo con una gtk_entry_get_text() dall'entry che ti sei
definito.
Puoi provare ad utilizzare Glade per farti generare
automaticamente i widget, i connect degli eventi ai gestori, ed i template
di quest'ultimi.
Ma perche` non provi i meccanismi in modo piu`
semplice, tipo di fai stampare "Hallo World" sullo stderr?
Ciao, Sandro.
--------------------------------
Inviato via 
http://usenet.iol.it
 

 Dovrei usare la funzione system() del C?
Dovresti studiarti un po' anche le funzioni di libreria standard. :)
Si`, puoi usare system() per richiamare il comando touch e creare il
file, oppuure puoi creare le funzioni di libreria stdio o della libc
per creare il file.
Puoi fare una callback sul bottone a cui passi il puntatore della
GtkEntry, da cui poi lui si prende il valore e crea il file.
Bye.

 GtkEntry, da cui poi lui si prende il valore e crea il file.
Chiaro :)
Vedo di "creare" qualcosa...
Grazie :)
--
Scusate Outlook... sto usando un altro pc :(



Innanzitutto che versione di GTK+ sta usando? Io posso parlare per la
versione 1.2 che conosco abbastanza in profondità.
Per gestire l'I/O su file userei le funzioni del C standard (open,close,
read e write se vuole usare un I/O non bufferizzato, oppure fopen,
fclose, fprintf e sorelle per l'I/O bufferizzato. La seconda soluzione è
più potente).
Per usare la directory utente leggerei il contenuto della variabile di
sistema HOME con la systemcall getenv e poi accoderei il contenuto della
GtkEntry.
Per sicurezza abiliterei l'uso del bottone solo dal momento in cui la
GtkEntry contiene 1 o più caratteri.
In pratica, supponendo che la GtkEntry contenga la stringa "pippo"
alla pressione del tasto implementerei la funzione callback.
Il parametro della funzione è il puntatore alla GtkEntry.
void salva_file(GtkButton *bottone, gpointer data)
{
  gchar *home_dir;
  gchar *nome_file;
  gchar *nome_file_completo;
  FILE  *filep;
  /* Controllo la correttezza del parametro */
  g_return_if_fail( data!=NULL );
  g_return_if_fail( GTK_IS_ENTRY(data) );
  /* Leggo la dir, home. Utilizzo la memoria dinamica */
  home_dir = g_strdup( getenv("HOME") );
  /* Leggo il nome del file */
  nome_file = gtk_editable_get_chars( GTK_EDITABLE(data), 0, -1 );
  /* Compongo il nome del file completo */
  nome_file_completo = g_strconcat(home_dir, "/", nome_file, NULL);
  /* Salvo il file su disco */
  filep = fopen(nome_file_completo, "wt");
 
  /* controllo l'avvenuta apertura del file: filep!=NULL */
  g_return_if_fail( filep!=NULL );
  /***********
   * Qui scrivo qualcosa nel file tramite fwrite o fprintf
   ***********/
  /* Chiudo il file */
  fclose( filep );
  /* Distruggo le stringhe allocate dinamicamente */
  g_free(home_dir);
  g_free(nome_file);
  g_free(nome_file_completo);
}
Il programma è stato testato.
Ciao ciao.
	Mauro