/* LIBPIKA - The PIKA Library
 * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
 *
 * pikawidgets.h
 * Copyright (C) 2000 Michael Natterer <mitch@gimp.org>
 *
 * 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 3 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/>.
 */

#ifndef __PIKA_WIDGETS_H__
#define __PIKA_WIDGETS_H__

#define __PIKA_WIDGETS_H_INSIDE__

#include <libpikawidgets/pikawidgetstypes.h>

#include <libpikawidgets/pikabrowser.h>
#include <libpikawidgets/pikabusybox.h>
#include <libpikawidgets/pikabutton.h>
#include <libpikawidgets/pikacairo-utils.h>
#include <libpikawidgets/pikacellrenderercolor.h>
#include <libpikawidgets/pikacellrenderertoggle.h>
#include <libpikawidgets/pikachainbutton.h>
#include <libpikawidgets/pikacolorarea.h>
#include <libpikawidgets/pikacolorbutton.h>
#include <libpikawidgets/pikacolordisplay.h>
#include <libpikawidgets/pikacolordisplaystack.h>
#include <libpikawidgets/pikacolorhexentry.h>
#include <libpikawidgets/pikacolornotebook.h>
#include <libpikawidgets/pikacolorprofilechooserdialog.h>
#include <libpikawidgets/pikacolorprofilecombobox.h>
#include <libpikawidgets/pikacolorprofilestore.h>
#include <libpikawidgets/pikacolorprofileview.h>
#include <libpikawidgets/pikacolorscale.h>
#include <libpikawidgets/pikacolorscaleentry.h>
#include <libpikawidgets/pikacolorscales.h>
#include <libpikawidgets/pikacolorselector.h>
#include <libpikawidgets/pikacolorselect.h>
#include <libpikawidgets/pikacolorselection.h>
#include <libpikawidgets/pikadialog.h>
#include <libpikawidgets/pikaenumcombobox.h>
#include <libpikawidgets/pikaenumlabel.h>
#include <libpikawidgets/pikaenumstore.h>
#include <libpikawidgets/pikaenumwidgets.h>
#include <libpikawidgets/pikafileentry.h>
#include <libpikawidgets/pikaframe.h>
#include <libpikawidgets/pikahelpui.h>
#include <libpikawidgets/pikahintbox.h>
#include <libpikawidgets/pikaicons.h>
#include <libpikawidgets/pikaintcombobox.h>
#include <libpikawidgets/pikaintradioframe.h>
#include <libpikawidgets/pikaintstore.h>
#include <libpikawidgets/pikalabelcolor.h>
#include <libpikawidgets/pikalabeled.h>
#include <libpikawidgets/pikalabelentry.h>
#include <libpikawidgets/pikalabelintwidget.h>
#include <libpikawidgets/pikalabelspin.h>
#include <libpikawidgets/pikalabelstringwidget.h>
#include <libpikawidgets/pikamemsizeentry.h>
#include <libpikawidgets/pikanumberpairentry.h>
#include <libpikawidgets/pikaoffsetarea.h>
#include <libpikawidgets/pikapageselector.h>
#include <libpikawidgets/pikapatheditor.h>
#include <libpikawidgets/pikapickbutton.h>
#include <libpikawidgets/pikapreview.h>
#include <libpikawidgets/pikapreviewarea.h>
#include <libpikawidgets/pikapropwidgets.h>
#include <libpikawidgets/pikaquerybox.h>
#include <libpikawidgets/pikaruler.h>
#include <libpikawidgets/pikascaleentry.h>
#include <libpikawidgets/pikascrolledpreview.h>
#include <libpikawidgets/pikasizeentry.h>
#include <libpikawidgets/pikaspinbutton.h>
#include <libpikawidgets/pikaspinscale.h>
#include <libpikawidgets/pikastringcombobox.h>
#include <libpikawidgets/pikaunitcombobox.h>
#include <libpikawidgets/pikaunitstore.h>
#include <libpikawidgets/pikawidgets-error.h>
#include <libpikawidgets/pikawidgetsutils.h>
#include <libpikawidgets/pikazoommodel.h>

#undef __PIKA_WIDGETS_H_INSIDE__

G_BEGIN_DECLS

/* For information look into the C source or the html documentation */


/*
 *  Widget Constructors
 */

/* specify radio buttons as va_list:
 *  const gchar  *label,
 *  gint          item_data,
 *  GtkWidget   **widget_ptr,
 */
GtkWidget * pika_int_radio_group_new (gboolean          in_frame,
                                      const gchar      *frame_title,
                                      GCallback         radio_button_callback,
                                      gpointer          radio_button_callback_data,
                                      GDestroyNotify    radio_button_callback_destroy,
                                      gint              initial, /* item_data */
                                      ...) G_GNUC_NULL_TERMINATED;

void        pika_int_radio_group_set_active (GtkRadioButton *radio_button,
                                             gint            item_data);


/**
 * PIKA_RANDOM_SEED_SPINBUTTON:
 * @hbox: The #GtkBox returned by pika_random_seed_new().
 *
 * Returns: the random_seed's #GtkSpinButton.
 **/
#define PIKA_RANDOM_SEED_SPINBUTTON(hbox) \
        (g_object_get_data (G_OBJECT (hbox), "spinbutton"))

/**
 * PIKA_RANDOM_SEED_SPINBUTTON_ADJ:
 * @hbox: The #GtkBox returned by pika_random_seed_new().
 *
 * Returns: the #GtkAdjustment of the random_seed's #GtkSpinButton.
 **/
#define PIKA_RANDOM_SEED_SPINBUTTON_ADJ(hbox)       \
        gtk_spin_button_get_adjustment \
        (GTK_SPIN_BUTTON (g_object_get_data (G_OBJECT (hbox), "spinbutton")))

/**
 * PIKA_RANDOM_SEED_TOGGLE:
 * @hbox: The #GtkBox returned by pika_random_seed_new().
 *
 * Returns: the random_seed's #GtkToggleButton.
 **/
#define PIKA_RANDOM_SEED_TOGGLE(hbox) \
        (g_object_get_data (G_OBJECT(hbox), "toggle"))

GtkWidget * pika_random_seed_new   (guint32            *seed,
                                    gboolean           *random_seed);

/**
 * PIKA_COORDINATES_CHAINBUTTON:
 * @sizeentry: The #PikaSizeEntry returned by pika_coordinates_new().
 *
 * Returns: the #PikaChainButton which is attached to the
 *          #PikaSizeEntry.
 **/
#define PIKA_COORDINATES_CHAINBUTTON(sizeentry) \
        (g_object_get_data (G_OBJECT (sizeentry), "chainbutton"))

GtkWidget * pika_coordinates_new   (PikaUnit            unit,
                                    const gchar        *unit_format,
                                    gboolean            menu_show_pixels,
                                    gboolean            menu_show_percent,
                                    gint                spinbutton_width,
                                    PikaSizeEntryUpdatePolicy  update_policy,

                                    gboolean            chainbutton_active,
                                    gboolean            chain_constrains_ratio,

                                    const gchar        *xlabel,
                                    gdouble             x,
                                    gdouble             xres,
                                    gdouble             lower_boundary_x,
                                    gdouble             upper_boundary_x,
                                    gdouble             xsize_0,   /* % */
                                    gdouble             xsize_100, /* % */

                                    const gchar        *ylabel,
                                    gdouble             y,
                                    gdouble             yres,
                                    gdouble             lower_boundary_y,
                                    gdouble             upper_boundary_y,
                                    gdouble             ysize_0,   /* % */
                                    gdouble             ysize_100  /* % */);


/*
 *  Standard Callbacks
 */

void pika_toggle_button_update           (GtkWidget       *widget,
                                          gpointer         data);

void pika_radio_button_update            (GtkWidget       *widget,
                                          gpointer         data);

void pika_int_adjustment_update          (GtkAdjustment   *adjustment,
                                          gpointer         data);

void pika_uint_adjustment_update         (GtkAdjustment   *adjustment,
                                          gpointer         data);

void pika_float_adjustment_update        (GtkAdjustment   *adjustment,
                                          gpointer         data);

void pika_double_adjustment_update       (GtkAdjustment   *adjustment,
                                          gpointer         data);


G_END_DECLS

#endif /* __PIKA_WIDGETS_H__ */
