Victor,
truth is I don't have the code on me right now and I won't have access
to my email during the weekend 'cause I can only use the connexion at
work.
The code (at least the relevant part) looks kinda this (I promise I'll
send the actual one on monday):
class UIBuilder : Object {
private Gtk.Builder builder
private string gui = "my_ui.ui"
...
public UIBuilder () {
builder = new Gtk.Builder ();
}
...
public add_object (string obj) {
builder.add_object_from_file(obj, gui);
/*
not sure that's the proper method but I think you'll get what I mean
*/
}
...
}
class Item : Object {
private string name;
...
private UIBuilder builder;
...
private Gtk.Button ok_button;
private Gtk.Button rm_button;
public Gtk.Box box;
...
public signal void ok_button_clicked (string name);
public signal void rm_button_clicked (string name);
...
public Item (string n) {
name = n;
builder = new UIBuilder();
builder.add_object("item_box");
box = builder.get_object("item_box") as Gtk.Box;
ok_button = builder.get_object("ok_button") as Gtk.Button;
ok_button.clicked.connect ( () => ok_button_clicked (name));
rm_button = builder.get_object("ok_button") as Gtk.Button;
rm_button.clicked.connect ( () => rm_button_clicked (name));
}
}
class ItemsViewport : Object {
private string[] names;
private UIBuilder builder;
...
private Gtk.Grid grid;
public ItemsViewport () {
builder = new UIBuilder();
builder.add_object ("items_viewport");
grid = builder.get_object("item_grid") as Gtk.Grid;
...
init();
}
private void init () {
Item item;
foreach (string name in names) {
item = new Item (name);
grid.attach (item, ...);
item.ok_button_clicked.connect (on_ok_button_clicked);
item.rm_button_clicked.connect (on_ok_button_clicked);
}
}
...
private void on_ok_button_clicked (string name) {
stdout.printf ("OK Button for item %s was clicked.\n", name);
}
private void on_rm_button_clicked (string name) {
stdout.printf ("RM Button for item %s was clicked.\n", name);
}
...
}
Of course those are (mostly) not the actual variable names but is the
general idea of what I am trying to do. I recall trying to use the 'ok'
and 'rm' buttons as public and connecting directly to their own signals
but then valac would not compile.
As I said earlier I promise I'll send the actual code on monday morning.
Best regards and thanks for your concern,
D.H. Bahr
On Fri, 2012-09-07 at 19:07 -0006, Victor wrote:
> Could you please paste the code somewhere, so we can try to spot the
> errors?
>
> This part grabs my attention:
> > I tried using vala native signals on the box-ish class emitted when
> the
> > buttons where clicked an then connect those signals in the grid-ish
> > class, but nothing seems to happen.
>
> From what you wrote there, I guess the button instances are public
> fields in the box class. For handling click events, you have two
> options: use lambda functions and access local data from there, or use
> a single "generic" handler for all the buttons.
>
>
> 1) Lambda: my_button.clicked.connect ( () => { // do something...
> });
>
>
> 2) Generic method:
>
>
> // Connect the handler somewhere...
> my_button.clicked.connect (on_button_click);
>
>
> void on_button_click (Gtk.Button button) {
> // You can do ref erence comparison here, like:
> if (button == my_button) {
>
>
> }
>
>
> // button's parent can be accessed using button.parent ...
> }
>
>
> You could also subclass Gtk.Button and provide your own signal there:
>
>
> public class MyButton : Gtk.Button {
> public signal void custom_signal ();
>
>
> public MyButton () { }
>
>
> public override void clicked () {
> custom_signal ();
> }
> }
>
>
>
>
> Best Regards.
>
>
> P.S. I speak Spanish
>
>
> On vie, sep 7, 2012 at 12:06 , D.H. Bahr <[email protected]> wrote:
> > Hello there!
> >
> > I've being experiencing a bug for a while now and I have no clue how
> > to
> > solve it. The situation is as follows:
> >
> > I have a set of classes (most of which handle some GtkWidget build
> > from
> > a Glade XML using a GtkBuilder instance). One of those classes has
> > a
> > GtkGrid and another has a GtkBox with a GtkLabel and a GtkButtonBox
> > with
> > two GtkButtonses. To the Grid-ish instance I add several Box-ish
> > instances (if you catch my drift) and what I need is to be able to
> > tell
> > which GtkButton from which box-ish instance is being clicked.
> >
> > I tried using vala native signals on the box-ish class emitted when
> > the
> > buttons where clicked an then connect those signals in the grid-ish
> > class, but nothing seems to happen.
> >
> > I hope I've made my self clear.
> >
> > Has anybody done something similar??
> >
> > Best regards,
> >
> > D.H. Bahr
> >
> >
> >
> > 10mo. ANIVERSARIO DE LA CREACION DE LA UNIVERSIDAD DE LAS CIENCIAS
> > INFORMATICAS...
> > CONECTADOS AL FUTURO, CONECTADOS A LA REVOLUCION
> >
> > http://www.uci.cu
> > http://www.facebook.com/universidad.uci
> > http://www.flickr.com/photos/universidad_uci
> > _______________________________________________
> > vala-list mailing list
> > [email protected]
> > https://mail.gnome.org/mailman/listinfo/vala-list
>
>
10mo. ANIVERSARIO DE LA CREACION DE LA UNIVERSIDAD DE LAS CIENCIAS
INFORMATICAS...
CONECTADOS AL FUTURO, CONECTADOS A LA REVOLUCION
http://www.uci.cu
http://www.facebook.com/universidad.uci
http://www.flickr.com/photos/universidad_uci
_______________________________________________
vala-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/vala-list