Blame gtk/gtkprinteroption.c

Packit 98cdb6
/* GTK - The GIMP Toolkit
Packit 98cdb6
 * gtkprinteroption.c: Handling possible settings for a specific printer setting
Packit 98cdb6
 * Copyright (C) 2006, Red Hat, Inc.
Packit 98cdb6
 *
Packit 98cdb6
 * This library is free software; you can redistribute it and/or
Packit 98cdb6
 * modify it under the terms of the GNU Lesser General Public
Packit 98cdb6
 * License as published by the Free Software Foundation; either
Packit 98cdb6
 * version 2 of the License, or (at your option) any later version.
Packit 98cdb6
 *
Packit 98cdb6
 * This library is distributed in the hope that it will be useful,
Packit 98cdb6
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 98cdb6
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 98cdb6
 * Lesser General Public License for more details.
Packit 98cdb6
 *
Packit 98cdb6
 * You should have received a copy of the GNU Lesser General Public
Packit 98cdb6
 * License along with this library; if not, write to the
Packit 98cdb6
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit 98cdb6
 * Boston, MA 02111-1307, USA.
Packit 98cdb6
 */
Packit 98cdb6
Packit 98cdb6
#include "config.h"
Packit 98cdb6
#include <string.h>
Packit 98cdb6
#include <gmodule.h>
Packit 98cdb6
Packit 98cdb6
#include "gtkprinteroption.h"
Packit 98cdb6
#include "gtkalias.h"
Packit 98cdb6
Packit 98cdb6
/*****************************************
Packit 98cdb6
 *            GtkPrinterOption           *
Packit 98cdb6
 *****************************************/
Packit 98cdb6
Packit 98cdb6
enum {
Packit 98cdb6
  CHANGED,
Packit 98cdb6
  LAST_SIGNAL
Packit 98cdb6
};
Packit 98cdb6
Packit 98cdb6
static guint signals[LAST_SIGNAL] = { 0 };
Packit 98cdb6
Packit 98cdb6
G_DEFINE_TYPE (GtkPrinterOption, gtk_printer_option, G_TYPE_OBJECT)
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
gtk_printer_option_finalize (GObject *object)
Packit 98cdb6
{
Packit 98cdb6
  GtkPrinterOption *option = GTK_PRINTER_OPTION (object);
Packit 98cdb6
  int i;
Packit 98cdb6
  
Packit 98cdb6
  g_free (option->name);
Packit 98cdb6
  g_free (option->display_text);
Packit 98cdb6
  g_free (option->value);
Packit 98cdb6
  for (i = 0; i < option->num_choices; i++)
Packit 98cdb6
    {
Packit 98cdb6
      g_free (option->choices[i]);
Packit 98cdb6
      g_free (option->choices_display[i]);
Packit 98cdb6
    }
Packit 98cdb6
  g_free (option->choices);
Packit 98cdb6
  g_free (option->choices_display);
Packit 98cdb6
  g_free (option->group);
Packit 98cdb6
  
Packit 98cdb6
  G_OBJECT_CLASS (gtk_printer_option_parent_class)->finalize (object);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
gtk_printer_option_init (GtkPrinterOption *option)
Packit 98cdb6
{
Packit 98cdb6
  option->value = g_strdup ("");
Packit 98cdb6
  option->activates_default = FALSE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
gtk_printer_option_class_init (GtkPrinterOptionClass *class)
Packit 98cdb6
{
Packit 98cdb6
  GObjectClass *gobject_class = (GObjectClass *)class;
Packit 98cdb6
Packit 98cdb6
  gobject_class->finalize = gtk_printer_option_finalize;
Packit 98cdb6
Packit 98cdb6
  signals[CHANGED] =
Packit 98cdb6
    g_signal_new ("changed",
Packit 98cdb6
		  G_TYPE_FROM_CLASS (class),
Packit 98cdb6
		  G_SIGNAL_RUN_LAST,
Packit 98cdb6
		  G_STRUCT_OFFSET (GtkPrinterOptionClass, changed),
Packit 98cdb6
		  NULL, NULL,
Packit 98cdb6
		  g_cclosure_marshal_VOID__VOID,
Packit 98cdb6
		  G_TYPE_NONE, 0);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
GtkPrinterOption *
Packit 98cdb6
gtk_printer_option_new (const char *name, const char *display_text,
Packit 98cdb6
			GtkPrinterOptionType type)
Packit 98cdb6
{
Packit 98cdb6
  GtkPrinterOption *option;
Packit 98cdb6
Packit 98cdb6
  option = g_object_new (GTK_TYPE_PRINTER_OPTION, NULL);
Packit 98cdb6
Packit 98cdb6
  option->name = g_strdup (name);
Packit 98cdb6
  option->display_text = g_strdup (display_text);
Packit 98cdb6
  option->type = type;
Packit 98cdb6
  
Packit 98cdb6
  return option;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
emit_changed (GtkPrinterOption *option)
Packit 98cdb6
{
Packit 98cdb6
  g_signal_emit (option, signals[CHANGED], 0);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gtk_printer_option_set (GtkPrinterOption *option,
Packit 98cdb6
			const char *value)
Packit 98cdb6
{
Packit 98cdb6
  if (value == NULL)
Packit 98cdb6
    value = "";
Packit 98cdb6
  
Packit 98cdb6
  if (strcmp (option->value, value) == 0)
Packit 98cdb6
    return;
Packit 98cdb6
Packit 98cdb6
  if ((option->type == GTK_PRINTER_OPTION_TYPE_PICKONE ||
Packit 98cdb6
       option->type == GTK_PRINTER_OPTION_TYPE_ALTERNATIVE) &&
Packit 98cdb6
      value != NULL)
Packit 98cdb6
    {
Packit 98cdb6
      int i;
Packit 98cdb6
      
Packit 98cdb6
      for (i = 0; i < option->num_choices; i++)
Packit 98cdb6
	{
Packit 98cdb6
	  if (g_ascii_strcasecmp (value, option->choices[i]) == 0)
Packit 98cdb6
	    {
Packit 98cdb6
	      value = option->choices[i];
Packit 98cdb6
	      break;
Packit 98cdb6
	    }
Packit 98cdb6
	}
Packit 98cdb6
Packit 98cdb6
      if (i == option->num_choices)
Packit 98cdb6
	return; /* Not found in available choices */
Packit 98cdb6
    }
Packit 98cdb6
  
Packit 98cdb6
  g_free (option->value);
Packit 98cdb6
  option->value = g_strdup (value);
Packit 98cdb6
  
Packit 98cdb6
  emit_changed (option);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gtk_printer_option_set_boolean (GtkPrinterOption *option,
Packit 98cdb6
				gboolean value)
Packit 98cdb6
{
Packit 98cdb6
  gtk_printer_option_set (option, value ? "True" : "False");
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gtk_printer_option_set_has_conflict  (GtkPrinterOption *option,
Packit 98cdb6
				      gboolean  has_conflict)
Packit 98cdb6
{
Packit 98cdb6
  has_conflict = has_conflict != 0;
Packit 98cdb6
  
Packit 98cdb6
  if (option->has_conflict == has_conflict)
Packit 98cdb6
    return;
Packit 98cdb6
Packit 98cdb6
  option->has_conflict = has_conflict;
Packit 98cdb6
  emit_changed (option);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gtk_printer_option_clear_has_conflict (GtkPrinterOption     *option)
Packit 98cdb6
{
Packit 98cdb6
  gtk_printer_option_set_has_conflict  (option, FALSE);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gtk_printer_option_allocate_choices (GtkPrinterOption     *option,
Packit 98cdb6
				     int num)
Packit 98cdb6
{
Packit 98cdb6
  g_free (option->choices);
Packit 98cdb6
  g_free (option->choices_display);
Packit 98cdb6
Packit 98cdb6
  option->num_choices = num;
Packit 98cdb6
  if (num == 0)
Packit 98cdb6
    {
Packit 98cdb6
      option->choices = NULL;
Packit 98cdb6
      option->choices_display = NULL;
Packit 98cdb6
    }
Packit 98cdb6
  else
Packit 98cdb6
    {
Packit 98cdb6
      option->choices = g_new0 (char *, num);
Packit 98cdb6
      option->choices_display = g_new0 (char *, num);
Packit 98cdb6
    }
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gtk_printer_option_choices_from_array (GtkPrinterOption   *option,
Packit 98cdb6
				       int                 num_choices,
Packit 98cdb6
				       char               *choices[],
Packit 98cdb6
				       char              *choices_display[])
Packit 98cdb6
{
Packit 98cdb6
  int i;
Packit 98cdb6
  
Packit 98cdb6
  gtk_printer_option_allocate_choices (option, num_choices);
Packit 98cdb6
  for (i = 0; i < num_choices; i++)
Packit 98cdb6
    {
Packit 98cdb6
      option->choices[i] = g_strdup (choices[i]);
Packit 98cdb6
      option->choices_display[i] = g_strdup (choices_display[i]);
Packit 98cdb6
    }
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gboolean
Packit 98cdb6
gtk_printer_option_has_choice (GtkPrinterOption     *option,
Packit 98cdb6
			       const char           *choice)
Packit 98cdb6
{
Packit 98cdb6
  int i;
Packit 98cdb6
  
Packit 98cdb6
  for (i = 0; i < option->num_choices; i++)
Packit 98cdb6
    {
Packit 98cdb6
      if (strcmp (option->choices[i], choice) == 0)
Packit 98cdb6
	return TRUE;
Packit 98cdb6
    }
Packit 98cdb6
  
Packit 98cdb6
  return FALSE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
void
Packit 98cdb6
gtk_printer_option_set_activates_default (GtkPrinterOption *option,
Packit 98cdb6
					  gboolean          activates)
Packit 98cdb6
{
Packit 98cdb6
  g_return_if_fail (GTK_IS_PRINTER_OPTION (option));
Packit 98cdb6
Packit 98cdb6
  option->activates_default = activates;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
gboolean
Packit 98cdb6
gtk_printer_option_get_activates_default (GtkPrinterOption *option)
Packit 98cdb6
{
Packit 98cdb6
  g_return_val_if_fail (GTK_IS_PRINTER_OPTION (option), FALSE);
Packit 98cdb6
Packit 98cdb6
  return option->activates_default;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
Packit 98cdb6
#define __GTK_PRINTER_OPTION_C__
Packit 98cdb6
#include "gtkaliasdef.c"