/* LIBPIKA - The PIKA Library
 * Copyright (C) 1995-2003 Peter Mattis and Spencer Kimball
 *
 * pikaresource_pdb.c
 *
 * 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/>.
 */

/* NOTE: This file is auto-generated by pdbgen.pl */

#include "config.h"

#include "stamp-pdbgen.h"

#include "pika.h"


/**
 * SECTION: pikaresource
 * @title: pikaresource
 * @short_description: Functions to manipulate resources.
 *
 * Functions to manipulate resources.
 **/


/**
 * _pika_resource_get_by_name:
 * @type_name: The name of the resource type.
 * @resource_name: The name of the resource.
 *
 * Returns a resource with the given name.
 *
 * Returns a resource with the given name.
 *
 * Returns: (transfer none): The resource.
 *
 * Since: 3.0
 **/
PikaResource *
_pika_resource_get_by_name (const gchar *type_name,
                            const gchar *resource_name)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  PikaResource *resource = NULL;

  args = pika_value_array_new_from_types (NULL,
                                          G_TYPE_STRING, type_name,
                                          G_TYPE_STRING, resource_name,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-resource-get-by-name",
                                               args);
  pika_value_array_unref (args);

  if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS)
    resource = PIKA_VALUES_GET_RESOURCE (return_vals, 1);

  pika_value_array_unref (return_vals);

  return resource;
}

/**
 * _pika_resource_get_by_identifiers:
 * @type_name: The name of the resource type.
 * @resource_name: The name of the resource.
 * @collection: The collection identifier.
 * @is_internal: Whether this is the identifier for internal data.
 *
 * Returns the resource contained in a given file with a given name.
 *
 * Returns a resource specifically stored in a given file path, under a
 * given name (a single path may be a collection containing several
 * resources).
 *
 * Returns: (transfer none): The resource.
 *
 * Since: 3.0
 **/
PikaResource *
_pika_resource_get_by_identifiers (const gchar *type_name,
                                   const gchar *resource_name,
                                   const gchar *collection,
                                   gboolean     is_internal)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  PikaResource *resource = NULL;

  args = pika_value_array_new_from_types (NULL,
                                          G_TYPE_STRING, type_name,
                                          G_TYPE_STRING, resource_name,
                                          G_TYPE_STRING, collection,
                                          G_TYPE_BOOLEAN, is_internal,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-resource-get-by-identifiers",
                                               args);
  pika_value_array_unref (args);

  if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS)
    resource = PIKA_VALUES_GET_RESOURCE (return_vals, 1);

  pika_value_array_unref (return_vals);

  return resource;
}

/**
 * pika_resource_id_is_valid:
 * @resource_id: The resource ID to check.
 *
 * Returns TRUE if the resource ID is valid.
 *
 * This procedure checks if the given resource ID is valid and refers
 * to an existing resource.
 *
 * Returns: Whether the resource ID is valid.
 *
 * Since: 3.0
 **/
gboolean
pika_resource_id_is_valid (gint resource_id)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean valid = FALSE;

  args = pika_value_array_new_from_types (NULL,
                                          G_TYPE_INT, resource_id,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-resource-id-is-valid",
                                               args);
  pika_value_array_unref (args);

  if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS)
    valid = PIKA_VALUES_GET_BOOLEAN (return_vals, 1);

  pika_value_array_unref (return_vals);

  return valid;
}

/**
 * pika_resource_id_is_brush:
 * @resource_id: The resource ID.
 *
 * Returns whether the resource ID is a brush.
 *
 * This procedure returns TRUE if the specified resource ID is a brush.
 *
 * Returns: TRUE if the resource ID is a brush, FALSE otherwise.
 *
 * Since: 3.0
 **/
gboolean
pika_resource_id_is_brush (gint resource_id)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean brush = FALSE;

  args = pika_value_array_new_from_types (NULL,
                                          G_TYPE_INT, resource_id,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-resource-id-is-brush",
                                               args);
  pika_value_array_unref (args);

  if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS)
    brush = PIKA_VALUES_GET_BOOLEAN (return_vals, 1);

  pika_value_array_unref (return_vals);

  return brush;
}

/**
 * pika_resource_id_is_pattern:
 * @resource_id: The resource ID.
 *
 * Returns whether the resource ID is a pattern.
 *
 * This procedure returns TRUE if the specified resource ID is a
 * pattern.
 *
 * Returns: TRUE if the resource ID is a pattern, FALSE otherwise.
 *
 * Since: 3.0
 **/
gboolean
pika_resource_id_is_pattern (gint resource_id)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean pattern = FALSE;

  args = pika_value_array_new_from_types (NULL,
                                          G_TYPE_INT, resource_id,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-resource-id-is-pattern",
                                               args);
  pika_value_array_unref (args);

  if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS)
    pattern = PIKA_VALUES_GET_BOOLEAN (return_vals, 1);

  pika_value_array_unref (return_vals);

  return pattern;
}

/**
 * pika_resource_id_is_gradient:
 * @resource_id: The resource ID.
 *
 * Returns whether the resource ID is a gradient.
 *
 * This procedure returns TRUE if the specified resource ID is a
 * gradient.
 *
 * Returns: TRUE if the resource ID is a gradient, FALSE otherwise.
 *
 * Since: 3.0
 **/
gboolean
pika_resource_id_is_gradient (gint resource_id)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean gradient = FALSE;

  args = pika_value_array_new_from_types (NULL,
                                          G_TYPE_INT, resource_id,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-resource-id-is-gradient",
                                               args);
  pika_value_array_unref (args);

  if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS)
    gradient = PIKA_VALUES_GET_BOOLEAN (return_vals, 1);

  pika_value_array_unref (return_vals);

  return gradient;
}

/**
 * pika_resource_id_is_palette:
 * @resource_id: The resource ID.
 *
 * Returns whether the resource ID is a palette.
 *
 * This procedure returns TRUE if the specified resource ID is a
 * palette.
 *
 * Returns: TRUE if the resource ID is a palette, FALSE otherwise.
 *
 * Since: 3.0
 **/
gboolean
pika_resource_id_is_palette (gint resource_id)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean palette = FALSE;

  args = pika_value_array_new_from_types (NULL,
                                          G_TYPE_INT, resource_id,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-resource-id-is-palette",
                                               args);
  pika_value_array_unref (args);

  if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS)
    palette = PIKA_VALUES_GET_BOOLEAN (return_vals, 1);

  pika_value_array_unref (return_vals);

  return palette;
}

/**
 * pika_resource_id_is_font:
 * @resource_id: The resource ID.
 *
 * Returns whether the resource ID is a font.
 *
 * This procedure returns TRUE if the specified resource ID is a font.
 *
 * Returns: TRUE if the resource ID is a font, FALSE otherwise.
 *
 * Since: 3.0
 **/
gboolean
pika_resource_id_is_font (gint resource_id)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean font = FALSE;

  args = pika_value_array_new_from_types (NULL,
                                          G_TYPE_INT, resource_id,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-resource-id-is-font",
                                               args);
  pika_value_array_unref (args);

  if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS)
    font = PIKA_VALUES_GET_BOOLEAN (return_vals, 1);

  pika_value_array_unref (return_vals);

  return font;
}

/**
 * pika_resource_get_name:
 * @resource: The resource.
 *
 * Returns the resource's name.
 *
 * This procedure returns the resource's name.
 *
 * Returns: (transfer full): The resource's name.
 *          The returned value must be freed with g_free().
 *
 * Since: 3.0
 **/
gchar *
pika_resource_get_name (PikaResource *resource)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gchar *name = NULL;

  args = pika_value_array_new_from_types (NULL,
                                          PIKA_TYPE_RESOURCE, resource,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-resource-get-name",
                                               args);
  pika_value_array_unref (args);

  if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS)
    name = PIKA_VALUES_DUP_STRING (return_vals, 1);

  pika_value_array_unref (return_vals);

  return name;
}

/**
 * _pika_resource_get_identifiers:
 * @resource: The resource.
 * @name: (out) (transfer full): The resource's name.
 * @collection_id: (out) (transfer full): The resource's collection identifier.
 *
 * Returns a triplet identifying the resource.
 *
 * This procedure returns 2 strings and a boolean. The first string is
 * the resource name, similar to what you would obtain calling
 * pika_resource_get_name(). The second is an opaque identifier for the
 * collection this resource belongs to.
 * Note: as far as PIKA is concerned, a collection of resource usually
 * corresponds to a single file on disk (which may or may not contain
 * several resources). Therefore the identifier may be derived from the
 * local file path. Nevertheless you should not use this string as such
 * as this is not guaranteed to be always the case. You should consider
 * it as an opaque identifier only to be used again through
 * _pika_resource_get_by_identifier().
 *
 * Returns: Whether this is the identifier for internal data.
 *
 * Since: 3.0
 **/
gboolean
_pika_resource_get_identifiers (PikaResource  *resource,
                                gchar        **name,
                                gchar        **collection_id)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean is_internal = FALSE;

  args = pika_value_array_new_from_types (NULL,
                                          PIKA_TYPE_RESOURCE, resource,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-resource-get-identifiers",
                                               args);
  pika_value_array_unref (args);

  if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS)
    {
      is_internal = PIKA_VALUES_GET_BOOLEAN (return_vals, 1);
      *name = PIKA_VALUES_DUP_STRING (return_vals, 2);
      *collection_id = PIKA_VALUES_DUP_STRING (return_vals, 3);
    }

  pika_value_array_unref (return_vals);

  return is_internal;
}

/**
 * pika_resource_is_editable:
 * @resource: The resource.
 *
 * Whether the resource can be edited.
 *
 * Returns TRUE if you have permission to change the resource.
 *
 * Returns: TRUE if the resource can be edited.
 *
 * Since: 3.0
 **/
gboolean
pika_resource_is_editable (PikaResource *resource)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean editable = FALSE;

  args = pika_value_array_new_from_types (NULL,
                                          PIKA_TYPE_RESOURCE, resource,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-resource-is-editable",
                                               args);
  pika_value_array_unref (args);

  if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS)
    editable = PIKA_VALUES_GET_BOOLEAN (return_vals, 1);

  pika_value_array_unref (return_vals);

  return editable;
}

/**
 * pika_resource_duplicate:
 * @resource: The resource.
 *
 * Duplicates a resource.
 *
 * Returns a copy having a different, unique ID.
 *
 * Returns: (transfer none): A copy of the resource.
 *
 * Since: 3.0
 **/
PikaResource *
pika_resource_duplicate (PikaResource *resource)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  PikaResource *resource_copy = NULL;

  args = pika_value_array_new_from_types (NULL,
                                          PIKA_TYPE_RESOURCE, resource,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-resource-duplicate",
                                               args);
  pika_value_array_unref (args);

  if (PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS)
    resource_copy = PIKA_VALUES_GET_RESOURCE (return_vals, 1);

  pika_value_array_unref (return_vals);

  return resource_copy;
}

/**
 * pika_resource_rename:
 * @resource: The resource.
 * @new_name: The proposed new name of the resource.
 *
 * Renames a resource. When the name is in use, renames to a unique
 * name.
 *
 * Renames a resource. When the proposed name is already used, PIKA
 * generates a unique name.
 *
 * Returns: TRUE on success.
 *
 * Since: 3.0
 **/
gboolean
pika_resource_rename (PikaResource *resource,
                      const gchar  *new_name)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean success = TRUE;

  args = pika_value_array_new_from_types (NULL,
                                          PIKA_TYPE_RESOURCE, resource,
                                          G_TYPE_STRING, new_name,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-resource-rename",
                                               args);
  pika_value_array_unref (args);

  success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS;

  pika_value_array_unref (return_vals);

  return success;
}

/**
 * pika_resource_delete:
 * @resource: The resource.
 *
 * Deletes a resource.
 *
 * Deletes a resource. Returns an error if the resource is not
 * deletable. Deletes the resource's data. You should not use the
 * resource afterwards.
 *
 * Returns: TRUE on success.
 *
 * Since: 3.0
 **/
gboolean
pika_resource_delete (PikaResource *resource)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean success = TRUE;

  args = pika_value_array_new_from_types (NULL,
                                          PIKA_TYPE_RESOURCE, resource,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-resource-delete",
                                               args);
  pika_value_array_unref (args);

  success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS;

  pika_value_array_unref (return_vals);

  return success;
}
