iPodDB::Preferences - Store and Retrieve preferences


iPodDB documentation Contained in the iPodDB distribution.

Index


Code Index:

NAME

Top

iPodDB::Preferences - Store and Retrieve preferences

SYNOPSIS

Top

    my $preferences = iPodDB::Preferences->new;

DESCRIPTION

Top

This module stores and retrieves the application preferences via Wx::ConfigBase.

PROPERTIES

Top

mountpoint

The location where the root directory of the iPod can be found.

database

The location of the database on the above mountpoint

METHODS

Top

new( )

Gets the application preferences via Wx::ConfigBase::Get.

get_preferences( [ $frame ] )

This will load up the perferences dialog so the user can customize the applcation.

config( [ $config ] )

Gets / sets the Wx::ConfigBase object.

set( $key => $value )

Sets a configuration variable. The variable will be delete if the value is not defined. If a trigger (a sub named on_$key) then it will subsequently be called with the value of the key as a parameter.

This should not be used directly, rather use the properties above (as methods).

get( $key )

Gets a configuration variable.

This should not be used directly, rather use the properties above (as methods).

EVENTS

Top

on_mountpoint( $value )

This trigger is called once the mountpoint is set. It will automatically add the location of the iPod database on the mountpoint.

AUTHOR

Top

* Brian Cassidy <bricas@cpan.org>

COPYRIGHT AND LICENSE

Top


iPodDB documentation Contained in the iPodDB distribution.
package iPodDB::Preferences;

use base( Class::Accessor );
use Wx qw( wxID_OK );

use strict;
use warnings;

use Path::Class;

use constant DBPATH => 'iPod_Control/iTunes/iTunesDB';

__PACKAGE__->mk_accessors( qw( mountpoint database ) );

our $VERSION = '0.02';

sub new {
    my $class  = shift;
    my $self   = $class->SUPER::new;
    my $config = Wx::ConfigBase::Get;

    $config->Write( 'version' => $iPodDB::VERSION );
    $self->config( $config );

    return $self;
}

sub get_preferences {
    my $self   = shift;
    my $parent = shift;
    my $dialog = Wx::DirDialog->new( $parent, 'Select iPod mount location' );

    unless( $dialog->ShowModal == wxID_OK ) {
        $self->mountpoint( undef );
        return;
    }

    $self->mountpoint( $dialog->GetPath );
}

sub config {
        my $self = shift;

        if( @_ ) {
            $self->{ _CONFIG } = shift;
        }

        return $self->{ _CONFIG };
}

sub set {
    my $self    = shift;
    my $key     = shift;
    my $value   = shift;
    my $config  = $self->config;
    my $trigger = "on_$key";

    if( not defined $value ) {
        $config->DeleteEntry( $key ) if $config->Exists( $key );
    }
    else {
        $config->Write( $key => $value );
    }

    $self->$trigger( $value ) if $self->can( $trigger );

    return $value;
}

sub get {
    my $self   = shift;
    my $key    = shift;
    my $config = $self->config;

    return undef unless $config->Exists( $key );
    return $config->Read( $key );
}

sub on_mountpoint {
    my $self   = shift;
    my $value  = shift;

    return $self->database( undef ) unless defined $value;

    my @path = split( /\//, DBPATH );
    my $file = dir( $value );

    for( 0..$#path ) {
        $file = $_ == $#path ? $file->file( $path[ $_ ] ) : $file->subdir( $path[ $_ ] );
    }

    $self->database( $file->stringify );
}

1;