/** @brief Removes the number from the element. * * This function updates the text content of the \a o_current object. * * @param autotext Pointer to the state structure * @param o_current Pointer to the object from which to remove the number * */ void autonumber_remove_number(AUTONUMBER_TEXT * autotext, OBJECT *o_current) { OBJECT *o_parent, *o_slot; gchar *slot_str; gchar *str = NULL; /* replace old text */ str = g_strdup_printf("%s?", autotext->current_searchtext); o_text_set_string (autotext->w_current->toplevel, o_current, str); g_free (str); /* remove the slot attribute if slotting is active */ if (autotext->slotting) { /* get the slot attribute */ o_parent = o_current->attached_to; if (o_parent != NULL) { slot_str = s_slot_search_slot (o_parent, &o_slot); g_free (slot_str); /* Only attempt to remove non-inherited slot attributes */ if (o_slot != NULL && !o_attrib_is_inherited (o_slot)) { /* delete the slot attribute */ o_delete (autotext->w_current, o_slot); } } } gschem_toplevel_page_content_changed (autotext->w_current, autotext->w_current->toplevel->page_current); }
/*! \todo Finish function documentation!!! * \brief * \par Function Description * */ void o_slot_end(GSCHEM_TOPLEVEL *w_current, OBJECT *object, const char *string) { TOPLEVEL *toplevel = w_current->toplevel; OBJECT *new_obj; char *slot_value; char *numslots_value; OBJECT *o_slot; char *value = NULL; int numslots; int new_slot_number; int status; g_return_if_fail (object != NULL); status = o_attrib_string_get_name_value (string, NULL, &value); if (!status) { s_log_message (_("Slot attribute malformed\n")); return; } numslots_value = o_attrib_search_object_attribs_by_name (object, "numslots", 0); if (!numslots_value) { s_log_message (_("numslots attribute missing\n")); s_log_message (_("Slotting not allowed for this component\n")); g_free (value); return; } numslots = atoi (numslots_value); g_free (numslots_value); new_slot_number = atoi (value); #if DEBUG printf ("numslots = %d\n", numslots); #endif if (new_slot_number > numslots || new_slot_number <=0 ) { s_log_message (_("New slot number out of range\n")); g_free (value); return; } /* first see if slot attribute already exists outside * complex */ slot_value = s_slot_search_slot (object, &o_slot); g_free (slot_value); if (o_slot != NULL && !o_attrib_is_inherited (o_slot)) { o_text_set_string (toplevel, o_slot, string); } else { /* here you need to do the add the slot attribute since it doesn't exist */ new_obj = o_text_new (toplevel, OBJ_TEXT, ATTRIBUTE_COLOR, object->complex->x, object->complex->y, LOWER_LEFT, 0, /* zero is angle */ string, 10, INVISIBLE, SHOW_NAME_VALUE); s_page_append (toplevel, toplevel->page_current, new_obj); /* manually attach attribute */ o_attrib_attach (toplevel, new_obj, object, FALSE); } s_slot_update_object (toplevel, object); toplevel->page_current->CHANGED = 1; g_free (value); }