#############################################################################
## Name:        lib/Wx/DemoModules/wxPrintPaperDatabase.pm
## Purpose:     wxPerl demo helper for Wx::PrintPaperDatabase
## Author:      Mark Dootson
## Modified by:
## Created:     19/05/2012
## RCS-ID:      $Id: wxPrintPaperDatabase.pm 3301 2012-05-31 01:16:40Z mdootson $
## Copyright:   (c) 2012 Mattia Barbon
## Licence:     This program is free software; you can redistribute it and/or
##              modify it under the same terms as Perl itself
#############################################################################

package Wx::DemoModules::wxPrintPaperDatabase;

use strict;
use Wx qw( :listctrl :id :sizer wxThePrintPaperDatabase );
use base qw(Wx::Panel);
use Wx::Print;
use Wx::Event qw(EVT_LIST_ITEM_SELECTED);

sub new {
    my $class = shift;
    my $self = $class->SUPER::new( $_[0], -1 );
   
    # paper list setup
    my $list = Wx::ListView->new($self, wxID_ANY, [-1,-1],[-1,-1], wxLC_REPORT|wxLC_SINGLE_SEL );
    $list->InsertColumn(0, "Paper Names", wxLIST_FORMAT_LEFT, 300);
    
    # add all papers to the list;
    
    my $numpapers = wxThePrintPaperDatabase->GetCount;
    for (my $i = 0; $i < $numpapers; $i++){
        # get a Wx::PrintPaperType for each paper
        my $paper = wxThePrintPaperDatabase->Item($i);
        $list->InsertStringItem( $i, $paper->GetName );
        # add the PaperId (wxPAPER_A4, wxPAPER_LETTER etc) as itemdata
        $list->SetItemData($i, $paper->GetId);
    }
    
    # events
    EVT_LIST_ITEM_SELECTED($self, $list, \&OnPaperSelected);

    # layout
    my $mainsizer = Wx::BoxSizer->new(wxVERTICAL);
    $mainsizer->Add($list,1,wxEXPAND|wxALL,0);
    $self->SetSizer($mainsizer);
    return $self;
}

sub OnPaperSelected {
    my($self, $event) = @_;
    
    my $paperid   = $event->GetItem->GetData;
    my $papername = $event->GetItem->GetText;
    
    # given a paperid (wxPAPER_A4 etc) we can get the paper details
    my $paper = wxThePrintPaperDatabase->FindPaperType($paperid);
    return unless $paper;
    
    my $pname  = $paper->GetName;
    my $width  = $paper->GetWidth;           # mm/10
    my $height = $paper->GetHeight;          # mm/10
    my $size   = $paper->GetSize;            # mm/10
    my $sizemm = $paper->GetSizeMM;          # mm
    my $sizedu = $paper->GetSizeDeviceUnits; # points - 1/72 inch
    
    Wx::LogMessage('Paper Name %s, Width %s, Height %s, Size %sx%s, Size MM %sx%s, Size Device %sx%s',
                   $paper->GetName, $width, $height, $size->GetWidth, $size->GetHeight,
                   $sizemm->GetWidth, $sizemm->GetHeight,
                   $sizedu->GetWidth, $sizedu->GetHeight);
    
    # we can also find a paper given its name
    my $samepaper = wxThePrintPaperDatabase->FindPaperType($papername);
    return unless $samepaper;
    
    Wx::LogMessage('And Again Width %s, Height %s', $samepaper->GetWidth, $samepaper->GetHeight);
    
    # utility methods
    my $nameagain = wxThePrintPaperDatabase->ConvertIdToName( $paperid );
    my $idagain   = wxThePrintPaperDatabase->ConvertNameToId( $papername );
    
    Wx::LogMessage(qq($nameagain : $paperid == $idagain : $papername));
    
}


sub add_to_tags { qw(new misc) }
sub title { 'wxPrintPaperDatabase' }

#Skip loading 
return defined(&Wx::PrintPaperDatabase::FindPaperTypeById);