/* Copyright (C) 2012 The gtkmm 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 <https://www.gnu.org/licenses/>.
 */

_DEFS(gtkmm,gtk)
_CONFIGINCLUDE(gtkmmconfig.h)
_IS_DEPRECATED // The entire file is deprecated.

#include <glibmm/interface.h>
#include <gtkmm/enums.h> //For Orientation.
#include <gdkmm/rgba.h>

_PINCLUDE(glibmm/private/interface_p.h)

#m4 _PUSH(SECTION_CC_PRE_INCLUDES)
#undef GTK_DISABLE_DEPRECATED
#define GDK_DISABLE_DEPRECATION_WARNINGS 1
#m4 _POP()

#ifndef DOXYGEN_SHOULD_SKIP_THIS
extern "C"
{
typedef struct _GtkColorChooserInterface GtkColorChooserInterface;
}
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

namespace Gtk
{

/** This interface can be implemented by widgets which allow the user to choose
 * a color. Depending on the situation, colors may be
 * allowed to have alpha (translucency).
 * The main widgets that implement this interface are ColorChooserWidget, ColorChooserDialog
 * and ColorChooserButton.
 *
 * @newin{3,4}
 * @deprecated 4.10: Use Gtk::ColorDialog and Gtk::ColorDialogButton
 *   instead of widgets implementing %Gtk::ColorChooser.
 */
class GTKMM_API ColorChooser : public Glib::Interface
{
  _CLASS_INTERFACE(ColorChooser, GtkColorChooser, GTK_COLOR_CHOOSER, GtkColorChooserInterface, , , GTKMM_API)

public:
  /** Gets the currently selected color.
   * @return The currently selected color.
   * @newin{3,4}
   */
  Gdk::RGBA get_rgba() const;
  _IGNORE(gtk_color_chooser_get_rgba)

  _WRAP_METHOD(void set_rgba(const Gdk::RGBA& color), gtk_color_chooser_set_rgba)
  _WRAP_METHOD(bool get_use_alpha() const, gtk_color_chooser_get_use_alpha)
  _WRAP_METHOD(void set_use_alpha(bool use_alpha = true), gtk_color_chooser_set_use_alpha)

 /** Adds a palette to the color chooser. If @a orientation is horizontal,
  * the colors are grouped in rows, with @a colors_per_line colors
  * in each row. If @a orientation is vertical, the colors are grouped
  * in columns instead.
  *
  * The default color palette of ColorChooserWidget has
  * 27 colors, organized in columns of 3 colors. The default gray
  * palette has 9 grays in a single row.
  *
  * The layout of the color chooser widget works best when the
  * palettes have 9-10 columns.
  *
  * Calling this function for the first time has the
  * side effect of removing the default color and gray palettes
  * from the color chooser.
  *
  * @param orientation Orientation::HORIZONTAL if the palette should be displayed in rows, or Orientation::VERTICAL for columns
  * @param colors_per_line The number of colors to show in each row/column.
  * @param colors The colors of the palette.
  *
  * @newin{3,4}
  */
  void add_palette(Orientation orientation, int colors_per_line, const std::vector<Gdk::RGBA>& colors);
  _IGNORE(gtk_color_chooser_add_palette)

#m4 _CONVERSION(`const GdkRGBA*',`const Gdk::RGBA&',`Glib::wrap(const_cast<GdkRGBA*>($3), true)')
//#m4 _CONVERSION(`const Gdk::RGBA&',`const GdkRGBA*',`const_cast<GdkRGBA*>(($3).gobj())')
  _WRAP_SIGNAL(void color_activated(const Gdk::RGBA& color), "color-activated")

  _WRAP_PROPERTY("rgba", Gdk::RGBA)
  _WRAP_PROPERTY("use-alpha", bool)
};

} // namespace Gtk
