Thats exactly what I looked for (shit I even knew this some years ago)
blessings
Am 28.06.2013 21:21, schrieb Mark Dootson:
> Hi,
>
> I think your solution is to use the newFromXPM methods.
>
> my $bitmap = Wx::Bitmap->newFromXPM( \@xpmdata );
> my $icon = Wx::Icon->newFromXPM( \@xpmdata );
>
> @xpmdata is just an array of xpm strings - so one array element per line if
> the xmp data is from a file.
>
> Given some inline xpm data such as
>
> my $bitmap1 = <<EOB
> ....
> EOB
>
>
> The you would have a choice of doing
>
> A)
> my @xpmdata = split(/\n/, $bitmap1);
> my $bitmap = Wx::Bitmap->newFromXPM( \@xpmdata );
>
> or
>
> B)
> open my $fh, '<', \$bitmap1;
> my $bitmap = Wx::Bitmap->new(
> Wx::Image->new($fh, wxBITMAP_TYPE_XPM)
> );
> close( $fh );
>
>
> Using method B) you can imagine creating a module dynamically that bundles a
> any number of PNG files together in its __DATA__ section and records the name,
> size and offset of each PNG in the main body of the module code.
> It would be quite simple I think to add a GetBitmap method to this module that
> would return bitmap objects by name.
>
>
> Hope some of it helps
>
> Regards
>
> Mark
>
>
> On 28/06/2013 20:16, herbert breunung wrote:
>> 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;
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>
>