Thanks so much for taking the time. The real reason for this rather silly test was to fill xpm bitmaps with loadfile method. this was a first test to look if there is something coming out of the pipe. do i have to write a handler for that, because that would give Kephra a total independence of config files, if it could have also inline icons.
thanks a lot. herbert > Hi Herbert, > > On 26/06/2013 18:11, herbert breunung wrote: >> greetings comrads >> I have seen the XRC custom example in Wx::Demo and did > .... >> Wx::MemoryFSHandler::AddTextFile( 'file.xpm', <<'EOB' ); > .... >> my $ed = Wx::TextCtrl->new($frame, -1,''); >> $ed->LoadFile('memory:file.xpm'); >> >> but i get just error also loading into the bitmap doesn't work. >> Any Suggestions? >> >> Thanks a lot >> Herbert aka lichtkind >> > > I had to look at the wxWidgets source to figure out what is happening here. > > It turns out that you cannot use the name of a memory file anywhere that you > can use a filename. Only some specific methods accept the name of a 'memory' > file. Internally, only some 'Load' methods use wxFileSystem and streams. For > these methods, passing the name of a 'memory' file will work. In addition to > the XRC method in Wx::Demo, Wx::HtmlWindow->LoadPage() will accept a 'memory' > file. > > Other methods, such as Wx::TextCtrl->LoadFile, are implemented as thin > wrappers around the operating system file open / read functions. So in these > cases 'memory:file.xpm' is not going to work. > > I don't see anywhere in the documentation that you can tell which methods use > filestreams though :( > > For information, I have attached an example of how you can get a file handle > to a memory file and read the content. It all looks pointless though and there > seems multiple better ways to structure this in Perl. > > Hope it helps > > Mark > > #--------------------------------------------------------------------- > #/usr/bin/perl > > package MyFrame; > use strict; > use warnings; > use Wx qw( :textctrl :sizer :panel :window); > use Wx::FS; > use base qw( Wx::Frame ); > > sub new { > my $class = shift; > my $self = $class->SUPER::new( @_ ); > my $mainpanel = Wx::Panel->new($self, -1, [-1,-1], [-1,-1], > wxTAB_TRAVERSAL|wxBORDER_NONE); > my $text = Wx::TextCtrl->new($mainpanel, -1, "", [-1,-1],[-1,-1]); > > # Fairly pointless use of Virtual File System directly > > # Create Virtual File System > { > my $content = 'The quick brown fox jumped over the lazy dog'; > Wx::FileSystem::AddHandler( Wx::MemoryFSHandler->new ); > Wx::MemoryFSHandler::AddTextFile( 'sample.txt', $content ); > } > > # Get file content from virtual filesystem > { > my $fs = Wx::FileSystem->new; > my $mfile = $fs->OpenFile('memory:sample.txt'); > my $fh = $mfile->GetStream; > my $textcontent = ''; > while(<$fh>) { > $textcontent .= $_; > } > $text->ChangeValue($textcontent); > } > > # Clean up VS > { > Wx::MemoryFSHandler::RemoveFile( 'sample.txt' ); > } > > my $panelsz = Wx::BoxSizer->new(wxVERTICAL); > my $framesz = Wx::BoxSizer->new(wxVERTICAL); > > $panelsz->Add($text, 1, wxEXPAND|wxALL, 0); > $mainpanel->SetSizer($panelsz); > $framesz->Add($mainpanel, 1, wxEXPAND|wxALL, 0); > $self->SetSizer($framesz); > > $self->Center; > return $self; > } > > package MyApp; > use strict; > use warnings; > use Wx; > use Wx::FS; > use base qw( Wx::App ); > > sub OnInit { > my $self = shift; > my $win = MyFrame->new(undef, -1, 'Wx::FS Test'); > $self->SetTopWindow($win); > $win->Show(1); > return 1; > } > > package main; > use strict; > use warnings; > > my $app = MyApp->new; > $app->MainLoop; > > > > > > > > > > > > > > > > > > > >