Uploaded image for project: 'Wicket'
  1. Wicket
  2. WICKET-1069

RFE: DataTable && colgroup

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • None
    • 7.0.0-M1
    • wicket-extensions
    • None
    • any

    Description

      Hi!

      I want to suggest an enhancement for the DataTable extension.

      Right now it's only possible to style columns (width, alignment, color etc.) via stylesheets. This has some not so nice implications IMHO:

      • You have to extend the IStyledColumn to return the proper CSS class.
      • You have to add a bunch of CSS classes to get the proper styles.
      • You have redundancy in HTML output - which isn't necessary.

      This is actually what <colgroup><col></colgroup> is meant to solve.

      My suggestion:

      Adding a 'addColGroup( ColGroup cg )'-feature, which actually lets you add x ColGroups with n Cols on which you can use AttributeModifiers to have your styles/classes/width-Attributes added.

      A quick implementation would be this:

      --[ColGroup.java]-
      import java.util.List;

      import org.apache.wicket.behavior.IBehavior;
      import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractToolbar;
      import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
      import org.apache.wicket.markup.html.WebMarkupContainer;
      import org.apache.wicket.markup.repeater.RepeatingView;

      public class ColGroup
      extends AbstractToolbar
      {
      private static final long serialVersionUID = 1L;

      private int numCols;
      private Col[] cols;

      public ColGroup( DataTable datatable, int numCols )

      { super( datatable ); this.numCols = numCols; }

      public void onBeforeRender()
      {
      if( !hasBeenRendered() )
      {
      WebMarkupContainer colgroup = new WebMarkupContainer( "colgroup" );
      for( IBehavior b : (List<IBehavior>) getBehaviors() )
      colgroup.add( b );
      setRenderBodyOnly( true );
      removeAll();
      add( colgroup );

      RepeatingView colgroupCols = new RepeatingView( "elements" );
      colgroup.add( colgroupCols );

      for( Col column : getCols() )

      { WebMarkupContainer item = new WebMarkupContainer( colgroupCols.newChildId() ); colgroupCols.add( item ); item.add( column ); }

      }
      super.onBeforeRender();
      }

      public final Col[] getCols( )
      {
      if( cols == null )

      { cols = new Col[numCols]; for( int i = 0; i < numCols; i++ ) cols[i] = new Col(); }

      return(cols);
      }

      public final class Col
      extends WebMarkupContainer
      {
      private static final long serialVersionUID = 1L;

      private Col()

      { super( "col" ); }

      }

      }
      --[/ColGroup.java]-

      --[ColGroup.html]-
      <wicket:panel>
      <colgroup wicket:id="colgroup">
      <wicket:container wicket:id="elements"><col wicket:id="col"/></wicket:container>
      </colgroup>
      </wicket:panel>
      --[/ColGroup.html]-

      Usage:

      ColGroup colgroup = new ColGroup( datatable, 4 );
      colgroup.add( new SimpleAttributeModifier( "style", "border: solid 1px green;" ) );
      Col[] cols = colgroup.getCols();
      cols[0].add( new SimpleAttributeModifier( "width", "10%" ) );
      cols[1].add( new SimpleAttributeModifier( "width", "35%" ) );
      cols[2].add( new SimpleAttributeModifier( "width", "45%" ) );
      cols[3].add( new SimpleAttributeModifier( "width", "10%" ) );
      datatable.addColGroup( colgroup );

      Any thoughts?

      Regards, — Jan.

      Attachments

        Issue Links

          Activity

            People

              mgrigorov Martin Tzvetanov Grigorov
              jkriesten Jan Kriesten
              Votes:
              2 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: