Beispiel #1
0
static void
wire_item_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
{
	WireItem *wire_item = WIRE_ITEM (object);

	wire_item = WIRE_ITEM (object);

	switch (arg_id) {
	case WIRE_ITEM_ARG_NAME:
		break;
	}
}
Beispiel #2
0
static void
wire_item_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
{
	WireItem *wire_item = WIRE_ITEM (object);

	wire_item = WIRE_ITEM (object);

	switch (arg_id) {
	case WIRE_ITEM_ARG_NAME:
		break;
	default:
		//arg->type = G_TYPE_INVALID;
		break;
	}
}
Beispiel #3
0
static void wire_rotated_callback (ItemData *data, int angle, SheetItem *sheet_item)
{
	WireItem *wire_item;
	GooCanvasPoints *points;
	Coords start_pos, length;

	g_return_if_fail (sheet_item != NULL);
	g_return_if_fail (IS_WIRE_ITEM (sheet_item));

	wire_item = WIRE_ITEM (sheet_item);

	wire_get_pos_and_length (WIRE (data), &start_pos, &length);

	points = goo_canvas_points_new (2);
	points->coords[0] = 0;
	points->coords[1] = 0;
	points->coords[2] = length.x;
	points->coords[3] = length.y;

	g_object_set (wire_item->priv->line, "points", points, NULL);
	goo_canvas_points_unref (points);

	g_object_set (wire_item, "x", start_pos.x, "y", start_pos.y, NULL);

	g_object_set (wire_item->priv->resize2, "x", length.x - RESIZER_SIZE, "y",
	              length.y - RESIZER_SIZE, NULL);

	// Invalidate the bounding box cache.
	wire_item->priv->cache_valid = FALSE;
}
Beispiel #4
0
static void wire_flipped_callback (ItemData *data, IDFlip direction, SheetItem *sheet_item)
{
	GooCanvasPoints *points;
	WireItem *item;
	WireItemPriv *priv;
	Coords start_pos, length;

	g_return_if_fail (sheet_item != NULL);
	g_return_if_fail (IS_WIRE_ITEM (sheet_item));

	item = WIRE_ITEM (sheet_item);
	priv = item->priv;

	wire_get_pos_and_length (WIRE (data), &start_pos, &length);

	points = goo_canvas_points_new (2);
	points->coords[0] = 0;
	points->coords[1] = 0;
	points->coords[2] = length.x;
	points->coords[3] = length.y;

	g_object_set (item->priv->line, "points", points, NULL);
	goo_canvas_points_unref (points);

	g_object_set (item, "x", start_pos.x, "y", start_pos.y, NULL);

	// Invalidate the bounding box cache.
	priv->cache_valid = FALSE;
}
Beispiel #5
0
static void
wire_item_destroy (GtkObject *object)
{
	WireItem *wire;
	WireItemPriv *priv;

	g_return_if_fail (object != NULL);
	g_return_if_fail (IS_WIRE_ITEM (object));

	wire = WIRE_ITEM (object);
	priv = wire->priv;

	if (priv) {
		if (priv->line) {
			/* TODO Check if destroy or unref have to be used for
			 * GnomeCanvasItem */
			gtk_object_destroy (GTK_OBJECT (priv->line));
			priv->line = NULL;
		}
		g_free (priv);
		wire->priv = NULL;
	}

	if (GTK_OBJECT_CLASS(wire_item_parent_class)->destroy){
		GTK_OBJECT_CLASS(wire_item_parent_class)->destroy(object);
	}
}
Beispiel #6
0
static void wire_item_dispose (GObject *object)
{
	WireItemPriv *priv;

	priv = WIRE_ITEM (object)->priv;

	g_clear_object (&(priv->line));
	g_clear_object (&(priv->resize1));
	g_clear_object (&(priv->resize2));
	G_OBJECT_CLASS (wire_item_parent_class)->dispose (object);
}
Beispiel #7
0
// "moved" signal handler. Invalidates the bounding box cache.
static void
wire_item_moved (SheetItem *object)
{
	WireItem *item;
	WireItemPriv *priv;

	item = WIRE_ITEM (object);
	priv = item->priv;

	priv->cache_valid = FALSE;
}
Beispiel #8
0
static void wire_item_finalize (GObject *object)
{
	WireItemPriv *priv;

	priv = WIRE_ITEM (object)->priv;

	if (priv != NULL) {
		g_free (priv);
	}

	G_OBJECT_CLASS (wire_item_parent_class)->finalize (object);
}
Beispiel #9
0
static gboolean is_in_area (SheetItem *object, Coords *p1, Coords *p2)
{
	WireItem *item;
	Coords bbox_start, bbox_end;

	item = WIRE_ITEM (object);

	get_boundingbox (item, &bbox_start, &bbox_end);

	if (p1->x < bbox_start.x && p2->x > bbox_end.x && p1->y < bbox_start.y && p2->y > bbox_end.y) {
		return TRUE;
	}
	return FALSE;
}
Beispiel #10
0
static gboolean
is_in_area (SheetItem *object, SheetPos *p1, SheetPos *p2)
{
	WireItem *item;
	SheetPos bbox_start, bbox_end;

	item = WIRE_ITEM (object);

	get_bbox (item, &bbox_start, &bbox_end);

	if (p1->x < bbox_start.x &&
	    p2->x > bbox_end.x &&
	    p1->y < bbox_start.y &&
	    p2->y > bbox_end.y)
		return TRUE;

	return FALSE;
}
Beispiel #11
0
static void
wire_rotated_callback (ItemData *data, int angle, SheetItem *sheet_item)
{
	WireItem *wire_item;
	GnomeCanvasPoints *points;
	SheetPos start_pos, length;

	g_return_if_fail (sheet_item != NULL);
	g_return_if_fail (IS_WIRE_ITEM (sheet_item));

	wire_item = WIRE_ITEM (sheet_item);

	wire_get_pos_and_length (WIRE (data), &start_pos, &length);

	points = gnome_canvas_points_new (2);
	points->coords[0] = 0;
	points->coords[1] = 0;
	points->coords[2] = length.x;
	points->coords[3] = length.y;

	gnome_canvas_item_set (GNOME_CANVAS_ITEM (wire_item->priv->line),
		"points", points,
		NULL);
	gnome_canvas_points_unref (points);

	gnome_canvas_item_set (GNOME_CANVAS_ITEM (wire_item),
		"x", start_pos.x,
		"y", start_pos.y,
		NULL);

	gnome_canvas_item_set (
		GNOME_CANVAS_ITEM (wire_item-> priv->resize2),
		"x1", length.x-RESIZER_SIZE,
		"y1", length.y-RESIZER_SIZE,
		"x2", length.x+RESIZER_SIZE,
		"y2", length.y+RESIZER_SIZE,
		NULL
	);

	/*
	 * Invalidate the bounding box cache.
	 */
	wire_item->priv->cache_valid = FALSE;
}
Beispiel #12
0
/**
 * This is called when the wire data was moved. Update the view accordingly.
 */
static void
wire_moved_callback (ItemData *data, SheetPos *pos, SheetItem *item)
{
	WireItem *wire_item;

	g_return_if_fail (data != NULL);
	g_return_if_fail (IS_ITEM_DATA (data));
	g_return_if_fail (item != NULL);
	g_return_if_fail (IS_WIRE_ITEM (item));

	if (pos == NULL)
		return;

	wire_item = WIRE_ITEM (item);

	/*
	 * Move the canvas item and invalidate the bbox cache.
	 */
	gnome_canvas_item_move (GNOME_CANVAS_ITEM (item), pos->x, pos->y);
	wire_item->priv->cache_valid = FALSE;
}
Beispiel #13
0
static void
wire_flipped_callback (ItemData *data,
	gboolean horizontal, SheetItem *sheet_item)
{
	GnomeCanvasPoints *points;
	WireItem *item;
	WireItemPriv *priv;
	SheetPos start_pos, length;

	g_return_if_fail (sheet_item != NULL);
	g_return_if_fail (IS_WIRE_ITEM (sheet_item));

	item = WIRE_ITEM (sheet_item);
	priv = item->priv;

	wire_get_pos_and_length (WIRE (data), &start_pos, &length);

	points = gnome_canvas_points_new (2);
	points->coords[0] = 0;
	points->coords[1] = 0;
	points->coords[2] = length.x;
	points->coords[3] = length.y;

	gnome_canvas_item_set (GNOME_CANVAS_ITEM (item->priv->line),
			       "points", points,
			       NULL);
	gnome_canvas_points_unref (points);

	gnome_canvas_item_set (GNOME_CANVAS_ITEM (item),
			       "x", start_pos.x,
			       "y", start_pos.y,
			       NULL);

	/*
	 * Invalidate the bounding box cache.
	 */
	priv->cache_valid = FALSE;
}
Beispiel #14
0
// This is called when the wire data was moved. Update the view accordingly.
static void
wire_moved_callback (ItemData *data, SheetPos *pos, SheetItem *item)
{
	WireItem *wire_item;

	g_return_if_fail (data != NULL);
	g_return_if_fail (IS_ITEM_DATA (data));
	g_return_if_fail (item != NULL);
	g_return_if_fail (IS_WIRE_ITEM (item));

	if (pos == NULL)
		return;

	wire_item = WIRE_ITEM (item);

	// Move the canvas item and invalidate the bbox cache.
	goo_canvas_item_set_simple_transform (GOO_CANVAS_ITEM (item),
	                                      pos->x,
	                                      pos->y,
	                                      1.0,
	                                      0.0);
	wire_item->priv->cache_valid = FALSE;
}
Beispiel #15
0
static void
wire_item_place (SheetItem *item, Sheet *sheet)
{
	wire_item_signal_connect_placed (WIRE_ITEM (item), sheet);
}
Beispiel #16
0
WireItem *
wire_item_new (Sheet *sheet, Wire *wire)
{
	GooCanvasItem *item;
	WireItem *wire_item;
	GooCanvasPoints *points;
	WireItemPriv *priv;
	SheetPos start_pos, length;

	g_return_val_if_fail (sheet != NULL, NULL);
	g_return_val_if_fail (IS_SHEET (sheet), NULL);

	wire_get_pos_and_length (wire, &start_pos, &length);

	item = g_object_new (TYPE_WIRE_ITEM, NULL);
	
	g_object_set (item, 
	              "parent", sheet->object_group, 
	              NULL);
	
	wire_item = WIRE_ITEM (item);
	g_object_set (wire_item, 
	              "data", wire,
	              NULL);

	priv = wire_item->priv;
	
	priv->resize1 = GOO_CANVAS_RECT (goo_canvas_rect_new (
	           	GOO_CANVAS_ITEM (wire_item),
			   	-RESIZER_SIZE, 
	            -RESIZER_SIZE, 
	            2 * RESIZER_SIZE, 
	            2 * RESIZER_SIZE,
	    		"stroke-color", "blue",
	            "fill-color", "green",
	    		"line-width", 1.0,
	    		NULL));
	g_object_set (priv->resize1, 
				  "visibility", GOO_CANVAS_ITEM_INVISIBLE, 
	              NULL);

	priv->resize2 = GOO_CANVAS_RECT (goo_canvas_rect_new (
				GOO_CANVAS_ITEM (wire_item),
				length.x - RESIZER_SIZE, 
	     		length.y - RESIZER_SIZE, 
	            2 * RESIZER_SIZE,
	    		2 * RESIZER_SIZE,
	    		"stroke-color", "blue",
	            "fill-color", "green",
	    		"line-width", 1.0, 
	    		NULL));
	g_object_set (priv->resize2, 
				  "visibility", GOO_CANVAS_ITEM_INVISIBLE, 
	              NULL);

	points = goo_canvas_points_new (2);                                 
	points->coords[0] = 0;
	points->coords[1] = 0;
	points->coords[2] = length.x;
	points->coords[3] = length.y;

	priv->line = GOO_CANVAS_POLYLINE (goo_canvas_polyline_new (
	    GOO_CANVAS_ITEM (wire_item), 
		FALSE, 0, 
	    "points", points, 
	    "stroke-color", "blue", 
	    "line-width", 1.0, 
	    NULL));
	
	goo_canvas_points_unref (points);

	ITEM_DATA (wire)->rotated_handler_id = 
		g_signal_connect_data (wire, "rotated",
		G_CALLBACK (wire_rotated_callback), G_OBJECT (wire_item), NULL, 0);
	
	g_signal_connect_data (wire, "flipped",
		G_CALLBACK (wire_flipped_callback), G_OBJECT (wire_item), NULL, 0);
	
	ITEM_DATA (wire)->moved_handler_id = 
		g_signal_connect_object (wire, "moved",
		G_CALLBACK (wire_moved_callback),  G_OBJECT (wire_item), 0);

	g_signal_connect (wire, "changed", 
		G_CALLBACK (wire_changed_callback), wire_item);

	g_signal_connect (wire, "delete", 
	    G_CALLBACK (wire_delete_callback), wire_item);
	                                   
	wire_update_bbox (wire);

	return wire_item;
}
Beispiel #17
0
WireItem *
wire_item_new (Sheet *sheet, Wire *wire)
{
	WireItem *item;
	GnomeCanvasPoints *points;
	WireItemPriv *priv;
	SheetPos start_pos, length;

	g_return_val_if_fail (sheet != NULL, NULL);
	g_return_val_if_fail (IS_SHEET (sheet), NULL);

	//g_object_ref (G_OBJECT(wire));
	/* XXX Ver si hay equivalente gtk_object_sink (GTK_OBJECT (wire)); */

	wire_get_pos_and_length (wire, &start_pos, &length);

	/*
	 * Because of the GnomeCanvasGroup inheritance, a small hack is needed
	 * here. The group starts at the startpoint of the wire, and the line
	 * goes from (0,0) to (length.x, length.y).
	 */
	item = WIRE_ITEM (gnome_canvas_item_new (
		sheet->object_group,
		wire_item_get_type (),
		"data", wire,
		"x", (double) start_pos.x,
		"y", (double) start_pos.y,
		NULL));

	priv = item->priv;

	priv->resize1 = GNOME_CANVAS_RECT (gnome_canvas_item_new (
		GNOME_CANVAS_GROUP (item),
		gnome_canvas_rect_get_type (),
		"x1", -RESIZER_SIZE,
		"y1", -RESIZER_SIZE,
		"x2", RESIZER_SIZE,
		"y2", RESIZER_SIZE,
		"fill_color", "red",
		"fill_color_rgba", 0x3cb37180,
		"outline_color", "blue",
		"width_pixels", 1,
		NULL));

	priv->resize2 = GNOME_CANVAS_RECT (gnome_canvas_item_new (
		GNOME_CANVAS_GROUP (item),
		gnome_canvas_rect_get_type (),
		"x1", length.x-RESIZER_SIZE,
		"y1", length.y-RESIZER_SIZE,
		"x2", length.x+RESIZER_SIZE,
		"y2", length.y+RESIZER_SIZE,
		"fill_color", "red",
		"fill_color_rgba", 0x3cb37180,
		"outline_color", "blue",
		"width_pixels", 1,
		NULL));
	gnome_canvas_item_hide (GNOME_CANVAS_ITEM (priv->resize1));
	gnome_canvas_item_hide (GNOME_CANVAS_ITEM (priv->resize2));

	points = gnome_canvas_points_new (2);
	points->coords[0] = 0;
	points->coords[1] = 0;
	points->coords[2] = length.x;
	points->coords[3] = length.y;

	priv->line = GNOME_CANVAS_LINE (gnome_canvas_item_new (
		GNOME_CANVAS_GROUP (item),
		gnome_canvas_line_get_type (),
		"points", points,
		"fill_color", "blue",
		"width_pixels", 1,
		NULL));

	gnome_canvas_points_free (points);

	g_signal_connect_object(G_OBJECT(wire),	"rotated",
		G_CALLBACK(wire_rotated_callback), G_OBJECT(item), 0);
	g_signal_connect_object(G_OBJECT(wire), "flipped",
		G_CALLBACK(wire_flipped_callback), G_OBJECT(item), 0);
	g_signal_connect_object(G_OBJECT(wire), "moved",
		G_CALLBACK(wire_moved_callback),  G_OBJECT(item), 0);

	g_signal_connect (G_OBJECT (wire), "changed", G_CALLBACK (wire_changed_callback), item);
	g_signal_connect (G_OBJECT (wire), "delete", G_CALLBACK (wire_delete_callback), item);
	wire_update_bbox (wire);

	return item;
}
Beispiel #18
0
WireItem *wire_item_new (Sheet *sheet, Wire *wire)
{
	GooCanvasItem *item;
	WireItem *wire_item;
	ItemData *item_data;
	GooCanvasPoints *points;
	WireItemPriv *priv;
	Coords start_pos, length;

	g_return_val_if_fail (sheet != NULL, NULL);
	g_return_val_if_fail (IS_SHEET (sheet), NULL);

	wire_get_pos_and_length (wire, &start_pos, &length);

	item = g_object_new (TYPE_WIRE_ITEM, NULL);

	g_object_set (item, "parent", sheet->object_group, NULL);

	wire_item = WIRE_ITEM (item);
	g_object_set (wire_item, "data", wire, NULL);

	priv = wire_item->priv;

	const int random_color_count = 9;
	const char *random_color[] = {"blue",   "red",  "green" /*, "yellow"*/, "orange",    "brown",
	                              "purple", "pink", "lightblue",            "lightgreen"};

	priv->resize1 = GOO_CANVAS_RECT (
	    goo_canvas_rect_new (GOO_CANVAS_ITEM (wire_item), -RESIZER_SIZE, -RESIZER_SIZE,
	                         2 * RESIZER_SIZE, 2 * RESIZER_SIZE, "stroke-color",
	                         oregano_options_debug_wires ()
	                             ? random_color[g_random_int_range (0, random_color_count - 1)]
	                             : "blue",
	                         "fill-color", "green", "line-width", 1.0, NULL));
	g_object_set (priv->resize1, "visibility", GOO_CANVAS_ITEM_INVISIBLE, NULL);

	priv->resize2 = GOO_CANVAS_RECT (goo_canvas_rect_new (
	    GOO_CANVAS_ITEM (wire_item), length.x - RESIZER_SIZE, length.y - RESIZER_SIZE,
	    2 * RESIZER_SIZE, 2 * RESIZER_SIZE, "stroke-color",
	    oregano_options_debug_wires ()
	        ? random_color[g_random_int_range (0, random_color_count - 1)]
	        : "blue",
	    "fill-color", "green", "line-width", 1.0, NULL));
	g_object_set (priv->resize2, "visibility", GOO_CANVAS_ITEM_INVISIBLE, NULL);

	points = goo_canvas_points_new (2);
	points->coords[0] = 0;
	points->coords[1] = 0;
	points->coords[2] = length.x;
	points->coords[3] = length.y;

	priv->line = GOO_CANVAS_POLYLINE (goo_canvas_polyline_new (
	    GOO_CANVAS_ITEM (wire_item), FALSE, 0, "points", points, "stroke-color",
	    oregano_options_debug_wires ()
	        ? random_color[g_random_int_range (0, random_color_count - 1)]
	        : "blue",
	    "line-width", 1.0, "start-arrow", oregano_options_debug_wires () ? TRUE : FALSE,
	    "end-arrow", oregano_options_debug_wires () ? TRUE : FALSE, NULL));

	goo_canvas_points_unref (points);

	item_data = ITEM_DATA (wire);
	item_data->rotated_handler_id = g_signal_connect_object (
	    G_OBJECT (wire), "rotated", G_CALLBACK (wire_rotated_callback), G_OBJECT (wire_item), 0);
	item_data->flipped_handler_id = g_signal_connect_object (
	    G_OBJECT (wire), "flipped", G_CALLBACK (wire_flipped_callback), G_OBJECT (wire_item), 0);
	item_data->moved_handler_id = g_signal_connect_object (
	    G_OBJECT (wire), "moved", G_CALLBACK (wire_moved_callback), G_OBJECT (wire_item), 0);
	item_data->changed_handler_id = g_signal_connect_object (
	    G_OBJECT (wire), "changed", G_CALLBACK (wire_changed_callback), G_OBJECT (wire_item), 0);

	g_signal_connect (wire, "delete", G_CALLBACK (wire_delete_callback), wire_item);

	wire_update_bbox (wire);

	return wire_item;
}
Beispiel #19
0
static void
wire_item_place (SheetItem *item, SchematicView *sv)
{
	wire_item_signal_connect_placed (WIRE_ITEM (item), sv);
}