Author: spadkins
Date: Sat Mar 4 21:14:20 2006
New Revision: 3604
Modified:
p5ee/trunk/App-Widget/lib/App/Widget/DataTable2.pm
Log:
editing now works: add/cancel/delete/sort
Modified: p5ee/trunk/App-Widget/lib/App/Widget/DataTable2.pm
==============================================================================
--- p5ee/trunk/App-Widget/lib/App/Widget/DataTable2.pm (original)
+++ p5ee/trunk/App-Widget/lib/App/Widget/DataTable2.pm Sat Mar 4 21:14:20 2006
@@ -113,7 +113,7 @@
sub handle_event {
&App::sub_entry if ($App::trace);
my ($self, $wname, $event, @args) = @_;
- my ($name, $context, $colnum, $x, $y, $startrow, $maxrows, $width,
$direction);
+ my ($name, $context, $column, $x, $y, $startrow, $maxrows, $width, $dir);
#$self->clear_messages();
@@ -125,12 +125,16 @@
if ($wname eq "$name-view") {
$self->set("mode","view");
$self->delete("editdata");
+ $self->delete("add_data");
$handled = 1;
}
elsif ($wname eq "$name-edit") {
$self->set("mode","edit");
$handled = 1;
}
+ elsif ($wname eq "$name-refresh") {
+ $handled = 1;
+ }
elsif ($wname eq "$name-next") {
$startrow = $self->get("startrow",1,1);
$maxrows = $self->get("maxrows",20,1);
@@ -148,56 +152,65 @@
}
elsif ($wname eq "$name-save") {
$self->save();
- $self->delete("editdata");
$handled = 1;
}
elsif ($wname eq "$name-add") {
- $self->{context}->add_message("Add Rows: not yet implemented");
+ my $rows_to_add = $self->{rows_to_add} || 1;
+ my $add_data = $self->{add_data} || [];
+ for (my $i = 0; $i < $rows_to_add; $i++) {
+ push(@$add_data, {});
+ }
+ $self->set("add_data", $add_data);
+ $handled = 1;
+ }
+ elsif ($wname eq "$name-cancel_add") {
+ $self->set("add_data", []);
$handled = 1;
}
elsif ($wname eq "$name-delete") {
- $self->{context}->add_message("Delete Rows: not yet implemented");
+ $self->delete();
+ $handled = 1;
+ }
+ elsif ($wname eq "$name-copy") {
+ $self->copy();
$handled = 1;
}
elsif ($event eq "sort") {
- ($colnum, $direction) = @args;
+ ($column, $dir) = @args;
- my ($columns, $directions, $order_by, $column, $i);
- $columns = $self->get_columns();
- $column = $columns->[$colnum];
+ my $columns = $self->get_columns();
- $order_by = $self->get("order_by") || $self->get("ordercols"); #
ordercols is deprecated in favor of order_by
+ my $order_by = $self->{order_by} || $self->{ordercols}; #
ordercols is deprecated in favor of order_by
+ my $direction = $self->{direction} || $self->{directions}; #
directions is deprecated in favor of direction
+ $direction ||= {};
if (defined $order_by) {
- $directions = $self->get("directions");
- $directions = [] if (!defined $directions);
- for ($i = 0; $i <= $#$order_by; $i++) {
+ for (my $i = 0; $i <= $#$order_by; $i++) {
if ($order_by->[$i] eq $column) {
splice(@$order_by, $i, 1); # delete the use of $column
- splice(@$directions, $i, 1); # delete the sort direction
last;
}
}
unshift(@$order_by, $column); # put it at the beginning
- unshift(@$directions, $direction);
+ $direction->{$column} = $dir;
}
else {
- $order_by = [ $column ];
- $directions = [ $direction ];
+ $order_by = [ $column ];
+ $direction = { $column => $dir };
}
$self->set("order_by",$order_by);
- $self->set("directions",$directions);
+ $self->set("direction",$direction);
$handled = 1;
}
- elsif ($wname =~ /-sort[0-9]*$/) {
- ($colnum, $x, $y) = @args;
+ elsif ($wname =~ /-sort_[_a-zA-Z0-9]*$/) {
+ ($column, $x, $y) = @args;
$context = $self->{context};
- $width = $context->widget($wname)->get("width");
+ $width = $context->widget($wname)->{width} || 50;
if ($x <= $width/2) {
- $handled = $self->handle_event($wname, "sort", $colnum, "UP");
+ $handled = $self->handle_event($wname, "sort", $column, "asc");
}
else {
- $handled = $self->handle_event($wname, "sort", $colnum, "DOWN");
+ $handled = $self->handle_event($wname, "sort", $column, "desc");
}
}
else {
@@ -317,7 +330,7 @@
}
else {
$table = $self->get("table");
-
+
$columns = $self->get_columns();
if (! defined $columns || $#$columns == -1) {
$columns = $rep->get_column_names($table);
@@ -363,7 +376,7 @@
elsif ($paramvalues[$i] eq "/") { $op = "matches"; }
$paramvalue = $paramvalues[$i+1];
-
+
if ($op) {
$param = "$column.$op";
if (!defined $paramvalues{$param}) {
@@ -392,24 +405,22 @@
my $order_by = $self->get("order_by") || $self->get("ordercols");
# ordercols is deprecated in favor of order_by
my $group_by = $self->get("group_by");
- my $directions = $self->get("directions");
+ my $direction = $self->{direction} || $self->{directions} || {};
$startrow = $self->get("startrow", 1, 1);
$maxrows = $self->get("maxrows", 20, 1);
$endrow = ($maxrows != 0) ? ($startrow + $maxrows - 1) : 0;
if ($App::DEBUG && $self->{context}->dbg(1)) {
- $self->{context}->dbgprint("DataTable2->load():
get_rows($table,c=$columns,p=$params,pv=$paramvalues,oc=$order_by,$startrow,$endrow,$directions);");
+ $self->{context}->dbgprint("DataTable2->load():
get_rows($table,c=$columns,p=$params,pv=$paramvalues,oc=$order_by,$startrow,$endrow,$direction);");
$self->{context}->dbgprint("DataTable2->load(): columns=[",
join(",", @$columns), "]") if (ref($columns) eq "ARRAY");
$self->{context}->dbgprint("DataTable2->load(): params=[",
join(",", @$params), "]") if (ref($params) eq "ARRAY");
$self->{context}->dbgprint("DataTable2->load(): paramvalues=[",
join(",", %$paramvalues), "]") if (ref($paramvalues) eq "HASH");
$self->{context}->dbgprint("DataTable2->load(): order_by=[",
join(",", @$order_by), "]") if (ref($order_by) eq "ARRAY");
- $self->{context}->dbgprint("DataTable2->load(): directions=[",
join(",", @$directions), "]") if (ref($directions) eq "ARRAY");
+ $self->{context}->dbgprint("DataTable2->load(): directions={",
join(",", %$direction), "}") if (ref($direction) eq "HASH");
}
- #$rows = $rep->select_rows($table, $columns, $params, \%paramvalues,
$order_by, $startrow, $endrow, $directions);
- #$rows = $rep->select_rows($table, $columns, undef, \%paramvalues,
$order_by, $startrow, $endrow, $directions);
$rows = $rep->get_rows($table, \%paramvalues, $columns,
- {order_by => $order_by, startrow => $startrow, endrow => $endrow,
directions => $directions, group_by => $group_by});
+ {order_by => $order_by, startrow => $startrow, endrow => $endrow,
direction => $direction, group_by => $group_by});
$error = $rep->error();
if ($#$rows == -1 && $error) {
$sql = $rep->{sql};
@@ -418,7 +429,7 @@
}
my ($keys, $row);
-
+
$self->{data} = $rows;
$keycolidx = $self->get("keycolidx");
@@ -436,7 +447,7 @@
&App::sub_entry if ($App::trace);
my $self = shift;
my ($repname, $context, $rep, $table);
- my ($editdata, $key, $column, @columns, @values);
+ my ($editdata, $add_data, $key, $column, @columns, @values);
$repname = $self->get("repository");
$context = $self->{context};
@@ -453,21 +464,161 @@
}
$editdata = $self->get("editdata");
- if ($editdata) {
+ if ($editdata && $self->{mode} eq "edit") {
foreach $key (keys %$editdata) {
@columns = ();
@values = ();
foreach $column (keys %{$editdata->{$key}}) {
push(@columns, $column);
- push(@values, $editdata->{$key}{$column});
+
+ if ( $editdata->{$key}{$column} eq '' ) {
+ push(@values, undef);
+ } else {
+ push(@values, $editdata->{$key}{$column});
+ }
+ }
+ eval {
+ $rep->set($table, $key, [EMAIL PROTECTED], [EMAIL PROTECTED]);
+ };
+ if ($@) {
+ my $errmsg = $@;
+ $errmsg =~ s/^DBD::[^ ]*[^:]*: *//;
+ $errmsg =~ s! at [^ ]+ line [0-9]+\.?!!;
+ $self->{row_error}{$key} = $errmsg;
+ }
+ }
+ }
+
+ $add_data = $self->{add_data};
+ if ($add_data && $#$add_data > -1) {
+
+ my ($i, $col_vals);
+
+ for ($i = $#$add_data; $i >= 0; $i--) {
+ @columns = ();
+ @values = ();
+ $col_vals = $add_data->[$i];
+ foreach my $col ( @{$self->{columns}} ) {
+ if ( defined $col_vals->{$col} ) {
+ push(@columns, $col);
+
+ if ( $col_vals->{$col} eq '' ) {
+ push(@values, undef);
+ } else {
+ push(@values, $col_vals->{$col});
+ }
+ }
+ }
+ eval {
+ $rep->insert_row($table, [EMAIL PROTECTED], [EMAIL PROTECTED]);
+ };
+ if ($@) {
+ my $errmsg = $@;
+ $errmsg =~ s/^DBD::[^ ]*[^:]*: *//;
+ $errmsg =~ s! at [^ ]+ line [0-9]+\.?!!;
+ $col_vals->{row_error} = $errmsg;
+ }
+ else {
+ splice(@$add_data, $i, 1);
}
- $rep->set($table, $key, [EMAIL PROTECTED], [EMAIL PROTECTED]);
}
+ $self->set("add_data", $add_data);
+ }
+
+ $rep->commit();
+ &App::sub_exit() if ($App::trace);
+}
+
+sub delete {
+ &App::sub_entry if ($App::trace);
+ my $self = shift;
+
+ my $repname = $self->get("repository");
+ my $context = $self->{context};
+ my $rep = $context->repository($repname);
+ if (! $rep) {
+ $context->add_message("No repository specified");
+ return;
+ }
+ my $table = $self->{table};
+ if (! $table) {
+ $context->add_message("No table specified");
+ return;
+ }
+
+ my $columns = $self->get_columns();
+ my ($keyvals, %params);
+ my $keycolidx = $self->{keycolidx};
+ my $row_selected = $self->{row_selected} || {};
+ foreach my $key (keys %$row_selected) {
+ %params = ();
+ $keyvals = [ split(/,/, $key) ];
+ for (my $i=0; $i <= $#$keycolidx; $i++) {
+ $params{$columns->[$keycolidx->[$i]]} = $keyvals->[$i];
+ }
+ eval {
+ $rep->delete($table, \%params);
+ };
+ if ($@) {
+ my $errmsg = $@;
+ $errmsg =~ s/^DBD::[^ ]*[^:]*: *//;
+ $errmsg =~ s! at [^ ]+ line [0-9]+\.?!!;
+ $self->{row_error}{$key} = $errmsg;
+ }
+ else {
+ delete $row_selected->{$key};
+ }
+ $self->set("row_selected", $row_selected);
}
+
$rep->commit();
&App::sub_exit() if ($App::trace);
}
+sub copy {
+ &App::sub_entry if ($App::trace);
+ my $self = shift;
+
+ my $repname = $self->get("repository");
+ my $context = $self->{context};
+ my $rep = $context->repository($repname);
+ if (! $rep) {
+ $context->add_message("No repository specified");
+ return;
+ }
+ my $table = $self->{table};
+ if (! $table) {
+ $context->add_message("No table specified");
+ return;
+ }
+
+ my $data = $self->get_data();
+ my $row_selected = $self->{row_selected} || {};
+ my $keycolidx = $self->{keycolidx};
+ my $columns = $self->get_columns();
+ my $add_data = $self->{add_data} || [];
+
+ foreach my $key (keys %$row_selected) {
+ foreach my $val (@$data){
+ for (my $i=0; $i <= $#$keycolidx; $i++) {
+ if ($key eq $val->[$keycolidx->[$i]]) {
+ foreach my $col ($columns){
+ my $col_hash;
+ for (my $ii=0; $ii <= $#$col; $ii++) {
+ $col_hash->{$col->[$ii]} = $val->[$ii];
+ }
+ push(@$add_data, $col_hash);
+ }
+ }
+ }
+ }
+ }
+
+ $self->set("add_data", $add_data) if ($#$add_data > -1);
+
+ &App::sub_exit() if ($App::trace);
+}
+
sub substitute {
&App::sub_entry if ($App::trace);
my ($self, $text, $values) = @_;
@@ -608,6 +759,28 @@
my $table_column_defs = $table_def->{column};
my $view_column_defs = $self->{column} || {};
+ if ($mode eq "edit") {
+ if ($rowactions) {
+ $rowactions = [ @$rowactions, "copy", "delete" ];
+ }
+ else {
+ $rowactions = [ "copy", "delete" ];
+ }
+ if ($rowactiondefs) {
+ $rowactiondefs = { %$rowactiondefs };
+ }
+ else {
+ $rowactiondefs = {};
+ }
+ $rowactiondefs->{copy} = {
+ label => "Copy",
+ select => "multi",
+ };
+ $rowactiondefs->{delete} = {
+ label => "Delete",
+ select => "multi",
+ };
+ }
if (! $self->{keycolidx}) {
$rowactions = undef;
$row_selectable = 0; # can't select row(s) if no primary key
@@ -674,28 +847,42 @@
if ($scrollable) {
$html .= "<table border=\"0\" cellspacing=\"0\"
cellpadding=\"5\"><tr><td>\n";
$html .= "<table border=\"0\" cellspacing=\"0\"
cellpadding=\"3\"><tr><td valign=\"middle\" nowrap> \n";
- $html .= $context->widget("$name-view",
+ $html .= $context->widget("$name-refresh",
class => "App::Widget::ImageButton",
image_script => 'app-button',
#volatile => 1,
- label => 'View',
+ label => 'Refresh',
height => 17,
- width => 50,
+ width => 60,
bevel => 2,
)->html();
$html .= " ";
if ($editable) {
- $html .= $context->widget("$name-edit",
- class => "App::Widget::ImageButton",
- image_script => 'app-button',
- #volatile => 1,
- label => 'Edit',
- height => 17,
- width => 50,
- bevel => 2,
- )->html();
+ if ($mode eq "view") {
+ $html .= $context->widget("$name-edit",
+ class => "App::Widget::ImageButton",
+ image_script => 'app-button',
+ #volatile => 1,
+ label => 'Edit',
+ height => 17,
+ width => 60,
+ bevel => 2,
+ )->html();
+ }
+ else {
+ $html .= $context->widget("$name-view",
+ class => "App::Widget::ImageButton",
+ image_script => 'app-button',
+ #volatile => 1,
+ label => 'View',
+ height => 17,
+ width => 60,
+ bevel => 2,
+ )->html();
+ }
$html .= " ";
}
+
$html .= " </td><td nowrap";
$html .= " bgcolor=\"$heading_bgcolor\"" if ($heading_bgcolor);
$html .= ">$elem_begin \n";
@@ -733,7 +920,7 @@
$html .= " $elem_end</td></tr></table>\n";
$html .= "</td></tr></table>\n";
}
-
+
if ($mode eq "edit") {
$html .= "<table border=\"0\" cellspacing=\"0\"
cellpadding=\"3\"><tr>\n";
$html .= "<td>\n";
@@ -743,12 +930,12 @@
#volatile => 1,
label => 'Save',
height => 17,
- width => 50,
+ width => 60,
bevel => 2,
)->html();
$html .= "</td>\n";
$html .= "<td>\n";
- $html .= $context->widget("$name.add",
+ $html .= $context->widget("$name-add",
class => "App::Widget::ImageButton",
image_script => 'app-button',
#volatile => 1,
@@ -759,11 +946,19 @@
)->html();
$html .= "</td>\n";
$html .= "<td>\n";
- $html .= $context->widget("$name-delete",
+ $html .= $context->widget("$name-rows_to_add",
+ class => "App::Widget::Select",
+ values => ["1","2","3","4","5","6","7","8","9","10",
+
"11","12","13","14","15","16","17","18","19","20",
+ ],
+ )->html();
+ $html .= "</td>\n";
+ $html .= "<td>\n";
+ $html .= $context->widget("$name-cancel_add",
class => "App::Widget::ImageButton",
image_script => 'app-button',
#volatile => 1,
- label => 'Delete Rows',
+ label => 'Cancel Adds',
height => 17,
width => 85,
bevel => 2,
@@ -783,34 +978,12 @@
#$html .= "</td>\n";
$html .= "</tr></table>\n";
}
-
+
$html .= $table_begin;
if (!$sql) {
- if ($sortable) {
- $html .= "<tr>\n";
- $html .= " <td> </td>\n" if ($numbered);
- $html .= " <td> </td>\n" if ($row_selectable);
- $html .= " <td> </td>\n" if ($row_single_selectable);
- $html .= " <td> </td>\n" if ($#row_actions > -1);
-
- for ($col = 0; $col < $numcols; $col++) {
- $elem = $context->widget("$name-sort$col",
- class => "App::Widget::ImageButton",
- image_script => 'app-button',
- #volatile => 1,
- label => 'Up|Dn',
- height => 17,
- width => 50,
- bevel => 2,
- args => $col,
- )->html();
- $html .= " <td>$elem</td>\n";
- }
- $html .= "</tr>\n";
- }
if ($filterable) {
my ($w);
- $html .= "<tr>\n";
+ $html .= "<tr class=\"App-DataTable-tr_filter\">\n";
$html .= " <td> </td>\n" if ($numbered);
$html .= " <td> </td>\n" if ($row_selectable);
$html .= " <td> </td>\n" if ($row_single_selectable);
@@ -832,6 +1005,28 @@
}
$html .= "</tr>\n";
}
+ if ($sortable) {
+ $html .= "<tr class=\"App-DataTable-tr_sort\">\n";
+ $html .= " <td> </td>\n" if ($numbered);
+ $html .= " <td> </td>\n" if ($row_selectable);
+ $html .= " <td> </td>\n" if ($row_single_selectable);
+ $html .= " <td> </td>\n" if ($#row_actions > -1);
+
+ for ($col = 0; $col < $numcols; $col++) {
+ $elem = $context->widget("$name-sort_$columns->[$col]",
+ class => "App::Widget::ImageButton",
+ image_script => 'app-button',
+ #volatile => 1,
+ label => 'Up|Dn',
+ height => 17,
+ width => 50,
+ bevel => 2,
+ args => $columns->[$col],
+ )->html();
+ $html .= " <td>$elem</td>\n";
+ }
+ $html .= "</tr>\n";
+ }
}
if ($mode eq "edit" && $column_selectable) {
$html .= "<tr>\n";
@@ -877,7 +1072,7 @@
if ($row_selectable) {
if ($#select_actions > -1) {
my (%args);
- $html .= " <td bgcolor=\"$heading_bgcolor\" valign=\"bottom\">";
+ $html .= " <td bgcolor=\"$heading_bgcolor\" valign=\"bottom\"
align=\"center\">";
foreach $rowaction (@select_actions) {
%args = (
override => 1,
@@ -894,7 +1089,7 @@
$args{$_} = $rowactiondef->{$_};
}
}
- $html .= $context->widget("$name-${rowaction}", %args,
+ $html .= $context->widget("$name-${rowaction}", %args,
args => "{${name}" . "{row_selected}}"
)->html();
$html .= "<br>\n" if ($rowaction ne
$select_actions[$#select_actions]);
@@ -926,8 +1121,8 @@
$args{$_} = $rowactiondef->{$_};
}
}
- $html .= $context->widget("$name-${rowaction}", %args,
- args => "{${name}" . "{row_single_selected}}"
+ $html .= $context->widget("$name-${rowaction}", %args,
+ args => "{${name}" . "{row_single_selected}}"
)->html();
$html .= "<br>\n" if ($rowaction ne
$single_select_actions[$#select_actions]);
}
@@ -949,7 +1144,6 @@
$td_row_attrib = "";
$td_row_attrib .= " bgcolor=\"$bgcolor\"" if ($bgcolor);
- #$td_row_attrib .= " align=\"$align\"" if ($align);
$td_row_attrib .= " valign=\"$valign\"" if ($valign);
$td_row_attrib .= " nowrap" if ($nowrap);
@@ -958,15 +1152,14 @@
@column_length = ();
if ($mode eq "edit") {
-
# prepare the style attribute arrays
push(@edit_style, "font_family", $font_face) if ($font_face);
- push(@edit_style, "color", $font_color) if ($font_color);
+ push(@edit_style, "color", $font_color) if ($font_color);
# This seems to cause <input> elements to take on the font size
# currently active for text that surrounds them
# i.e. <font size="-2"><input type="text" style="font-size:
100%;"></font>
- push(@edit_style, "font_size", "100%") if ($font_size);
+ push(@edit_style, "font_size", "100%") if ($font_size);
# border_style",
# border_width",
@@ -981,7 +1174,7 @@
if (defined $columns && defined $columns->[$col]) {
$column = $columns->[$col];
}
-
+
if (($column ne "" && $self->{column_selected}{$column}) ||
($self->{row_selected} && %{$self->{row_selected}})) {
for ($row = 0; $row <= $#$data; $row++) {
@@ -992,31 +1185,89 @@
}
}
}
+
+ my $add_data = $self->{add_data};
+ if ($add_data && $#$add_data > -1) {
+ my ($errmsg, $row);
+
+ for (my $i = 0; $i <= $#$add_data; $i++) {
+ $row = $add_data->[$i];
+ my ($format, $scale_factor, $edit_widget_args, $edit_widget);
+ $html .= "<tr class=\"App-DataTable-tr_add\">\n";
+ $html .= " <td bgcolor=\"$heading_bgcolor\"
align=\"right\">Add</td>\n" if ($numbered);
+ if ($row_selectable) {
+ $errmsg = "<br />$row->{row_error}" || " ";
+ $html .= " <td bgcolor=\"#ffaaaa\"
class=\"App-DataTable-td_select\">$errmsg</td>\n";
+ }
+ if ($row_single_selectable) {
+ $html .= " <td
bgcolor=\"$heading_bgcolor\"> </td>\n";
+ }
+ $html .= " <td bgcolor=\"$heading_bgcolor\"> </td>\n" if
($#row_actions > -1);
+
+ my $key = $i;
+
+ for ($col = 0; $col < $numcols; $col++) {
+
+ if (defined $columns && defined $columns->[$col]) {
+ $column = $columns->[$col];
+ $format = $view_column_defs->{$column}{format}
|| $table_column_defs->{$column}{format};
+ $scale_factor =
$view_column_defs->{$column}{scale_factor} ||
$table_column_defs->{$column}{scale_factor};
+ $align = $view_column_defs->{$column}{align}
||
+ $table_column_defs->{$column}{align}
||
+ ($table_column_defs->{$column}{quoted}
? "left" : "right");
+ }
+
+ $html .= " <td>";
+
+ $edit_widget_args = $self->{edit_widget}{$column} ||
+ {
+ class => "App::Widget::TextField",
+ size => $column_length[$col]+2, # add 2
just to give some visual space
+ maxlength => 255,
+ padding => 0,
+ @edit_style,
+ }
+ ;
+ $edit_widget_args->{size} = $column_length[$col]+2 if
($edit_widget_args->{auto_size});
+
+ if ( ! defined $edit_widget_args->{readonly} ) {
+ $edit_widget =
$context->widget("$name\{add_data}[$key]{$column}", %$edit_widget_args,
+ style_class =>
"App-DataTable-add");
+ $html .= $edit_widget->html();
+ } else {
+ $html .= " ";
+ }
+ $html .= "</td>\n";
+ }
+ $html .= "</tr>\n";
+ }
+ }
}
- my ($format, $scale_factor);
+ my ($format, $scale_factor, $edit_widget_args, $edit_widget);
for ($row = 0; $row <= $#$data; $row++) {
$numrow = $startrow + $row;
- $html .= "<tr>\n";
-
$key = "";
if (defined $keys && defined $keys->[$row]) {
$key = join(",", @{$keys->[$row]}); # need to HTML-escape these!
}
+ $html .= $self->{row_selected}{$key} ? "<tr
class=\"App-DataTable-tr_selected\">" : "<tr>\n";
+
$html .= " <td bgcolor=\"$heading_bgcolor\"
align=\"right\">$elem_begin$numrow$elem_end</td>\n" if ($numbered);
if ($row_selectable) {
- $html .= " <td bgcolor=\"#ffaaaa\" valign=\"middle\"
align=\"center\">\n";
+ $html .= " <td bgcolor=\"#ffaaaa\" valign=\"middle\"
align=\"center\" class=\"App-DataTable-td_select\">\n";
$html .= $context->widget("$name\{row_selected}{$key}",
class => "App::Widget::Checkbox",
)->html();
+ $html .= "<br />$self->{row_error}{$key}" if
($self->{row_error}{$key});
$html .= " </td>\n";
}
if ($row_single_selectable) {
- $html .= " <td bgcolor=\"#ffaaaa\" valign=\"middle\"
align=\"center\">\n";
+ $html .= " <td bgcolor=\"#ffaaaa\" valign=\"middle\"
align=\"center\" class=\"App-DataTable-td_single_select\">\n";
$html .= $context->widget("$name\{row_single_selected}",
class => "App::Widget::RadioButton",
override => 1,
@@ -1060,7 +1311,9 @@
$column = $columns->[$col];
$format = $view_column_defs->{$column}{format} ||
$table_column_defs->{$column}{format};
$scale_factor = $view_column_defs->{$column}{scale_factor} ||
$table_column_defs->{$column}{scale_factor};
- $align = $view_column_defs->{$column}{align} ||
$table_column_defs->{$column}{align};
+ $align = $view_column_defs->{$column}{align} ||
+ $table_column_defs->{$column}{align} ||
+ ($table_column_defs->{$column}{quoted} ?
"left" : "right");
}
$elem_selected = 0;
@@ -1075,7 +1328,7 @@
if ($elem_selected) {
if (!defined $elem || $elem eq "") {
$elem = "";
- $td_col_attrib = " align=\"left\"";
+ $td_col_attrib = $align ? " align=\"$align\"" : "
align=\"left\"";
}
else {
$elem = $elem * $scale_factor if ($scale_factor);
@@ -1094,16 +1347,24 @@
$self->{editdata}{$key}{$column} = $elem
}
$html .= " <td $td_row_attrib$td_col_attrib>${elem_begin}";
- $html .= $context->widget("$name\{editdata}{$key}{$column}",
+ $edit_widget_args = $self->{edit_widget}{$column} ||
+ {
class => "App::Widget::TextField",
size => $column_length[$col]+2, # add 2 just to
give some visual space
- maxlength => 99,
- background_color => "#ffaaaa",
- border_style => "solid",
- border_width => "1px",
+ maxlength => 255,
padding => 0,
@edit_style,
- )->html();
+ }
+ ;
+ $edit_widget_args->{size} = $column_length[$col]+2 if
($edit_widget_args->{auto_size});
+
+ if ( ! defined $edit_widget_args->{readonly} ) {
+ $edit_widget =
$context->widget("$name\{editdata}{$key}{$column}", %$edit_widget_args,
+ style_class =>
"App-DataTable-edit");
+ $html .= $edit_widget->html();
+ } else {
+ $html .= $elem;
+ }
$html .= "$elem_end</td>\n";
}
else {