The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Mail::Exchange::Message::StickyNote;

use Mail::Exchange::PidTagIDs;
use Mail::Exchange::PidLidIDs;
use Mail::Exchange::Message;
use Mail::Exchange::Recipient;
use Email::Address;

=head1 NAME

Mail::Exchange::Message::StickyNote - subclass of Mail::Exchange::Message
that initializes StickyNote-specific fields

=head1 SYNOPSIS

    use Mail::Exchange::Message::StickyNote;

    $mail=Mail::Exchange::Message::StickyNote->new();

=head1 DESCRIPTION

Mail::Exchange::Message::StickyNote is a utility class derived from
Mail::Exchange::Message. When creating a new message object, it sets the
Message Class to "IPM.StickyNote" to mark this message as a sticky note
object.

=head1 EXAMPLE

    #!/usr/bin/perl
    
    use Mail::Exchange::PidLidIDs;
    use Mail::Exchange::Message::StickyNote;
    
    my $note=Mail::Exchange::Message::StickyNote->new();
    
    $note->setUnicode(1);
    
    $note->setBody("hello world");
    $note->setColor('blue');
    $note->set(PidLidNoteWidth, 600);
    $note->set(PidLidNoteHeight, 400);
    $note->set(PidLidNoteX, 100);
    $note->set(PidLidNoteY, 200);
    
    $note->save("mynote.msg");

=head1 METHODS
    
=cut

use strict;
use warnings;
use 5.008;

use Exporter;

use vars qw($VERSION @ISA);
@ISA=qw(Mail::Exchange::Message Exporter);

$VERSION="0.04";

=head2 new()

$msg=Mail::Exchange::Message::StickyNote->new();

Create a new message object and initialize it to a sticky note.
=cut

sub new {
	my $class=shift;
	my $self=Mail::Exchange::Message->new();
	$self->set(PidTagMessageClass, "IPM.StickyNote");
	bless $self;
}

=head2 parse()

The parse() method is overwritten to abort, because the message type will be
read from the input file, so a plain Mail::Exchange::Message object should
be used in this case.

=cut

sub parse {
	die("parse not supported, use a Mail::Exchange::Message object");
}


=head2 setColor()

The setColor method sets the PidLidNoteColor property. It understands
color IDs as well as the color names defined in MS-OXONOTE 2.2.1.1,
which are blue, green, pink, yellow, and white.
Also, it sets the PidTagIconIndex property to C<color>+0x300, as
required by MS-OXONOTE 2.2.2.2.

=cut

my %colors=(blue => 0, green => 1, pink => 2, yellow => 3, white => 4);

sub setColor {
	my $self=shift;
	my $color=shift;
	$color=$colors{lc $color} if defined $colors{lc $color};
	$self->set(PidLidNoteColor, $color);
	$self->set(PidTagIconIndex, $color+0x300);
}