signals, objects, user_data and stuff.
- From: Thomas Mailund <mailund mail1 stofanet dk>
- To: gtk-list redhat com
- Subject: signals, objects, user_data and stuff.
- Date: 28 Mar 2000 00:03:31 +0200
Hi all.
I'm messing around with signals right now, and I've run into the
following problem. I need to connect a signal, as in
'connect_object', but I want to pass user data along with the signal,
as in the usual signal_connect. I can probably get around this using
a struct and put the stuff I need into that, but it'll get quite ugly
for my current situation and I'm looking for a more elegant solution.
A little context for the problem: I have a gnome canvas where I've
drawn a number of "nodes", items which I can move around, and a number
of "connectors", lines connecting the nodes. For the nodes I've
subclassed the canvas item and added the signal "moved" which is
emitted whenever I move the node. My connectors listens for these
signals, so they will be informed when one of their endpoints move.
So I can do something like
gtk_signal_connect_object (GTK_OBJECT (node), "moved",
GTK_SIGNAL_FUNC (connector_moved),
GTK_OBJECT (connector));
where the callback moves the connector
static void
connector_moved (Connector *conn, gdouble dx, gdouble dy)
{
<<move "the right" point>>
}
(here the (dx,dy) are parameters from the nodes "moved" signal).
Of course, getting "the right point" is the tricky one. If I only
have two points on a connector, i.e. connectors are straight lines
between nodes, I can hack it doing something like
gtk_signal_connect_object (GTK_OBJECT (node1), "moved",
GTK_SIGNAL_FUNC (connector_moved1),
GTK_OBJECT (connector));
gtk_signal_connect_object (GTK_OBJECT (node2), "moved",
GTK_SIGNAL_FUNC (connector_moved2),
GTK_OBJECT (connector));
static void
connector_moved1 (Connector *conn, gdouble dx, gdouble dy)
{
connector_move_point (conn, 1);
}
static void
connector_moved2 (Connector *conn, gdouble dx, gdouble dy)
{
connector_move_point (conn, 2);
}
It's not nice, but it would work. But if I add bend points to
connectors it gets tricky. Then I need a special callback for each
bend point, just to pass an integer parameter along. If I don't know
the number of bend points statically (which I don't, since the
connectors are read in from a file) I don't see how I can do this.
Does anyone have any suggestions on how to achieve what I want here?
Either getting the extra parameter passed along or perhaps redesigning
it all and do something more clever?
/mailund
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]