181 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			181 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/* 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
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * pikastringaction.c
							 | 
						||
| 
								 | 
							
								 * Copyright (C) 2004 Michael Natterer <mitch@gimp.org>
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * 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/>.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "config.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <gtk/gtk.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "libpikabase/pikabase.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "widgets-types.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "pikaaction.h"
							 | 
						||
| 
								 | 
							
								#include "pikaaction-history.h"
							 | 
						||
| 
								 | 
							
								#include "pikastringaction.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								enum
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  PROP_0,
							 | 
						||
| 
								 | 
							
								  PROP_VALUE
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void   pika_string_action_g_action_iface_init (GActionInterface *iface);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void   pika_string_action_finalize            (GObject          *object);
							 | 
						||
| 
								 | 
							
								static void   pika_string_action_set_property        (GObject          *object,
							 | 
						||
| 
								 | 
							
								                                                      guint             prop_id,
							 | 
						||
| 
								 | 
							
								                                                      const GValue     *value,
							 | 
						||
| 
								 | 
							
								                                                      GParamSpec       *pspec);
							 | 
						||
| 
								 | 
							
								static void   pika_string_action_get_property        (GObject          *object,
							 | 
						||
| 
								 | 
							
								                                                      guint             prop_id,
							 | 
						||
| 
								 | 
							
								                                                      GValue           *value,
							 | 
						||
| 
								 | 
							
								                                                      GParamSpec       *pspec);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void   pika_string_action_activate            (GAction          *action,
							 | 
						||
| 
								 | 
							
								                                                      GVariant         *parameter);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								G_DEFINE_TYPE_WITH_CODE (PikaStringAction, pika_string_action, PIKA_TYPE_ACTION_IMPL,
							 | 
						||
| 
								 | 
							
								                         G_IMPLEMENT_INTERFACE (G_TYPE_ACTION, pika_string_action_g_action_iface_init))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define parent_class pika_string_action_parent_class
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void
							 | 
						||
| 
								 | 
							
								pika_string_action_class_init (PikaStringActionClass *klass)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  GObjectClass *object_class = G_OBJECT_CLASS (klass);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  object_class->finalize     = pika_string_action_finalize;
							 | 
						||
| 
								 | 
							
								  object_class->set_property = pika_string_action_set_property;
							 | 
						||
| 
								 | 
							
								  object_class->get_property = pika_string_action_get_property;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  g_object_class_install_property (object_class, PROP_VALUE,
							 | 
						||
| 
								 | 
							
								                                   g_param_spec_string ("value",
							 | 
						||
| 
								 | 
							
								                                                        NULL, NULL,
							 | 
						||
| 
								 | 
							
								                                                        NULL,
							 | 
						||
| 
								 | 
							
								                                                        PIKA_PARAM_READWRITE));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void
							 | 
						||
| 
								 | 
							
								pika_string_action_g_action_iface_init (GActionInterface *iface)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  iface->activate = pika_string_action_activate;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void
							 | 
						||
| 
								 | 
							
								pika_string_action_init (PikaStringAction *action)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void
							 | 
						||
| 
								 | 
							
								pika_string_action_finalize (GObject *object)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  PikaStringAction *action = PIKA_STRING_ACTION (object);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  g_clear_pointer (&action->value, g_free);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  G_OBJECT_CLASS (parent_class)->finalize (object);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void
							 | 
						||
| 
								 | 
							
								pika_string_action_get_property (GObject    *object,
							 | 
						||
| 
								 | 
							
								                                 guint       prop_id,
							 | 
						||
| 
								 | 
							
								                                 GValue     *value,
							 | 
						||
| 
								 | 
							
								                                 GParamSpec *pspec)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  PikaStringAction *action = PIKA_STRING_ACTION (object);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  switch (prop_id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    case PROP_VALUE:
							 | 
						||
| 
								 | 
							
								      g_value_set_string (value, action->value);
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    default:
							 | 
						||
| 
								 | 
							
								      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void
							 | 
						||
| 
								 | 
							
								pika_string_action_set_property (GObject      *object,
							 | 
						||
| 
								 | 
							
								                                 guint         prop_id,
							 | 
						||
| 
								 | 
							
								                                 const GValue *value,
							 | 
						||
| 
								 | 
							
								                                 GParamSpec   *pspec)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  PikaStringAction *action = PIKA_STRING_ACTION (object);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  switch (prop_id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    case PROP_VALUE:
							 | 
						||
| 
								 | 
							
								      g_free (action->value);
							 | 
						||
| 
								 | 
							
								      action->value = g_value_dup_string (value);
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    default:
							 | 
						||
| 
								 | 
							
								      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								PikaStringAction *
							 | 
						||
| 
								 | 
							
								pika_string_action_new (const gchar *name,
							 | 
						||
| 
								 | 
							
								                        const gchar *label,
							 | 
						||
| 
								 | 
							
								                        const gchar *short_label,
							 | 
						||
| 
								 | 
							
								                        const gchar *tooltip,
							 | 
						||
| 
								 | 
							
								                        const gchar *icon_name,
							 | 
						||
| 
								 | 
							
								                        const gchar *help_id,
							 | 
						||
| 
								 | 
							
								                        const gchar *value,
							 | 
						||
| 
								 | 
							
								                        PikaContext *context)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  PikaStringAction *action;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  action = g_object_new (PIKA_TYPE_STRING_ACTION,
							 | 
						||
| 
								 | 
							
								                         "name",        name,
							 | 
						||
| 
								 | 
							
								                         "label",       label,
							 | 
						||
| 
								 | 
							
								                         "short-label", short_label,
							 | 
						||
| 
								 | 
							
								                         "tooltip",     tooltip,
							 | 
						||
| 
								 | 
							
								                         "icon-name",   icon_name,
							 | 
						||
| 
								 | 
							
								                         "value",       value,
							 | 
						||
| 
								 | 
							
								                         "context",     context,
							 | 
						||
| 
								 | 
							
								                         NULL);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  pika_action_set_help_id (PIKA_ACTION (action), help_id);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return action;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void
							 | 
						||
| 
								 | 
							
								pika_string_action_activate (GAction  *action,
							 | 
						||
| 
								 | 
							
								                             GVariant *parameter)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  PikaStringAction *string_action = PIKA_STRING_ACTION (action);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  pika_action_emit_activate (PIKA_ACTION (action),
							 | 
						||
| 
								 | 
							
								                             g_variant_new_string (string_action->value));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  pika_action_history_action_activated (PIKA_ACTION (action));
							 | 
						||
| 
								 | 
							
								}
							 |