[GTK] Utilisation d'une paned window widget

Utilisation d'une paned window widget [GTK] - Programmation

Marsh Posté le 16-05-2001 à 00:33:42    

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. :jap:

 

[edit]--Message édité par titoine42--[/edit]

Reply

Marsh Posté le 16-05-2001 à 00:33:42   

Reply

Marsh Posté le 16-05-2001 à 19:35:19    

:bounce:

Reply

Marsh Posté le 17-05-2001 à 06:25:38    

:cry:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed