fixed choosemany, fixed some widget stuff i broke before, renamed ordered_fields...
groditi [Sat, 5 Jan 2008 00:21:12 +0000 (00:21 +0000)]
13 files changed:
lib/Reaction/UI/ViewPort.pm
lib/Reaction/UI/ViewPort/Collection/Grid.pm
lib/Reaction/UI/ViewPort/Field/Mutable/ChooseMany.pm
lib/Reaction/UI/ViewPort/Field/Mutable/ChooseOne.pm
lib/Reaction/UI/ViewPort/Field/Role/Mutable.pm
lib/Reaction/UI/ViewPort/Object.pm
lib/Reaction/UI/Widget/Action.pm
lib/Reaction/UI/Widget/Collection/Grid.pm
lib/Reaction/UI/Widget/Field.pm
lib/Reaction/UI/Widget/Field/Mutable.pm
lib/Reaction/UI/Widget/Field/Mutable/DateTime.pm
lib/Reaction/UI/Widget/Object.pm
share/skin/default/layout/field.tt

index d7c1980..9361cae 100644 (file)
@@ -85,7 +85,8 @@ class ViewPort which {
     my ($self, $events) = @_;
     foreach my $event ($self->accept_events) {
       if (exists $events->{$event}) {
-        # $self->ctx->log->debug("Applying Event: $event with value: ". $events->{$event});
+        #my $name = eval{$self->name};
+        #$self->ctx->log->debug("Applying Event: $event on $name with value: ". $events->{$event});
         $self->$event($events->{$event});
       }
     }
index 9d48cd1..ab33770 100644 (file)
@@ -7,11 +7,11 @@ use aliased 'Reaction::UI::ViewPort::Collection::Grid::Member';
 
 class Grid is 'Reaction::UI::ViewPort::Collection', which {
 
-  has field_order    => ( isa => 'ArrayRef', is => 'ro', lazy_build => 1);
-  has field_labels   => ( isa => 'HashRef',  is => 'ro', lazy_build => 1);
+  has field_order     => ( is => 'ro', isa => 'ArrayRef', lazy_build => 1);
+  has excluded_fields => ( is => 'ro', isa => 'ArrayRef', lazy_build => 1);
+  has field_labels    => ( is => 'ro', isa => 'HashRef',  lazy_build => 1);
 
-  has ordered_fields  => (is => 'ro', isa => 'ArrayRef', lazy_build => 1);
-  has excluded_fields => (is => 'ro', isa => 'ArrayRef', lazy_build => 1);
+  has computed_field_order => (is => 'ro', isa => 'ArrayRef', lazy_build => 1);
 
   ####################################
   implements _build_member_class => as { };
@@ -28,7 +28,7 @@ class Grid is 'Reaction::UI::ViewPort::Collection', which {
   implements _build_field_order     => as { []; };
   implements _build_excluded_fields => as { []; };
 
-  implements _build_ordered_fields => as {
+  implements _build_computed_field_order => as {
     my ($self) = @_;
     confess("current_collection lacks a value for 'member_type' attribute")
       unless $self->current_collection->has_member_type;
@@ -50,7 +50,7 @@ class Grid is 'Reaction::UI::ViewPort::Collection', which {
 
   before _build_members => sub {
     my ($self) = @_;
-    $self->member_args->{ordered_fields} ||= $self->ordered_fields;
+    $self->member_args->{computed_field_order} ||= $self->computed_field_order;
   };
 
 };
index 17cdf53..62cfe1a 100644 (file)
@@ -9,11 +9,11 @@ my $listify = sub{
 
 class ChooseMany is 'Reaction::UI::ViewPort::Field', which {
 
-  has '+value' => (isa => 'ArrayRef');
-
   does 'Reaction::UI::ViewPort::Field::Role::Mutable';
   does 'Reaction::UI::ViewPort::Field::Role::Choices';
 
+  #MUST BE HERE, BELOW THE 'does', OR THE TRIGGER WILL NOT HAPPEN!
+  has '+value' => (isa => 'ArrayRef');
 
   around value => sub {
     my $orig = shift;
@@ -34,12 +34,13 @@ class ChooseMany is 'Reaction::UI::ViewPort::Field', which {
   };
 
   implements _build_value_string => as {
-    join ", ", @{ shift->current_value_choices }
+    my $self = shift;
+    join ", ", (map {$self->obj_to_name($_->{value}) } @{ $self->current_value_choices })
   };
 
   implements is_current_value => as {
     my ($self, $check_value) = @_;
-    my @our_values = @{$self->value||[]};
+    my @our_values = @{$self->value || []};
     $check_value = $self->obj_to_str($check_value) if ref($check_value);
     return grep { $self->obj_to_str($_) eq $check_value } @our_values;
   };
index 12d6d11..f7a54bb 100644 (file)
@@ -14,13 +14,18 @@ class ChooseOne is 'Reaction::UI::ViewPort::Field', which {
     my $value = shift;
     if (defined $value) {
       $value = $self->str_to_ident($value) if (!ref $value);
-      my $checked = $self->attribute->check_valid_value($self->action, $value);
+      my $checked = $self->attribute->check_valid_value($self->model, $value);
       confess "${value} is not a valid value" unless defined($checked);
       $value = $checked;
     }
     $orig->($self, $value);
   };
 
+  implements _build_value_string => as {
+    my $self = shift;
+    $self->obj_to_name($self->value->{value});
+  };
+
   implements is_current_value => as {
     my ($self, $check_value) = @_;
     my $our_value = $self->value;
index 66a46cf..8a90ff8 100644 (file)
@@ -33,6 +33,7 @@ role Mutable, which {
     }
     my $writer = $attr->get_write_method;
     confess "No writer for attribute" unless defined($writer);
+    my $value = $self->value;
     $self->model->$writer($self->value); #should we be passing $value ?
     $self->needs_sync(0);
   };
index 9730b5f..da45c23 100644 (file)
@@ -25,8 +25,8 @@ class Object is 'Reaction::UI::ViewPort', which {
   has field_order   => (is => 'ro', isa => 'ArrayRef');
 
   has builder_cache   => (is => 'ro', isa => 'HashRef',  lazy_build => 1);
-  has ordered_fields  => (is => 'ro', isa => 'ArrayRef', lazy_build => 1);
   has excluded_fields => (is => 'ro', isa => 'ArrayRef', lazy_build => 1);
+  has computed_field_order => (is => 'ro', isa => 'ArrayRef', lazy_build => 1);
 
   implements BUILD => as {
     my ($self, $args) = @_;
@@ -42,7 +42,7 @@ class Object is 'Reaction::UI::ViewPort', which {
     my $obj  = $self->model;
     my $args = $self->has_field_args ? $self->field_args : {};
     my @fields;
-    for my $field_name (@{ $self->ordered_fields }) {
+    for my $field_name (@{ $self->computed_field_order }) {
       my $attr = $obj->meta->find_attribute_by_name($field_name);
       my $meth = $self->builder_cache->{$field_name} ||= $self->get_builder_for($attr);
       my $field = $self->$meth($attr, ($args->{$field_name} || {}));
@@ -51,7 +51,7 @@ class Object is 'Reaction::UI::ViewPort', which {
     return \@fields;
   };
 
-  implements _build_ordered_fields => as {
+  implements _build_computed_field_order => as {
     my ($self) = @_;
     my %excluded = map { $_ => undef } @{ $self->excluded_fields };
     #treat _$field_name as private and exclude fields with no reader
index c7e1e04..a54afcb 100644 (file)
@@ -8,14 +8,6 @@ class Action is 'Reaction::UI::Widget::Object', which {
   #  arg form_id => $_{viewport}->location;
   #};
 
-  #implements fragment field_list {
-  #  render field => over $_{viewport}->ordered_fields;
-  #};
-
-  #implements fragment field {
-  #  render 'viewport';
-  #};
-
   implements fragment ok_button_fragment {
     if (grep { $_ eq 'ok' } $_{viewport}->accept_events) {
       arg 'event_id' => event_id 'ok';
@@ -54,25 +46,11 @@ Reaction::UI::Widget::Action
 
 =head1 FRAGMENTS
 
-=head2 widget
-
-Renders "header", "field_list", "buttons" and "footer"
-
-=head2 field_list
-
-Sequentially renders the C<ordered_fields> of the viewport
-
-=head2 buttons
-
-Additional variables available in topic hash: "message"
-
-=head2 header
-
-Content is a dummy value
+=head2 ok_button_fragment
 
-=head2 footer
+=head2 apply_button_fragment
 
-Content is a dummy value
+=head2 cancel_button_fragment
 
 =head1 AUTHORS
 
index 13c59be..bf9ad6b 100644 (file)
@@ -6,7 +6,7 @@ class Grid is 'Reaction::UI::Widget::Collection', which {
 
   implements fragment header_cells {
     arg 'labels' => $_{viewport}->field_labels;
-    render header_cell => over $_{viewport}->field_order;
+    render header_cell => over $_{viewport}->computed_field_order;
   };
 
   implements fragment header_cell {
index fbfe1eb..4d91afa 100644 (file)
@@ -12,7 +12,7 @@ class Field, which {
     }
   };
 
-  implements fragment label_layout {
+  implements fragment label_fragment {
     if (my $label = $_{viewport}->label) {
       arg label => $label;
       render 'label';
index 5d658dc..5c245d8 100644 (file)
@@ -6,7 +6,7 @@ class Mutable is 'Reaction::UI::Widget::Field', which {
 
    before fragment widget {
      arg 'field_id' => event_id 'value';
-     arg 'field_name' => event_id 'value';
+     arg 'field_name' => event_id 'value' unless defined $_{field_name};
      arg 'field_type' => 'text';
    };
 
index 0095594..f4a28e8 100644 (file)
@@ -4,6 +4,10 @@ use Reaction::UI::WidgetClass;
 
 class DateTime is 'Reaction::UI::Widget::Field::Mutable', which {
 
+  after fragment widget {
+     arg 'field_name' => event_id 'value_string';
+   };
+
 };
 
 1;
index 505d00d..3889892 100644 (file)
@@ -18,7 +18,6 @@ class Object, which {
 
 __END__;
 
-
 =head1 NAME
 
 Reaction::UI::Widget::Object
@@ -27,13 +26,9 @@ Reaction::UI::Widget::Object
 
 =head1 FRAGMENTS
 
-=head2 widget
-
-Renders C<field_list>
-
 =head2 field_list
 
-Sequentially renders the C<ordered_fields> of the viewport.
+Sequentially renders the C<fields> of the viewport in the C<computed_field_order>
 
 =head1 AUTHORS
 
index 937ba51..99954ab 100644 (file)
@@ -1,9 +1,9 @@
 =for layout widget
 
-[% label_layout %]
+[% label_fragment %]
 [% value_layout %]
 
-=for layout label_layout
+=for layout label
 
 <strong > [% label %]: </strong>