Thank you Brian,
I've also tried to do something like that, but unfortunately I need to use
threads and pass shared vars from a thread to another, and threads::shared
is not very friendly with hashes of hashes which I need to use.
So finally I use shared scalars, array and hash refs which are local for
each module and I access the objects from those modules using the whole path
of classes like
$self->main_form->dialog1->method1(...);
Until now is OK, although I think it wouldn't be pretty nice if I would need
to create a very complex program in perl...
Octavian
----- Original Message -----
From: "Brian Donorfio" <[EMAIL PROTECTED]>
To: "Octavian Rasnita" <[EMAIL PROTECTED]>
Cc: <wxperl-users@perl.org>
Sent: Thursday, August 21, 2008 4:16 PM
Subject: Re: getting the values from Wx::Dialog
On Sun, Aug 17, 2008 at 10:03 AM, Octavian Rasnita <[EMAIL PROTECTED]>
wrote:
Hi,
I need to create a modal dialog window with a few fields and after
closing
it, I need to return the values of those fields to the parent window.
Please tell me which is the recommended way to do that. I've tried a few
ways, but none of them looks clean.
If I need to do what I said, do I need to use global variables like
$main::var
or
$myapp->{var}
If it is possible, I would like to be able to not use them, because the
program would need too many and it will be hard to understand it after a
time.
I've tried something like:
package MyApp::Main;
use MyApp::Main::Dialog;
use base 'Wx::Frame';
sub new {
my ($class, $parent) = @_
my $self = $class->SUPER::new($parent, ...);
$self->{dialog} = MyApp::Main::Dialog->new($self);
$self->{dialog}->ShowModal();
# Here I want to access the values from the fields from the closed dialog
}
I have also tried to store the code that creates the dialog in
MyApp::Main,
but the event handler which is executed when pressing the "Ok" button of
the
dialog gets the $self which is the instance of the dialog, and not the
Main
form, so I can't use it to store the variables I need.
I'm pretty confused.
Please tell me which do you think it is the cleanest way to do that.
Thank you.
Octavian
Hi Octavian,
I've always just used a hash reference to pass values back and forth.
There may be a more Wx-approved way of doing this, but references are
straightforward enough. I usually clean it up by moving a lot of the
code that deals with this out to other methods (usually a
fill_defaults() called from the constructor, and a validate_entries()
and save_entries() at the end), but you can organize it however you
want.
package MyApp::Main;
...
my %dialog_options = ( foo => 'bar' );
my $dialog = MyApp::Main::Dialog->new($self, \%dialog_options);
$dialog->ShowModal;
# $dialog_options{foo} now has inputted value
package MyApp::Main::Dialog;
sub new {
my ($class, $parent, $options_ref) = @_;
my $self = $class->SUPER::new(...);
$self->_create_widgets;
$self->{_options} = $options_ref;
$self->{FooWidget}->SetValue($self->{_options}->{foo});
}
sub ok_button_clicked {
my ($self) = @_;
$self->{_options}->{foo} = $self->{FooWidget}->GetValue;
$self->EndModal(wxID_OK);
}
-Brian