예제 #1
0
파일: revision.c 프로젝트: SayCV/geda-gaf
static PyObject *Revision_delete_object(
	Revision *self, PyObject *args, PyObject *kwds)
{
	PyObject *ob_arg = NULL;
	static char *kwlist[] = { "ob", NULL };

	if (!PyArg_ParseTupleAndKeywords(
		    args, kwds, "O!:Revision.delete_object", kwlist,
		    &ObjectType, &ob_arg))
		return NULL;

	if (!xorn_revision_is_transient(self->rev))
		return not_transient();

	if (!xorn_object_exists_in_revision(self->rev,
					    ((Object *)ob_arg)->ob)) {
		PyErr_SetString(PyExc_KeyError, "Object does not exist");
		return NULL;
	}

	xorn_delete_object(self->rev, ((Object *)ob_arg)->ob);

	Py_INCREF(Py_None);
	return Py_None;
}
예제 #2
0
static void check_order(void)
{
	xorn_revision_t rev0, rev1, rev2, rev3, rev4;
	xorn_object_t ob0, ob1a, ob1b, ob2;
	struct xornsch_arc arc_data;

	setup(&rev0, &rev1, &rev2, &rev3, &ob0, &ob1a, &ob1b);

	assert_object_location_fails(rev0, ob0);
	assert_object_location_fails(rev0, ob1a);
	assert_object_location_fails(rev0, ob1b);

	assert_object_location(rev1, ob0, NULL, 0);
	assert_object_location_fails(rev1, ob1a);
	assert_object_location_fails(rev1, ob1b);

	assert_object_location(rev2, ob0, NULL, 0);
	assert_object_location(rev2, ob1a, NULL, 1);
	assert_object_location(rev2, ob1b, NULL, 2);

	assert_object_location(rev3, ob0, NULL, 0);
	assert_object_location_fails(rev3, ob1a);
	assert_object_location(rev3, ob1b, NULL, 1);

	rev4 = xorn_new_revision(rev3);

	memset(&arc_data, 0, sizeof arc_data);
	assert(xornsch_set_arc_data(rev4, ob1a, &arc_data) == 0);

	assert_object_location(rev4, ob0, NULL, 0);
	assert_object_location(rev4, ob1a, NULL, 2);
	assert_object_location(rev4, ob1b, NULL, 1);

	ob2 = xorn_copy_object(rev4, rev1, ob0);
	assert(ob2 != NULL);

	assert_object_location(rev4, ob0, NULL, 0);
	assert_object_location(rev4, ob1a, NULL, 2);
	assert_object_location(rev4, ob1b, NULL, 1);
	assert_object_location(rev4, ob2, NULL, 3);

	xorn_delete_object(rev4, ob0);

	assert_object_location_fails(rev4, ob0);
	assert_object_location(rev4, ob1a, NULL, 1);
	assert_object_location(rev4, ob1b, NULL, 0);
	assert_object_location(rev4, ob2, NULL, 2);

	xorn_free_revision(rev4);
	xorn_free_revision(rev3);
	xorn_free_revision(rev2);
	xorn_free_revision(rev1);
	xorn_free_revision(rev0);
}
예제 #3
0
파일: transient.c 프로젝트: rlutz/geda-gaf
static void try_modify(xorn_revision_t rev, xorn_object_t existing_ob,
		       bool expected_result)
{
	xorn_object_t ob0, ob1;
	xorn_selection_t sel0, sel1;
	xorn_error_t err;
	xorn_error_t expected_err = expected_result
		? NO_ERROR : xorn_error_revision_not_transient;

	err = NO_ERROR;
	ob0 = xornsch_add_line(rev, &line_data, &err);
	assert((ob0 != NULL) == expected_result);
	assert(err == expected_err);

	err = NO_ERROR;
	assert((xornsch_set_box_data(rev, existing_ob, &box_data, &err) == 0)
		   == expected_result);
	assert(err == expected_err);

	err = NO_ERROR;
	ob1 = xorn_copy_object(rev, rev, existing_ob, &err);
	assert((ob1 != NULL) == expected_result);
	assert(err == expected_err);

	xorn_object_t del_ob = expected_result ? ob1 : existing_ob;
	err = NO_ERROR;
	assert((xorn_delete_object(rev, del_ob, &err) == 0)
		   == expected_result);
	assert(err == expected_err);
	assert(xorn_object_exists_in_revision(rev, del_ob)
		   == !expected_result);

	sel0 = xorn_select_all(rev);
	assert(sel0 != NULL);

	err = NO_ERROR;
	sel1 = xorn_copy_objects(rev, rev, sel0, &err);
	assert((sel1 != NULL) == expected_result);
	assert(err == expected_err);
	xorn_free_selection(sel1);

	err = NO_ERROR;
	assert((xorn_delete_selected_objects(rev, sel0, &err) == 0)
		   == expected_result);
	assert(err == expected_err);
	assert(xorn_object_exists_in_revision(rev, existing_ob)
		   == !expected_result);
	xorn_free_selection(sel0);
}
예제 #4
0
static void check_delete_0(xorn_revision_t rev, xorn_object_t del)
{
	xorn_revision_t r;
	xorn_object_t *objects;
	size_t count;

	assert(r = xorn_new_revision(rev));
	xorn_delete_object(r, del);

	assert(xorn_get_objects(r, &objects, &count) == 0);
	assert(count == 0);
	free(objects);

	xorn_free_revision(r);
}
예제 #5
0
파일: motivation.c 프로젝트: rlutz/geda-gaf
int main(void)
{
	xorn_revision_t rev;
	rev = xorn_new_revision(NULL);

/** [discrete] */
xorn_object_t *objects;
size_t count;
unsigned int i;

xorn_get_objects(rev, &objects, &count);

for (i = 0; i < count; i++) {
    xorn_obtype_t type = xorn_get_object_type(rev, objects[i]);

    if (type == xornsch_obtype_circle &&
        xornsch_get_circle_data(rev, objects[i])->radius == 0.)
        xorn_delete_object(rev, objects[i], NULL);

    if (type == xornsch_obtype_arc &&
        xornsch_get_arc_data(rev, objects[i])->radius == 0.)
        xorn_delete_object(rev, objects[i], NULL);
}

free(objects);
/** [discrete] */

/** [integrated] */
xorn_selection_t sel = xornsch_select_by_radius(rev, 0.);
xorn_delete_selected_objects(rev, sel, NULL);
xorn_free_selection(sel);
/** [integrated] */

	xorn_free_revision(rev);
	return 0;
}
예제 #6
0
static void check_delete_2(xorn_revision_t rev, xorn_object_t del,
			   xorn_object_t ob0, xorn_object_t ob1)
{
	xorn_revision_t r;
	xorn_object_t *objects;
	size_t count;

	assert(r = xorn_new_revision(rev));
	xorn_delete_object(r, del);

	assert(xorn_get_objects(r, &objects, &count) == 0);
	assert(objects != NULL);
	assert(count == 2);
	assert(objects[0] == ob0);
	assert(objects[1] == ob1);
	free(objects);

	xorn_free_revision(r);
}
예제 #7
0
int main(void)
{
	xorn_revision_t rev0, rev1, rev2, rev3;
	xorn_object_t ob0, ob1a, ob1b;

	xorn_object_t *objects;
	size_t count;

	xorn_revision_t rev4;

	setup(&rev0, &rev1, &rev2, &rev3, &ob0, &ob1a, &ob1b);

	rev4 = xorn_new_revision(rev2);

	assert(xorn_get_objects(rev4, &objects, &count) == 0);
	assert(objects != NULL);
	assert(count == 3);
	assert(objects[0] == ob0);
	assert(objects[1] == ob1a);
	assert(objects[2] == ob1b);
	free(objects);

	relocate_and_assert_3(rev4, ob0,  ob0,  E_OK,      ob0, ob1a, ob1b);
	relocate_and_assert_3(rev4, ob0,  ob1a, E_OK,      ob0, ob1a, ob1b);
	relocate_and_assert_3(rev4, ob0,  ob1b, E_OK,      ob1a, ob0, ob1b);
	relocate_and_assert_3(rev4, ob0,  NULL, E_OK,      ob1a, ob1b, ob0);
	relocate_and_assert_3(rev4, ob1a, ob0,  E_OK,      ob1b, ob1a, ob0);
	relocate_and_assert_3(rev4, ob1a, ob1a, E_OK,      ob1b, ob1a, ob0);
	relocate_and_assert_3(rev4, ob1a, ob1b, E_OK,      ob1a, ob1b, ob0);
	relocate_and_assert_3(rev4, ob1a, NULL, E_OK,      ob1b, ob0, ob1a);
	relocate_and_assert_3(rev4, ob1b, ob0,  E_OK,      ob1b, ob0, ob1a);
	relocate_and_assert_3(rev4, ob1b, ob1a, E_OK,      ob0, ob1b, ob1a);
	relocate_and_assert_3(rev4, ob1b, ob1b, E_OK,      ob0, ob1b, ob1a);
	relocate_and_assert_3(rev4, ob1b, NULL, E_OK,      ob0, ob1a, ob1b);
	relocate_and_assert_3(rev4, NULL, ob0,  E_NOEXIST, ob0, ob1a, ob1b);
	relocate_and_assert_3(rev4, NULL, ob1a, E_NOEXIST, ob0, ob1a, ob1b);
	relocate_and_assert_3(rev4, NULL, ob1b, E_NOEXIST, ob0, ob1a, ob1b);
	relocate_and_assert_3(rev4, NULL, NULL, E_NOEXIST, ob0, ob1a, ob1b);

	relocate_and_assert_3(rev4, ob0,  ob0,  E_OK,      ob0, ob1a, ob1b);
	relocate_and_assert_3(rev4, ob1a, ob1a, E_OK,      ob0, ob1a, ob1b);
	relocate_and_assert_3(rev4, ob1b, ob1b, E_OK,      ob0, ob1a, ob1b);

	assert(xorn_delete_object(rev4, ob0, NULL) == 0);

	assert(xorn_get_objects(rev4, &objects, &count) == 0);
	assert(objects != NULL);
	assert(count == 2);
	assert(objects[0] == ob1a);
	assert(objects[1] == ob1b);
	free(objects);

	relocate_and_assert_2(rev4, ob0,  ob0,  E_NOEXIST, ob1a, ob1b);
	relocate_and_assert_2(rev4, ob0,  ob1a, E_NOEXIST, ob1a, ob1b);
	relocate_and_assert_2(rev4, ob0,  ob1b, E_NOEXIST, ob1a, ob1b);
	relocate_and_assert_2(rev4, ob0,  NULL, E_NOEXIST, ob1a, ob1b);
	relocate_and_assert_2(rev4, ob1a, ob0,  E_NOSUCC,  ob1a, ob1b);
	relocate_and_assert_2(rev4, ob1a, ob1a, E_OK,      ob1a, ob1b);
	relocate_and_assert_2(rev4, ob1a, ob1b, E_OK,      ob1a, ob1b);
	relocate_and_assert_2(rev4, ob1a, NULL, E_OK,      ob1b, ob1a);
	relocate_and_assert_2(rev4, ob1b, ob0,  E_NOSUCC,  ob1b, ob1a);
	relocate_and_assert_2(rev4, ob1b, ob1a, E_OK,      ob1b, ob1a);
	relocate_and_assert_2(rev4, ob1b, ob1b, E_OK,      ob1b, ob1a);
	relocate_and_assert_2(rev4, ob1b, NULL, E_OK,      ob1a, ob1b);
	relocate_and_assert_2(rev4, NULL, ob0,  E_NOEXIST, ob1a, ob1b);
	relocate_and_assert_2(rev4, NULL, ob1a, E_NOEXIST, ob1a, ob1b);
	relocate_and_assert_2(rev4, NULL, ob1b, E_NOEXIST, ob1a, ob1b);
	relocate_and_assert_2(rev4, NULL, NULL, E_NOEXIST, ob1a, ob1b);

	xorn_finalize_revision(rev4);

	relocate_and_assert_2(rev4, ob1a, ob1a, E_NOTRANS, ob1a, ob1b);
	relocate_and_assert_2(rev4, ob1a, ob1b, E_NOTRANS, ob1a, ob1b);
	relocate_and_assert_2(rev4, ob1a, NULL, E_NOTRANS, ob1a, ob1b);
	relocate_and_assert_2(rev4, ob1b, ob1a, E_NOTRANS, ob1a, ob1b);
	relocate_and_assert_2(rev4, ob1b, ob1b, E_NOTRANS, ob1a, ob1b);
	relocate_and_assert_2(rev4, ob1b, NULL, E_NOTRANS, ob1a, ob1b);

	xorn_free_revision(rev4);
	xorn_free_revision(rev3);
	xorn_free_revision(rev2);
	xorn_free_revision(rev1);
	xorn_free_revision(rev0);
	return 0;
}
예제 #8
0
파일: set_obdata.c 프로젝트: vzh/geda-gaf
int main()
{
	xorn_revision_t rev;
	xorn_object_t ob0, ob1;
	struct xornsch_line line_data;
	struct xornsch_net net_data;
	struct xornsch_component component_data;
	struct xornsch_text text_data;

	memset(&line_data, 0, sizeof line_data);
	memset(&net_data, 0, sizeof net_data);
	memset(&component_data, 0, sizeof component_data);
	memset(&text_data, 0, sizeof text_data);

	assert(rev = xorn_new_revision(NULL));
	assert(ob0 = xornsch_add_line(rev, &line_data));
	assert(ob1 = xornsch_add_line(rev, &line_data));

	assert(xornsch_set_net_data(rev, ob0, &net_data) == 0);
	assert(xornsch_set_text_data(rev, ob1, &text_data) == 0);

	check_not_attached(rev, ob0, ob1);


	/* data can be set without the object being reordered */

	assert(xornsch_set_line_data(rev, ob0, &line_data) == 0);
	check_not_attached(rev, ob0, ob1);
	assert(xornsch_set_net_data(rev, ob0, &net_data) == 0);
	check_not_attached(rev, ob0, ob1);

	assert(xornsch_set_line_data(rev, ob1, &line_data) == 0);
	check_not_attached(rev, ob0, ob1);
	assert(xornsch_set_net_data(rev, ob1, &net_data) == 0);
	check_not_attached(rev, ob0, ob1);

	/* objects are re-added at the end */

	xorn_delete_object(rev, ob0);
	assert(xornsch_set_line_data(rev, ob0, &line_data) == 0);
	check_not_attached(rev, ob1, ob0);
	xorn_delete_object(rev, ob0);
	assert(xornsch_set_line_data(rev, ob0, &line_data) == 0);
	check_not_attached(rev, ob1, ob0);

	xorn_delete_object(rev, ob1);
	assert(xornsch_set_line_data(rev, ob1, &line_data) == 0);
	check_not_attached(rev, ob0, ob1);
	xorn_delete_object(rev, ob1);
	assert(xornsch_set_line_data(rev, ob1, &line_data) == 0);
	check_not_attached(rev, ob0, ob1);

	xorn_delete_object(rev, ob0);
	assert(xornsch_set_net_data(rev, ob0, &net_data) == 0);
	check_not_attached(rev, ob1, ob0);
	xorn_delete_object(rev, ob0);
	assert(xornsch_set_net_data(rev, ob0, &net_data) == 0);
	check_not_attached(rev, ob1, ob0);

	xorn_delete_object(rev, ob1);
	assert(xornsch_set_net_data(rev, ob1, &net_data) == 0);
	check_not_attached(rev, ob0, ob1);
	xorn_delete_object(rev, ob1);
	assert(xornsch_set_net_data(rev, ob1, &net_data) == 0);
	check_not_attached(rev, ob0, ob1);


	/* can change ob0 to any type while no object is attached */

	assert(xornsch_set_line_data(rev, ob0, &line_data) == 0);
	check_not_attached(rev, ob0, ob1);
	assert(xornsch_set_component_data(rev, ob0, &component_data) == 0);
	check_not_attached(rev, ob0, ob1);
	assert(xornsch_set_text_data(rev, ob0, &text_data) == 0);
	check_not_attached(rev, ob0, ob1);
	assert(xornsch_set_net_data(rev, ob0, &net_data) == 0);
	check_not_attached(rev, ob0, ob1);

	/* can change type of ob1 while not attached */

	assert(xornsch_set_line_data(rev, ob1, &line_data) == 0);
	check_not_attached(rev, ob0, ob1);
	assert(xornsch_set_net_data(rev, ob1, &net_data) == 0);
	check_not_attached(rev, ob0, ob1);
	assert(xornsch_set_component_data(rev, ob1, &component_data) == 0);
	check_not_attached(rev, ob0, ob1);
	assert(xornsch_set_text_data(rev, ob1, &text_data) == 0);
	check_not_attached(rev, ob0, ob1);


	assert(xorn_relocate_object(rev, ob1, ob0, NULL) == 0);
	check_attached(rev, ob0, ob1);


	/* can't change ob0 to line or text while an object is attached */

	assert(xornsch_set_line_data(rev, ob0, &line_data) == -1);
	check_attached(rev, ob0, ob1);
	assert(xornsch_set_net_data(rev, ob0, &net_data) == 0);
	check_attached(rev, ob0, ob1);
	assert(xornsch_set_component_data(rev, ob0, &component_data) == 0);
	check_attached(rev, ob0, ob1);
	assert(xornsch_set_text_data(rev, ob0, &text_data) == -1);
	check_attached(rev, ob0, ob1);

	/* can't change type of ob1 while attached */

	assert(xornsch_set_line_data(rev, ob1, &line_data) == -1);
	check_attached(rev, ob0, ob1);
	assert(xornsch_set_net_data(rev, ob1, &net_data) == -1);
	check_attached(rev, ob0, ob1);
	assert(xornsch_set_component_data(rev, ob1, &component_data) == -1);
	check_attached(rev, ob0, ob1);
	assert(xornsch_set_text_data(rev, ob1, &text_data) == 0);
	check_attached(rev, ob0, ob1);


	xorn_free_revision(rev);
	return 0;
}
예제 #9
0
int main()
{
	xorn_revision_t rev;
	struct xornsch_net net_data;
	struct xornsch_text text_data;
	xorn_object_t N, a, b;

	assert(rev = xorn_new_revision(NULL));

	memset(&net_data, 0, sizeof net_data);
	assert(N = xornsch_add_net(rev, &net_data));

	memset(&text_data, 0, sizeof text_data);
	assert(a = xornsch_add_text(rev, &text_data));
	assert(b = xornsch_add_text(rev, &text_data));

	assert_attached_objects_3(rev, _, N, a, b);
	assert_attached_objects_0(rev, N);
	assert_attached_objects_0(rev, a);
	assert_attached_objects_0(rev, b);

	assert(xorn_relocate_object(rev, N, _, _) == 0);

	assert_attached_objects_3(rev, _, a, b, N);
	assert_attached_objects_0(rev, N);
	assert_attached_objects_0(rev, a);
	assert_attached_objects_0(rev, b);

	assert(xorn_relocate_object(rev, N, _, b) == 0);

	assert_attached_objects_3(rev, _, a, N, b);
	assert_attached_objects_0(rev, N);
	assert_attached_objects_0(rev, a);
	assert_attached_objects_0(rev, b);

	assert(xorn_relocate_object(rev, a, N, _) == 0);

	assert_attached_objects_2(rev, _, N, b);
	assert_attached_objects_1(rev, N, a);
	assert_attached_objects_0(rev, a);
	assert_attached_objects_0(rev, b);

	assert(xorn_relocate_object(rev, b, N, _) == 0);

	assert_attached_objects_1(rev, _, N);
	assert_attached_objects_2(rev, N, a, b);
	assert_attached_objects_0(rev, a);
	assert_attached_objects_0(rev, b);

	assert(xorn_relocate_object(rev, a, N, _) == 0);

	assert_attached_objects_1(rev, _, N);
	assert_attached_objects_2(rev, N, b, a);
	assert_attached_objects_0(rev, a);
	assert_attached_objects_0(rev, b);

	assert(xorn_relocate_object(rev, a, N, b) == 0);

	assert_attached_objects_1(rev, _, N);
	assert_attached_objects_2(rev, N, a, b);
	assert_attached_objects_0(rev, a);
	assert_attached_objects_0(rev, b);

	xorn_delete_object(rev, b);

	assert_attached_objects_1(rev, _, N);
	assert_attached_objects_1(rev, N, a);
	assert_attached_objects_0(rev, a);
	assert_attached_objects_f(rev, b);

	xorn_delete_object(rev, N);

	assert_attached_objects_0(rev, _);
	assert_attached_objects_f(rev, N);
	assert_attached_objects_f(rev, a);
	assert_attached_objects_f(rev, b);

	xorn_free_revision(rev);
	return 0;
}
예제 #10
0
파일: example.c 프로젝트: SayCV/geda-gaf
int main(void)
{
    xorn_revision_t rev0, rev1, rev2, rev3;
    xorn_object_t line, box, circle;

    struct xornsch_line line_data;
    struct xornsch_box box_data;
    struct xornsch_circle circle_data;
    struct xornsch_net net_data;


    /* Create an empty revision and make it read-only. */

    rev0 = xorn_new_revision(NULL);

    if (rev0 == NULL)
        goto error0;

    xorn_finalize_revision(rev0);


    /* Copy the revision */

    /* You could omit the previous step and just create an empty
       revision if you don't need to refer to the empty state later. */

    rev1 = xorn_new_revision(rev0);

    if (rev1 == NULL)
        goto error1;

    /* Prepare a xornsch_line structure */

    memset(&line_data, 0, sizeof line_data);
    line_data.pos.x = 0;
    line_data.pos.y = 1;
    line_data.size.x = 3;
    line_data.size.y = 2;
    line_data.color = 3;
    line_data.line.width = 1;

    /* Add a line object with this data to the revision */

    line = xornsch_add_line(rev1, &line_data);

    if (line == NULL)
        goto error2;

    /* Finalize the revision */

    xorn_finalize_revision(rev1);


    /* Create a copy of the last revision, add a box and a circle
       to it, and finalize it */

    rev2 = xorn_new_revision(rev1);
    if (rev2 == NULL)
        goto error2;

    memset(&box_data, 0, sizeof box_data);
    box_data.pos.x = 1;
    box_data.pos.y = 1;
    box_data.size.x = 2;
    box_data.size.y = 2;
    box_data.color = 3;
    box_data.line.width = 1;

    box = xornsch_add_box(rev2, &box_data);
    if (box == NULL)
        goto error3;

    memset(&circle_data, 0, sizeof circle_data);
    circle_data.pos.x = -1;
    circle_data.pos.y = -1;
    circle_data.radius = 2;
    circle_data.color = 3;
    circle_data.line.width = 1;
    circle_data.fill.type = 1;

    circle = xornsch_add_circle(rev2, &circle_data);
    if (circle == NULL)
        goto error3;

    xorn_finalize_revision(rev2);


    /* Create a copy of the last revision, set the line's object
       type to net and change its color, delete the box, and
       finalize the revision */

    rev3 = xorn_new_revision(rev2);
    if (rev3 == NULL)
        goto error3;

    memset(&net_data, 0, sizeof net_data);
    net_data.pos.x = 0;
    net_data.pos.y = 1;
    net_data.size.x = 3;
    net_data.size.y = 2;
    net_data.color = 4;

    if (xornsch_set_net_data(rev3, line, &net_data) == -1)
        goto error4;

    xorn_delete_object(rev3, box);

    xorn_finalize_revision(rev3);


    /* ... you could do something with these revisions now ... */


    /* Free the revisions (the order doesn't matter) */

    xorn_free_revision(rev3);
    xorn_free_revision(rev2);
    xorn_free_revision(rev1);
    xorn_free_revision(rev0);

    /* No need to free objects */

    return 0;

error4:
    xorn_free_revision(rev3);
error3:
    xorn_free_revision(rev2);
error2:
    xorn_free_revision(rev1);
error1:
    xorn_free_revision(rev0);
error0:
    fprintf(stderr, "Out of memory\n");
    return 1;
}