Précédent   Forum des professionnels en informatique > Général Développement > Programmation système > Linux > GTK
GTK Vos questions sur GTK sous Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/12/2011, 12h05   #1
Invité de passage
 
Homme Michel Delorme
sans
Inscription : novembre 2011
Messages : 4
Détails du profil
Informations personnelles :
Nom : Homme Michel Delorme
Localisation : France, Saône et Loire (Bourgogne)

Informations professionnelles :
Activité : sans

Informations forums :
Inscription : novembre 2011
Messages : 4
Points : 0
Points : 0
Par défaut Afficher la fin d'un gtk_tree_view au chargement

Impossible d'initialiser l'affichage d'une liste par la dernière page dans un gtk_tree_view.

Le programme de test affiche 50 lignes, je voudrais que la fenêtre liste les dernières lignes à l'ouverture.

Autre question liée: volume limite de gtk_list_store et gtk_tree_view ?
Comment le détecter ?

Merci d'avance.

Si vous souhaitez voir (ou utiliser) mon logiciel de comptabilité
Téléchargement à cette page:
http://www.pouillyfuisse-delorme.com/mdcpt/cc.html
Fichiers attachés
Type de fichier : c listviewderpag.c (3,4 Ko, 3 affichages)
pap71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 22h46   #2
Membre éclairé
 
Inscription : janvier 2007
Messages : 329
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 329
Points : 328
Points : 328
Bonjour,

J'ai pas regardé en détails (je m'y connais presque rien en C) mais globalement tu sembles tenir le bon bout avec l'ajustement.

Le problème est qu'il faut que le widget ait d'abord été affiché pour pouvoir utiliser correctement les limites de l'ajustement, sinon le programme ne connait pas les dimensions exactet du treeview. Tu peux te connecter au signal 'realize' avec g_signal_connect_after() pour détecter la fin de l'affichage et faire le saut en fin de treeview.

Concernant les limites, je n'ai pas trouvé d'indication donc je pense que ça se rapporte au moins à un entier 32 bits, soit 4 milliards et des brouettes. À vérifier...


-
monnomamoi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 11h02   #3
Invité de passage
 
Homme Michel Delorme
sans
Inscription : novembre 2011
Messages : 4
Détails du profil
Informations personnelles :
Nom : Homme Michel Delorme
Localisation : France, Saône et Loire (Bourgogne)

Informations professionnelles :
Activité : sans

Informations forums :
Inscription : novembre 2011
Messages : 4
Points : 0
Points : 0
Par défaut [RESOLU en partie] Afficher la fin d'un gtk_tree_view au chargement

monnomamoi
Bingo tu as parfaitement raison, il faut afficher la fenêtre avant d'accéder à l'ajustement. Grand merci.
Lignes modifiées de mon pgm de test listviewderpag.c avec beaucoup de lignes supprimées car inutiles.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
    /* Ajout de la vue a la fenetre */
GtkAdjustment *vadj;
//GtkObject *vadjo;
// (gdouble value, lower, upper, step_increment, page_increment, page_size);
//vadjo = gtk_adjustment_new(0, 0, 256, 1, 10, 16);
//pScrollbar = gtk_scrolled_window_new(NULL,GTK_ADJUSTMENT (vadjo));
    pScrollbar = gtk_scrolled_window_new(NULL, NULL);
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(pScrollbar),
        GTK_POLICY_AUTOMATIC,
        GTK_POLICY_AUTOMATIC);
    gtk_container_add(GTK_CONTAINER(pWindow), pScrollbar);
    gtk_container_add(GTK_CONTAINER(pScrollbar), pListView);
 
    gtk_widget_show_all(pWindow); // avant l'acces a l'adjustement
 
// affiche derniere page
double dd,ddu,ddps;
vadj = gtk_scrolled_window_get_vadjustment((GtkScrolledWindow*) pScrollbar);
ddu = GTK_ADJUSTMENT(vadj)->upper;
ddps = GTK_ADJUSTMENT(vadj)->page_size;
dd = GTK_ADJUSTMENT(vadj)->upper - GTK_ADJUSTMENT(vadj)->page_size;
printf(" ddu=%lf ddps=%lf dd=%lf\n",ddu, ddps, dd);
gtk_adjustment_set_value(GTK_ADJUSTMENT(vadj),dd);
gtk_scrolled_window_set_vadjustment((GtkScrolledWindow*) pScrollbar,(GtkAdjustment*) vadj);
//gtk_adjustment_value_changed (GTK_ADJUSTMENT(vadj)); 
 
//    gtk_widget_show_all(pWindow); deplacer avant l'acces a l'adjustement
Pour les limites je pensais mémoire.
j'ai mis 50000 lignes à mon prog de test, sans protestation de ma machine.
Elles semblent toutes accessibles.

Par contre pour revenir au problème de la dernière page, je n'ai pas réussis à le faire accepter à mon logiciel pour le moment.

J'ai une fenêtre contenant
--> une vbox contenant
------> un notebook contenant
--------------> La scrollwindow contenant la listview
J'affiche tout
Je récupère bien le widget de la scrollwindow mais avec un adjustement nul.

Si je le fais dans un signal il ne se déclanche pas.
test de :
Code :
1
2
3
4
g_signal_connect_after(G_OBJECT(fenetre), "realize", G_CALLBACK(finlist), NULL);
g_signal_connect_after(G_OBJECT(notebook), "realize", G_CALLBACK(finlist), NULL);
g_signal_connect_after(G_OBJECT(scrollwindow), "realize", G_CALLBACK(finlist), NULL);
g_signal_connect_after(G_OBJECT(notebook), "focus-tab", G_CALLBACK(finlist), NULL);
pap71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 22h20   #4
Membre éclairé
 
Inscription : janvier 2007
Messages : 329
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 329
Points : 328
Points : 328
En python, j'arrive à avoir le comportement souhaité :
Code python :
1
2
3
4
5
6
7
def ev_realize(tv):
    va = tv.get_vadjustment()
    u = va.get_upper()
    va.set_value(u)
    return
 
mylistview.connect('realize', ev_realize)

Essaie de faire la connexion comme cela :
gtk_signal_connect(GTK_OBJECT(pListView), "realize", G_CALLBACK(finlist), NULL); .

Au passage, la ligne 25 de ton code me semble inutile.
monnomamoi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h09.


 
 
 
 
Partenaires

Hébergement Web