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

  FORUM HardWare.fr
  Programmation

  [GTK] Utilisation d'une paned window widget

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[GTK] Utilisation d'une paned window widget

n°32043
Titoine42
Posté le 16-05-2001 à 00:33:42  profilanswer
 

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]

mood
Publicité
Posté le 16-05-2001 à 00:33:42  profilanswer
 

n°32353
Titoine42
Posté le 16-05-2001 à 19:35:19  profilanswer
 

:bounce:

n°32406
Titoine42
Posté le 17-05-2001 à 06:25:38  profilanswer
 

:cry:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [GTK] Utilisation d'une paned window widget

 

Sujets relatifs
[GTK] Recuperer le nom du radio button actif a partir d'une GList[C++] Utilisation d'une fonction d'une DLL ???
[GTK] comment passer des parametres multiples avec gtk_signal_connect[JAVA] Utilisation des APIs XML notemment DOM
Image sur un site : forcer la mise en cache et son utilisation ?[GTK] Afficher une image a partir d'un fichier
[VC++] remplacer la petite icône Window en haut à gauche d'une fenêtre[C++] Utilisation du port COM
Utilisation d'objets sous VC++Classe graphe en C++ et utilisation de STL
Plus de sujets relatifs à : [GTK] Utilisation d'une paned window widget


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR