X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fui%2Fgui%2Fpsppire-button-editable.c;h=a3b910af22729fa10e73795184b76d92895150b7;hb=811c669032a18cfff53291a98e5803afdf39db36;hp=cefc7a594d92e2fe0f52c41324fab2281b192fca;hpb=f95002ec226b18f52773e747cae7e1d00302ad1a;p=pspp diff --git a/src/ui/gui/psppire-button-editable.c b/src/ui/gui/psppire-button-editable.c index cefc7a594d..a3b910af22 100644 --- a/src/ui/gui/psppire-button-editable.c +++ b/src/ui/gui/psppire-button-editable.c @@ -40,7 +40,9 @@ G_DEFINE_TYPE_EXTENDED (PsppireButtonEditable, enum { PROP_0, - PROP_PATH + PROP_PATH, + PROP_SLASH, + PROP_EDITING_CANCELED }; static void @@ -58,6 +60,13 @@ psppire_button_editable_set_property (GObject *object, obj->path = g_value_dup_string (value); break; + case PROP_SLASH: + psppire_button_editable_set_slash (obj, g_value_get_boolean (value)); + break; + + case PROP_EDITING_CANCELED: + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -78,6 +87,14 @@ psppire_button_editable_get_property (GObject *object, g_value_set_string (value, obj->path); break; + case PROP_SLASH: + g_value_set_boolean (value, psppire_button_editable_get_slash (obj)); + break; + + case PROP_EDITING_CANCELED: + g_value_set_boolean (value, FALSE); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -85,14 +102,13 @@ psppire_button_editable_get_property (GObject *object, } static void -psppire_button_editable_dispose (GObject *gobject) +psppire_button_editable_finalize (GObject *gobject) { PsppireButtonEditable *obj = PSPPIRE_BUTTON_EDITABLE (gobject); g_free (obj->path); - obj->path = NULL; - G_OBJECT_CLASS (psppire_button_editable_parent_class)->dispose (gobject); + G_OBJECT_CLASS (psppire_button_editable_parent_class)->finalize (gobject); } static gboolean @@ -110,6 +126,28 @@ psppire_button_editable_button_release (GtkWidget *widget, return TRUE; } +static gboolean +psppire_button_editable_expose_event (GtkWidget *widget, + GdkEventExpose *event) +{ + GtkWidgetClass *widget_class; + GtkStyle *style = gtk_widget_get_style (widget); + GtkAllocation allocation; + gboolean retval; + + widget_class = GTK_WIDGET_CLASS (psppire_button_editable_parent_class); + retval = widget_class->expose_event (widget, event); + + gtk_widget_get_allocation (widget, &allocation); + if (PSPPIRE_BUTTON_EDITABLE (widget)->slash) + gdk_draw_line (gtk_widget_get_window (widget), style->black_gc, + allocation.x, + allocation.y + allocation.height, + allocation.x + allocation.width, + allocation.y); + return retval; +} + static void psppire_button_editable_class_init (PsppireButtonEditableClass *class) { @@ -121,23 +159,37 @@ psppire_button_editable_class_init (PsppireButtonEditableClass *class) gobject_class->set_property = psppire_button_editable_set_property; gobject_class->get_property = psppire_button_editable_get_property; - gobject_class->dispose = psppire_button_editable_dispose; + gobject_class->finalize = psppire_button_editable_finalize; widget_class->button_release_event = psppire_button_editable_button_release; + widget_class->expose_event = psppire_button_editable_expose_event; - g_object_class_install_property (G_OBJECT_CLASS (class), + g_object_class_install_property (gobject_class, PROP_PATH, g_param_spec_string ("path", _("TreeView path"), _("The path to the row in the GtkTreeView, as a string"), "", G_PARAM_READWRITE)); + + g_object_class_install_property (gobject_class, + PROP_SLASH, + g_param_spec_boolean ("slash", + _("Diagonal slash"), + _("Whether to draw a diagonal slash across the button."), + FALSE, + G_PARAM_READWRITE)); + + g_object_class_override_property (gobject_class, + PROP_EDITING_CANCELED, + "editing-canceled"); } static void psppire_button_editable_init (PsppireButtonEditable *obj) { obj->path = g_strdup (""); + obj->slash = FALSE; } PsppireButtonEditable * @@ -145,6 +197,25 @@ psppire_button_editable_new (void) { return PSPPIRE_BUTTON_EDITABLE (g_object_new (PSPPIRE_TYPE_BUTTON_EDITABLE, NULL)); } + +void +psppire_button_editable_set_slash (PsppireButtonEditable *button, + gboolean slash) +{ + g_return_if_fail (button != NULL); + if ((button->slash != 0) != (slash != 0)) + { + button->slash = slash; + gtk_widget_queue_draw (GTK_WIDGET (button)); + } +} + +gboolean +psppire_button_editable_get_slash (const PsppireButtonEditable *button) +{ + g_return_val_if_fail (button != NULL, FALSE); + return button->slash; +} /* GtkCellEditable interface. */