r18493@agaton (orig r702): wreis | 2008-05-02 22:28:12 +0100
[catagits/Reaction.git] / lib / Reaction / UI / LayoutSet.pm
index 44a137c..edb0952 100644 (file)
@@ -22,11 +22,11 @@ class LayoutSet which {
   implements 'BUILD' => as {
     my ($self, $args) = @_;
     my @path = @{$args->{search_path}||[]};
-    confess "No view object provided" unless $args->{view};
     confess "No skin object provided" unless $args->{skin};
+    confess "No top skin object provided" unless $args->{top_skin};
     $self->_load_file($self->source_file, $args);
     unless ($self->has_widget_class) {
-      $self->widget_class($args->{view}->widget_class_for($self));
+      $self->widget_class($args->{skin}->widget_class_for($self));
     }
   };
 
@@ -73,14 +73,23 @@ class LayoutSet which {
         $layouts->{$fname} = $text;
       } elsif ($data =~ /^extends (\S+)/) {
         my $super_name = $1;
-        $self->super($build_args->{skin}->create_layout_set($super_name))
+        my $skin;
+        if ($super_name eq 'NEXT') {
+          confess "No next skin and layout extends NEXT"
+            unless $build_args->{next_skin};
+          $skin = $build_args->{next_skin};
+          $super_name = $self->name;
+        } else {
+          $skin = $build_args->{top_skin};
+        }
+        $self->super($skin->create_layout_set($super_name));
       } elsif ($data =~ /^widget (\S+)/) {
         my $widget_type = $1;
         $self->widget_type($1);
       } elsif ($data =~ /^cut/) {
         # no-op
       } else {
-        confess "Unparseable directive ${data}";
+        confess "Unparseable directive ${data} in ${file}";
       }
     }
   };