added widget_search_path option (ignored), defaults.conf support and moved file exten...
matthewt [Thu, 31 Jan 2008 10:07:29 +0000 (10:07 +0000)]
lib/Reaction/UI/LayoutSet/TT.pm
lib/Reaction/UI/Skin.pm
lib/Reaction/UI/View.pm
lib/Reaction/UI/View/TT.pm

index 7f9e2df..68d6749 100644 (file)
@@ -8,8 +8,6 @@ class TT is LayoutSet, which {
 
   has 'tt_view' => (is => 'rw', isa => View, lazy_fail => 1);
 
-  implements file_extension => as { 'tt' };
-
   implements 'BUILD' => as {
     my ($self, $args) = @_;
 
index 7f3f1ca..8896c96 100644 (file)
@@ -14,6 +14,8 @@ class Skin which {
 
   has 'skin_base_path' => (is => 'ro', isa => Dir, required => 1);
 
+  has 'widget_search_path' => (is => 'rw', isa => 'ArrayRef', lazy_fail => 1);
+
   has 'view' => (
     is => 'ro', required => 1, weak_ref => 1,
     handles => [ qw(layout_set_class) ],
@@ -33,20 +35,28 @@ class Skin which {
     my $base = $self->skin_base_path;
     confess "No such skin base directory ${base}"
       unless -d $base;
-    if (-e (my $conf_file = $base->file('skin.conf'))) {
-      # we get [ { $file => $conf } ]
-      my ($cfg) = values %{
-                    Config::Any->load_files({
-                      files => [ $conf_file ], use_ext => 1
-                    })->[0]
-                  };
-      if (my $super_name = $cfg->{extends}) {
-        my $super_dir = $base->parent->subdir($super_name);
-        my $super = $self->new(
-          view => $self->view, skin_base_path => $super_dir
-        );
-        $self->super($super);
-      }
+    my $lst = sub { (ref $_[0] eq 'ARRAY') ? $_[0]: [$_[0]] };
+    my @files = (
+      $base->parent->file('defaults.conf'), $base->file('skin.conf')
+    );
+    # we get [ { $file => $conf }, ... ]
+    my %cfg = (map { %{(values %{$_})[0]} }
+                @{Config::Any->load_files({
+                  files => [ grep { -e $_ } @files ],
+                  use_ext => 1,
+                })}
+              );
+    if (my $super_name = $cfg{extends}) {
+      my $super_dir = $base->parent->subdir($super_name);
+      my $super = $self->new(
+        view => $self->view, skin_base_path => $super_dir
+      );
+      $self->super($super);
+    }
+    if (exists $cfg{widget_search_path}) {
+      $self->widget_search_path($lst->($cfg{widget_search_path}));
+    } else {
+      confess "No widget_search_path in defaults.conf or skin.conf";
     }
   }
 
@@ -78,7 +88,7 @@ class Skin which {
   implements 'layout_path_for' => as {
     my ($self, $layout) = @_;
     my $file_name = join(
-      '.', $layout, $self->layout_set_class->file_extension
+      '.', $layout, $self->view->layout_set_file_extension
     );
     my $path = $self->our_path_for_type('layout')
                     ->file($file_name);
index d4fd436..1b492b8 100644 (file)
@@ -118,6 +118,10 @@ class View which {
     return $cache->{$lset_name} ||= $self->create_layout_set($lset_name);
   };
 
+  implements 'layout_set_file_extension' => as {
+    confess View." is abstract, you must subclass it";
+  };
+
   implements 'find_related_class' => as {
     my ($self, $rel) = @_;
     my $own_class = ref($self) || $self;
index 46d3135..f3cd5bd 100644 (file)
@@ -19,6 +19,8 @@ class TT is View, which {
     return (super(), tt_object => $self->_tt);
   };
 
+  implements layout_set_file_extension => as { 'tt' };
+
   overrides 'rendering_context_args_for' => sub {
     my ($self, %args) = @_;
     return ();