// -*- c++ -*- // Generated by gmmproc 2.46.3 -- DO NOT MODIFY! #ifndef _GIOMM_INITABLE_H #define _GIOMM_INITABLE_H #include #include // -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 2 -*- /* Copyright (C) 2007 The giomm Development Team * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #ifndef DOXYGEN_SHOULD_SKIP_THIS typedef struct _GInitableIface GInitableIface; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ #ifndef DOXYGEN_SHOULD_SKIP_THIS typedef struct _GInitable GInitable; typedef struct _GInitableClass GInitableClass; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace Gio { class Initable_Class; } // namespace Gio #endif // DOXYGEN_SHOULD_SKIP_THIS namespace Gio { /** Failable object initialization interface * * Initable is implemented by objects that can fail during initialization. If * an object implements this interface the init() function must be called as the * first thing after construction. If init() is not called, or if it returns an * error, all further operations on the object should fail, generally with a * G_IO_ERROR_NOT_INITIALIZED error. * * Users of objects implementing this are not intended to use the interface * method directly, instead it will be used automatically in various ways. For C * applications you generally just call g_initable_new() directly, or indirectly * via a foo_thing_new() wrapper. This will call g_initable_init() under the * cover, returning NULL and setting a GError on failure. * * For bindings in languages where the native constructor supports exceptions * the binding could check for objects implemention GInitable during normal * construction and automatically initialize them, throwing an exception on * failure. * * @newin{2,24} */ class Initable : public Glib::Interface { #ifndef DOXYGEN_SHOULD_SKIP_THIS public: typedef Initable CppObjectType; typedef Initable_Class CppClassType; typedef GInitable BaseObjectType; typedef GInitableIface BaseClassType; // noncopyable Initable(const Initable&) = delete; Initable& operator=(const Initable&) = delete; private: friend class Initable_Class; static CppClassType initable_class_; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ protected: /** * You should derive from this class to use it. */ Initable(); #ifndef DOXYGEN_SHOULD_SKIP_THIS /** Called by constructors of derived classes. Provide the result of * the Class init() function to ensure that it is properly * initialized. * * @param interface_class The Class object for the derived type. */ explicit Initable(const Glib::Interface_Class& interface_class); public: // This is public so that C++ wrapper instances can be // created for C instances of unwrapped types. // For instance, if an unexpected C type implements the C interface. explicit Initable(GInitable* castitem); protected: #endif /* DOXYGEN_SHOULD_SKIP_THIS */ public: Initable(Initable&& src) noexcept; Initable& operator=(Initable&& src) noexcept; virtual ~Initable() noexcept; static void add_interface(GType gtype_implementer); /** Get the GType for this class, for use with the underlying GObject type system. */ static GType get_type() G_GNUC_CONST; #ifndef DOXYGEN_SHOULD_SKIP_THIS static GType get_base_type() G_GNUC_CONST; #endif ///Provides access to the underlying C GObject. GInitable* gobj() { return reinterpret_cast(gobject_); } ///Provides access to the underlying C GObject. const GInitable* gobj() const { return reinterpret_cast(gobject_); } private: protected: /** Initializes the object implementing the interface. * * The object must be initialized before any real use after initial * construction, either with this function or g_async_initable_init_async(). * * Implementations may also support cancellation. If @a cancellable is not 0, * then initialization can be cancelled by triggering the cancellable object * from another thread. If the operation was cancelled, the error * IO_ERROR_CANCELLED will be returned. If @a cancellable is not 0 and * the object doesn't support cancellable initialization the error * IO_ERROR_NOT_SUPPORTED will be returned. * * If the object is not initialized, or initialization returns with an * error, then all operations on the object except Glib::object_ref() and * Glib::object_unref() are considered to be invalid, and have undefined * behaviour. See the [introduction][ginitable] for more details. * * Implementations of this method must be idempotent, i.e. multiple calls * to this function with the same argument should return the same results. * Only the first call initializes the object, further calls return the result * of the first call. This is so that it's safe to implement the singleton * pattern in the GObject constructor function. * * @newin{2,22} * * @param cancellable Optional Cancellable object, 0 to ignore. * @return true if successful. If an error has occurred, this function will * return false and set @a error appropriately if present. */ void init(const Glib::RefPtr& cancellable); /// A init() convenience overload. void init(); virtual bool init_vfunc(const Glib::RefPtr& cancellable, GError** error); public: public: //C++ methods used to invoke GTK+ virtual functions: protected: //GTK+ Virtual Functions (override these to change behaviour): //Default Signal Handlers:: }; } // namespace Gio namespace Glib { /** A Glib::wrap() method for this object. * * @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. * * @relates Gio::Initable */ Glib::RefPtr wrap(GInitable* object, bool take_copy = false); } // namespace Glib #endif /* _GIOMM_INITABLE_H */