gint node_remove_wire (Node *node, Wire *wire) { gboolean dot; g_return_val_if_fail (node != NULL, FALSE); g_return_val_if_fail (IS_NODE (node), FALSE); g_return_val_if_fail (wire != NULL, FALSE); g_return_val_if_fail (IS_WIRE (wire), FALSE); if (node->wire_count == 0) return FALSE; if (!g_slist_find (node->wires, wire)) { NG_DEBUG ("node_remove_wire: not there.\n"); return FALSE; } dot = node_needs_dot (node); node->wires = g_slist_remove (node->wires, wire); node->wire_count--; if (dot && (!node_needs_dot (node))) g_signal_emit_by_name (G_OBJECT (node), "node_dot_removed", &node->key); return TRUE; }
gint node_add_wire (Node *node, Wire *wire) { gboolean dot; g_return_val_if_fail (node != NULL, FALSE); g_return_val_if_fail (IS_NODE (node), FALSE); g_return_val_if_fail (wire != NULL, FALSE); g_return_val_if_fail (IS_WIRE (wire), FALSE); if (g_slist_find (node->wires, wire)) { NG_DEBUG ("node_add_wire: wire already there.\n"); return FALSE; } dot = node_needs_dot (node); node->wires = g_slist_prepend (node->wires, wire); node->wire_count++; if (!dot && node_needs_dot (node)) g_signal_emit_by_name (G_OBJECT (node), "node_dot_added", &node->key); return TRUE; }
void test_nodestore () { gint i; NodeStore *store; Part *part; Wire *wire; Node *node; Coords p_pos = {111.,22.}; Coords n_pos = {111.,33.}; Coords w_pos = {111.,7.}; Coords w_len = {0.,88.}; store = node_store_new (); part = part_new (); wire = wire_new (); // add one Pin with a offset that is on the wire when rotation N*Pi times Pin *pin = g_new (Pin, 1); pin->offset.x = n_pos.x - p_pos.x; pin->offset.y = n_pos.y - p_pos.y; GSList *list = NULL; list = g_slist_prepend (list, pin); part_set_pins (part, list); g_slist_free (list); item_data_set_pos (ITEM_DATA (part), &p_pos); item_data_set_pos (ITEM_DATA (wire), &w_pos); wire_set_length (wire, &w_len); node_store_add_part (store, part); node_store_add_wire (store, wire); { for (i=0; i<11; i++) item_data_rotate (ITEM_DATA (part), 90, NULL); item_data_set_pos (ITEM_DATA (part), &w_len); for (i=0; i<4; i++) item_data_rotate (ITEM_DATA (part), 90, NULL); item_data_set_pos (ITEM_DATA (part), &n_pos); for (i=0; i<7; i++) item_data_rotate (ITEM_DATA (part), -90, NULL); item_data_set_pos (ITEM_DATA (part), &p_pos); } g_assert (node_store_is_wire_at_pos (store, n_pos)); g_assert (node_store_is_pin_at_pos (store, n_pos)); node = node_store_get_node (store, n_pos); g_assert (!node_is_empty (node)); g_assert (node_needs_dot (node)); node_store_remove_part (store, part); node_store_remove_wire (store, wire); g_object_unref (store); }
static void draw_dot (Coords *pos, Node *value, cairo_t *cr) { if (node_needs_dot (value)) { cairo_save (cr); cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); cairo_translate (cr, pos->x, pos->y); cairo_scale (cr, 1.0, 1.0); cairo_arc (cr, 0.0, 0.0, 1.0, 0.0, 2 * M_PI); cairo_fill (cr); cairo_restore (cr); } }
gint node_remove_pin (Node *node, Pin *pin) { gboolean dot; g_return_val_if_fail (node != NULL, FALSE); g_return_val_if_fail (IS_NODE (node), FALSE); g_return_val_if_fail (pin != NULL, FALSE); if (node->pin_count == 0) return FALSE; dot = node_needs_dot (node); node->pins = g_slist_remove (node->pins, pin); node->pin_count--; if (dot && !node_needs_dot (node)) g_signal_emit_by_name (G_OBJECT (node), "node_dot_removed", &node->key); return TRUE; }
gint node_add_pin (Node *node, Pin *pin) { gboolean dot; g_return_val_if_fail (node != NULL, FALSE); g_return_val_if_fail (IS_NODE (node), FALSE); g_return_val_if_fail (pin != NULL, FALSE); if (g_slist_find (node->pins, pin)) { NG_DEBUG ("node_add_pin: pin already there.\n"); return FALSE; } dot = node_needs_dot (node); node->pins = g_slist_prepend (node->pins, pin); node->pin_count++; if (!dot && node_needs_dot (node)) g_signal_emit_by_name (G_OBJECT (node), "node_dot_added", &node->key); return TRUE; }
static void add_node_position (gpointer key, Node *node, GList **list) { if (node_needs_dot (node)) *list = g_list_prepend (*list, key); }