/* 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-2003 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_PDB_UTILS_H__
#define __PIKA_PDB_UTILS_H__


PikaDataFactory * pika_pdb_get_data_factory       (Pika               *pika,
                                                   GType               data_type);

GList           * pika_pdb_get_resources          (Pika               *pika,
                                                   GType               data_type,
                                                   const gchar        *name,
                                                   PikaPDBDataAccess   access,
                                                   GError            **error);
PikaResource    * pika_pdb_get_resource           (Pika               *pika,
                                                   GType               data_type,
                                                   const gchar        *name,
                                                   PikaPDBDataAccess   access,
                                                   GError            **error);
PikaResource    * pika_pdb_get_resource_by_id     (Pika               *pika,
                                                   GType               data_type,
                                                   const gchar        *name,
                                                   const gchar        *collection,
                                                   gboolean            is_internal,
                                                   PikaPDBDataAccess   access,
                                                   GError            **error);
PikaBrush       * pika_pdb_get_generated_brush    (Pika               *pika,
                                                   const gchar        *name,
                                                   PikaPDBDataAccess   access,
                                                   GError            **error);

PikaBuffer      * pika_pdb_get_buffer             (Pika               *pika,
                                                   const gchar        *name,
                                                   GError            **error);
PikaPaintInfo   * pika_pdb_get_paint_info         (Pika               *pika,
                                                   const gchar        *name,
                                                   GError            **error);

gboolean          pika_pdb_item_is_attached       (PikaItem           *item,
                                                   PikaImage          *image,
                                                   PikaPDBItemModify   modify,
                                                   GError            **error);
gboolean          pika_pdb_item_is_in_tree        (PikaItem           *item,
                                                   PikaImage          *image,
                                                   PikaPDBItemModify   modify,
                                                   GError            **error);
gboolean          pika_pdb_item_is_in_same_tree   (PikaItem           *item,
                                                   PikaItem           *item2,
                                                   PikaImage          *image,
                                                   GError            **error);
gboolean          pika_pdb_item_is_not_ancestor   (PikaItem           *item,
                                                   PikaItem           *not_descendant,
                                                   GError            **error);
gboolean          pika_pdb_item_is_floating       (PikaItem           *item,
                                                   PikaImage          *dest_image,
                                                   GError            **error);
gboolean          pika_pdb_item_is_modifiable     (PikaItem           *item,
                                                   PikaPDBItemModify   modify,
                                                   GError            **error);
gboolean          pika_pdb_item_is_group          (PikaItem           *item,
                                                   GError            **error);
gboolean          pika_pdb_item_is_not_group      (PikaItem           *item,
                                                   GError            **error);

gboolean          pika_pdb_layer_is_text_layer    (PikaLayer          *layer,
                                                   PikaPDBItemModify   modify,
                                                   GError            **error);

gboolean          pika_pdb_image_is_base_type     (PikaImage          *image,
                                                   PikaImageBaseType   type,
                                                   GError            **error);
gboolean          pika_pdb_image_is_not_base_type (PikaImage          *image,
                                                   PikaImageBaseType   type,
                                                   GError            **error);

gboolean          pika_pdb_image_is_precision     (PikaImage          *image,
                                                   PikaPrecision       precision,
                                                   GError            **error);
gboolean          pika_pdb_image_is_not_precision (PikaImage          *image,
                                                   PikaPrecision       precision,
                                                   GError            **error);

PikaGuide       * pika_pdb_image_get_guide        (PikaImage          *image,
                                                   gint                guide_id,
                                                   GError            **error);
PikaSamplePoint * pika_pdb_image_get_sample_point (PikaImage          *image,
                                                   gint                sample_point_id,
                                                   GError            **error);

PikaStroke      * pika_pdb_get_vectors_stroke     (PikaVectors        *vectors,
                                                   gint                stroke_id,
                                                   PikaPDBItemModify   modify,
                                                   GError            **error);

gboolean          pika_pdb_is_canonical_procedure (const gchar        *procedure_name,
                                                   GError            **error);


#endif /* __PIKA_PDB_UTILS_H__ */
