/* PIKA - Photo and Image Kooker Application
 * a rebranding of The GNU Image Manipulation Program (created with heckimp)
 * A derived work which may be trivial. However, any changes may be (C)2023 by Aldercone Studio
 *
 * Original copyright, applying to most contents (license remains unchanged): 
 * Copyright (C) 1995 Spencer Kimball and Peter Mattis
 *
 * pikawidgets-utils.h
 * Copyright (C) 1999-2003 Michael Natterer <mitch@gimp.org>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

#ifndef __APP_PIKA_WIDGETS_UTILS_H__
#define __APP_PIKA_WIDGETS_UTILS_H__


GtkWidget       * pika_menu_item_get_image         (GtkMenuItem          *item);
void              pika_menu_item_set_image         (GtkMenuItem          *item,
                                                    GtkWidget            *image,
                                                    PikaAction           *action);

void              pika_menu_position               (GtkMenu              *menu,
                                                    gint                 *x,
                                                    gint                 *y);
void              pika_grid_attach_icon            (GtkGrid              *grid,
                                                    gint                  row,
                                                    const gchar          *icon_name,
                                                    GtkWidget            *widget,
                                                    gint                  columns);
void              pika_enum_radio_box_add          (GtkBox               *box,
                                                    GtkWidget            *widget,
                                                    gint                  enum_value,
                                                    gboolean              below);
void              pika_enum_radio_frame_add        (GtkFrame             *frame,
                                                    GtkWidget            *widget,
                                                    gint                  enum_value,
                                                    gboolean              below);
GdkPixbuf       * pika_widget_load_icon            (GtkWidget            *widget,
                                                    const gchar          *icon_name,
                                                    gint                  size);
PikaTabStyle      pika_preview_tab_style_to_icon   (PikaTabStyle          tab_style);

const gchar     * pika_get_mod_string              (GdkModifierType       modifiers);
gchar           * pika_suggest_modifiers           (const gchar          *message,
                                                    GdkModifierType       modifiers,
                                                    const gchar          *extend_selection_format,
                                                    const gchar          *toggle_behavior_format,
                                                    const gchar          *alt_format);
PikaChannelOps    pika_modifiers_to_channel_op     (GdkModifierType       modifiers);
GdkModifierType   pika_replace_virtual_modifiers   (GdkModifierType       modifiers);
GdkModifierType   pika_get_primary_accelerator_mask(void);
GdkModifierType   pika_get_extend_selection_mask   (void);
GdkModifierType   pika_get_modify_selection_mask   (void);
GdkModifierType   pika_get_toggle_behavior_mask    (void);
GdkModifierType   pika_get_constrain_behavior_mask (void);
GdkModifierType   pika_get_all_modifiers_mask      (void);

void              pika_get_monitor_resolution      (GdkMonitor           *monitor,
                                                    gdouble              *xres,
                                                    gdouble              *yres);
gboolean          pika_get_style_color             (GtkWidget            *widget,
                                                    const gchar          *property_name,
                                                    GdkRGBA              *color);
void              pika_window_set_hint             (GtkWindow            *window,
                                                    PikaWindowHint        hint);
void              pika_window_set_transient_for    (GtkWindow            *window,
                                                    PikaProgress         *progress);
void          pika_window_set_transient_for_handle (GtkWindow            *window,
                                                    GBytes               *handle);
void              pika_widget_set_accel_help       (GtkWidget            *widget,
                                                    PikaAction           *action);

const gchar     * pika_get_message_icon_name       (PikaMessageSeverity   severity);
gboolean          pika_get_color_tag_color         (PikaColorTag          color_tag,
                                                    PikaRGB              *color,
                                                    gboolean              inherited);

void              pika_pango_layout_set_scale      (PangoLayout          *layout,
                                                    double                scale);
void              pika_pango_layout_set_weight     (PangoLayout          *layout,
                                                    PangoWeight           weight);

void              pika_highlight_widget            (GtkWidget            *widget,
                                                    gboolean              highlight,
                                                    GdkRectangle         *rect);
void              pika_widget_blink_rect           (GtkWidget            *widget,
                                                    GdkRectangle         *rect);
void              pika_widget_blink                (GtkWidget             *widget);
void              pika_widget_blink_cancel         (GtkWidget             *widget);

void              pika_blink_toolbox               (Pika                  *pika,
                                                    const gchar           *action_name,
                                                    GList               **blink_script);
void              pika_blink_dockable              (Pika                  *pika,
                                                    const gchar           *dockable_identifier,
                                                    const gchar           *widget_identifier,
                                                    const gchar           *settings_value,
                                                    GList               **blink_script);

void              pika_widget_script_blink         (GtkWidget            *widget,
                                                    const gchar          *widget_identifier,
                                                    GList               **blink_script);
void              pika_blink_play_script           (GList                *blink_script);


GtkWidget       * pika_dock_with_window_new        (PikaDialogFactory    *factory,
                                                    GdkMonitor           *monitor,
                                                    gboolean              toolbox);
GtkWidget       * pika_tools_get_tool_options_gui  (PikaToolOptions      *tool_options);
void              pika_tools_set_tool_options_gui  (PikaToolOptions      *tool_options,
                                                    GtkWidget            *widget);
void              pika_tools_set_tool_options_gui_func
                                                   (PikaToolOptions      *tool_options,
                                                    PikaToolOptionsGUIFunc func);

gboolean          pika_widget_get_fully_opaque     (GtkWidget            *widget);
void              pika_widget_set_fully_opaque     (GtkWidget            *widget,
                                                    gboolean              fully_opaque);

void              pika_gtk_container_clear         (GtkContainer         *container);

void              pika_button_set_suggested        (GtkWidget            *button,
                                                    gboolean              suggested,
                                                    GtkReliefStyle        default_relief);
void              pika_button_set_destructive      (GtkWidget            *button,
                                                    gboolean              destructive,
                                                    GtkReliefStyle        default_relief);

void              pika_gtk_adjustment_chain        (GtkAdjustment        *adjustment1,
                                                    GtkAdjustment        *adjustment2);

const gchar     * pika_print_event                 (const GdkEvent       *event);

gboolean          pika_color_profile_store_add_defaults
                                                   (PikaColorProfileStore *store,
                                                    PikaColorConfig       *config,
                                                    PikaImageBaseType      base_type,
                                                    PikaPrecision          precision,
                                                    GError               **error);

void              pika_color_profile_chooser_dialog_connect_path
                                                   (GtkWidget             *dialog,
                                                    GObject               *config,
                                                    const gchar           *property_name);

void              pika_widget_flush_expose         (void);

void              pika_make_valid_action_name      (gchar                 *action_name);

gchar           * pika_utils_make_canonical_menu_label (const gchar       *path);
gchar          ** pika_utils_break_menu_path           (const gchar       *path,
                                                        gchar            **mnemonic_path1,
                                                        gchar            **section_name);
gboolean          pika_utils_are_menu_path_identical   (const gchar       *path1,
                                                        const gchar       *path2,
                                                        gchar            **canonical_path1,
                                                        gchar            **mnemonic_path1,
                                                        gchar            **path1_section_name);

void              pika_window_set_title_bar_theme      (Pika              *pika,
                                                        GtkWidget         *dialog,
                                                        gboolean           is_main_window);


#endif /* __APP_PIKA_WIDGETS_UTILS_H__ */
