Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3232 connectés 

 


Dernière réponse
Sujet : [GTK] Utilisation d'une paned window widget
Titoine42 :cry:

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Titoine42 :cry:
Titoine42 :bounce:
Titoine42 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]


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)