Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/04/2008, à 09:27

Mathieu11

Gnome-applet et grep ou cat

Bonjour,
Je cherche un applet pour le tableau de bord qui afficherait le contenu d'un fichier texte qui se trouve dans mon home (le contenu de ce fichier change regulierement).
Quelqu'un sait ou je pourrais en trouver un ?
Sinon pouvez-vous m'orienter vers une ebauche d'applet faisant quelque chose de similaire pour que j'essaye d'en tirer quelque chose ?
Merci


Vostro 1400

Hors ligne

#2 Le 26/04/2008, à 10:07

obiwankennedy

Re : Gnome-applet et grep ou cat

Dans la constante File tu mets le chemin de ton fichier.
Enfaite mon applet, affiche la ligne d'un fichier en fonction du jour de l'année. (le fichier est constitué de 4 colonnes donc je mets chaque colonne dans un label).
donc en activant la mise à jour, il recalcule le jour et tout et tout.
je pense que c'est bonne base pour ce que tu veux faire.

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <panel-applet.h>
#include <gtk/gtk.h>
#include <glib.h>

#define TAILLE 179
#define FILE "/home/user/dossier/fichier"

typedef struct
{
		GtkWidget *label;
        GtkWidget *label1;
        GtkWidget *label2;
        GtkWidget *label3;
        GtkWidget *boite;
        GIOChannel* from;
        gchar* str_return;
        GTimeVal temps;
        GDate date;
        guint doy;
        guint i;
       PanelApplet* applet;
}verbs;



static void myexample_applet_properties_dialog (BonoboUIComponent *uic,gpointer _myverbs,const char *cname) 
{
	printf("je suis dans le truc %s \n",cname);
	guint i =0;

	verbs *myverbs=(verbs *)_myverbs;
 	g_get_current_time(&(*myverbs).temps);
    g_date_set_time_val(&(myverbs->date),&(myverbs->temps));
    myverbs->doy=g_date_get_day_of_year(&(myverbs->date));
    myverbs->doy=myverbs->doy%TAILLE;


    if(myverbs->from!=NULL)
    {	
    	myverbs->from= g_io_channel_new_file(FILE,"r",NULL);
		
            while((g_io_channel_read_line(myverbs->from,&(myverbs->str_return),NULL,NULL,NULL)==G_IO_STATUS_NORMAL)&&(i!=myverbs->doy))
                {
                   i++;
                }
            //myverbs->boite = gtk_hbox_new(FALSE,4); 
            
			gtk_label_set_label(GTK_LABEL(myverbs->label),strtok(myverbs->str_return,"\t"));
    	   	gtk_label_set_label(GTK_LABEL(myverbs->label1),strtok(NULL,"\t"));
			gtk_label_set_label(GTK_LABEL(myverbs->label2),strtok(NULL,"\t"));
			gtk_label_set_label(GTK_LABEL(myverbs->label3),strtok(NULL,"\n"));
			
			gtk_box_pack_start(GTK_BOX(myverbs->boite), myverbs->label, FALSE, FALSE, 2);
			gtk_box_pack_start(GTK_BOX(myverbs->boite), myverbs->label1, FALSE, FALSE, 2);
			gtk_box_pack_start(GTK_BOX(myverbs->boite), myverbs->label2, FALSE, FALSE,2);
			gtk_box_pack_start(GTK_BOX(myverbs->boite),myverbs->label3, FALSE, FALSE, 2);
				
			   /* Affichage de la boite de message */
    			//gtk_dialog_run(GTK_DIALOG(pAbout));

   			 /* Destruction de la boite de message */
   			gtk_container_add (GTK_CONTAINER (myverbs->applet), myverbs->boite);
   			//	 gtk_container_add (GTK_CONTAINER (uic), myverbs->boite);
			gtk_widget_show_all (GTK_WIDGET (myverbs->applet));
				//gtk_widget_show_all (GTK_WIDGET (uic));

	}
	
}
static const char Context_menu_xml [] =
	   "<popup name=\"button3\">\n"
	   "   <menuitem name=\"Properties Item\" "
	   "             verb=\"ExampleProperties\" "
	   "           _label=\"_Mise à jour\"\n"
	   "          pixtype=\"stock\" "
	   "          pixname=\"gtk-refresh\"/>\n"
	   "</popup>\n";


static BonoboUIVerb myexample_menu_verbs [] = {
	        BONOBO_UI_VERB ("ExampleProperties",myexample_applet_properties_dialog),
	        BONOBO_UI_VERB_END
	};
	
static gboolean
myexample_applet_fill (PanelApplet *applet,
   const gchar *iid,
   gpointer data)
{
	guint i=0;
	verbs* myverbs=g_malloc(sizeof(verbs));

	myverbs->str_return=NULL;


	

	if (strcmp (iid, "OAFIID:ExampleApplet") != 0)
		return FALSE;

	myverbs->str_return =g_malloc(100);

	myverbs->boite = gtk_hbox_new(FALSE,4); 
	
	myverbs->from= g_io_channel_new_file(FILE,"r",NULL);
	g_get_current_time(&(myverbs->temps));
	myverbs->applet=applet;
	g_date_set_time_val(&(myverbs->date),&(myverbs->temps));
 	myverbs->doy=g_date_get_day_of_year(&(myverbs->date));
	myverbs->doy=myverbs->doy%TAILLE;
	printf("je suis dans le truc %d \n",myverbs->doy);   	

	if(myverbs->from!=NULL)
	{
		printf("je suis dans le truc %s \n",myverbs->str_return);
		while((g_io_channel_read_line(myverbs->from,&(myverbs->str_return),NULL,NULL,NULL)==G_IO_STATUS_NORMAL)&&(i!=myverbs->doy))
		{
			printf("je suis dans le truc %s \n",myverbs->str_return);  
			i++;
		}
		printf("je suis dans le truc %s \n",myverbs->str_return);   	
	myverbs->label = gtk_label_new (strtok(myverbs->str_return,"\t"));
	myverbs->label1 = gtk_label_new (strtok(NULL,"\t"));
	myverbs->label2 = gtk_label_new(strtok(NULL,"\t"));
	myverbs->label3 = gtk_label_new (strtok(NULL,"\n"));

	gtk_box_pack_start(GTK_BOX(myverbs->boite), myverbs->label, FALSE, FALSE, 2);
	gtk_box_pack_start(GTK_BOX(myverbs->boite), myverbs->label1, FALSE, FALSE, 2);
	gtk_box_pack_start(GTK_BOX(myverbs->boite), myverbs->label2, FALSE, FALSE,2);
	gtk_box_pack_start(GTK_BOX(myverbs->boite),myverbs->label3, FALSE, FALSE, 2);
	
	panel_applet_setup_menu (PANEL_APPLET (applet),
                         Context_menu_xml,
                         myexample_menu_verbs,
	                      myverbs);

	gtk_container_add (GTK_CONTAINER (applet), myverbs->boite);

	gtk_widget_show_all (GTK_WIDGET (applet));

	}
	
	
	return TRUE;
}

PANEL_APPLET_BONOBO_FACTORY ("OAFIID:ExampleApplet_Factory",
                             PANEL_TYPE_APPLET,
                             "The Hello World Applet",
                             "0",
                             myexample_applet_fill,
                             NULL);

Dernière modification par obiwankennedy (Le 26/04/2008, à 10:08)


Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam

Hors ligne

#3 Le 26/04/2008, à 10:43

Mathieu11

Re : Gnome-applet et grep ou cat

Merci.
En fait je n'y comprends pas grand chose alors peut etre pourras-tu m' eclairer.
En fait j'ecris le titre de la chanson en cours dans listen dans un fichier texte et le nom de l'artiste dans un autre fichier texte (via un script qui se reactualise regulierement).
Ensuite je voudrais afficher dans le tableau de bord un texte comme
Artiste - Chanson
C'est possible avec un applet comme le tien ?

Dernière modification par Mathieu11 (Le 26/04/2008, à 10:43)


Vostro 1400

Hors ligne

#4 Le 26/04/2008, à 13:31

obiwankennedy

Re : Gnome-applet et grep ou cat

oui après quelques modifications c'est possible.
c'est même plus simple que ce que je fais.

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <panel-applet.h>
#include <gtk/gtk.h>
#include <glib.h>

#define TITRE "/home/user/dossier/titre"
#define ARTISTE "/home/user/dossier/artiste"



static const char Context_menu_xml [] =
       "<popup name=\"button3\">\n"
       "   <menuitem name=\"Properties Item\" "
       "             verb=\"ExampleProperties\" "
       "           _label=\"_Mise à jour\"\n"
       "          pixtype=\"stock\" "
       "          pixname=\"gtk-refresh\"/>\n"
       "</popup>\n";


static BonoboUIVerb myexample_menu_verbs [] = {
            BONOBO_UI_VERB ("ExampleProperties",myexample_applet_properties_dialog),
            BONOBO_UI_VERB_END
    };
    
static gboolean
myexample_applet_fill (PanelApplet *applet,
   const gchar *iid, 
   gpointer data)
{
    guint i=0;


GtkWidget *boite;
GIOChannel* artiste;
GIOChannel* titre;
    gchar* tmp;

gchar* concat;
    if (strcmp (iid, "OAFIID:ExampleApplet") != 0)
        return FALSE;


tmp =g_malloc(100);
concat =g_malloc(100);

      boite = gtk_hbox_new(FALSE,1); 
    
   fileartiste = g_io_channel_new_file(ARTISTE,"r",NULL);
    filetitre = g_io_channel_new_file(TITRE,"r",NULL);
 
    if(fileartiste!=NULL)
    {

          g_io_channel_read_line(fileartiste,&(concat),NULL,NULL,NULL);
          g_io_channel_read_line(filetitre,&(tmp),NULL,NULL,NULL);
   
       strcat(concat,tmp);//ici prevoir l'ajout de " - " entre les chaines pour séparer le titre et l'artiste
          
    myverbs->label = gtk_label_new (concat);

    gtk_box_pack_start(GTK_BOX(boite), label, FALSE, FALSE, 2);

    
    panel_applet_setup_menu (PANEL_APPLET (applet),
                         Context_menu_xml,
                         myexample_menu_verbs,
                          myverbs);

    gtk_container_add (GTK_CONTAINER (applet), boite);

    gtk_widget_show_all (GTK_WIDGET (applet));

    }
    
    
    return TRUE;
}

PANEL_APPLET_BONOBO_FACTORY ("OAFIID:ExampleApplet_Factory",
                             PANEL_TYPE_APPLET,
                             "The Hello World Applet",
                             "0",
                             myexample_applet_fill,
                             NULL);

bon voila une solution non testée et non compilé, normalement elle doit etre capable de charger le titre et l'artiste et l'afficher apres pour gerer la mise a jour en continue il vaut mieux passer par des signaux des truc comme ça.


Tu peux aller sur ce site http://renaudguezennec.homelinux.org/index,2,3-8.html
il y a un tuto pour faire un applet Gnome c'est surement bien que tu essaies d'en faire un simple en suivant l'exemple du tuto puis de le personnaliser pour s'adapter a tes besoins.

Dernière modification par obiwankennedy (Le 26/04/2008, à 13:36)


Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam

Hors ligne