Re: Glade XML and TreeView



Here is all of the code that I have been using to try and achieve this.
It's already pretty simple, as I never really have gotten anywhere since
I cannot seem to figure out how to get anything to be filled into the
TreeView widget.  

On Sun, 2008-02-17 at 14:29 -0600, Jonathon Jongsma wrote:
> On Sun, 2008-02-17 at 12:28 -0500, Ryan Lovelett wrote:
> > 
> > Hello,
> > 
> > I subscribed to this mailing list last week in hopes of seeing
> > something similar asked and solved so I could apply it to my project.
> > I didn't so here is my question.
> > 
> > I'm creating a TreeView from within Glade 3 (so I'm getting an XML
> > file).  I load and display the designed UI just fine from my
> > kit.run(*MainDialog) call.  Now, I want to start adding stuff to the
> > TreeView at runtime (in otherwords user input data, etc).  So I've set
> > up the ModelColumns as described in
> > (http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/chapter-treeview.html#sec-treeview-model).  They display just fine and I see my column headings.  Superb!
> > 
> > Now my problem.  If I am to understand how you add new columns you
> > call:
> > 
> > Gtk::TreeModel::Row row = *(instanceofTreeModel->append());
> > row[ModelColumnInstance.col] = "TextToDisplay";
> > 
> > Super, but nothing ever gets displayed on the screen after appending
> > the new information to the TreeStore.  If I put that call before my
> > kit.run(*MainDialog); it displays the information as expected.  It's
> > almost like the TreeView widget needs to be re-drawn on screen for the
> > data to show.  Is there some call that needs to be made that forces
> > the re-draw of the TreeView?  Also, if you need and or want to see the
> > full code just ask.
> 
> I think that in order to make any informed recommendations we'd need to
> see some code.  If possible, the code sample should be as simple as
> possible (and in paring down your example to a simple test case, you
> might even find the problem somewhere)

Attachment: browse.glade
Description: application/glade

#ifndef INTERFACE_H_INCLUDED
#define INTERFACE_H_INCLUDED

#include <gtkmm.h>

//	Tree model columns for the display of the data for a given repository
class ModelColumns : public Gtk::TreeModel::ColumnRecord {

	public:
		ModelColumns();

		Gtk::TreeModelColumn<Glib::ustring> file_name;
		Gtk::TreeModelColumn<Glib::ustring> file_ext;
		Gtk::TreeModelColumn<int> revision;
		Gtk::TreeModelColumn<Glib::ustring> author;
		Gtk::TreeModelColumn<Glib::ustring> size;
		Gtk::TreeModelColumn<Glib::ustring> date;
		Gtk::TreeModelColumn<bool> locked;
};

/**
*	Default constructor for the ModelColumns object.
*	Adds the m_col_id and m_col_name members to the ColumnRecord
*/
ModelColumns::ModelColumns() {
	add(file_name);
	add(file_ext);
	add(revision);
	add(author);
	add(size);
	add(date);
	add(locked);
}

ModelColumns m_Columns;
Glib::RefPtr<Gtk::TreeStore> m_refTreeModel;

#endif // INTERFACE_H_INCLUDED
#include <libglademm/xml.h>
#include <gtkmm.h>
#include <iostream>
#include <interface.h>

#define REPO_BROWSER_LOCATION "browse.glade"
#define REPO_BROWSER_NAME "RepoBrowser"
#define REPO_TREEVIEW_NAME "revision_treeview"

Gtk::Window* MainDialog = 0;
Gtk::TreeView* revTreeView = 0;

void on_button_clicked() {
	if(MainDialog)
		MainDialog->hide(); //hide() will cause main::run() to end.
}

/**
*	This method loads the Glade file that describes the browse application dialog.
*	Then assigns handlers for all the signals created by a user.
*/
int main (int argc, char **argv) {

	Gtk::Main kit(argc, argv);

	//Load the Glade file and instiate its widgets:
	Glib::RefPtr<Gnome::Glade::Xml> refXml;

	#ifdef GLIBMM_EXCEPTIONS_ENABLED
	try {
		refXml = Gnome::Glade::Xml::create(REPO_BROWSER_LOCATION);
	} catch(const Gnome::Glade::XmlError& ex) {
		std::cerr << ex.what() << std::endl;
		return 1;
	}
	#else
	std::auto_ptr<Gnome::Glade::XmlError> error;
	refXml = Gnome::Glade::Xml::create(REPO_BROWSER_LOCATION, "", "", error);

	if(error.get()) {
		std::cerr << error->what() << std::endl;
		return 1;
	}
	#endif

	//Get the Glade-instantiated Dialog:
	refXml->get_widget(REPO_BROWSER_NAME, MainDialog);

	if(MainDialog) {
		//Get the Glade-instantiated Button, and connect a signal handler:
		Gtk::Button* pButton = 0;
		refXml->get_widget("ok_button", pButton);

		if(pButton) {
			pButton->signal_clicked().connect( sigc::ptr_fun(on_button_clicked) );
		}

		refXml->get_widget(REPO_TREEVIEW_NAME, revTreeView);

		//Create the Tree model:
		m_refTreeModel = Gtk::TreeStore::create(m_Columns);
		revTreeView->set_model(m_refTreeModel);

		revTreeView->append_column("File", m_Columns.file_name);
		revTreeView->append_column("Extension", m_Columns.file_ext);
		revTreeView->append_column("Revision", m_Columns.revision);
		revTreeView->append_column("Author", m_Columns.author);
		revTreeView->append_column("Size", m_Columns.size);
		revTreeView->append_column("Date", m_Columns.date);
		revTreeView->append_column("Locked", m_Columns.locked);

		kit.run(*MainDialog);
	}

	Gtk::TreeModel::Row row = *(m_refTreeModel->append());
	row[m_Columns.file_name] = "file name";
	row[m_Columns.file_ext] = "dir";

	MainDialog->show_all_children(true);

	return 0;
}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]