From: Peter T. <pe...@Pe...> - 2006-08-14 21:59:50
|
<html> <body> <font size=3>I have a TextCtrl with keywords in it. When the user clicks on a keyword I pop up a modal dialog to edit the keyword. For some reason mouse-clicks in the modal dialog box are being sent to the TextCtrl and causing new dialog boxes to pop up on top of the first dialog box. In other words, the dialog is NOT acting MODAL. I am at my *wit's end* trying to figure this out. I have tried both GetTextFromUser() and TextEntryDialog->new() with ShowModal.<br><br> I made a small sample program just to demonstrate this problem:<br> P.S. This TextCtrl cannot be a List because in my real application it does a lot more than in this simple example.<br><br> HELP!<br> -Peter<br><br> #!/usr/bin/perl -w -- <br> use strict;<br> use Wx qw[:everything];<br><br> package main;<br><br> unless(caller){<br> <x-tab> </x-tab>local *Wx::App::OnInit = sub{1};<br> <x-tab> </x-tab>my $app = Wx::App->new();<br> <x-tab> </x-tab>Wx::InitAllImageHandlers();<br><br> <x-tab> </x-tab>my $ui = Test_ui->new();<br><br> <x-tab> </x-tab>$app->SetTopWindow($ui);<br> <x-tab> </x-tab>$ui->Show(1);<br> <x-tab> </x-tab>$app->MainLoop();<br> }<br><br> package Test_ui;<br><br> use Wx qw[:everything :allclasses];<br> use Wx::Event qw(EVT_LEFT_UP);<br><br> our $mainframe;<br> our @keywords=();<br><br> use base qw(Wx::Frame);<br> sub new {<br> <x-tab> </x-tab>my( $self, $parent, $id, $title, $pos, $size, $style, $name ) = @_;<br> <x-tab> </x-tab>$parent = undef unless defined $parent;<br> <x-tab> </x-tab>$id = -1 unless defined $id;<br> <x-tab> </x-tab>$title = "" unless defined $title;<br> <x-tab> </x-tab>$pos = wxDefaultPosition unless defined $pos;<br> <x-tab> </x-tab>$size = wxDefaultSize unless defined $size;<br> <x-tab> </x-tab>$name = "" unless defined $name;<br> <x-tab> </x-tab>$style = wxDEFAULT_FRAME_STYLE unless defined $style;<br><br> <x-tab> </x-tab>$self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $style, $name );<br> <x-tab> </x-tab>$mainframe=$self;<br> <x-tab> </x-tab><br> <x-tab> </x-tab>my $main_sizer=Wx::BoxSizer->new(wxVERTICAL);<br><br> <x-tab> </x-tab>$self->{keywords_text} = Wx::TextCtrl->new($self, -1,<br> <x-tab> </x-tab><x-tab> </x-tab>"1. Apples\n2. Bananas\n3. Cherries\n4. Durian",<br> <x-tab> </x-tab><x-tab> </x-tab>wxDefaultPosition, wxDefaultSize,<br> <x-tab> </x-tab><x-tab> </x-tab>wxTE_READONLY|wxTE_MULTILINE|wxTE_DONTWRAP);<br> <x-tab> </x-tab>$main_sizer->Add( $self->{keywords_text}, 1, wxEXPAND|wxALL, 2);<br> <x-tab> </x-tab><br> <x-tab> </x-tab>$self->SetAutoLayout(1);<br> <x-tab> </x-tab>$self->SetSizer($main_sizer);<br> <x-tab> </x-tab>$self->Layout();<br><br> <x-tab> </x-tab>EVT_LEFT_UP( $self->{keywords_text}, \&handle_keywords_left_up);<br><br> <x-tab> </x-tab>$keywords[0]="Apples";<br> <x-tab> </x-tab>$keywords[1]="Bananas";<br> <x-tab> </x-tab>$keywords[2]="Cherries";<br> <x-tab> </x-tab>$keywords[3]="Durian";<br><br> <x-tab> </x-tab>return $self;<br> }<br><br> sub handle_keywords_left_up {<br> <x-tab> </x-tab>my ($self, $event) =@_;<br> <x-tab> </x-tab>my $ip=$self->GetInsertionPoint();<br> <x-tab> </x-tab>my ($col,$row)=$self->PositionToXY($ip);<br> <x-tab> </x-tab>print("editing keyword #$row\n");<br> <x-tab> </x-tab>return unless $keywords[$row];<br> <x-tab> </x-tab>my $newtext=Wx::GetTextFromUser( "Edit keyword $keywords[$row]",<br> <x-tab> </x-tab><x-tab> </x-tab>"Edit keyword $keywords[$row]", $keywords[$row], $mainframe, 0, 0);<br> <x-tab> </x-tab>if ($newtext) {<br> <x-tab> </x-tab><x-tab> </x-tab>$keywords[$row]=$newtext;<br> <x-tab> </x-tab><x-tab> </x-tab>my $keyword_text='';<br> <x-tab> </x-tab><x-tab> </x-tab>my $i=1;<br> <x-tab> </x-tab><x-tab> </x-tab>foreach my $k ( @keywords) {<br> <x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab>$keyword_text .= "$i.\t$k\n";<br> <x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab>$i++;<br> <x-tab> </x-tab><x-tab> </x-tab>}<br> <x-tab> </x-tab><x-tab> </x-tab>$mainframe->{keywords_text}->SetValue( $keyword_text);<br> <x-tab> </x-tab>}<br> <x-tab> </x-tab><br> <x-tab> </x-tab>#$event->Skip(1);<br> }<br><br> 1;<br> </font></body> </html> |