Exemplo n.º 1
0
static void wire_unregister (ItemData *data)
{
    NodeStore *store;

    g_return_if_fail (IS_WIRE (data));

    store = item_data_get_store (data);
    node_store_remove_wire (store, WIRE (data));
}
Exemplo n.º 2
0
static gboolean wire_register (ItemData *data)
{
    NodeStore *store;

    g_return_val_if_fail (IS_WIRE (data), FALSE);

    store = item_data_get_store (data);
    return node_store_add_wire (store, WIRE (data));
}
Exemplo n.º 3
0
static void part_unregister (ItemData *data)
{
	NodeStore *store;

	g_return_if_fail (IS_PART (data));

	store = item_data_get_store (data);
	node_store_remove_part (store, PART (data));
}
Exemplo n.º 4
0
static void
textbox_unregister (ItemData *data)
{
	NodeStore *store;

	g_return_if_fail (IS_TEXTBOX (data));

	store = item_data_get_store (data);
	node_store_remove_textbox (store, TEXTBOX (data));
}
Exemplo n.º 5
0
static int 
textbox_register (ItemData *data)
{
	NodeStore *store;

	g_return_val_if_fail (IS_TEXTBOX (data), 0);

	store = item_data_get_store (data);
	node_store_add_textbox (store, TEXTBOX (data));
	return 0;
}
Exemplo n.º 6
0
/**
 * register a part to its nodestore
 * @param data the part
 * @attention the @data has to have a valid nodestore set
 */
static int part_register (ItemData *data)
{
	NodeStore *store;

	g_return_val_if_fail (IS_PART (data), FALSE);

	store = item_data_get_store (data);
	node_store_add_part (store, PART (data));

	return TRUE;
}
Exemplo n.º 7
0
int
node_store_remove_wire (NodeStore *store, Wire *wire)
{
	GSList *list;
	SheetPos lookup_key, pos, length;

	g_return_val_if_fail (store != NULL, FALSE);
	g_return_val_if_fail (IS_NODE_STORE (store), FALSE);
	g_return_val_if_fail (wire != NULL, FALSE);
	g_return_val_if_fail (IS_WIRE (wire), FALSE);

	if (item_data_get_store (ITEM_DATA (wire)) == NULL) {
		g_warning ("Trying to remove non-stored wire.");
		return FALSE;
	}

	wire_get_pos_and_length (wire, &pos, &length);

	store->wires = g_list_remove (store->wires, wire);
	store->items = g_list_remove (store->items, wire);

	// If the nodes that this wire passes through will be
	// empty when the wire is removed, remove the node as well.

	// We must work on a copy of the nodes list, since it
	// changes as we remove nodes.
	list = g_slist_copy (wire_get_nodes (wire));

	for (; list; list = list->next) {
		Node *node = list->data;

		lookup_key = node->key;

		node_remove_wire (node, wire);

		wire_remove_node (wire, node);

		if (node_is_empty (node))
			g_hash_table_remove (store->nodes, &lookup_key);
	}

	g_slist_free (list);

	return TRUE;
}
Exemplo n.º 8
0
/**
 * removes/unregisters a wire from the nodestore
 * this does _not_ free the wire itself!
 */
gboolean node_store_remove_wire (NodeStore *store, Wire *wire)
{
	GSList *copy, *iter;
	Coords lookup_key;

	g_return_val_if_fail (store, FALSE);
	g_return_val_if_fail (IS_NODE_STORE (store), FALSE);
	g_return_val_if_fail (wire, FALSE);
	g_return_val_if_fail (IS_WIRE (wire), FALSE);

	if (item_data_get_store (ITEM_DATA (wire)) == NULL) {
		g_warning ("Trying to remove not-stored wire %p.", wire);
		return FALSE;
	}

	store->wires = g_list_remove (store->wires, wire);
	store->items = g_list_remove (store->items, wire);

	// If the nodes that this wire passes through will be
	// empty when the wire is removed, remove the node as well.

	// FIXME if done properly, a list copy is _not_ necessary
	copy = g_slist_copy (wire_get_nodes (wire));
	for (iter = copy; iter; iter = iter->next) {
		Node *node = iter->data;

		lookup_key = node->key;

		node_remove_wire (node, wire);
		wire_remove_node (wire, node);

		if (node_is_empty (node))
			g_hash_table_remove (store->nodes, &lookup_key);
	}

	g_slist_free (copy);

	return TRUE;
}