GetPropertyDescriptors() can now be redefined which allows reordering the item's properties and inserting extra 'synthetic' ones. Neither of these was possible by redefining DisplayProperty().
Signed-off-by: Francois Gouget fgouget@codeweavers.com --- This matches the FromPage behavior which only accesses the property list through GetPropertyDescriptors(). --- .../lib/ObjectModel/CGI/CollectionBlock.pm | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/testbot/lib/ObjectModel/CGI/CollectionBlock.pm b/testbot/lib/ObjectModel/CGI/CollectionBlock.pm index 594ed5649..08844d066 100644 --- a/testbot/lib/ObjectModel/CGI/CollectionBlock.pm +++ b/testbot/lib/ObjectModel/CGI/CollectionBlock.pm @@ -161,6 +161,29 @@ sub GenerateErrorPopup($) # Individual item property support #
+ +=pod +=over 12 + +=item C<GetPropertyDescriptors()> + +Returns the list of columns for the collection table. + +By default this matches the property list of the items in the collection and +that list is then pruned by DisplayProperty(). + +However it is possible to redefine this method to reorder the columns or add +extra columns where the values will be synthesized by GenerateDataView(). + +=back +=cut + +sub GetPropertyDescriptors($) +{ + my ($self) = @_; + return $self->{Collection}->GetPropertyDescriptors(); +} + =pod =over 12
@@ -430,7 +453,7 @@ sub GenerateList($) my ($self) = @_;
my $Collection = $self->{Collection}; - my $PropertyDescriptors = $Collection->GetPropertyDescriptors(); + my $PropertyDescriptors = $self->GetPropertyDescriptors();
my $ColIndex = 0; my (@Cols, $HasDT);
This is practical for adding support for synthesized columns that have standard values without having to also deal with generating HTML for them.
Signed-off-by: Francois Gouget fgouget@codeweavers.com --- With ValueFormatter generating the HTML is pretty easy but just returning a value leads to even simpler code with the ternary operator. --- .../lib/ObjectModel/CGI/CollectionBlock.pm | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-)
diff --git a/testbot/lib/ObjectModel/CGI/CollectionBlock.pm b/testbot/lib/ObjectModel/CGI/CollectionBlock.pm index 08844d066..336c7cd05 100644 --- a/testbot/lib/ObjectModel/CGI/CollectionBlock.pm +++ b/testbot/lib/ObjectModel/CGI/CollectionBlock.pm @@ -173,7 +173,8 @@ By default this matches the property list of the items in the collection and that list is then pruned by DisplayProperty().
However it is possible to redefine this method to reorder the columns or add -extra columns where the values will be synthesized by GenerateDataView(). +extra columns where the values will be synthesized by GetPropertyValue() or +generated directly by GenerateDataView().
=back =cut @@ -311,6 +312,27 @@ sub GenerateHeaderView($$$) =pod =over 12
+=item C<GetPropertyValue()> + +Returns the underlying property value. + +This is useful for providing values for the synthetic columns. +See GenerateDataView(). + +=back +=cut + +sub GetPropertyValue($$$) +{ + my ($self, $Row, $Col) = @_; + + my $PropertyName = $Col->{Descriptor}->GetName(); + return $Row->{Item}->$PropertyName; +} + +=pod +=over 12 + =item C<GenerateDataView()>
Generates an HTML snippet representing the property value in a user-readable @@ -346,8 +368,7 @@ sub GenerateDataView($$$) { my ($self, $Row, $Col) = @_;
- my $PropertyName = $Col->{Descriptor}->GetName(); - my $Value = $Row->{Item}->$PropertyName; + my $Value = $self->GetPropertyValue($Row, $Col); GenerateValueHTML($self, $Col->{Descriptor}, $Value, $Col->{Format}); }