Re: (proposal for) source code generator



Amadeus W.M. wrote:
<...>
Would this be feasible? Any xml experts willing to try this?


Because the real main window comes out of refXml as a Gtk::Window *. That (and not MainWindowGUI) is the window that contains all the widgets and with all the properties you defined in glade. You don't have to pack the child widgets, nor to set properties of the window in your code (like glade-- does). I guess libglademm does that behind the scene when parsing the .glade file. Someone correct me if I'm wrong. At least the code I posted shows you don't have to pack the child widgets. Of course, you can derive MainWindowGUI from Gtk::Window, but it's not going to be the main window. To use the main window you still need to get it via refXml.

Just a proof of concept - test.xslt can be used together with a glade-file to generate the skeleton code. Might even compile...

gtkmm-list mailing list
gtkmm-list gnome org
http://mail.gnome.org/mailman/listinfo/gtkmm-list

#include "simple.h"

#include <libglademm/xml.h>

#include <gtkmm/main.h>
#include <gtkmm/window.h>

#include <cstdlib>


int main(int argc, char * argv[])
{
#if defined(ENABLE_NLS)
	bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
	bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
	textdomain (GETTEXT_PACKAGE);
#endif //ENABLE_NLS

	Gtk::Main m(argc, argv);

	Glib::RefPtr<Gnome::Glade::Xml> interface = Gnome::Glade::Xml::create("simple.glade");

	MainWindow * window;

	interface->get_widget_derived("MainWindow", window);

	if( window )
	{
		m.run(*window);
	}

	return EXIT_SUCCESS;
}

Attachment: simple.glade
Description: application/glade

#ifndef __XSLT_GLADE_CODE_H__
#define __XSLT_GLADE_CODE_H__

#include <libglademm/xml.h>

#include <gtkmm/box.h>
#include <gtkmm/button.h>
#include <gtkmm/fixed.h>
#include <gtkmm/menu.h>
#include <gtkmm/menubar.h>
#include <gtkmm/statusbar.h>
#include <gtkmm/window.h>



class MainWindow : public Gtk::Window
{
public:
	/// Constructor
	MainWindow(BaseObjectType * cobject, const Glib::RefPtr <Gnome::Glade::Xml> & ref_glade) : Gtk::Window(cobject)
	{ 
		m_vbox1 = dynamic_cast<Gtk::VBox*>(ref_glade->get_widget("vbox1")); 
		m_menubar1 = dynamic_cast<Gtk::MenuBar*>(ref_glade->get_widget("menubar1")); 
		m_menuitem1 = dynamic_cast<Gtk::MenuItem*>(ref_glade->get_widget("menuitem1")); 
		m_menu1 = dynamic_cast<Gtk::Menu*>(ref_glade->get_widget("menu1")); 
		m_imagemenuitem1 = dynamic_cast<Gtk::ImageMenuItem*>(ref_glade->get_widget("imagemenuitem1")); 
		m_imagemenuitem2 = dynamic_cast<Gtk::ImageMenuItem*>(ref_glade->get_widget("imagemenuitem2")); 
		m_imagemenuitem3 = dynamic_cast<Gtk::ImageMenuItem*>(ref_glade->get_widget("imagemenuitem3")); 
		m_imagemenuitem4 = dynamic_cast<Gtk::ImageMenuItem*>(ref_glade->get_widget("imagemenuitem4")); 
		m_separatormenuitem1 = dynamic_cast<Gtk::SeparatorMenuItem*>(ref_glade->get_widget("separatormenuitem1")); 
		m_imagemenuitem5 = dynamic_cast<Gtk::ImageMenuItem*>(ref_glade->get_widget("imagemenuitem5")); 
		m_menuitem2 = dynamic_cast<Gtk::MenuItem*>(ref_glade->get_widget("menuitem2")); 
		m_menu2 = dynamic_cast<Gtk::Menu*>(ref_glade->get_widget("menu2")); 
		m_imagemenuitem6 = dynamic_cast<Gtk::ImageMenuItem*>(ref_glade->get_widget("imagemenuitem6")); 
		m_imagemenuitem7 = dynamic_cast<Gtk::ImageMenuItem*>(ref_glade->get_widget("imagemenuitem7")); 
		m_imagemenuitem8 = dynamic_cast<Gtk::ImageMenuItem*>(ref_glade->get_widget("imagemenuitem8")); 
		m_imagemenuitem9 = dynamic_cast<Gtk::ImageMenuItem*>(ref_glade->get_widget("imagemenuitem9")); 
		m_menuitem3 = dynamic_cast<Gtk::MenuItem*>(ref_glade->get_widget("menuitem3")); 
		m_menuitem4 = dynamic_cast<Gtk::MenuItem*>(ref_glade->get_widget("menuitem4")); 
		m_menu3 = dynamic_cast<Gtk::Menu*>(ref_glade->get_widget("menu3")); 
		m_imagemenuitem10 = dynamic_cast<Gtk::ImageMenuItem*>(ref_glade->get_widget("imagemenuitem10")); 
		m_fixed1 = dynamic_cast<Gtk::Fixed*>(ref_glade->get_widget("fixed1")); 
		m_TestButton = dynamic_cast<Gtk::Button*>(ref_glade->get_widget("TestButton")); 
		m_statusbar1 = dynamic_cast<Gtk::Statusbar*>(ref_glade->get_widget("statusbar1")); 
	}

protected:
	Gtk::VBox * m_vbox1;
	Gtk::MenuBar * m_menubar1;
	Gtk::MenuItem * m_menuitem1;
	Gtk::Menu * m_menu1;
	Gtk::ImageMenuItem * m_imagemenuitem1;
	Gtk::ImageMenuItem * m_imagemenuitem2;
	Gtk::ImageMenuItem * m_imagemenuitem3;
	Gtk::ImageMenuItem * m_imagemenuitem4;
	Gtk::SeparatorMenuItem * m_separatormenuitem1;
	Gtk::ImageMenuItem * m_imagemenuitem5;
	Gtk::MenuItem * m_menuitem2;
	Gtk::Menu * m_menu2;
	Gtk::ImageMenuItem * m_imagemenuitem6;
	Gtk::ImageMenuItem * m_imagemenuitem7;
	Gtk::ImageMenuItem * m_imagemenuitem8;
	Gtk::ImageMenuItem * m_imagemenuitem9;
	Gtk::MenuItem * m_menuitem3;
	Gtk::MenuItem * m_menuitem4;
	Gtk::Menu * m_menu3;
	Gtk::ImageMenuItem * m_imagemenuitem10;
	Gtk::Fixed * m_fixed1;
	Gtk::Button * m_TestButton;
	Gtk::Statusbar * m_statusbar1;
	
};



#endif // __XSLT_GLADE_CODE_H__

Attachment: test.xslt
Description: application/xml



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