Paul Davis
c9f039a924
git-svn-id: svn://localhost/trunk/ardour2@78 d708f5d6-7413-0410-9779-e7cbd77b26cf
349 lines
10 KiB
C++
349 lines
10 KiB
C++
// -*- c++ -*-
|
|
// Generated by gtkmmproc -- DO NOT MODIFY!
|
|
#ifndef _LIBGLADEMM_XML_H
|
|
#define _LIBGLADEMM_XML_H
|
|
|
|
#include <glibmm.h>
|
|
|
|
/* $Id$ */
|
|
|
|
/* Copyright (C) 2002 The libglademm Development Team
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this library; if not, write to the Free
|
|
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
#include <gtkmm/container.h>
|
|
|
|
|
|
#ifndef DOXYGEN_SHOULD_SKIP_THIS
|
|
typedef struct _GladeXML GladeXML;
|
|
typedef struct _GladeXMLClass GladeXMLClass;
|
|
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
|
|
|
|
|
|
namespace Gnome
|
|
{
|
|
|
|
namespace Glade
|
|
{ class Xml_Class; } // namespace Glade
|
|
|
|
} // namespace Gnome
|
|
namespace Gnome
|
|
{
|
|
|
|
namespace Glade
|
|
{
|
|
|
|
class XmlError : public Glib::Exception
|
|
{
|
|
public:
|
|
explicit XmlError(const Glib::ustring& message);
|
|
virtual ~XmlError() throw();
|
|
|
|
XmlError(const XmlError& other);
|
|
XmlError& operator=(const XmlError& other);
|
|
|
|
virtual Glib::ustring what() const;
|
|
|
|
private:
|
|
Glib::ustring message_;
|
|
};
|
|
|
|
|
|
class Xml : public Glib::Object
|
|
{
|
|
|
|
#ifndef DOXYGEN_SHOULD_SKIP_THIS
|
|
|
|
public:
|
|
typedef Xml CppObjectType;
|
|
typedef Xml_Class CppClassType;
|
|
typedef GladeXML BaseObjectType;
|
|
typedef GladeXMLClass BaseClassType;
|
|
|
|
private: friend class Xml_Class;
|
|
static CppClassType xml_class_;
|
|
|
|
private:
|
|
// noncopyable
|
|
Xml(const Xml&);
|
|
Xml& operator=(const Xml&);
|
|
|
|
protected:
|
|
explicit Xml(const Glib::ConstructParams& construct_params);
|
|
explicit Xml(GladeXML* castitem);
|
|
|
|
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
|
|
|
|
public:
|
|
virtual ~Xml();
|
|
|
|
#ifndef DOXYGEN_SHOULD_SKIP_THIS
|
|
static GType get_type() G_GNUC_CONST;
|
|
static GType get_base_type() G_GNUC_CONST;
|
|
#endif
|
|
|
|
///Provides access to the underlying C GObject.
|
|
GladeXML* gobj() { return reinterpret_cast<GladeXML*>(gobject_); }
|
|
|
|
///Provides access to the underlying C GObject.
|
|
const GladeXML* gobj() const { return reinterpret_cast<GladeXML*>(gobject_); }
|
|
|
|
///Provides access to the underlying C instance. The caller is responsible for unrefing it. Use when directly setting fields in structs.
|
|
GladeXML* gobj_copy();
|
|
|
|
private:
|
|
|
|
|
|
//Ignore private glade_xml functions.
|
|
|
|
protected:
|
|
/** Loads a glade XML file.
|
|
* @throw XmlError
|
|
*/
|
|
Xml(const std::string& filename, const Glib::ustring& root, const Glib::ustring& domain);
|
|
|
|
/** Reads glade XML data from memory.
|
|
* @throw XmlError
|
|
*/
|
|
Xml(const char* buffer, int size, const Glib::ustring& root, const Glib::ustring& domain);
|
|
|
|
Gtk::Widget* get_widget_checked(const Glib::ustring& name, GType type);
|
|
GtkWidget* get_cwidget(const Glib::ustring& name);
|
|
|
|
public:
|
|
typedef Gnome::Glade::XmlError Error;
|
|
|
|
/** Loads a glade XML file.
|
|
* @throw XmlError
|
|
*/
|
|
static Glib::RefPtr<Xml> create(const std::string& filename,
|
|
const Glib::ustring& root = Glib::ustring(),
|
|
const Glib::ustring& domain = Glib::ustring());
|
|
|
|
/** Reads glade XML data from memory.
|
|
* @throw XmlError
|
|
*/
|
|
static Glib::RefPtr<Xml> create_from_buffer(const char* buffer, int size,
|
|
const Glib::ustring& root = Glib::ustring(),
|
|
const Glib::ustring& domain = Glib::ustring());
|
|
|
|
std::string get_filename() const;
|
|
|
|
//void glade_xml_signal_connect (GladeXML *self,
|
|
// const char *handlername,
|
|
// GCallback func);
|
|
//void glade_xml_signal_connect_data (GladeXML *self,
|
|
// const char *handlername,
|
|
// GCallback func,
|
|
// gpointer user_data);
|
|
//
|
|
//void glade_xml_signal_autoconnect (GladeXML *self);
|
|
//
|
|
//
|
|
//typedef void (*GladeXMLConnectFunc) (const gchar *handler_name,
|
|
// GObject *object,
|
|
// const gchar *signal_name,
|
|
// const gchar *signal_data,
|
|
// GObject *connect_object,
|
|
// gboolean after,
|
|
// gpointer user_data);
|
|
//
|
|
//
|
|
//void glade_xml_signal_connect_full (GladeXML *self,
|
|
// const gchar *handler_name,
|
|
// GladeXMLConnectFunc func,
|
|
// gpointer user_data);
|
|
//
|
|
//void glade_xml_signal_autoconnect_full (GladeXML *self,
|
|
// GladeXMLConnectFunc func,
|
|
// gpointer user_data);
|
|
//
|
|
//
|
|
/** Get a widget from the glade file.
|
|
* For instance:
|
|
* @code
|
|
* Gtk::Table* pTable = dynamic_cast<Gtk::Table*>(refXml->get_widget("mytable"));
|
|
* @endcode
|
|
* @param name The name of the widget.
|
|
* @return A pointer to the widget, or <tt>0</tt> on failure.
|
|
*/
|
|
|
|
Gtk::Widget* get_widget(const Glib::ustring& name);
|
|
|
|
/** This is for convenience.
|
|
* It allows for a shorter syntax with less repetition. For instance:
|
|
* @code
|
|
* Gtk::Table* pTable = 0;
|
|
* refXml->get_widget("mytable", pTable);
|
|
* @endcode
|
|
* This method prints a warning message to the console if the widget
|
|
* doesn't exist or has the wrong type, so you don't need to check that
|
|
* manually.
|
|
* @param name The name of the widget.
|
|
* @retval widget A pointer to the widget, or <tt>0</tt> on failure.
|
|
* @return The value of @a widget.
|
|
*/
|
|
template <class T_Widget> inline
|
|
T_Widget* get_widget(const Glib::ustring& name, T_Widget*& widget)
|
|
{
|
|
// The dynamic_cast<> should never fail if get_widget_checked() succeeded.
|
|
widget = dynamic_cast<T_Widget*>(this->get_widget_checked(name, T_Widget::get_base_type()));
|
|
|
|
if(!widget)
|
|
g_critical("Gnome::Glade::Xml::get_widget(): dynamic_cast<> failed.");
|
|
|
|
return widget;
|
|
}
|
|
|
|
/** This provides a pointer to a widget whose details are specified in the Glade file, but which is implemented
|
|
* by your own derived class. Your class must have a constructor like so:
|
|
* @code
|
|
* DerivedDialog::DerivedDialog(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade)
|
|
* : Gtk::Dialog(cobject) //Calls the base class constructor
|
|
* @endcode
|
|
*
|
|
* For instance:
|
|
* @code
|
|
* Gtk::DerivedBox* pBox = 0;
|
|
* refXml->get_widget_derived("mybox", pBox);
|
|
* @endcode
|
|
*
|
|
* @param name The name of the widget.
|
|
* @retval widget A pointer to the widget, or <tt>0</tt> on failure.
|
|
* @return The value of @a widget.
|
|
*/
|
|
template <class T_Widget> inline
|
|
T_Widget* get_widget_derived(const Glib::ustring& name, T_Widget*& widget)
|
|
{
|
|
// initialize input parameter
|
|
widget = 0;
|
|
|
|
// Get the widget from the glade file.
|
|
typedef typename T_Widget::BaseObjectType cwidget_type;
|
|
cwidget_type* pCWidget = (cwidget_type*)get_cwidget(name);
|
|
|
|
//The error was already reported by get_cwidget().
|
|
if(!pCWidget)
|
|
return 0;
|
|
|
|
//Check whether there is already a C++ wrapper instance associated with this C instance:
|
|
Glib::ObjectBase* pObjectBase = ObjectBase::_get_current_wrapper((GObject*)pCWidget);
|
|
|
|
//If there is already a C++ instance, then return it again:
|
|
if(pObjectBase)
|
|
{
|
|
widget = dynamic_cast<T_Widget*>( Glib::wrap((GtkWidget*)pCWidget) );
|
|
//Newer, more spec-complaint, versions of g++ not resolve a specific wrap() function in a template.
|
|
|
|
//The dynamic cast checks that it is of the correct type.
|
|
//Somebody might be trying to call get_widget_derived() after already calling get_widget(),
|
|
//or after already calling get_widget_derived() with a different derived C++ type.
|
|
if(!widget)
|
|
g_critical("Gnome::Glade::Xml::get_widget_derived(): dynamic_cast<> failed. An existing C++ instance, of a different type, seems to exist.");
|
|
}
|
|
else
|
|
{
|
|
//Create a new C++ instance to wrap the existing C instance:
|
|
|
|
//Set the output variable. We needed to do this because we can not template the return type.
|
|
Glib::RefPtr<Gnome::Glade::Xml> refThis(this);
|
|
refThis->reference(); //take a copy.
|
|
widget = new T_Widget(pCWidget, refThis);
|
|
}
|
|
|
|
//We return it as well (we need the parameter as well, because C++ can not just template the return type.)
|
|
return widget;
|
|
}
|
|
|
|
|
|
Glib::ListHandle<Gtk::Widget*> get_widget_prefix(const Glib::ustring& name);
|
|
|
|
///Take the widget from the glade-generated container and put it in another container.
|
|
void reparent_widget(const Glib::ustring& name, Gtk::Container& container);
|
|
|
|
|
|
std::string relative_file(const std::string& filename) const;
|
|
|
|
|
|
static Glib::ustring get_widget_name(Gtk::Widget& widget);
|
|
|
|
static Glib::RefPtr<Xml> get_widget_tree(Gtk::Widget& widget);
|
|
|
|
|
|
/** Connect a Gtk::Button's clicked signal or a Gtk::MenuItem's activated signal to a slot.
|
|
*
|
|
* For instance:
|
|
* @code
|
|
* refXml->connect_button("button", sigc::mem_fun(*this, &ExampleWindow::on_button_clicked) );
|
|
* @endcode
|
|
*
|
|
* @param name The name of the widget.
|
|
* @param pslot The slot to connect to.
|
|
*/
|
|
void connect_clicked(const Glib::ustring& name, const sigc::slot<void>& slot_);
|
|
|
|
|
|
///* interface for changing the custom widget handling */
|
|
//typedef GtkWidget *(* GladeXMLCustomWidgetHandler) (GladeXML *xml,
|
|
// gchar *func_name,
|
|
// gchar *name,
|
|
// gchar *string1,
|
|
// gchar *string2,
|
|
// gint int1,
|
|
// gint int2,
|
|
// gpointer user_data);
|
|
|
|
//void glade_set_custom_handler(GladeXMLCustomWidgetHandler handler,
|
|
// gpointer user_data);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
virtual GType lookup_type_vfunc(const Glib::ustring& classname);
|
|
|
|
|
|
public:
|
|
|
|
public:
|
|
//C++ methods used to invoke GTK+ virtual functions:
|
|
|
|
protected:
|
|
//GTK+ Virtual Functions (override these to change behaviour):
|
|
|
|
//Default Signal Handlers::
|
|
|
|
|
|
};
|
|
|
|
} // namespace Glade
|
|
} // namespace Gnome
|
|
|
|
|
|
namespace Glib
|
|
{
|
|
/** @relates Gnome::Glade::Xml
|
|
* @param object The C instance
|
|
* @param take_copy False if the result should take ownership of the C instance. True if it should take a new copy or ref.
|
|
* @result A C++ instance that wraps this C instance.
|
|
*/
|
|
Glib::RefPtr<Gnome::Glade::Xml> wrap(GladeXML* object, bool take_copy = false);
|
|
}
|
|
|
|
|
|
#endif /* _LIBGLADEMM_XML_H */
|
|
|