summaryrefslogtreecommitdiffstats
path: root/src/nautilus-view-item.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nautilus-view-item.c')
-rw-r--r--src/nautilus-view-item.c280
1 files changed, 280 insertions, 0 deletions
diff --git a/src/nautilus-view-item.c b/src/nautilus-view-item.c
new file mode 100644
index 0000000..84423fa
--- /dev/null
+++ b/src/nautilus-view-item.c
@@ -0,0 +1,280 @@
+/*
+ * Copyright (C) 2022 The GNOME project contributors
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#include "nautilus-view-item.h"
+
+struct _NautilusViewItem
+{
+ GObject parent_instance;
+ guint icon_size;
+ gboolean is_cut;
+ gboolean drag_accept;
+ NautilusFile *file;
+ GtkWidget *item_ui;
+};
+
+G_DEFINE_TYPE (NautilusViewItem, nautilus_view_item, G_TYPE_OBJECT)
+
+enum
+{
+ PROP_0,
+ PROP_FILE,
+ PROP_ICON_SIZE,
+ PROP_IS_CUT,
+ PROP_DRAG_ACCEPT,
+ PROP_ITEM_UI,
+ N_PROPS
+};
+
+static GParamSpec *properties[N_PROPS] = { NULL, };
+
+enum
+{
+ FILE_CHANGED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+static void
+nautilus_view_item_dispose (GObject *object)
+{
+ NautilusViewItem *self = NAUTILUS_VIEW_ITEM (object);
+
+ g_clear_object (&self->item_ui);
+
+ G_OBJECT_CLASS (nautilus_view_item_parent_class)->dispose (object);
+}
+
+static void
+nautilus_view_item_finalize (GObject *object)
+{
+ NautilusViewItem *self = NAUTILUS_VIEW_ITEM (object);
+
+ g_clear_object (&self->file);
+
+ G_OBJECT_CLASS (nautilus_view_item_parent_class)->finalize (object);
+}
+
+static void
+nautilus_view_item_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NautilusViewItem *self = NAUTILUS_VIEW_ITEM (object);
+
+ switch (prop_id)
+ {
+ case PROP_FILE:
+ {
+ g_value_set_object (value, self->file);
+ }
+ break;
+
+ case PROP_ICON_SIZE:
+ {
+ g_value_set_int (value, self->icon_size);
+ }
+ break;
+
+ case PROP_IS_CUT:
+ {
+ g_value_set_boolean (value, self->is_cut);
+ }
+ break;
+
+ case PROP_DRAG_ACCEPT:
+ {
+ g_value_set_boolean (value, self->drag_accept);
+ }
+ break;
+
+ case PROP_ITEM_UI:
+ {
+ g_value_set_object (value, self->item_ui);
+ }
+ break;
+
+ default:
+ {
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+ }
+}
+
+static void
+nautilus_view_item_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NautilusViewItem *self = NAUTILUS_VIEW_ITEM (object);
+
+ switch (prop_id)
+ {
+ case PROP_FILE:
+ {
+ self->file = g_value_dup_object (value);
+ }
+ break;
+
+ case PROP_ICON_SIZE:
+ {
+ self->icon_size = g_value_get_int (value);
+ }
+ break;
+
+ case PROP_IS_CUT:
+ {
+ self->is_cut = g_value_get_boolean (value);
+ }
+ break;
+
+ case PROP_DRAG_ACCEPT:
+ {
+ self->drag_accept = g_value_get_boolean (value);
+ }
+ break;
+
+ case PROP_ITEM_UI:
+ {
+ g_set_object (&self->item_ui, g_value_get_object (value));
+ }
+ break;
+
+ default:
+ {
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+ }
+}
+
+static void
+nautilus_view_item_init (NautilusViewItem *self)
+{
+}
+
+static void
+nautilus_view_item_class_init (NautilusViewItemClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = nautilus_view_item_dispose;
+ object_class->finalize = nautilus_view_item_finalize;
+ object_class->get_property = nautilus_view_item_get_property;
+ object_class->set_property = nautilus_view_item_set_property;
+
+ properties[PROP_ICON_SIZE] = g_param_spec_int ("icon-size",
+ "", "",
+ NAUTILUS_LIST_ICON_SIZE_SMALL,
+ NAUTILUS_GRID_ICON_SIZE_EXTRA_LARGE,
+ NAUTILUS_GRID_ICON_SIZE_LARGE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
+ properties[PROP_IS_CUT] = g_param_spec_boolean ("is-cut",
+ "", "",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ properties[PROP_DRAG_ACCEPT] = g_param_spec_boolean ("drag-accept",
+ "", "",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ properties[PROP_FILE] = g_param_spec_object ("file",
+ "", "",
+ NAUTILUS_TYPE_FILE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+ properties[PROP_ITEM_UI] = g_param_spec_object ("item-ui",
+ "", "",
+ GTK_TYPE_WIDGET,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_properties (object_class, N_PROPS, properties);
+
+ signals[FILE_CHANGED] = g_signal_new ("file-changed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+}
+
+NautilusViewItem *
+nautilus_view_item_new (NautilusFile *file,
+ guint icon_size)
+{
+ return g_object_new (NAUTILUS_TYPE_VIEW_ITEM,
+ "file", file,
+ "icon-size", icon_size,
+ NULL);
+}
+
+guint
+nautilus_view_item_get_icon_size (NautilusViewItem *self)
+{
+ g_return_val_if_fail (NAUTILUS_IS_VIEW_ITEM (self), -1);
+
+ return self->icon_size;
+}
+
+void
+nautilus_view_item_set_icon_size (NautilusViewItem *self,
+ guint icon_size)
+{
+ g_return_if_fail (NAUTILUS_IS_VIEW_ITEM (self));
+
+ g_object_set (self, "icon-size", icon_size, NULL);
+}
+
+void
+nautilus_view_item_set_cut (NautilusViewItem *self,
+ gboolean is_cut)
+{
+ g_return_if_fail (NAUTILUS_IS_VIEW_ITEM (self));
+
+ g_object_set (self, "is-cut", is_cut, NULL);
+}
+
+void
+nautilus_view_item_set_drag_accept (NautilusViewItem *self,
+ gboolean drag_accept)
+{
+ g_return_if_fail (NAUTILUS_IS_VIEW_ITEM (self));
+
+ g_object_set (self, "drag-accept", drag_accept, NULL);
+}
+
+NautilusFile *
+nautilus_view_item_get_file (NautilusViewItem *self)
+{
+ g_return_val_if_fail (NAUTILUS_IS_VIEW_ITEM (self), NULL);
+
+ return self->file;
+}
+
+GtkWidget *
+nautilus_view_item_get_item_ui (NautilusViewItem *self)
+{
+ g_return_val_if_fail (NAUTILUS_IS_VIEW_ITEM (self), NULL);
+
+ return self->item_ui;
+}
+
+void
+nautilus_view_item_set_item_ui (NautilusViewItem *self,
+ GtkWidget *item_ui)
+{
+ g_return_if_fail (NAUTILUS_IS_VIEW_ITEM (self));
+
+ g_object_set (self, "item-ui", item_ui, NULL);
+}
+
+void
+nautilus_view_item_file_changed (NautilusViewItem *self)
+{
+ g_return_if_fail (NAUTILUS_IS_VIEW_ITEM (self));
+
+ g_signal_emit (self, signals[FILE_CHANGED], 0);
+}