/* Copyright (C) 2015 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, see <http://www.gnu.org/licenses/>.
 */

_CONFIGINCLUDE(giommconfig.h)

#include <glibmm/variant.h>
#include <glibmm/varianttype.h>

_DEFS(giomm,gio)
_PINCLUDE(glibmm/private/object_p.h)

#ifndef DOXYGEN_SHOULD_SKIP_THIS
typedef struct _GSettingsSchemaKey GSettingsSchemaKey;
#endif

namespace Gio
{

//TODO: Add some class documentation, though there is none in the C docs.

/** See SettingsSchema.
 *
 * @newin{2,32}
 */
class GIOMM_API SettingsSchemaKey final
{
  _CLASS_OPAQUE_REFCOUNTED(SettingsSchemaKey, GSettingsSchemaKey, NONE, g_settings_schema_key_ref, g_settings_schema_key_unref, GIOMM_API)

protected:
  _IGNORE(g_settings_schema_key_ref, g_settings_schema_key_unref)

  //Ignore internal GSettingsSchemaKey functions.
  _IGNORE(g_settings_schema_key_init, g_settings_schema_key_clear,
    g_settings_schema_key_type_check, g_settings_schema_key_range_fixup,
    g_settings_schema_key_get_translated_default, g_settings_schema_key_to_enum,
    g_settings_schema_key_from_enum, g_settings_schema_key_to_flags,
    g_settings_schema_key_from_flags)

public:
  _WRAP_METHOD(Glib::ustring get_name() const, g_settings_schema_key_get_name)
  _WRAP_METHOD(Glib::ustring get_summary() const, g_settings_schema_key_get_summary)
  _WRAP_METHOD(Glib::ustring get_description() const, g_settings_schema_key_get_description)

  _WRAP_METHOD(Glib::VariantType get_value_type() const, g_settings_schema_key_get_value_type)
  _WRAP_METHOD(Glib::VariantBase get_default_value() const, g_settings_schema_key_get_default_value)
  _WRAP_METHOD(Glib::VariantBase get_range() const, g_settings_schema_key_get_range)
  _WRAP_METHOD(bool range_check(const Glib::VariantBase& value) const, g_settings_schema_key_range_check)
};

} // namespace Gio
