示例#1
0
static void
etcta_reflow (GnomeCanvasItem *item,
              gint flags)
{
	ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (item);

	gdouble old_height = etcta->height;

	if (etcta->text) {
		g_object_get (
			etcta->text,
			"height", &etcta->height,
			NULL);
		etcta->height += 6;
	}
	if (etcta->row) {
		g_object_get (
			etcta->row,
			"height", &etcta->height,
			NULL);
	}

	if (etcta->rect) {
		g_object_set (
			etcta->rect,
			"y2", etcta->height - 1,
			NULL);
	}

	if (old_height != etcta->height)
		e_canvas_item_request_parent_reflow (item);
}
static void
eti_get_extents (AtkComponent *component,
                 gint *x,
                 gint *y,
                 gint *width,
                 gint *height,
                 AtkCoordType coord_type)
{
	ETableItem *item;
	AtkObject *parent;

	item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (component)));
	if (!item)
		return;

	parent = ATK_OBJECT (component)->accessible_parent;
	if (parent && ATK_IS_COMPONENT (parent))
		atk_component_get_extents (
			ATK_COMPONENT (parent),
			x, y,
			width, height,
			coord_type);

	if (parent && GAL_A11Y_IS_E_TABLE_CLICK_TO_ADD (parent)) {
		ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (
			atk_gobject_accessible_get_object (
			ATK_GOBJECT_ACCESSIBLE (parent)));
		if (etcta) {
			*width = etcta->width;
			*height = etcta->height;
		}
	}
}
static gboolean
idle_do_action (gpointer data)
{
	GtkLayout *layout;
	GdkEventButton event;
	ETableClickToAdd * etcta;
	gint finished;

	g_return_val_if_fail (data!= NULL, FALSE);

	etcta = E_TABLE_CLICK_TO_ADD (
		atk_gobject_accessible_get_object (
		ATK_GOBJECT_ACCESSIBLE (data)));
	g_return_val_if_fail (etcta, FALSE);

	layout = GTK_LAYOUT (GNOME_CANVAS_ITEM (etcta)->canvas);

	event.x = 0;
	event.y = 0;
	event.type = GDK_BUTTON_PRESS;
	event.window = gtk_layout_get_bin_window (layout);
	event.button = 1;
	event.send_event = TRUE;
	event.time = GDK_CURRENT_TIME;
	event.axes = NULL;

	g_signal_emit_by_name (etcta, "event", &event, &finished);

	return FALSE;
}
示例#4
0
static void
etcta_get_property (GObject *object,
                    guint property_id,
                    GValue *value,
                    GParamSpec *pspec)
{
	ETableClickToAdd *etcta;

	etcta = E_TABLE_CLICK_TO_ADD (object);

	switch (property_id) {
	case PROP_HEADER:
		g_value_set_object (value, etcta->eth);
		break;
	case PROP_MODEL:
		g_value_set_object (value, etcta->model);
		break;
	case PROP_MESSAGE:
		g_value_set_string (value, etcta->message);
		break;
	case PROP_WIDTH:
		g_value_set_double (value, etcta->width);
		break;
	case PROP_HEIGHT:
		g_value_set_double (value, etcta->height);
		break;
	case PROP_IS_EDITING:
		g_value_set_boolean (value, e_table_click_to_add_is_editing (etcta));
		break;
	default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}
static AtkObject *
etcta_ref_child (AtkObject *accessible,
                 gint i)
{
	AtkObject * atk_obj = NULL;
	ETableClickToAdd * etcta;

	if (i != 0)
		return NULL;

	etcta = E_TABLE_CLICK_TO_ADD (
		atk_gobject_accessible_get_object (
		ATK_GOBJECT_ACCESSIBLE (accessible)));

	g_return_val_if_fail (etcta, NULL);

	if (etcta->rect) {
		atk_obj = atk_gobject_accessible_for_object (
			G_OBJECT (etcta->rect));
	} else if (etcta->row) {
		atk_obj = atk_gobject_accessible_for_object (
			G_OBJECT (etcta->row));
	}

	g_object_ref (atk_obj);

	return atk_obj;
}
static gint
etcta_get_n_children (AtkObject *accessible)
{
	ETableClickToAdd * etcta;

	etcta = E_TABLE_CLICK_TO_ADD (
		atk_gobject_accessible_get_object (
		ATK_GOBJECT_ACCESSIBLE (accessible)));

	return (etcta->rect || etcta->row) ? 1 : 0;
}
示例#7
0
static void
etcta_realize (GnomeCanvasItem *item)
{
	ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (item);

	create_rect_and_text (etcta);
	e_canvas_item_move_absolute (etcta->text, 2, 2);

	if (GNOME_CANVAS_ITEM_CLASS (e_table_click_to_add_parent_class)->realize)
		(*GNOME_CANVAS_ITEM_CLASS (e_table_click_to_add_parent_class)->realize)(item);

	e_canvas_item_request_reflow (item);
}
示例#8
0
static void
etcta_set_property (GObject *object,
                    guint property_id,
                    const GValue *value,
                    GParamSpec *pspec)
{
	GnomeCanvasItem *item;
	ETableClickToAdd *etcta;

	item = GNOME_CANVAS_ITEM (object);
	etcta = E_TABLE_CLICK_TO_ADD (object);

	switch (property_id) {
	case PROP_HEADER:
		etcta_drop_table_header (etcta);
		etcta_add_table_header (etcta, E_TABLE_HEADER (g_value_get_object (value)));
		break;
	case PROP_MODEL:
		etcta_drop_model (etcta);
		etcta_add_model (etcta, E_TABLE_MODEL (g_value_get_object (value)));
		break;
	case PROP_MESSAGE:
		etcta_drop_message (etcta);
		etcta_add_message (etcta, g_value_get_string (value));
		break;
	case PROP_WIDTH:
		etcta->width = g_value_get_double (value);
		if (etcta->row)
			gnome_canvas_item_set (
				etcta->row,
				"minimum_width", etcta->width,
				NULL);
		if (etcta->text)
			gnome_canvas_item_set (
				etcta->text,
				"width", (etcta->width < 4 ? 4 : etcta->width) - 4,
				NULL);
		if (etcta->rect)
			gnome_canvas_item_set (
				etcta->rect,
				"x2", etcta->width,
				NULL);
		break;
	default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		return;

	}
	gnome_canvas_item_request_update (item);
}
示例#9
0
static void
etcta_dispose (GObject *object)
{
	ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (object);

	etcta_drop_table_header (etcta);
	etcta_drop_model (etcta);
	etcta_drop_message (etcta);
	if (etcta->selection)
		g_object_unref (etcta->selection);
	etcta->selection = NULL;

	/* Chain up to parent's dispose() method. */
	G_OBJECT_CLASS (e_table_click_to_add_parent_class)->dispose (object);
}
static const gchar *
etcta_get_name (AtkObject *obj)
{
	ETableClickToAdd * etcta;

	g_return_val_if_fail (GAL_A11Y_IS_E_TABLE_CLICK_TO_ADD (obj), NULL);

	etcta = E_TABLE_CLICK_TO_ADD (
		atk_gobject_accessible_get_object (
		ATK_GOBJECT_ACCESSIBLE (obj)));
	if (etcta && etcta->message != NULL)
		return etcta->message;

	return _("click to add");
}
示例#11
0
/* Handles the events on the ETableClickToAdd, particularly
 * it creates the ETableItem and passes in some events. */
static gint
etcta_event (GnomeCanvasItem *item,
             GdkEvent *e)
{
	ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (item);

	switch (e->type) {
	case GDK_FOCUS_CHANGE:
		if (!e->focus_change.in)
			return TRUE;
		/* coverity[fallthrough] */

	case GDK_BUTTON_PRESS:
		if (etcta->text) {
			g_object_run_dispose (G_OBJECT (etcta->text));
			etcta->text = NULL;
		}
		if (etcta->rect) {
			g_object_run_dispose (G_OBJECT (etcta->rect));
			etcta->rect = NULL;
		}
		if (!etcta->row) {
			ETableModel *one;

			one = e_table_one_new (etcta->model);
			etcta_add_one (etcta, one);
			g_object_unref (one);

			e_selection_model_clear (E_SELECTION_MODEL (etcta->selection));

			etcta->row = gnome_canvas_item_new (
				GNOME_CANVAS_GROUP (item),
				e_table_item_get_type (),
				"ETableHeader", etcta->eth,
				"ETableModel", etcta->one,
				"minimum_width", etcta->width,
				"horizontal_draw_grid", TRUE,
				"vertical_draw_grid", TRUE,
				"selection_model", etcta->selection,
				"cursor_mode", E_CURSOR_SPREADSHEET,
				NULL);

			g_signal_connect (
				etcta->row, "key_press",
				G_CALLBACK (item_key_press), etcta);

			e_signal_connect_notify (
				etcta->row, "notify::is-editing",
				G_CALLBACK (table_click_to_add_row_is_editing_changed_cb), etcta);

			e_canvas_item_grab_focus (GNOME_CANVAS_ITEM (etcta->row), TRUE);

			set_initial_selection (etcta);

			g_object_notify (G_OBJECT (etcta), "is-editing");
		}
		break;

	case GDK_KEY_PRESS:
		switch (e->key.keyval) {
		case GDK_KEY_Tab:
		case GDK_KEY_KP_Tab:
		case GDK_KEY_ISO_Left_Tab:
			finish_editing (etcta);
			break;
		default:
			return FALSE;
		case GDK_KEY_Escape:
			if (etcta->row) {
				e_table_item_leave_edit (E_TABLE_ITEM (etcta->row));
				etcta_drop_one (etcta);
				g_object_run_dispose (G_OBJECT (etcta->row));
				etcta->row = NULL;
				create_rect_and_text (etcta);
				e_canvas_item_move_absolute (etcta->text, 3, 3);
			}
			break;
		}
		break;

	default:
		return FALSE;
	}
	return TRUE;
}