[Slim-Checkins] r8876 - /trunk/server/Slim/Buttons/Input/List.pm

kdf at svn.slimdevices.com kdf at svn.slimdevices.com
Tue Aug 8 18:53:41 PDT 2006


Author: kdf
Date: Tue Aug  8 18:53:33 2006
New Revision: 8876

URL: http://svn.slimdevices.com?rev=8876&view=rev
Log:
Bug: n/a
Description: cleanup whitespace in INPUT.List, add 'init' param similar to INPUT.Choice which allows call-time param setting


Modified:
    trunk/server/Slim/Buttons/Input/List.pm

Modified: trunk/server/Slim/Buttons/Input/List.pm
URL: http://svn.slimdevices.com/trunk/server/Slim/Buttons/Input/List.pm?rev=8876&r1=8875&r2=8876&view=diff
==============================================================================
--- trunk/server/Slim/Buttons/Input/List.pm (original)
+++ trunk/server/Slim/Buttons/Input/List.pm Tue Aug  8 18:53:33 2006
@@ -218,6 +218,7 @@
 # valueRef =  # reference to value to be selected
 # callback = undef # function to call to exit mode
 # listIndex = 0 or position of valueRef in listRef
+# init = undef # function to init any number of params at calltime, accepts client as arg
 # noWrap = undef # whether or not the list wraps at the ends
 # externRef = undef
 # externRefArgs = CV # accepts C, V and I
@@ -236,72 +237,107 @@
 
 sub init {
 	my $client = shift;
+
+	my $init = $client->param('init');
+
+	if ($init && (ref($init) eq 'CODE')) {
+		$init->($client);
+	}
+
 	if (!defined($client->param('parentMode'))) {
 		my $i = -2;
 		while ($client->modeStack->[$i] =~ /^INPUT./) { $i--; }
 		$client->param('parentMode',$client->modeStack->[$i]);
 	}
+
 	if (!defined($client->param('header'))) {
 		$client->param('header',$client->string('SELECT_ITEM'));
 	}
+
 	my $listRef = $client->param('listRef');
 	my $externRef = $client->param('externRef');
+
 	if (!defined $listRef && ref($externRef) eq 'ARRAY') {
 		$listRef = $externRef;
 		$client->param('listRef',$listRef);
 	}
+
 	if (!defined $externRef && ref($listRef) eq 'ARRAY') {
 		$externRef = $listRef;
 		$client->param('externRef',$externRef);
 	}
+
 	return undef if !defined($listRef);
+
 	my $isSorted = $client->param('isSorted');
 	my $lookupRef = $client->param('lookupRef');
+
 	if ($isSorted && ($isSorted !~ /[iIeElL]/ || (uc($isSorted) eq 'E' && ref($externRef) ne 'ARRAY') || (uc($isSorted) eq 'L' && ref($lookupRef) ne 'CODE'))) {
 		$client->param('isSorted',0);
 	}
+
 	my $listIndex = $client->param('listIndex');
 	my $valueRef = $client->param('valueRef');
+
 	if (!defined($listIndex) || (scalar(@$listRef) == 0)) {
+
 		$listIndex = 0;
+
 	} elsif ($listIndex > $#$listRef) {
+
 		$listIndex = $#$listRef;
 	}
+
 	while ($listIndex < 0) {
 		$listIndex += scalar(@$listRef);
 	}
+
 	if (!defined($valueRef) || (ref($valueRef) && !defined($$valueRef))) {
+
 		$$valueRef = $listRef->[$listIndex];
 		$client->param('valueRef',$valueRef);
+
 	} elsif (!ref($valueRef)) {
 		my $value = $valueRef;
+
 		$valueRef = \$value;
 		$client->param('valueRef',$valueRef);
 	}
+
 	if ((scalar(@$listRef) != 0) && $$valueRef ne $listRef->[$listIndex]) {
 		my $newIndex;
+
 		for ($newIndex = 0; $newIndex < scalar(@$listRef); $newIndex++) {
 			last if $$valueRef eq $listRef->[$newIndex];
 		}
+
 		if ($newIndex < scalar(@$listRef)) {
 			$listIndex = $newIndex;
+
 		} else {
+
 			$$valueRef = $listRef->[$listIndex];
 		}
 	}
+
 	$client->param('listIndex',$listIndex);
+
 	if (!defined($client->param('externRefArgs'))) {
 		$client->param('externRefArgs','CV');
 	}
+
 	if (!defined($client->param('overlayRefArgs'))) {
 		$client->param('overlayRefArgs','CV');
 	}
+
 	if (!defined($client->param('onChangeArgs'))) {
 		$client->param('onChangeArgs','CV');
 	}
+
 	if (!defined($client->param('headerArgs'))) {
 		$client->param('headerArgs','CV');
 	}
+
 	return 1;
 }
 



More information about the checkins mailing list