develooper Front page | perl.wxperl.users | Postings from May 2013

Fwd: Re: Trying to trigger wxEVT_TREELIST_ITEM_CHECKED programmatically:not implemented?

From:
Mark Dootson
Date:
May 24, 2013 11:20
Subject:
Fwd: Re: Trying to trigger wxEVT_TREELIST_ITEM_CHECKED programmatically:not implemented?
Message ID:
519F4CEA.3080102@znix.com
Hi,

On 24/05/2013 11:19, Helen Craigman wrote:
> Hi Mark
>

> In my code, I do use the CheckItem method, and that's working fine.
> The issue is, after I change the item check state, the event handler
> for EVT_TREELIST_ITEM_CHECKED does not get
> triggered,

Yes, this particular event is only triggered when the change is caused
by the user interface. That is a wxWidgets design decision /feature /
bug - depending on your view. The behaviour is documented though.

> Studing the documentation, I undestood that the way to
> have the event handler invoked, is to programatically raise the "command
> event" (in this case: EVT_TREELIST_ITEM_CHECKED).

No. (as noted previously). You can created your own custom events but
'mimicking' a built in event is not the way to go. An actual
wxTreeListEvent derives from wxNotifyEvent - you would really need to
create the event properly.

>
> Now an event handler has this in the beginning:
> Quote ----------
> my( $this, $event ) = @_;
>   $item = $event->GetItem;
> Unquote -------
>
> So, since  it's looking for an event object, I don't know how to call it,
> except for raising EVT_TREELIST_ITEM_CHECKED.
> And in order to raise the event programatically, you need
> wxEVT_TREELIST_ITEM_CHECKED.
>
> By the way, other command event constants do get exported in wxPerl
> (for example wxEVT_COMMAND_CHECKBOX_CLICKED).

true, but this isn't to allow end user usage, rather it it just the way
the event 'macro' sub routines are implemented for this particular event.

>
> How do you propose I should do it?

sub handle_item_change {
    my($self, $item) = @_;
    # do stuff with $item;
}

sub on_event_item_checked {
    my($self, $event) = @_;
    my $item = $event->GetItem;
    $self->handle_item_change( $item );
}

sub set_item_state_by_code {
    my($self, $item, $newstate) = @_;
    $self->{treelist}->CheckItem($item, $newstate);
    $self->handle_item_change( $item );
}


Regards

Mark

























nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About