The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*- perl -*-

use strict;

use Wizard::State ();
use Wizard::SaveAble ();
use Wizard::Examples::ISDN::Config ();


package Wizard::Examples::ISDN;

@Wizard::Examples::ISDN::ISA     = qw(Wizard::Examples);
$Wizard::Examples::ISDN::VERSION = '0.01';


sub GetKey { 'prefs'; };

sub init {
    my $self = shift;
    my $prefs = $self->{'prefs'} || die "Missing preferences";
    return ($prefs) unless shift;
    my $cfile = $prefs->{'isdn-prefs-cfile'} || die "Missing config file";
    wantarray ? ($prefs, $cfile) : $prefs;
}


sub Action_Reset {
    my($self, $wiz) = @_;

    # Load prefs, if required.
    unless ($self->{'prefs'}) {
	my $cfg = $Wizard::Examples::ISDN::Config::config;
	my $file = $cfg->{'isdn-prefs-file'};
	$self->{'prefs'} = Wizard::SaveAble->new('file' => $file, 'load' => 1);
	$self->Store($wiz);
    }

    # Return the initial menu.
    (['Wizard::Elem::Title', 'value' => 'ISDN Wizard Menu'],
     ['Wizard::Elem::Submit', 'value' => 'ISDN Wizard preferences',
      'name' => 'Wizard::Examples::ISDN::Action_Preferences',
      'id' => 1],
     ['Wizard::Elem::Submit', 'value' => 'ISDN Settings Wizard',
      'name' => 'Wizard::Examples::ISDN::Settings::Action_Reset',
      'id' => 2],
     ['Wizard::Elem::BR'],
     ['Wizard::Elem::Submit', 'value' => 'Return to Wizard Examples',
      'name' => 'Wizard::Examples::Action_Reset',
      'id' => 98],
     ['Wizard::Elem::Submit', 'value' => 'Exit ISDN Wizard',
      'id' => 99]);
}


sub Action_Preferences {
    my($self, $wiz) = @_;
    my $prefs = $self->init();

    # Return a list of input elements.
    (['Wizard::Elem::Title', 'value' => 'ISDN Wizard Preferences'],
     ['Wizard::Elem::Text', 'name' => 'isdn-prefs-cfile',
      'value' => $prefs->{'isdn-prefs-cfile'},
      'descr' => 'ISDN Configfile'],
     ['Wizard::Elem::Text', 'name' => 'isdn-prefs-updatecmd',
      'value' => $prefs->{'isdn-prefs-updatecmd'},
      'descr' => 'Command that will be executed on update'],
     ['Wizard::Elem::Submit', 'name' => 'Action_PreferencesSave',
      'value' => 'Save these settings', 'id' => 1],
     ['Wizard::Elem::Submit', 'name' => 'Action_PreferencesReset',
      'value' => 'Reset this form', 'id' => 98],
     ['Wizard::Elem::Submit', 'name' => 'Action_Reset',
      'value' => 'Return to top menu', 'id' => 99]);
}


sub Action_PreferencesSave {
    my($self, $wiz) = @_;
    my $prefs = $self->init();
    foreach my $opt (qw(isdn-prefs-cfile isdn-prefs-updatecmd)) {
	$prefs->{$opt} = $wiz->param($opt) if defined($wiz->param($opt));
    }
    $prefs->Modified(1);
    $self->Store($wiz, 1);
    $self->Action_Reset($wiz);
}


sub Action_PreferencesReset {
    my($self, $wiz) = @_;
    $self->Action_Reset($wiz);
    $self->Action_Preferences($wiz);
}


1;