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


#if 0
   This file is parsed by two scripts, enumgen.pl in pdb,
   and pika-mkenums. All enums that are not marked with
   /*< pdb-skip >*/ are exported to libpika and the PDB. Enums that are
   not marked with /*< skip >*/ are registered with the GType system.
   If you want the enum to be skipped by both scripts, you have to use
   /*< pdb-skip, skip >*/.

   The same syntax applies to enum values.
#endif


/*
 * these enums are registered with the type system
 */


#define PIKA_TYPE_ALIGN_REFERENCE_TYPE (pika_align_reference_type_get_type ())

GType pika_align_reference_type_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_ALIGN_REFERENCE_IMAGE,          /*< desc="Image"                   >*/
  PIKA_ALIGN_REFERENCE_SELECTION,      /*< desc="Selection"               >*/
  PIKA_ALIGN_REFERENCE_PICK,           /*< desc="Picked reference object" >*/
} PikaAlignReferenceType;


#define PIKA_TYPE_ALIGNMENT_TYPE (pika_alignment_type_get_type ())

GType pika_alignment_type_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_ALIGN_LEFT,                     /*< desc="Align to the left"                                 >*/
  PIKA_ALIGN_HCENTER,                  /*< desc="Center horizontally"                               >*/
  PIKA_ALIGN_RIGHT,                    /*< desc="Align to the right"                                >*/
  PIKA_ALIGN_TOP,                      /*< desc="Align to the top"                                  >*/
  PIKA_ALIGN_VCENTER,                  /*< desc="Center vertically"                                 >*/
  PIKA_ALIGN_BOTTOM,                   /*< desc="Align to the bottom"                               >*/
  PIKA_ARRANGE_HFILL,                  /*< desc="Distribute anchor points horizontally evenly"      >*/
  PIKA_ARRANGE_VFILL,                  /*< desc="Distribute anchor points vertically evenly"        >*/
  PIKA_DISTRIBUTE_EVEN_HORIZONTAL_GAP, /*< desc="Distribute horizontally with even horizontal gaps" >*/
  PIKA_DISTRIBUTE_EVEN_VERTICAL_GAP,   /*< desc="Distribute vertically with even vertical gaps"     >*/
} PikaAlignmentType;


/**
 * PikaBucketFillMode:
 * @PIKA_BUCKET_FILL_FG:      FG color fill
 * @PIKA_BUCKET_FILL_BG:      BG color fill
 * @PIKA_BUCKET_FILL_PATTERN: Pattern fill
 *
 * Bucket fill modes.
 */
#define PIKA_TYPE_BUCKET_FILL_MODE (pika_bucket_fill_mode_get_type ())

GType pika_bucket_fill_mode_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_BUCKET_FILL_FG,      /*< desc="FG color fill" >*/
  PIKA_BUCKET_FILL_BG,      /*< desc="BG color fill" >*/
  PIKA_BUCKET_FILL_PATTERN  /*< desc="Pattern fill"  >*/
} PikaBucketFillMode;


#define PIKA_TYPE_CHANNEL_BORDER_STYLE (pika_channel_border_style_get_type ())

GType pika_channel_border_style_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_CHANNEL_BORDER_STYLE_HARD,     /*< desc="Hard"      >*/
  PIKA_CHANNEL_BORDER_STYLE_SMOOTH,   /*< desc="Smooth"    >*/
  PIKA_CHANNEL_BORDER_STYLE_FEATHERED /*< desc="Feathered" >*/
} PikaChannelBorderStyle;


/*  Note: when appending values here, don't forget to update
 *  PikaColorFrame and other places use this enum to create combo
 *  boxes.
 */
#define PIKA_TYPE_COLOR_PICK_MODE (pika_color_pick_mode_get_type ())

GType pika_color_pick_mode_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_COLOR_PICK_MODE_PIXEL,       /*< desc="Pixel"        >*/
  PIKA_COLOR_PICK_MODE_RGB_PERCENT, /*< desc="RGB (%)"      >*/
  PIKA_COLOR_PICK_MODE_RGB_U8,      /*< desc="RGB (0..255)" >*/
  PIKA_COLOR_PICK_MODE_GRAYSCALE,   /*< desc="Grayscale (%)">*/
  PIKA_COLOR_PICK_MODE_HSV,         /*< desc="HSV"          >*/
  PIKA_COLOR_PICK_MODE_LCH,         /*< desc="CIE LCh"      >*/
  PIKA_COLOR_PICK_MODE_LAB,         /*< desc="CIE LAB"      >*/
  PIKA_COLOR_PICK_MODE_CMYK,        /*< desc="CMYK"         >*/
  PIKA_COLOR_PICK_MODE_XYY,         /*< desc="CIE xyY"      >*/
  PIKA_COLOR_PICK_MODE_YUV,         /*< desc="CIE Yu'v'"      >*/

  PIKA_COLOR_PICK_MODE_LAST = PIKA_COLOR_PICK_MODE_YUV /*< skip >*/
} PikaColorPickMode;


#define PIKA_TYPE_COLOR_PROFILE_POLICY (pika_color_profile_policy_get_type ())

GType pika_color_profile_policy_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_COLOR_PROFILE_POLICY_ASK,               /*< desc="Ask what to do"                                                          >*/
  PIKA_COLOR_PROFILE_POLICY_KEEP,              /*< desc="Keep embedded profile"                                                   >*/
  PIKA_COLOR_PROFILE_POLICY_CONVERT_BUILTIN,   /*< desc="Convert to built-in sRGB or grayscale profile"                           >*/
  PIKA_COLOR_PROFILE_POLICY_CONVERT_PREFERRED, /*< desc="Convert to preferred RGB or grayscale profile (defaulting to built-in)" >*/
} PikaColorProfilePolicy;


#define PIKA_TYPE_COMPONENT_MASK (pika_component_mask_get_type ())

GType pika_component_mask_get_type (void) G_GNUC_CONST;

typedef enum /*< pdb-skip >*/
{
  PIKA_COMPONENT_MASK_RED   = 1 << 0,
  PIKA_COMPONENT_MASK_GREEN = 1 << 1,
  PIKA_COMPONENT_MASK_BLUE  = 1 << 2,
  PIKA_COMPONENT_MASK_ALPHA = 1 << 3,

  PIKA_COMPONENT_MASK_ALL = (PIKA_COMPONENT_MASK_RED   |
                             PIKA_COMPONENT_MASK_GREEN |
                             PIKA_COMPONENT_MASK_BLUE  |
                             PIKA_COMPONENT_MASK_ALPHA)
} PikaComponentMask;


#define PIKA_TYPE_CONTAINER_POLICY (pika_container_policy_get_type ())

GType pika_container_policy_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_CONTAINER_POLICY_STRONG,
  PIKA_CONTAINER_POLICY_WEAK
} PikaContainerPolicy;


#define PIKA_TYPE_CONVERT_DITHER_TYPE (pika_convert_dither_type_get_type ())

GType pika_convert_dither_type_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_CONVERT_DITHER_NONE,        /*< desc="None"                                     >*/
  PIKA_CONVERT_DITHER_FS,          /*< desc="Floyd-Steinberg (normal)"                 >*/
  PIKA_CONVERT_DITHER_FS_LOWBLEED, /*< desc="Floyd-Steinberg (reduced color bleeding)" >*/
  PIKA_CONVERT_DITHER_FIXED,       /*< desc="Positioned"                               >*/
  PIKA_CONVERT_DITHER_NODESTRUCT   /*< pdb-skip, skip >*/
} PikaConvertDitherType;


#define PIKA_TYPE_CONVOLUTION_TYPE (pika_convolution_type_get_type ())

GType pika_convolution_type_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_NORMAL_CONVOL,      /*  Negative numbers truncated  */
  PIKA_ABSOLUTE_CONVOL,    /*  Absolute value              */
  PIKA_NEGATIVE_CONVOL     /*  add 127 to values           */
} PikaConvolutionType;


#define PIKA_TYPE_CURVE_POINT_TYPE (pika_curve_point_type_get_type ())

GType pika_curve_point_type_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_CURVE_POINT_SMOOTH,   /*< desc="Smooth" >*/
  PIKA_CURVE_POINT_CORNER    /*< desc="Corner" >*/
} PikaCurvePointType;


#define PIKA_TYPE_CURVE_TYPE (pika_curve_type_get_type ())

GType pika_curve_type_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_CURVE_SMOOTH,   /*< desc="Smooth"   >*/
  PIKA_CURVE_FREE      /*< desc="Freehand" >*/
} PikaCurveType;


#define PIKA_TYPE_DASH_PRESET (pika_dash_preset_get_type ())

GType pika_dash_preset_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_DASH_CUSTOM,       /*< desc="Custom"         >*/
  PIKA_DASH_LINE,         /*< desc="Line"           >*/
  PIKA_DASH_LONG_DASH,    /*< desc="Long dashes"    >*/
  PIKA_DASH_MEDIUM_DASH,  /*< desc="Medium dashes"  >*/
  PIKA_DASH_SHORT_DASH,   /*< desc="Short dashes"   >*/
  PIKA_DASH_SPARSE_DOTS,  /*< desc="Sparse dots"    >*/
  PIKA_DASH_NORMAL_DOTS,  /*< desc="Normal dots"    >*/
  PIKA_DASH_DENSE_DOTS,   /*< desc="Dense dots"     >*/
  PIKA_DASH_STIPPLES,     /*< desc="Stipples"       >*/
  PIKA_DASH_DASH_DOT,     /*< desc="Dash, dot"      >*/
  PIKA_DASH_DASH_DOT_DOT  /*< desc="Dash, dot, dot" >*/
} PikaDashPreset;


#define PIKA_TYPE_DEBUG_POLICY (pika_debug_policy_get_type ())

GType pika_debug_policy_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_DEBUG_POLICY_WARNING,    /*< desc="Debug warnings, critical errors and crashes" >*/
  PIKA_DEBUG_POLICY_CRITICAL,   /*< desc="Debug critical errors and crashes"           >*/
  PIKA_DEBUG_POLICY_FATAL,      /*< desc="Debug crashes only"                          >*/
  PIKA_DEBUG_POLICY_NEVER       /*< desc="Never debug PIKA"                            >*/
} PikaDebugPolicy;


#define PIKA_TYPE_DIRTY_MASK (pika_dirty_mask_get_type ())

GType pika_dirty_mask_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_DIRTY_NONE            = 0,

  PIKA_DIRTY_IMAGE           = 1 << 0,
  PIKA_DIRTY_IMAGE_SIZE      = 1 << 1,
  PIKA_DIRTY_IMAGE_META      = 1 << 2,
  PIKA_DIRTY_IMAGE_STRUCTURE = 1 << 3,
  PIKA_DIRTY_ITEM            = 1 << 4,
  PIKA_DIRTY_ITEM_META       = 1 << 5,
  PIKA_DIRTY_DRAWABLE        = 1 << 6,
  PIKA_DIRTY_VECTORS         = 1 << 7,
  PIKA_DIRTY_SELECTION       = 1 << 8,
  PIKA_DIRTY_ACTIVE_DRAWABLE = 1 << 9,

  PIKA_DIRTY_ALL             = 0xffff
} PikaDirtyMask;


#define PIKA_TYPE_DYNAMICS_OUTPUT_TYPE (pika_dynamics_output_type_get_type ())

GType pika_dynamics_output_type_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_DYNAMICS_OUTPUT_OPACITY,      /*< desc="Opacity"      >*/
  PIKA_DYNAMICS_OUTPUT_SIZE,         /*< desc="Size"         >*/
  PIKA_DYNAMICS_OUTPUT_ANGLE,        /*< desc="Angle"        >*/
  PIKA_DYNAMICS_OUTPUT_COLOR,        /*< desc="Color"        >*/
  PIKA_DYNAMICS_OUTPUT_HARDNESS,     /*< desc="Hardness"     >*/
  PIKA_DYNAMICS_OUTPUT_FORCE,        /*< desc="Force"        >*/
  PIKA_DYNAMICS_OUTPUT_ASPECT_RATIO, /*< desc="Aspect ratio" >*/
  PIKA_DYNAMICS_OUTPUT_SPACING,      /*< desc="Spacing"      >*/
  PIKA_DYNAMICS_OUTPUT_RATE,         /*< desc="Rate"         >*/
  PIKA_DYNAMICS_OUTPUT_FLOW,         /*< desc="Flow"         >*/
  PIKA_DYNAMICS_OUTPUT_JITTER,       /*< desc="Jitter"       >*/
} PikaDynamicsOutputType;


#define PIKA_TYPE_CUSTOM_STYLE (pika_custom_style_get_type ())

GType pika_custom_style_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_CUSTOM_STYLE_SOLID_COLOR,  /*< desc="Solid color" >*/
  PIKA_CUSTOM_STYLE_PATTERN       /*< desc="Pattern"          >*/
} PikaCustomStyle;

#define PIKA_TYPE_FILL_STYLE (pika_fill_style_get_type ())

GType pika_fill_style_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_FILL_STYLE_FG_COLOR,  /*< desc="Foreground color" >*/
  PIKA_FILL_STYLE_BG_COLOR,  /*< desc="Background color" >*/
  PIKA_FILL_STYLE_PATTERN    /*< desc="Pattern"          >*/
} PikaFillStyle;


#define PIKA_TYPE_FILTER_REGION (pika_filter_region_get_type ())

GType pika_filter_region_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_FILTER_REGION_SELECTION, /*< desc="Use the selection as input"    >*/
  PIKA_FILTER_REGION_DRAWABLE   /*< desc="Use the entire layer as input" >*/
} PikaFilterRegion;


#define PIKA_TYPE_GRADIENT_COLOR (pika_gradient_color_get_type ())

GType pika_gradient_color_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_GRADIENT_COLOR_FIXED,                  /*< desc="Fixed"                                           >*/
  PIKA_GRADIENT_COLOR_FOREGROUND,             /*< desc="Foreground color",               abbrev="FG"     >*/
  PIKA_GRADIENT_COLOR_FOREGROUND_TRANSPARENT, /*< desc="Foreground color (transparent)",  abbrev="FG (t)" >*/
  PIKA_GRADIENT_COLOR_BACKGROUND,             /*< desc="Background color",               abbrev="BG"     >*/
  PIKA_GRADIENT_COLOR_BACKGROUND_TRANSPARENT  /*< desc="Background color (transparent)", abbrev="BG (t)" >*/
} PikaGradientColor;


#define PIKA_TYPE_GRAVITY_TYPE (pika_gravity_type_get_type ())

GType pika_gravity_type_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_GRAVITY_NONE,
  PIKA_GRAVITY_NORTH_WEST,
  PIKA_GRAVITY_NORTH,
  PIKA_GRAVITY_NORTH_EAST,
  PIKA_GRAVITY_WEST,
  PIKA_GRAVITY_CENTER,
  PIKA_GRAVITY_EAST,
  PIKA_GRAVITY_SOUTH_WEST,
  PIKA_GRAVITY_SOUTH,
  PIKA_GRAVITY_SOUTH_EAST
} PikaGravityType;


#define PIKA_TYPE_GUIDE_STYLE (pika_guide_style_get_type ())

GType pika_guide_style_get_type (void) G_GNUC_CONST;

typedef enum /*< pdb-skip >*/
{
  PIKA_GUIDE_STYLE_NONE,
  PIKA_GUIDE_STYLE_NORMAL,
  PIKA_GUIDE_STYLE_MIRROR,
  PIKA_GUIDE_STYLE_MANDALA,
  PIKA_GUIDE_STYLE_SPLIT_VIEW
} PikaGuideStyle;


#define PIKA_TYPE_HISTOGRAM_CHANNEL (pika_histogram_channel_get_type ())

GType pika_histogram_channel_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_HISTOGRAM_VALUE     = 0,  /*< desc="Value"         >*/
  PIKA_HISTOGRAM_RED       = 1,  /*< desc="Red"           >*/
  PIKA_HISTOGRAM_GREEN     = 2,  /*< desc="Green"         >*/
  PIKA_HISTOGRAM_BLUE      = 3,  /*< desc="Blue"          >*/
  PIKA_HISTOGRAM_ALPHA     = 4,  /*< desc="Alpha"         >*/
  PIKA_HISTOGRAM_LUMINANCE = 5,  /*< desc="Luminance"     >*/
  PIKA_HISTOGRAM_RGB       = 6   /*< desc="RGB", pdb-skip >*/
} PikaHistogramChannel;


#define PIKA_TYPE_ITEM_SET (pika_item_set_get_type ())

GType pika_item_set_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_ITEM_SET_NONE,        /*< desc="None"               >*/
  PIKA_ITEM_SET_ALL,         /*< desc="All layers"         >*/
  PIKA_ITEM_SET_IMAGE_SIZED, /*< desc="Image-sized layers" >*/
  PIKA_ITEM_SET_VISIBLE,     /*< desc="All visible layers" >*/
} PikaItemSet;


#define PIKA_TYPE_MATTING_ENGINE (pika_matting_engine_get_type ())

GType pika_matting_engine_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_MATTING_ENGINE_GLOBAL,  /*< desc="Matting Global" >*/
  PIKA_MATTING_ENGINE_LEVIN,   /*< desc="Matting Levin" >*/
} PikaMattingEngine;


#define PIKA_TYPE_MESSAGE_SEVERITY (pika_message_severity_get_type ())

GType pika_message_severity_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_MESSAGE_INFO,        /*< desc="Message"  >*/
  PIKA_MESSAGE_WARNING,     /*< desc="Warning"  >*/
  PIKA_MESSAGE_ERROR,       /*< desc="Error"    >*/
  PIKA_MESSAGE_BUG_WARNING, /*< desc="WARNING"  >*/
  PIKA_MESSAGE_BUG_CRITICAL /*< desc="CRITICAL" >*/
} PikaMessageSeverity;


#define PIKA_TYPE_METADATA_ROTATION_POLICY (pika_metadata_rotation_policy_get_type ())

GType pika_metadata_rotation_policy_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_METADATA_ROTATION_POLICY_ASK,    /*< desc="Ask what to do"                         >*/
  PIKA_METADATA_ROTATION_POLICY_KEEP,   /*< desc="Discard metadata without rotating"      >*/
  PIKA_METADATA_ROTATION_POLICY_ROTATE  /*< desc="Rotate the image then discard metadata" >*/
} PikaMetadataRotationPolicy;


#define PIKA_TYPE_PASTE_TYPE (pika_paste_type_get_type ())

GType pika_paste_type_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_PASTE_TYPE_FLOATING,
  PIKA_PASTE_TYPE_FLOATING_IN_PLACE,
  PIKA_PASTE_TYPE_FLOATING_INTO,
  PIKA_PASTE_TYPE_FLOATING_INTO_IN_PLACE,
  PIKA_PASTE_TYPE_NEW_LAYER,
  PIKA_PASTE_TYPE_NEW_LAYER_IN_PLACE,
  PIKA_PASTE_TYPE_NEW_LAYER_OR_FLOATING,
  PIKA_PASTE_TYPE_NEW_LAYER_OR_FLOATING_IN_PLACE,
  PIKA_PASTE_TYPE_NEW_MERGED_LAYER_OR_FLOATING,
  PIKA_PASTE_TYPE_NEW_MERGED_LAYER_OR_FLOATING_IN_PLACE,
} PikaPasteType;


#define PIKA_TYPE_WIN32_POINTER_INPUT_API (pika_win32_pointer_input_api_get_type ())

GType pika_win32_pointer_input_api_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_WIN32_POINTER_INPUT_API_WINTAB,      /*< desc="Wintab"      >*/
  PIKA_WIN32_POINTER_INPUT_API_WINDOWS_INK  /*< desc="Windows Ink" >*/
} PikaWin32PointerInputAPI;


#define PIKA_TYPE_THUMBNAIL_SIZE (pika_thumbnail_size_get_type ())

GType pika_thumbnail_size_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_THUMBNAIL_SIZE_NONE    = 0,    /*< desc="No thumbnails"    >*/
  PIKA_THUMBNAIL_SIZE_NORMAL  = 128,  /*< desc="Normal (128x128)" >*/
  PIKA_THUMBNAIL_SIZE_LARGE   = 256   /*< desc="Large (256x256)"  >*/
} PikaThumbnailSize;


#define PIKA_TYPE_TRC_TYPE (pika_trc_type_get_type ())

GType pika_trc_type_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_TRC_LINEAR,     /*< desc="Linear"     >*/
  PIKA_TRC_NON_LINEAR, /*< desc="Non-Linear" >*/
  PIKA_TRC_PERCEPTUAL  /*< desc="Perceptual" >*/
} PikaTRCType;


#define PIKA_TYPE_UNDO_EVENT (pika_undo_event_get_type ())

GType pika_undo_event_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_UNDO_EVENT_UNDO_PUSHED,  /* a new undo has been added to the undo stack */
  PIKA_UNDO_EVENT_UNDO_EXPIRED, /* an undo has been freed from the undo stack  */
  PIKA_UNDO_EVENT_REDO_EXPIRED, /* a redo has been freed from the redo stack   */
  PIKA_UNDO_EVENT_UNDO,         /* an undo has been executed                   */
  PIKA_UNDO_EVENT_REDO,         /* a redo has been executed                    */
  PIKA_UNDO_EVENT_UNDO_FREE,    /* all undo and redo info has been cleared     */
  PIKA_UNDO_EVENT_UNDO_FREEZE,  /* undo has been frozen                        */
  PIKA_UNDO_EVENT_UNDO_THAW     /* undo has been thawn                         */
} PikaUndoEvent;


#define PIKA_TYPE_UNDO_MODE (pika_undo_mode_get_type ())

GType pika_undo_mode_get_type (void) G_GNUC_CONST;

typedef enum /*< pdb-skip >*/
{
  PIKA_UNDO_MODE_UNDO,
  PIKA_UNDO_MODE_REDO
} PikaUndoMode;


#define PIKA_TYPE_UNDO_TYPE (pika_undo_type_get_type ())

GType pika_undo_type_get_type (void) G_GNUC_CONST;

typedef enum /*< pdb-skip >*/
{
  /* Type NO_UNDO_GROUP (0) is special - in the pikaimage structure it
   * means there is no undo group currently being added to.
   */
  PIKA_UNDO_GROUP_NONE = 0,              /*< desc="<<invalid>>"                    >*/

  PIKA_UNDO_GROUP_FIRST = PIKA_UNDO_GROUP_NONE, /*< skip >*/

  PIKA_UNDO_GROUP_IMAGE_SCALE,           /*< desc="Scale image"                    >*/
  PIKA_UNDO_GROUP_IMAGE_RESIZE,          /*< desc="Resize image"                   >*/
  PIKA_UNDO_GROUP_IMAGE_FLIP,            /*< desc="Flip image"                     >*/
  PIKA_UNDO_GROUP_IMAGE_ROTATE,          /*< desc="Rotate image"                   >*/
  PIKA_UNDO_GROUP_IMAGE_TRANSFORM,       /*< desc="Transform image"                >*/
  PIKA_UNDO_GROUP_IMAGE_CROP,            /*< desc="Crop image"                     >*/
  PIKA_UNDO_GROUP_IMAGE_CONVERT,         /*< desc="Convert image"                  >*/
  PIKA_UNDO_GROUP_IMAGE_ITEM_REMOVE,     /*< desc="Remove item"                    >*/
  PIKA_UNDO_GROUP_IMAGE_ITEM_REORDER,    /*< desc="Reorder item"                   >*/
  PIKA_UNDO_GROUP_IMAGE_LAYERS_MERGE,    /*< desc="Merge layers"                   >*/
  PIKA_UNDO_GROUP_IMAGE_VECTORS_MERGE,   /*< desc="Merge paths"                    >*/
  PIKA_UNDO_GROUP_IMAGE_QUICK_MASK,      /*< desc="Quick Mask"                     >*/
  PIKA_UNDO_GROUP_IMAGE_GRID,            /*< desc="Grid"                           >*/
  PIKA_UNDO_GROUP_IMAGE_COLORMAP_REMAP,  /*< desc="Colormap remapping"             >*/
  PIKA_UNDO_GROUP_GUIDE,                 /*< desc="Guide"                          >*/
  PIKA_UNDO_GROUP_SAMPLE_POINT,          /*< desc="Sample Point"                   >*/
  PIKA_UNDO_GROUP_DRAWABLE,              /*< desc="Layer/Channel"                  >*/
  PIKA_UNDO_GROUP_DRAWABLE_MOD,          /*< desc="Layer/Channel modification"     >*/
  PIKA_UNDO_GROUP_MASK,                  /*< desc="Selection mask"                 >*/
  PIKA_UNDO_GROUP_ITEM_VISIBILITY,       /*< desc="Item visibility"                >*/
  PIKA_UNDO_GROUP_ITEM_LOCK_CONTENTS,    /*< desc="Lock/Unlock contents"           >*/
  PIKA_UNDO_GROUP_ITEM_LOCK_POSITION,    /*< desc="Lock/Unlock position"           >*/
  PIKA_UNDO_GROUP_ITEM_LOCK_VISIBILITY,  /*< desc="Lock/Unlock visibility"         >*/
  PIKA_UNDO_GROUP_ITEM_PROPERTIES,       /*< desc="Item properties"                >*/
  PIKA_UNDO_GROUP_ITEM_DISPLACE,         /*< desc="Move item"                      >*/
  PIKA_UNDO_GROUP_ITEM_SCALE,            /*< desc="Scale item"                     >*/
  PIKA_UNDO_GROUP_ITEM_RESIZE,           /*< desc="Resize item"                    >*/
  PIKA_UNDO_GROUP_LAYER_ADD,             /*< desc="Add layer"                      >*/
  PIKA_UNDO_GROUP_LAYER_ADD_ALPHA,       /*< desc="Add alpha channel"              >*/
  PIKA_UNDO_GROUP_LAYER_ADD_MASK,        /*< desc="Add layer mask"                 >*/
  PIKA_UNDO_GROUP_LAYER_APPLY_MASK,      /*< desc="Apply layer mask"               >*/
  PIKA_UNDO_GROUP_LAYER_REMOVE_ALPHA,    /*< desc="Remove alpha channel"           >*/
  PIKA_UNDO_GROUP_LAYER_LOCK_ALPHA,      /*< desc="Lock/Unlock alpha channels"     >*/
  PIKA_UNDO_GROUP_LAYER_OPACITY,         /*< desc="Set layers opacity"             >*/
  PIKA_UNDO_GROUP_LAYER_MODE,            /*< desc="Set layers mode"                >*/
  PIKA_UNDO_GROUP_CHANNEL_ADD,           /*< desc="Add channels"                   >*/
  PIKA_UNDO_GROUP_FS_TO_LAYER,           /*< desc="Floating selection to layer"    >*/
  PIKA_UNDO_GROUP_FS_FLOAT,              /*< desc="Float selection"                >*/
  PIKA_UNDO_GROUP_FS_ANCHOR,             /*< desc="Anchor floating selection"      >*/
  PIKA_UNDO_GROUP_EDIT_PASTE,            /*< desc="Paste"                          >*/
  PIKA_UNDO_GROUP_EDIT_CUT,              /*< desc="Cut"                            >*/
  PIKA_UNDO_GROUP_TEXT,                  /*< desc="Text"                           >*/
  PIKA_UNDO_GROUP_TRANSFORM,             /*< desc="Transform"                      >*/
  PIKA_UNDO_GROUP_PAINT,                 /*< desc="Paint"                          >*/
  PIKA_UNDO_GROUP_PARASITE_ATTACH,       /*< desc="Attach parasite"                >*/
  PIKA_UNDO_GROUP_PARASITE_REMOVE,       /*< desc="Remove parasite"                >*/
  PIKA_UNDO_GROUP_VECTORS_IMPORT,        /*< desc="Import paths"                   >*/
  PIKA_UNDO_GROUP_MISC,                  /*< desc="Plug-In"                        >*/

  PIKA_UNDO_GROUP_LAST = PIKA_UNDO_GROUP_MISC, /*< skip >*/

  /*  Undo types which actually do something  */

  PIKA_UNDO_IMAGE_TYPE,                  /*< desc="Image type"                     >*/
  PIKA_UNDO_IMAGE_PRECISION,             /*< desc="Image precision"                >*/
  PIKA_UNDO_IMAGE_SIZE,                  /*< desc="Image size"                     >*/
  PIKA_UNDO_IMAGE_RESOLUTION,            /*< desc="Image resolution change"        >*/
  PIKA_UNDO_IMAGE_GRID,                  /*< desc="Grid"                           >*/
  PIKA_UNDO_IMAGE_METADATA,              /*< desc="Change metadata"                >*/
  PIKA_UNDO_IMAGE_COLORMAP,              /*< desc="Change indexed palette"         >*/
  PIKA_UNDO_IMAGE_HIDDEN_PROFILE,        /*< desc="Hide/Unhide color profile"      >*/
  PIKA_UNDO_GUIDE,                       /*< desc="Guide"                          >*/
  PIKA_UNDO_SAMPLE_POINT,                /*< desc="Sample Point"                   >*/
  PIKA_UNDO_DRAWABLE,                    /*< desc="Layer/Channel"                  >*/
  PIKA_UNDO_DRAWABLE_MOD,                /*< desc="Layer/Channel modification"     >*/
  PIKA_UNDO_DRAWABLE_FORMAT,             /*< desc="Layer/Channel format"           >*/
  PIKA_UNDO_MASK,                        /*< desc="Selection mask"                 >*/
  PIKA_UNDO_ITEM_REORDER,                /*< desc="Reorder item"                   >*/
  PIKA_UNDO_ITEM_RENAME,                 /*< desc="Rename item"                    >*/
  PIKA_UNDO_ITEM_DISPLACE,               /*< desc="Move item"                      >*/
  PIKA_UNDO_ITEM_VISIBILITY,             /*< desc="Item visibility"                >*/
  PIKA_UNDO_ITEM_COLOR_TAG,              /*< desc="Item color tag"                 >*/
  PIKA_UNDO_ITEM_LOCK_CONTENT,           /*< desc="Lock/Unlock content"            >*/
  PIKA_UNDO_ITEM_LOCK_POSITION,          /*< desc="Lock/Unlock position"           >*/
  PIKA_UNDO_ITEM_LOCK_VISIBILITY,        /*< desc="Lock/Unlock visibility"      >*/
  PIKA_UNDO_LAYER_ADD,                   /*< desc="New layer"                      >*/
  PIKA_UNDO_LAYER_REMOVE,                /*< desc="Delete layer"                   >*/
  PIKA_UNDO_LAYER_MODE,                  /*< desc="Set layer mode"                 >*/
  PIKA_UNDO_LAYER_OPACITY,               /*< desc="Set layer opacity"              >*/
  PIKA_UNDO_LAYER_LOCK_ALPHA,            /*< desc="Lock/Unlock alpha channel"      >*/
  PIKA_UNDO_GROUP_LAYER_SUSPEND_RESIZE,  /*< desc="Suspend group layer resize"     >*/
  PIKA_UNDO_GROUP_LAYER_RESUME_RESIZE,   /*< desc="Resume group layer resize"      >*/
  PIKA_UNDO_GROUP_LAYER_SUSPEND_MASK,    /*< desc="Suspend group layer mask"       >*/
  PIKA_UNDO_GROUP_LAYER_RESUME_MASK,     /*< desc="Resume group layer mask"        >*/
  PIKA_UNDO_GROUP_LAYER_START_TRANSFORM, /*< desc="Start transforming group layer" >*/
  PIKA_UNDO_GROUP_LAYER_END_TRANSFORM,   /*< desc="End transforming group layer"   >*/
  PIKA_UNDO_GROUP_LAYER_CONVERT,         /*< desc="Convert group layer"            >*/
  PIKA_UNDO_TEXT_LAYER,                  /*< desc="Text layer"                     >*/
  PIKA_UNDO_TEXT_LAYER_MODIFIED,         /*< desc="Text layer modification"        >*/
  PIKA_UNDO_TEXT_LAYER_CONVERT,          /*< desc="Convert text layer"             >*/
  PIKA_UNDO_LAYER_MASK_ADD,              /*< desc="Add layer mask"                 >*/
  PIKA_UNDO_LAYER_MASK_REMOVE,           /*< desc="Delete layer mask"              >*/
  PIKA_UNDO_LAYER_MASK_APPLY,            /*< desc="Apply layer mask"               >*/
  PIKA_UNDO_LAYER_MASK_SHOW,             /*< desc="Show layer mask"                >*/
  PIKA_UNDO_CHANNEL_ADD,                 /*< desc="New channel"                    >*/
  PIKA_UNDO_CHANNEL_REMOVE,              /*< desc="Delete channel"                 >*/
  PIKA_UNDO_CHANNEL_COLOR,               /*< desc="Channel color"                  >*/
  PIKA_UNDO_VECTORS_ADD,                 /*< desc="New path"                       >*/
  PIKA_UNDO_VECTORS_REMOVE,              /*< desc="Delete path"                    >*/
  PIKA_UNDO_VECTORS_MOD,                 /*< desc="Path modification"              >*/
  PIKA_UNDO_FS_TO_LAYER,                 /*< desc="Floating selection to layer"    >*/
  PIKA_UNDO_TRANSFORM_GRID,              /*< desc="Transform grid"                 >*/
  PIKA_UNDO_PAINT,                       /*< desc="Paint"                          >*/
  PIKA_UNDO_INK,                         /*< desc="Ink"                            >*/
  PIKA_UNDO_FOREGROUND_SELECT,           /*< desc="Select foreground"              >*/
  PIKA_UNDO_PARASITE_ATTACH,             /*< desc="Attach parasite"                >*/
  PIKA_UNDO_PARASITE_REMOVE,             /*< desc="Remove parasite"                >*/

  PIKA_UNDO_CANT                         /*< desc="Not undoable"                   >*/
} PikaUndoType;


#define PIKA_TYPE_VIEW_SIZE (pika_view_size_get_type ())

GType pika_view_size_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_VIEW_SIZE_TINY        = 12,   /*< desc="Tiny"        >*/
  PIKA_VIEW_SIZE_EXTRA_SMALL = 16,   /*< desc="Very small"  >*/
  PIKA_VIEW_SIZE_SMALL       = 24,   /*< desc="Small"       >*/
  PIKA_VIEW_SIZE_MEDIUM      = 32,   /*< desc="Medium"      >*/
  PIKA_VIEW_SIZE_LARGE       = 48,   /*< desc="Large"       >*/
  PIKA_VIEW_SIZE_EXTRA_LARGE = 64,   /*< desc="Very large"  >*/
  PIKA_VIEW_SIZE_HUGE        = 96,   /*< desc="Huge"        >*/
  PIKA_VIEW_SIZE_ENORMOUS    = 128,  /*< desc="Enormous"    >*/
  PIKA_VIEW_SIZE_GIGANTIC    = 192   /*< desc="Gigantic"    >*/
} PikaViewSize;


#define PIKA_TYPE_VIEW_TYPE (pika_view_type_get_type ())

GType pika_view_type_get_type (void) G_GNUC_CONST;

typedef enum  /*< pdb-skip >*/
{
  PIKA_VIEW_TYPE_LIST,  /*< desc="View as list" >*/
  PIKA_VIEW_TYPE_GRID   /*< desc="View as grid" >*/
} PikaViewType;


#define PIKA_TYPE_SELECT_METHOD (pika_select_method_get_type ())

GType pika_select_method_get_type (void) G_GNUC_CONST;

typedef enum /*< pdb-skip >*/
{
  PIKA_SELECT_PLAIN_TEXT,    /*< desc="Selection by basic text search"         >*/
  PIKA_SELECT_REGEX_PATTERN, /*< desc="Selection by regular expression search" >*/
  PIKA_SELECT_GLOB_PATTERN,  /*< desc="Selection by glob pattern search"       >*/
} PikaSelectMethod;

/*
 * non-registered enums; register them if needed
 */


typedef enum  /*< pdb-skip, skip >*/
{
  PIKA_CONTEXT_PROP_FIRST       =  2,

  PIKA_CONTEXT_PROP_IMAGE       =  PIKA_CONTEXT_PROP_FIRST,
  PIKA_CONTEXT_PROP_DISPLAY     =  3,
  PIKA_CONTEXT_PROP_TOOL        =  4,
  PIKA_CONTEXT_PROP_PAINT_INFO  =  5,
  PIKA_CONTEXT_PROP_FOREGROUND  =  6,
  PIKA_CONTEXT_PROP_BACKGROUND  =  7,
  PIKA_CONTEXT_PROP_OPACITY     =  8,
  PIKA_CONTEXT_PROP_PAINT_MODE  =  9,
  PIKA_CONTEXT_PROP_BRUSH       = 10,
  PIKA_CONTEXT_PROP_DYNAMICS    = 11,
  PIKA_CONTEXT_PROP_MYBRUSH     = 12,
  PIKA_CONTEXT_PROP_PATTERN     = 13,
  PIKA_CONTEXT_PROP_GRADIENT    = 14,
  PIKA_CONTEXT_PROP_PALETTE     = 15,
  PIKA_CONTEXT_PROP_FONT        = 16,
  PIKA_CONTEXT_PROP_TOOL_PRESET = 17,
  PIKA_CONTEXT_PROP_BUFFER      = 18,
  PIKA_CONTEXT_PROP_IMAGEFILE   = 19,
  PIKA_CONTEXT_PROP_TEMPLATE    = 20,

  PIKA_CONTEXT_PROP_LAST        = PIKA_CONTEXT_PROP_TEMPLATE
} PikaContextPropType;


typedef enum  /*< pdb-skip, skip >*/
{
  PIKA_CONTEXT_PROP_MASK_IMAGE       = 1 <<  2,
  PIKA_CONTEXT_PROP_MASK_DISPLAY     = 1 <<  3,
  PIKA_CONTEXT_PROP_MASK_TOOL        = 1 <<  4,
  PIKA_CONTEXT_PROP_MASK_PAINT_INFO  = 1 <<  5,
  PIKA_CONTEXT_PROP_MASK_FOREGROUND  = 1 <<  6,
  PIKA_CONTEXT_PROP_MASK_BACKGROUND  = 1 <<  7,
  PIKA_CONTEXT_PROP_MASK_OPACITY     = 1 <<  8,
  PIKA_CONTEXT_PROP_MASK_PAINT_MODE  = 1 <<  9,
  PIKA_CONTEXT_PROP_MASK_BRUSH       = 1 << 10,
  PIKA_CONTEXT_PROP_MASK_DYNAMICS    = 1 << 11,
  PIKA_CONTEXT_PROP_MASK_MYBRUSH     = 1 << 12,
  PIKA_CONTEXT_PROP_MASK_PATTERN     = 1 << 13,
  PIKA_CONTEXT_PROP_MASK_GRADIENT    = 1 << 14,
  PIKA_CONTEXT_PROP_MASK_PALETTE     = 1 << 15,
  PIKA_CONTEXT_PROP_MASK_FONT        = 1 << 16,
  PIKA_CONTEXT_PROP_MASK_TOOL_PRESET = 1 << 17,
  PIKA_CONTEXT_PROP_MASK_BUFFER      = 1 << 18,
  PIKA_CONTEXT_PROP_MASK_IMAGEFILE   = 1 << 19,
  PIKA_CONTEXT_PROP_MASK_TEMPLATE    = 1 << 20,

  /*  aliases  */
  PIKA_CONTEXT_PROP_MASK_PAINT = (PIKA_CONTEXT_PROP_MASK_FOREGROUND |
                                  PIKA_CONTEXT_PROP_MASK_BACKGROUND |
                                  PIKA_CONTEXT_PROP_MASK_OPACITY    |
                                  PIKA_CONTEXT_PROP_MASK_PAINT_MODE |
                                  PIKA_CONTEXT_PROP_MASK_BRUSH      |
                                  PIKA_CONTEXT_PROP_MASK_DYNAMICS   |
                                  PIKA_CONTEXT_PROP_MASK_PATTERN    |
                                  PIKA_CONTEXT_PROP_MASK_GRADIENT),

  PIKA_CONTEXT_PROP_MASK_ALL   = (PIKA_CONTEXT_PROP_MASK_IMAGE       |
                                  PIKA_CONTEXT_PROP_MASK_DISPLAY     |
                                  PIKA_CONTEXT_PROP_MASK_TOOL        |
                                  PIKA_CONTEXT_PROP_MASK_PAINT_INFO  |
                                  PIKA_CONTEXT_PROP_MASK_MYBRUSH     |
                                  PIKA_CONTEXT_PROP_MASK_PALETTE     |
                                  PIKA_CONTEXT_PROP_MASK_FONT        |
                                  PIKA_CONTEXT_PROP_MASK_TOOL_PRESET |
                                  PIKA_CONTEXT_PROP_MASK_BUFFER      |
                                  PIKA_CONTEXT_PROP_MASK_IMAGEFILE   |
                                  PIKA_CONTEXT_PROP_MASK_TEMPLATE    |
                                  PIKA_CONTEXT_PROP_MASK_PAINT)
} PikaContextPropMask;


typedef enum  /*< pdb-skip, skip >*/
{
  PIKA_IMAGE_SCALE_OK,
  PIKA_IMAGE_SCALE_TOO_SMALL,
  PIKA_IMAGE_SCALE_TOO_BIG
} PikaImageScaleCheckType;


typedef enum  /*< pdb-skip, skip >*/
{
  PIKA_ITEM_TYPE_LAYERS   = 1 << 0,
  PIKA_ITEM_TYPE_CHANNELS = 1 << 1,
  PIKA_ITEM_TYPE_VECTORS  = 1 << 2,

  PIKA_ITEM_TYPE_ALL      = (PIKA_ITEM_TYPE_LAYERS   |
                             PIKA_ITEM_TYPE_CHANNELS |
                             PIKA_ITEM_TYPE_VECTORS)
} PikaItemTypeMask;


#endif /* __CORE_ENUMS_H__ */
