X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FReaction%2FUI%2FViewPort%2FAction.pm;h=5e4b0f05dec101473fd6a143f1388291bd96f388;hb=56c5a4a1e847761faf792d9f1b3aebc17a85744d;hp=1251d8e4e7e1280e2afd6f2da1934b641bac6601;hpb=2dba7201f38bfdf9a4132220d98b7691a5f9a257;p=catagits%2FReaction.git diff --git a/lib/Reaction/UI/ViewPort/Action.pm b/lib/Reaction/UI/ViewPort/Action.pm index 1251d8e..5e4b0f0 100644 --- a/lib/Reaction/UI/ViewPort/Action.pm +++ b/lib/Reaction/UI/ViewPort/Action.pm @@ -2,6 +2,10 @@ package Reaction::UI::ViewPort::Action; use Reaction::Class; +use aliased 'Reaction::UI::ViewPort::Object'; + +BEGIN { *DEBUG_EVENTS = \&Reaction::UI::ViewPort::DEBUG_EVENTS; } + use aliased 'Reaction::UI::ViewPort::Field::Mutable::Text'; use aliased 'Reaction::UI::ViewPort::Field::Mutable::Array'; use aliased 'Reaction::UI::ViewPort::Field::Mutable::String'; @@ -13,10 +17,10 @@ use aliased 'Reaction::UI::ViewPort::Field::Mutable::DateTime'; use aliased 'Reaction::UI::ViewPort::Field::Mutable::ChooseOne'; use aliased 'Reaction::UI::ViewPort::Field::Mutable::ChooseMany'; -#use aliased 'Reaction::UI::ViewPort::InterfaceModel::Field::Mutable::File'; -#use aliased 'Reaction::UI::ViewPort::InterfaceModel::Field::Mutable::TimeRange'; +use aliased 'Reaction::UI::ViewPort::Field::Mutable::File'; +#use aliased 'Reaction::UI::ViewPort::Field::Mutable::TimeRange'; -class Action is 'Reaction::UI::ViewPort::Object', which { +class Action is Object, which { has model => (is => 'ro', isa => 'Reaction::InterfaceModel::Action', required => 1); #has '+model' => (isa => 'Reaction::InterfaceModel::Action'); @@ -44,11 +48,26 @@ class Action is 'Reaction::UI::ViewPort::Object', which { implements can_apply => as { my ($self) = @_; foreach my $field ( @{ $self->fields } ) { - return 0 if $field->needs_sync; + if ($field->needs_sync) { + if (DEBUG_EVENTS) { + $self->ctx->log->debug( + "Failing out of can_apply on ${\ref($self)} at ${\$self->location}" + ." because field for ${\$field->attribute->name} needs sync" + ); + } + } # if e.g. a datetime field has an invalid value that can't be re-assembled # into a datetime object, the action may be in a consistent state but # not synchronized from the fields; in this case, we must not apply } + if (DEBUG_EVENTS) { + my $ret = $self->model->can_apply; + $self->ctx->log->debug( + "model can_apply returned ${ret}" + ." on ${\ref($self)} at ${\$self->location}" + ); + return $ret; + } return $self->model->can_apply; }; @@ -121,30 +140,31 @@ class Action is 'Reaction::UI::ViewPort::Object', which { $self->_build_simple_field(attribute => $attr, class => Boolean, %$args); }; - implements _build_fields_for_type_SimpleStr => as { + implements _build_fields_for_type_Reaction_Types_Core_SimpleStr => as { my ($self, $attr, $args) = @_; $self->_build_simple_field(attribute => $attr, class => String, %$args); }; - #implements _build_fields_for_type_File => as { - # my ($self, $attr, $args) = @_; - # $self->_build_simple_field(attribute => $attr, class => File, %$args); - #}; + implements _build_fields_for_type_File => as { + my ($self, $attr, $args) = @_; + $self->_build_simple_field(attribute => $attr, class => File, %$args); + }; implements _build_fields_for_type_Str => as { my ($self, $attr, $args) = @_; if ($attr->has_valid_values) { # There's probably a better way to do this $self->_build_simple_field(attribute => $attr, class => ChooseOne, %$args); + } else { + $self->_build_simple_field(attribute => $attr, class => Text, %$args); } - $self->_build_simple_field(attribute => $attr, class => Text, %$args); }; - implements _build_fields_for_type_Password => as { + implements _build_fields_for_type_Reaction_Types_Core_Password => as { my ($self, $attr, $args) = @_; $self->_build_simple_field(attribute => $attr, class => Password, %$args); }; - implements _build_fields_for_type_DateTime => as { + implements _build_fields_for_type_Reaction_Types_DateTime_DateTimeObject => as { my ($self, $attr, $args) = @_; $self->_build_simple_field(attribute => $attr, class => DateTime, %$args); }; @@ -170,7 +190,7 @@ class Action is 'Reaction::UI::ViewPort::Object', which { ( attribute => $attr, class => Array, - layout => 'interface_model/field/mutable/array/hidden', + layout => 'field/mutable/hidden_array', %$args); } }; @@ -186,7 +206,7 @@ class Action is 'Reaction::UI::ViewPort::Object', which { =head1 NAME -Reaction::UI::ViewPort::InterfaceModel::Action +Reaction::UI::ViewPort::Action =head1 SYNOPSIS