Gtk2-Perl gond...

Szép estét!

A gondom a következő lenne... Összedobtam Gtk2::TreeStore, és Gtk2::TreeView segítségével egy directory tree-t... Na most ezt egy dialog ablakban kidobom. Amit szeretnék, az az lenne, hogy az ok gombra történő kattintás után ki tudjam szedni a treeview-ból, hogy melyik directory lett kiválasztva, de egyszerűen nem tudom, hogy bírjam rá, hogy valami infót adjon nekem... Egész konkrétan, ugye a neve kéne, meg az elérési útja...

Valakinek valami tipp???

Előre is köszi! :)

Hozzászólások

Ha jól rémlik, akkor az objektumnak, ami a fát reprezentálja, kell lennie egy selected tulajdonsága, ammi egy tömbre mutat és ebben vannak a paraméterek amik neked kellenek.

A fát kvázi a treestore típusú ojjektum tartalmazza, viszont a kijelölést a treeview tudja kezelni, viszont tőle selected gyanánt, egy treeselection objektumot kapok...
Körbe tudok kérdezni mindent mindenkiről, csak azt nem tudom, hogy áll össze a kép, hogy meglegyen a konkrét data...
_______________________________________________________
Debian SID on AcerAspire 3022lmi

Esetleg valami tipp, hogy hol lehetne hozzá valami doksit találni? Végig google-ztam mindent, és a hivatalos oldalon is pont ez a tutorial hiányzik... :(
_______________________________________________________
Debian SID on AcerAspire 3022lmi

$iter = $treeview->get_selection->get_selected
vagy
@paths = $treeview->get_selection->get_selected_rows

lásd "man Gtk2::TreeSelection", illetve a Gtk2 referencia a függvények részletesebb leírásához.

aztán a Gtk2::TreeModel-ben lévő függvények az iter vagy path alapján kiszedik a megfelelő sort a store-ból.

Áhh... megvan hol maradtam le... a TreeModel környékén nem néztem szét, csak a TreeStore-nál... a TreeModel-nél valóban ott a 'get'... Köszönöm, ez a láncszem hiányzott azt hiszem... Nah, majd este meló, meg suli után jól ki is próbálom... :D Köszi mégegyszer!
_______________________________________________________
Debian SID on AcerAspire 3022lmi

Újabb dolgon akadtam el... Van egy SimpleListem... Egy sorra kattintva a megfelelő szubrutin lefut, meg van a data, ami kell, és itt jön a bökkenő.... Amim van az egy fájlnév... Nos 'valahol' van egy kép... neki kéne betöltenie ezt a fájlt... Nade abból a szubrutonból ami signal hatására hívódik, hogy tudom előszedni az Image objektumomat?

Valami tipp?

Előre is köszi!

szerk:

picit egyszerűbben... egy adott widgeten bekövetkezzett esemény kezelése közben szeretnék egy másik widget-et is piszkálni...

Megint sikerült belefutnom valamibe... :)

Egy frambe beltettem egy image objektumot... Gondoltam ha átméretezem a framet, akkor hozzáigazítom a kép méretét. A gond az, hogy ha frame size_request, vagy size_allocate signáljához rendelem azt a subrutint, ami a kep átméretezését csinálja, akkor egy végtelen ciklust kapok, ugyanis az image set_from_pixbuf metódusa után ujrahívódik a frame size_(request|allocate)-je...

Van valami trükk, hogy ne legyen belőle végtelen ciklus?

szerk:

Valahol olvastam, hogy signal blokkolással elvileg megoldható, de ott a kérdezőnek sem működött (persze nekem sem... :D)

Valami tipp valakinek? Nagyon nem akar menni, pedig találtam egy másik 'megoldást' is: egy kis hóksu-pókuszt a signal chainnel, de az sem akar működni

GLib-GObject-WARNING **: gsignal.c:1502: signal id `15' cannot be chained from current emission stage for instance `0x83d51a0'

valószínű a signal id nem tetszik neki...

Így nézne ki a size_allocate-hez connectelt szubrutin:

sub _size_allocate {
    my ($self, $new) = @_;
    no warnings 'uninitialized';
    if($self->{width}  != $new->width ||
       $self->{height} != $new->height) {
        $self->{width}  = $new->width;
        $self->{height} = $new->height;
        my $pixbuf = $self->get_pixbuf;
        if($pixbuf) {
                $pixbuf->scale_simple($self->{width}, self->{height},'GDK_INTERP_HYPER');
                $self->set_from_pixbuf($pixbuf);
                print "Pixbuf loaded\n";
                } else {
                        print "No pixbuf\n";
                };;
    }

    $self->signal_chain_from_overridden($new);
};

Ezt (szinte) egy az egyben szedtem ki egy levlistából...