Contexte : affichage d'un monde, de ses ressources et des joueurs presents pour une sorte de jeu de strategie/role
J'ai un tableau de boutons representant chacune des unites de terrain de mon monde qui est stocké dans la partie gauche de ma widget.
Je voudrais dans ma fonction de callback faire apparaitre dans la partie droite de ma paned window widget la liste des elements presents sur cette unite de terrain avec une icone pour chaque élément de ma liste, ainsi que la quantité.
La question est la suivante : quel type de widget dois-je utiliser pour faire une telle liste et comment rafraichir cette liste dans mon callback de bouton?
Voici le code actuel (je sais il est porc mais je mettrais ça au propre plus tard) :
#include "server.h"
#include <gtk.h>
#include <gdk.h>
#include <gtk/gtk.h>
#include <gdk/gdkprivate.h>
void callback(GtkButton *w, GdkEventButton *event, t_tile *tile)
{
tile->drone = NULL;
aff_tile(tile);
fprintf(stdout, " Drone(s) informations are not displayed.\n" );
}
void aff_world_X(int argc, char **argv)
{
GtkWidget *main_window;
GtkWidget *window_container;
GtkWidget *left_window;
GtkWidget *right_window;
GtkWidget *table;
GtkWidget **img;
GtkWidget **button;
GtkStyle *style;
GdkPixmap *empty;
GdkPixmap *object;
GdkPixmap *drone;
GdkPixmap *both;
int i;
t_tile *tile_tmp;
/* initialisation */
gtk_init(NULL, NULL);
/* creation de la fenetre principale */
main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (main_window), "ZappyBibicy" );
/* creation du tableau */
left_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
table = gtk_table_new(WIDTH, HEIGHT, TRUE);
button = malloc(sizeof (GtkWidget *) * WIDTH * HEIGHT);
img = malloc(sizeof (GtkWidget *) * WIDTH * HEIGHT);
style = gtk_widget_get_style(left_window);
empty = gdk_pixmap_create_from_xpm(left_window->window, NULL, NULL, (const gchar *)"empty.xpm" );
object = gdk_pixmap_create_from_xpm(left_window->window, NULL, NULL, (const gchar *)"object.xpm" );
drone = gdk_pixmap_create_from_xpm(left_window->window, NULL, NULL, (const gchar *)"drone.xpm" );
both = gdk_pixmap_create_from_xpm(left_window->window, NULL, NULL, (const gchar *)"both.xpm" );
tile_tmp = tiles;
i = 0;
while (tile_tmp)
{
button[i] = gtk_button_new();
if ((tile_tmp->object) && (tile_tmp->drone))
img[i] = gtk_pixmap_new(both, NULL);
else if (!(tile_tmp->object) && (tile_tmp->drone))
img[i] = gtk_pixmap_new(drone, NULL);
else if ((tile_tmp->object) && !(tile_tmp->drone))
img[i] = gtk_pixmap_new(object, NULL);
else if (!(tile_tmp->object) && !(tile_tmp->drone))
img[i] = gtk_pixmap_new(empty, NULL);
gtk_table_attach_defaults((GtkTable *)table, button[i], (i % WIDTH),
(i % WIDTH) + 1, (i / WIDTH), (i / WIDTH) + 1);
gtk_container_add(GTK_CONTAINER(button[i]), img[i]);
gtk_widget_show(img[i]);
gtk_widget_show(button[i]);
gtk_signal_connect(GTK_OBJECT(button[i]), "button_press_event", callback, tile_tmp);
tile_tmp = tile_tmp->next;
i++;
}
/* gtk_container_add(GTK_CONTAINER(left_window), table);*/
/* creation de la fenetre de droite */
right_window = gtk_button_new();
/* creation de la fenetre contenant les deux sous-fenetres et ajout a la fenetre principale */
window_container = gtk_hpaned_new ();
gtk_container_add(GTK_CONTAINER(main_window), window_container);
gtk_paned_set_handle_size (GTK_PANED(window_container), 10);
gtk_paned_set_gutter_size (GTK_PANED(window_container), 15);
gtk_paned_add1(GTK_PANED(window_container), table);
gtk_paned_add2(GTK_PANED(window_container), right_window);
gtk_widget_show(table);
gtk_widget_show (window_container);
/* gtk_widget_show(left_window);*/
gtk_widget_show(right_window);
gtk_widget_show(main_window);
gtk_main();
}
Merci d'avance pour votre aide.
[edit]--Message édité par titoine42--[/edit]