// -*- c++ -*-
// Generated by gtkmmproc -- DO NOT MODIFY!
#ifndef _GTKMM_RC_H
#define _GTKMM_RC_H

#include <glibmm.h>

/* $Id: rc.hg,v 1.25 2003/05/02 16:00:27 murrayc Exp $ */

/* Copyright (C) 1998-2002 The gtkmm 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/settings.h>
#include <gtkmm/style.h>


#ifndef DOXYGEN_SHOULD_SKIP_THIS
typedef struct _GtkRcStyle GtkRcStyle;
typedef struct _GtkRcStyleClass GtkRcStyleClass;
#endif /* DOXYGEN_SHOULD_SKIP_THIS */


namespace Gtk
{ class RcStyle_Class; } // namespace Gtk
namespace Gtk
{

class Widget;
class Settings;
class Style;


/** @addtogroup gtkmmEnums Enums and Flags */

/**
 * @ingroup gtkmmEnums
 * @par Bitwise operators:
 * <tt>%RcFlags operator|(RcFlags, RcFlags)</tt><br>
 * <tt>%RcFlags operator&(RcFlags, RcFlags)</tt><br>
 * <tt>%RcFlags operator^(RcFlags, RcFlags)</tt><br>
 * <tt>%RcFlags operator~(RcFlags)</tt><br>
 * <tt>%RcFlags& operator|=(RcFlags&, RcFlags)</tt><br>
 * <tt>%RcFlags& operator&=(RcFlags&, RcFlags)</tt><br>
 * <tt>%RcFlags& operator^=(RcFlags&, RcFlags)</tt><br>
 */
enum RcFlags
{
  RC_FG = 1 << 0,
  RC_BG = 1 << 1,
  RC_TEXT = 1 << 2,
  RC_BASE = 1 << 3
};

/** @ingroup gtkmmEnums */
inline RcFlags operator|(RcFlags lhs, RcFlags rhs)
  { return static_cast<RcFlags>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs)); }

/** @ingroup gtkmmEnums */
inline RcFlags operator&(RcFlags lhs, RcFlags rhs)
  { return static_cast<RcFlags>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs)); }

/** @ingroup gtkmmEnums */
inline RcFlags operator^(RcFlags lhs, RcFlags rhs)
  { return static_cast<RcFlags>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs)); }

/** @ingroup gtkmmEnums */
inline RcFlags operator~(RcFlags flags)
  { return static_cast<RcFlags>(~static_cast<unsigned>(flags)); }

/** @ingroup gtkmmEnums */
inline RcFlags& operator|=(RcFlags& lhs, RcFlags rhs)
  { return (lhs = static_cast<RcFlags>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs))); }

/** @ingroup gtkmmEnums */
inline RcFlags& operator&=(RcFlags& lhs, RcFlags rhs)
  { return (lhs = static_cast<RcFlags>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs))); }

/** @ingroup gtkmmEnums */
inline RcFlags& operator^=(RcFlags& lhs, RcFlags rhs)
  { return (lhs = static_cast<RcFlags>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs))); }

} // namespace Gtk


#ifndef DOXYGEN_SHOULD_SKIP_THIS
namespace Glib
{

template <>
class Value<Gtk::RcFlags> : public Glib::Value_Flags<Gtk::RcFlags>
{
public:
  static GType value_type() G_GNUC_CONST;
};

} // namespace Glib
#endif /* DOXYGEN_SHOULD_SKIP_THIS */


namespace Gtk
{


class RcStyle : public Glib::Object
{
  
#ifndef DOXYGEN_SHOULD_SKIP_THIS

public:
  typedef RcStyle CppObjectType;
  typedef RcStyle_Class CppClassType;
  typedef GtkRcStyle BaseObjectType;
  typedef GtkRcStyleClass BaseClassType;

private:  friend class RcStyle_Class;
  static CppClassType rcstyle_class_;

private:
  // noncopyable
  RcStyle(const RcStyle&);
  RcStyle& operator=(const RcStyle&);

protected:
  explicit RcStyle(const Glib::ConstructParams& construct_params);
  explicit RcStyle(GtkRcStyle* castitem);

#endif /* DOXYGEN_SHOULD_SKIP_THIS */

public:
  virtual ~RcStyle();

#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.
  GtkRcStyle*       gobj()       { return reinterpret_cast<GtkRcStyle*>(gobject_); }

  ///Provides access to the underlying C GObject.
  const GtkRcStyle* gobj() const { return reinterpret_cast<GtkRcStyle*>(gobject_); }

  GtkRcStyle* gobj_copy();

private:

  
protected:
  RcStyle();

public:
  
  static Glib::RefPtr<RcStyle> create();

  
  /** Makes a copy of the specified Gtk::RcStyle. This function
   * will correctly copy an RC style that is a member of a class
   * derived from Gtk::RcStyle.
   * @return The resulting Gtk::RcStyle.
   */
  Glib::RefPtr<RcStyle> copy() const;

  void set_name(const Glib::ustring& name);
  Glib::ustring get_name() const;

  void set_bg_pixmap_name(Gtk::StateType state, const Glib::ustring& name);
  Glib::ustring get_bg_pixmap_name(Gtk::StateType state) const;

  void set_font(const Pango::FontDescription& font_desc);
  Pango::FontDescription get_font() const;
 
  void set_color_flags(Gtk::StateType state, RcFlags flags);
  void unset_color_flags(Gtk::StateType state, RcFlags flags);
  RcFlags get_color_flags(Gtk::StateType state) const;

  void set_fg(Gtk::StateType state, const Gdk::Color& color);
  Gdk::Color get_fg(Gtk::StateType state) const;

  void set_bg(Gtk::StateType state, const Gdk::Color& color);
  Gdk::Color get_bg(Gtk::StateType state) const;

  void set_text(Gtk::StateType state, const Gdk::Color& color);
  Gdk::Color get_text(Gtk::StateType state) const;

  void set_base(Gtk::StateType state, const Gdk::Color& color);
  Gdk::Color get_base(Gtk::StateType state) const;


  void set_xthickness(int xthickness);
  int get_xthickness() const;

  void set_ythickness(int ythickness);
  int get_ythickness() const;


public:

public:
  //C++ methods used to invoke GTK+ virtual functions:

protected:
  //GTK+ Virtual Functions (override these to change behaviour):

  //Default Signal Handlers::


};


class RC
{
public:
  RC(const Glib::ustring& filename);

  static Glib::RefPtr<Style> get_style(const Widget& widget);

  static void parse_string(const Glib::ustring &rc_string);
  
  static void add_default_file(const Glib::ustring& filename);
  static void set_default_files(const Glib::StringArrayHandle& filenames);

  static Glib::StringArrayHandle get_default_files();

  // deprecated:
  //static void add_widget_name_style(const Glib::RefPtr<const RcStyle>& style, const Glib::ustring& pattern);
  //static void add_widget_class_style(const Glib::RefPtr<const RcStyle>& style, const Glib::ustring& pattern);
  //static void add_class_style(const Glib::RefPtr<const RcStyle>& style, const Glib::ustring& pattern);

  static bool reparse_all();

  static Glib::ustring find_pixmap_in_path(const Glib::RefPtr<Settings>& settings, GScanner* scanner, const Glib::ustring& pixmap_file);
  static Glib::ustring find_module_in_path(const Glib::ustring& pixmap_file);

  static Glib::ustring get_theme_dir();
  static Glib::ustring get_module_dir();
  
};

} // namespace Gtk


namespace Glib
{
  /** @relates Gtk::RcStyle */
  Glib::RefPtr<Gtk::RcStyle> wrap(GtkRcStyle* object, bool take_copy = false);
}


#endif /* _GTKMM_RC_H */

