Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Général Développement > Programmation Linux > GTK

GTK Vos questions sur GTK sous Linux

Réponse
 
Outils de la discussion
Vieux 09/11/2008, 11h32   #1 (permalink)
Candidat au titre de Membre du Club
 
Date d'inscription: décembre 2006
Âge: 25
Messages: 28
Par défaut [gtkmm] encapsulation d'objet dans un treeview

Bonjour

Dans mon appli, j'ai un treeview qui représente une arborescence de fichier.

Afin d'acceder facilement aux infos des fichiers et pouvoir les utiliser, je voudrais associer chaque fichier avec un objet Gio::File.
La manière la plus évidente me parait d'encapsuler les references aux fichiers dans le TreeStore :
Code :
typedef Glib::RefPtr<Gio::File> FileRef_t;
 
class FileTreeColumns
:	public Gtk::TreeModel::ColumnRecord
{
public:
	FileTreeColumns() { add(file); }
 
	Gtk::TreeModelColumn<FileRef_t> file;
};
Ce code compile et s'execute, mais je ne sais pas comment gérer le rendu du nom du fichier (avec appel à File::get_basename() )
Pour l'instant à l'execution j'ai plein d'erreurs "GLib-GObject-WARNING **: unable to set property `text' of type `gchararray' from value of type `GFile'"

Merci de votre aide.
Si par ailleurs cette stratégie est vraiment mauvaise, merci de me le dire

Rémi

Dernière modification par remitbo ; 09/11/2008 à 17h52
remitbo est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 17h49   #2 (permalink)
Candidat au titre de Membre du Club
 
Date d'inscription: décembre 2006
Âge: 25
Messages: 28
Par défaut

J'ai trouvé. C'est pas compliqué mais il fallait y penser : il faut ajouter un champs de colonne qu'on affiche pas. Le champs existe, donc on peux retrouver son objet, il n'est pas affiché, du coup Gtk ne cherche pas après et ne soulève pas d'erreur.

Voici une partie de mon code :
Code :
typedef Glib::RefPtr<Gio::File > FileRef_t;
 
class FileTreeModel
:	public Gtk::TreeStore
{
public:
	FileTreeModel();
	virtual ~FileTreeModel();
 
	class FileTreeColumns
	:	public Gtk::TreeModel::ColumnRecord
	{
	public:
		FileTreeColumns()
		{ add(name); add(file); }
 
		Gtk::TreeModelColumn<string> name;
		Gtk::TreeModelColumn<FileRef_t> file;
	};
 
	const FileTreeColumns& columns() const
		{ return _columns; }
 
	
private:
	FileTreeColumns	_columns;
};
 
 
// on definit les colonne comme suit :
	_tree_view.append_column("Name", _model->columns().name);
	// ne pas appeler append_column pour _model->columns().file
 
 
// on ajoute des fichiers comme suit (à partir de FileTreeModel) :
	FileRef_t file = Gio::File::create_for_path(pathStr);
	Gtk::TreeModel::Row row = *(append());
	row[_columns.name] = file->get_basename();
	row[_columns.file] = file;
on peut ensuite reprendre le fichier à partir des objets Row dans n'importe quel callback

J'espère que ça peux aider certains
Rémi
remitbo est déconnecté   Envoyer un message privé Réponse avec citation
NEWS GTK+FAQ GTK+TUTORIELS GTK+SOURCES GTK+BIBLIOTHEQUESLIVRES GTK+OUTILS GTK+BLOG

Réponse

Précédent   Forum des développeurs > Général Développement > Programmation Linux > GTK



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide


Fuseau horaire GMT +1. Il est actuellement 03h52.


Publiez vos articles, tutoriels et cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter
Copyright 2000-2009 www.developpez.com - Legal informations