/* 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
 *
 * 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 __PIKA_IMAGE_UNDO_PUSH_H__
#define __PIKA_IMAGE_UNDO_PUSH_H__


/*  image undos  */

PikaUndo * pika_image_undo_push_image_type          (PikaImage     *image,
                                                     const gchar   *undo_desc);
PikaUndo * pika_image_undo_push_image_precision     (PikaImage     *image,
                                                     const gchar   *undo_desc);
PikaUndo * pika_image_undo_push_image_size          (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     gint           previous_origin_x,
                                                     gint           previous_origin_y,
                                                     gint           previous_width,
                                                     gint           prevoius_height);
PikaUndo * pika_image_undo_push_image_resolution    (PikaImage     *image,
                                                     const gchar   *undo_desc);
PikaUndo * pika_image_undo_push_image_grid          (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaGrid      *grid);
PikaUndo * pika_image_undo_push_image_colormap      (PikaImage     *image,
                                                     const gchar   *undo_desc);
PikaUndo * pika_image_undo_push_image_hidden_profile(PikaImage     *image,
                                                     const gchar   *undo_desc);
PikaUndo * pika_image_undo_push_image_metadata      (PikaImage     *image,
                                                     const gchar   *undo_desc);
PikaUndo * pika_image_undo_push_image_parasite      (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     const PikaParasite *parasite);
PikaUndo * pika_image_undo_push_image_parasite_remove (PikaImage   *image,
                                                     const gchar   *undo_desc,
                                                     const gchar   *name);


/*  guide & sample point undos  */

PikaUndo * pika_image_undo_push_guide               (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaGuide     *guide);
PikaUndo * pika_image_undo_push_sample_point        (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaSamplePoint *sample_point);


/*  drawable undos  */

PikaUndo * pika_image_undo_push_drawable            (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaDrawable  *drawable,
                                                     GeglBuffer    *buffer,
                                                     gint           x,
                                                     gint           y);
PikaUndo * pika_image_undo_push_drawable_mod        (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaDrawable  *drawable,
                                                     gboolean       copy_buffer);
PikaUndo * pika_image_undo_push_drawable_format     (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaDrawable  *drawable);


/*  mask undos  */

PikaUndo * pika_image_undo_push_mask                (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaChannel   *mask);
PikaUndo * pika_image_undo_push_mask_precision      (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaChannel   *mask);


/*  item undos  */

PikaUndo * pika_image_undo_push_item_reorder        (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaItem      *item);
PikaUndo * pika_image_undo_push_item_rename         (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaItem      *item);
PikaUndo * pika_image_undo_push_item_displace       (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaItem      *item);
PikaUndo * pika_image_undo_push_item_visibility     (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaItem      *item);
PikaUndo * pika_image_undo_push_item_color_tag      (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaItem      *item);
PikaUndo * pika_image_undo_push_item_lock_content   (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaItem      *item);
PikaUndo * pika_image_undo_push_item_lock_position  (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaItem      *item);
PikaUndo * pika_image_undo_push_item_lock_visibility (PikaImage    *image,
                                                      const gchar  *undo_desc,
                                                      PikaItem     *item);
PikaUndo * pika_image_undo_push_item_parasite       (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaItem      *item,
                                                     const PikaParasite *parasite);
PikaUndo * pika_image_undo_push_item_parasite_remove(PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaItem      *item,
                                                     const gchar   *name);


/*  layer undos  */

PikaUndo * pika_image_undo_push_layer_add           (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaLayer     *layer,
                                                     GList         *prev_layers);
PikaUndo * pika_image_undo_push_layer_remove        (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaLayer     *layer,
                                                     PikaLayer     *prev_parent,
                                                     gint           prev_position,
                                                     GList         *prev_layers);
PikaUndo * pika_image_undo_push_layer_mode          (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaLayer     *layer);
PikaUndo * pika_image_undo_push_layer_opacity       (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaLayer     *layer);
PikaUndo * pika_image_undo_push_layer_lock_alpha    (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaLayer     *layer);


/*  group layer undos  */

PikaUndo *
    pika_image_undo_push_group_layer_suspend_resize (PikaImage      *image,
                                                     const gchar    *undo_desc,
                                                     PikaGroupLayer *group);
PikaUndo *
     pika_image_undo_push_group_layer_resume_resize (PikaImage      *image,
                                                     const gchar    *undo_desc,
                                                     PikaGroupLayer *group);
PikaUndo *
      pika_image_undo_push_group_layer_suspend_mask (PikaImage      *image,
                                                     const gchar    *undo_desc,
                                                     PikaGroupLayer *group);
PikaUndo *
       pika_image_undo_push_group_layer_resume_mask (PikaImage      *image,
                                                     const gchar    *undo_desc,
                                                     PikaGroupLayer *group);
PikaUndo *
   pika_image_undo_push_group_layer_start_transform (PikaImage      *image,
                                                     const gchar    *undo_desc,
                                                     PikaGroupLayer *group);
PikaUndo *
     pika_image_undo_push_group_layer_end_transform (PikaImage      *image,
                                                     const gchar    *undo_desc,
                                                     PikaGroupLayer *group);
PikaUndo * pika_image_undo_push_group_layer_convert (PikaImage      *image,
                                                     const gchar    *undo_desc,
                                                     PikaGroupLayer *group);


/*  text layer undos  */

PikaUndo * pika_image_undo_push_text_layer          (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaTextLayer *layer,
                                                     const GParamSpec *pspec);
PikaUndo * pika_image_undo_push_text_layer_modified (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaTextLayer *layer);
PikaUndo * pika_image_undo_push_text_layer_convert  (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaTextLayer *layer);


/*  layer mask undos  */

PikaUndo * pika_image_undo_push_layer_mask_add      (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaLayer     *layer,
                                                     PikaLayerMask *mask);
PikaUndo * pika_image_undo_push_layer_mask_remove   (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaLayer     *layer,
                                                     PikaLayerMask *mask);
PikaUndo * pika_image_undo_push_layer_mask_apply    (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaLayer     *layer);
PikaUndo * pika_image_undo_push_layer_mask_show     (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaLayer     *layer);


/*  channel undos  */

PikaUndo * pika_image_undo_push_channel_add         (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaChannel   *channel,
                                                     GList         *prev_channels);
PikaUndo * pika_image_undo_push_channel_remove      (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaChannel   *channel,
                                                     PikaChannel   *prev_parent,
                                                     gint           prev_position,
                                                     GList         *prev_channels);
PikaUndo * pika_image_undo_push_channel_color       (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaChannel   *channel);


/*  vectors undos  */

PikaUndo * pika_image_undo_push_vectors_add         (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaVectors   *vectors,
                                                     GList         *prev_vectors);
PikaUndo * pika_image_undo_push_vectors_remove      (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaVectors   *vectors,
                                                     PikaVectors   *prev_parent,
                                                     gint           prev_position,
                                                     GList         *prev_vectors);
PikaUndo * pika_image_undo_push_vectors_mod         (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaVectors   *vectors);


/*  floating selection undos  */

PikaUndo * pika_image_undo_push_fs_to_layer         (PikaImage     *image,
                                                     const gchar   *undo_desc,
                                                     PikaLayer     *floating_layer);


/*  EEK undo  */

PikaUndo * pika_image_undo_push_cantundo            (PikaImage     *image,
                                                     const gchar   *undo_desc);


#endif  /* __PIKA_IMAGE_UNDO_PUSH_H__ */
