Hallo, I'm writing a new plugin for dia. I have defined a type Condition derived from Connection, which has two "normal" handles, and more handles can be added and removed by the user via the object menu. This is similar to network/bus.c, but I like to save the positions of the additional handles without custom code. Instead I like to use the PointArray property. The idea is to save the point positions when saving and creating the Handle objects accordingly, because all user-created handles are identical, except the ->pos.
Now my questions: - Is my idea totally stupid? - Can I save handle positions that way or do have I to write custom code for saving the handle positions? - Are the types etc. correct? - Is there an example for using the PointArray property? (I didn't find a dia plugin for that purpose, and network/bus.c uses custom code instead. Why?) - Isn't there a way to do the stuff in Python? Here is an excerpt from my code, maybe someone can check it? (I will give my code to the GNU community under GPL when it's ready.) Thanks in advance! #include "prop_geomtypes.h" typedef struct _Condition { Connection connection; ... GArray *handles; GArray *handle_points; } Condition; static PropDescription condition_props[] = { CONNECTION_COMMON_PROPERTIES, ... { "handle_points", PROP_TYPE_POINTARRAY, 0, NULL, NULL }, PROP_DESC_END }; static PropOffset condition_offsets[] = { CONNECTION_COMMON_PROPERTIES_OFFSETS, ... { "handle_points", PROP_TYPE_POINTARRAY, offsetof(Condition, handle_points)}, {NULL} }; static Object * condition_create(Point *startpoint, void *user_data, Handle **handle1, Handle **handle2) { Condition *condition; Connection *conn; Object *obj; Point p; Handle *handle; condition = g_new0(Condition, 1); conn = &condition->connection; obj = &conn->object; conn->endpoints[0] = conn->endpoints[1] = *startpoint; conn->endpoints[1].x += CONDITION_WIDTH; obj->type = &condition_type; obj->ops = &condition_ops; connection_init(conn, 2, 0); condition->handles = g_array_new(FALSE, TRUE, sizeof(Handle)); condition->handle_points = g_array_new(FALSE, TRUE, sizeof(Point)); condition_update_data(condition); *handle1 = obj->handles[0]; *handle2 = obj->handles[1]; obj->handles[0]->connect_type = HANDLE_NONCONNECTABLE; obj->handles[1]->connect_type = HANDLE_NONCONNECTABLE; handle = g_new0(Handle, 1); handle->id = HANDLE_CONDITION; handle->type = HANDLE_MINOR_CONTROL; handle->connect_type = HANDLE_CONNECTABLE_NOBREAK; handle->connected_to = NULL; handle->pos = *startpoint; handle->pos.x = (conn->endpoints[0].x + conn->endpoints[1].x)/2.0; handle->pos.y = conn->endpoints[0].y; g_array_append_val(condition->handles, *handle); object_add_handle(&condition->connection.object, handle); return &condition->connection.object; } _______________________________________________ Dia-list mailing list [EMAIL PROTECTED] http://mail.gnome.org/mailman/listinfo/dia-list